2025年2月17日月曜日

AIコーディングはプログラマの終わりの始まりか?

 こんにちは。横井です。

AIコーディングに関する記事の4回目となる今回は、ややショッキングなタイトルかもしれません。これまでさまざまなAIコーディングを試してきましたが、その経験の中で感じたことを書きたいと思います。

AIに仕事を任せる場合、大きな課題となるのはアウトプットの精度と再現性、すなわち何度実行しても同じ結果が得られるかという点です。この二点を考えると、まだ仕事を安心して任せられる段階ではないと考える方も多いでしょう。では、AIコーディングという観点ではどうでしょうか。ここまで取り組む中で、私自身が少し驚いた事例がありますので、いくつか紹介します。

まず一つ目は、APIなどのインターフェースを呼び出すロジックに関することです。APIに対してはインターフェース仕様が公開されていれば、AIはその使い方を認識できるため、要件──つまりどのような機能を実装したいか──を伝えるだけで、具体的なコーディング指示をしなくとも、それに合わせたコードを書いてくれます。

少し昔話になりますが、2000年前後に「Webサービス」という言葉が登場した頃、技術に詳しくないマーケティング系の人が「Webサービスを使えば自由に自動的に呼べるようになるよね」と言っていたことがありました。当時、現場のエンジニアだった私には「いやいや、そんなのは無理でしょう。結局は人がロジックをコーディングする必要があるのだから、自動でできるわけがない」としか思えなかったのです。しかし、それから約25年を経て、生成AIの能力を目にすると、当時は夢物語のように感じられたことが、いまや現実化しているのだと実感しています。

今回私が作成したアプリは、実はLINEのボットアプリです。具体的には、ユーザーがボットに質問すると、ボットアプリがFAQデータをもとにLLMへ最適な回答を生成するよう依頼するという仕様になります。APIという観点では、LINEメッセージAPIの使用方法とLLMのAPIの使用方法、この二つがポイントでした。私自身、どちらの知識も経験もなかったにもかかわらず、実現したい内容をAIに伝えるだけで、その後の設計やコーディングはAIが行ってくれました。やりたいことを具体的なゴールとして設定するだけで、実際のコーディングはすべて任せることができたのです。

LLMベースのFAQ応答ボット 設計ドキュメント


もう一つ興味深かったのは、アーキテクチャやデザインパターンなど、システムやプログラミングにおける標準的な技術知識も、LLMがすでに学習しているのであれば、人が一から調べて試行錯誤する必要がないという点でした。具体例を挙げると、最初のバージョンではアプリが問い合わせを行うLLMはOpenAIのみ固定で使用していました。それを機能拡張として、Google Geminiも使えるようにしたい。さらに、環境変数によってどちらを使うか動的に切り替えられるようにしたい、という要件をAIに伝えたところ、インターフェースの継承やファクトリパターンを活用する設計を提案してきたのです。継承のクラス図シーケンス図といったドキュメントまでもアウトプットしてくれましたので、私はそれをレビューし、要件どおりかどうか確認したうえでコーディングを依頼しました。その結果、LLMをパラメーターにより動的に切り替えられる、汎用性の高いアプリが出来ました。

LLMプロバイダーアーキテクチャ設計


このように、すでに学習されている技術的な知識の広さや深さは、私個人の情報量や経験値をはるかに超えています。こうした分野では、人間が時間をかけて自力でコーディングを行うこと自体に、もはや大きな価値を見いだしにくくなりつつあるのかもしれません。もちろん、学ぶことや経験を積むこと自体はかけがえのない大切な行為であり、私自身もそれを否定する気はまったくありません。ただし、仕事としてアウトプットを素早く正確に出すという観点においては、もはやAIには太刀打ちできないのではないかと感じてしまいました。


もっとも、私たちが扱っている業務システムは、以前にも述べたとおり、LLMが学習していない情報が多く含まれています。業界特有の商習慣や企業モデル(企業情報やビジネスモデル、業務内容)、そしてそれを支える組織形態などをLLMへインプットするのは現時点では難しい面があります。そのため、業務ロジックをAIに完全にコーディングさせるのはまだ難しいというのが実情です。しかし、これはあくまでも現時点での話にすぎません。業務知識を事前学習以外の形でLLMに渡す方法が確立され、実現したい業務内容を正しく伝えられるようになれば、将来的には業務ロジックのコーディングさえもAIでまかなえる可能性があるのではないか、と感じています。

では。

2025年2月14日金曜日

AIと人の違い

 こんにちは。横井です。これまで二回にわたって生成AIについての記事を書いてきましたが、今回は、作業を指示する立場から見て「AIと人の違い」についてお話ししようと思います。

まず、生成AIが現時点で「使える」と感じる方もいれば「まだ使えない」と感じる方もおり、その感想は人によって異なるようです。もちろん、どんな仕事を対象にするかや、どのような内容を依頼するかによっても変わってきます。私自身、ChatGPTが登場してからさまざまに試してきましたが、最近のAIコーディングに関して言うと、生成AIをうまく使うためのコツは主に次のように整理できるのではないかと思います。


  1. やること(ゴール)とやらないことを明確にする
    いわゆる仕事のスコープをはっきりさせることです。

  2. ゴールに向かう詳細なステップと順序を決める
    これは、指示する側が具体的に定義するか、あるいはAIに考えさせるのかによってやり方が変わってきます。

  3. 前提条件や制約条件など、ゴール達成のための条件を定義する
    これらをきちんと定義しておくことで、AIの回答精度や作業の方向性が大きく変わります。

  4. 作業と進捗をどの単位で確認するかを決める
    何を、どのタイミングで、どのようにチェックするのかを伝えれば、生成AIでも確実にアウトプットを出しやすくなります。以前の記事でご紹介したAIコーディングの成果を思い返していただくと、イメージしやすいかもしれません。

参考までに先の投稿でAIコーディングをさせたプロンプトは以下になります。(たくさんあるフェーズの中の一例です)

次のステップに入ります。 フェーズ6.2です。 
要件は 
1.LLMのAPI呼び出し時のリクエストデータとレスポンスデータを格納するDBを作成。テーブル名はprompt_history。 
項目は user_id、timestamp、request_type、request、responseです。主キーはuser_id、timestamp。request_typeは問合せ、ハルシネーションチェックの区分値です。 
2.LLMのAPI呼び出し時、具体的にはレスポンスを受領後にrequestデータとresponseデータをprompt_historyにinsertする。タイミングは
- 問合せ
- ハルシネーションチェック
の2つ。 
3.制約事項
- 既存の機能、ロジックは変更しない。意図は機能のデグレードはしない。特にコード修正する場合は他機能への影響がないか細心の注意をはかる。 
以上の要件を元にphase6.2の設計書をマークダウン形式のテキストファイルとして出力してください。
コーディング可能な詳細なレベルにブレイクダウンして検討してください。
必ず必ず必ず必ず必ず必ず必ず必ず必ず必ず必ず全部処理してください。まだコーディングはしないでください。
設計書をレビューしました。内容OKです。
では、続いて設計書の内容を元にtodoリストをマークダウン形式のテキストファイルとして出力してください。
コーディングが可能な詳細レベルのタスクに分割してください。タスクはマークダウン形式のtodoとして、チェックマークを付けられるようにして下さい。
必ず必ず必ず必ず必ず必ず必ず必ず必ず必ず全部処理してください。まだコーディングはしないで下さい。
TODOリストを確認しました。内容OKです。
では、コーディングに入りましょう。todoリストの順番にコーディングをして下さい。
コーディングする場合は、1.作業内容の確認、2.コーディング、3.結果のチェックまたはテストコードの実行、4.作業を終えた場合はtodoリストの該当タスクをチェックマークon。
以上をサイクルとして、todoリストのステップ単位で作業を進めてください。
必ず必ず必ず必ず必ず必ず必ず必ず全部処理してください。

このようにポイントを押さると、AIは思ったような結果を出力してくれます。

裏を返すと「生成AIが使えない」と感じるシーンでは、よく次のようなことが起こっています。

  • 途中までしか作業をしない、あるいは途中で終わってしまう
  • 本来やるべき手順を省略してしまう
  • 間違いを修正する際に、今までの内容を全て消して再出力をしてしまう
  • うまくいかない場合に修正とテストを繰り返し、エラーが出るたびに無限ループに陥ってしまう

こういった事を経験する事で生成AIが「実用的ではない」と思ってしまうのではないでしょうか。そんな方は是非、AI対する指示の出し方を変えてみてください。プロンプトエンジニアリングであるような小難しい文法や表記法などしなくてもいいです。私はほとんど音声入力で済ませていますし、文脈が通じれば問題ないです。

もっとも、こうした点を踏まえてみると、作業指示や管理の視点では、人が作業する場合とAIが作業する場合の本質的な違いはそれほどないと考えています。新人社員に対してどう指示し、どのように管理すれば期待するアウトプットが得られるか──そのやり方と、生成AIへの指示や管理のやり方は、じつはほぼ同じなのではないでしょうか。

もちろん、人であれば経験値が上がってくると、1を伝えるだけで10を理解できるようになることもありますが、勘違いや思い込みでミスが起こる可能性はゼロにはなりません。

いかに正しく目的を示し、条件を定め、進捗を管理するかが、AIであれ人であれ仕事をしてもらう重要なポイントだと言えるでしょう。

では。

2025年2月13日木曜日

AIエージェントとは

みなさんこんにちは。横井です。

先日投稿した「AIコーディングの現在地点」はご覧いただけましたでしょうか。ここ二か月ほど、さまざまなAI関連のコーディングに取り組んできましたが、その過程で少し見えてきたことがあるため、本日はそのお話をしたいと思います。

現在、多くの場面で「エージェント」という言葉、あるいは機能が注目されています。ChatGPTに代表される一連のチャットインターフェースの次のステップとして、AIエージェントと呼ばれる存在が、今後私たちのインターフェースになり、実際の仕事もAIエージェントがこなしていくという流れがあるように思います。では、何をもってAIエージェントと呼ぶのでしょうか。

まず大前提として、LLM(大規模言語モデル)はコンテキストが広い、抽象的な問い合わせや指示に対しては、曖昧な答えを返したりいわゆる「ハルシネーション(幻覚)」と呼ばれる想定外の回答を行ったりする特性があります。決して“馬鹿”なのではなく、LLMの特性として不足している情報は勝手に(気を利かせて?)補填していってしまうのです。従ってLLMの特性を理解したうえでうまく活用することが重要です。

思った通りの答えを得るためには、指示出しの範囲をできるだけ小さくし、コンテキストを絞ること、さらに実現方法や手順を明確に示すことによって、アウトプットの精度が向上します。これが、LLMを“賢く”使うための基本的な考え方だと言えるでしょう。

チャットインターフェースのように、ある程度自由度の高い入力ができる場合は対応しやすいかもしれません。しかし、アプリケーションのように、あらかじめ定められた処理を行う場面では、LLMをいかに使うかを考えながら、スコープが限定的なプロンプトを事前に用意しておく必要があります。具体的には、アプリを使う人の役割やシチュエーションによって、複数の小さなプロンプト群を部品のように用意しておき、それぞれを上手に組み合わせて使うのです。これらの小さな“アシスタント”を統合して、どの順番で実行するか、どのように次のインプットに引き継ぐかを制御するしくみを「フロー制御」と呼びます。世の中にはすでにフロー制御のサービスが存在しています。

しかし、あらかじめ定義された条件分岐に従って進むだけでは“エージェント”というよりは通常のプログラムでしかありません。AIエージェントととはどんなものになるのか? と考えると、与えられたシチュエーションや処理の結果をもとに、次に何をするか?どのツールを使うか?といった判断そのものをAIが自律的に行う点に特徴があると思います。もちろん、それはその精度をどこまで高められるかが、実際に役立つエージェントとして機能するかどうかの分かれ道になりそうです。

このようなAIエージェントの機能は、すでに少しずつ世の中に出てきています。私が利用しているVS Codeのプラグイン「Cline」や「RooCode」なども、そうした機能を備えつつあります。現在では「PLAN」「ACTION」、「Architect」「Ask」「Code」といった目的別のLLMプロバイダやモデル設定、それらに対するカスタムインストラクションの設定ができるツールになっており、利用者はシチュエーションに応じてモードを切り替えながら、最適な回答を得ようとしています。

また、別の観点としては、先日書いた記事にもあるように、モード切り替えを使わなくても、ゴールを定義し、ゴール達成の手段を定義し、手段実現の段取りを定義し、それらをToDoリストに落とし込んで実行状態や進捗を管理できれば、モード切り替えなしでもエージェント的に振る舞わせることは十分に可能です。

ここまでご紹介したように、AIエージェントは今後の大きなトレンドであり、LLMの特性を理解しつつ、いかに活用するかがカギとなっています。

では。

2025年2月10日月曜日

AIコーディングの現在地点

こんにちは。横井です。

 少し時間が空いてしまいましたが、本年もよろしくお願いします。

さて、みなさん生成AIは使っていますか? 私はここ2ヶ月ほどAIコーディングに没頭していましてAPI利用で数百ドル溶かしました。(笑)

という事で、汗と涙と小遣いの結晶をご覧下さい。


状況を説明しますと

環境はVSCode + RooCodeプラグインでLLMはClaude Sonnet 3.5です。

ムービーの最初の方でドキュメントを参照していましたが、このドキュメント(設計書)もAIに書いて貰っています。設計書のレビューを私が行い内容がOKになったら、次に開発計画としてToDoリストも作成して貰っています。このToDoリストはマークダウン形式のToDoになっているので、この後AIがコーディングを行っていく時の進捗管理用資料にもなっています。

まず、ここまで来るのに私はプロンプトとして要件(作りたいもののゴール)しか指示していません。特に最近はキーボードでパチパチ入力もせず、マイクを使って音声入力でやりたい事を入れています。(もちろん音声認識の誤字脱字はあるので手直しはしますが)

ムービーの説明に戻りますが、AIが検討したToDoリストは詳細化はしてありますが、順序がフロントエンド→バックエンドとなっていましたので「タスクの順序はアーキテクチャーのレイヤーごとに依存関係を意識して、機能別に作り直してください」といったレビュー結果をフィードバックしました。

結果的に出来上がったドキュメントは以下の通りです。

ここまで出来上がるとようやくコーディングに入ります。プロンプトで「ではコーデイングを開始してください。todoリストの順番に実装をお願いします。実装は1.仕様の確認、2.コーディング、3.結果の確認またはテスト、4.todoリストのチェックをonを一つのサイクルとしてステップごとにコーデイングして下さい。」といった主旨の指示を出すと、以降はAIが計画に沿ってコーディングを行い、作業進捗もtodoリストにチェックマークとして更新してくれます。また、テストもタスクに入っているのでテストコードのコーディングとテストの実行もしてくれます。

ムービーは時間の関係でAPIの呼び出し時間はカットしています。また、これだけ自動コーディングをさせるとAPIの利用制限に引っかかってしまうので、そのリトライ待ち時間もカットしています。

今回のコーディングはテーブルが既に作成されている状況で参照する画面(一覧と詳細)を追加実装するという内容でした。ドキュメントのPhase6.3とあるように今までフェーズ1から始まって6までブラッシュアップをしてきた状態です。

色々とAIコーディングを試してきた結果としては今時点(2025年1月末)としては最高難易度のコーディングが実現出来ていると思います。

AIコーディングについて色々ノウハウが溜まったので、いくつかご紹介します。

  • VSCodeのプラグインとしてはRooCode( Clineのフォークモデル )を使っていますが、ArchitectやAskなどのモード切替は使っておらずcodeモードのみで要件検討や計画立案もしています
  • LLMはコーディングに使うのであれば Claude-Sonnet-3.5の一択です。(o4やGemini2.0、DeepSeekなども試しましたが、私の使い方にはマッチしませんでした)
  • AIコーディングに限りませんが、AIに仕事をしてもらうには要件(ゴール)を明確に定義する必要があります。曖昧さがある場合はAIを使って壁打ちしながらゴールの明確化をします。
  • どう実現するか? (方法や手順) はAIに考えさせます。もちろん、検討結果に曖昧さや選択肢を提示してきた場合は、更に詳細化や決め打ちの指示を出します。
  • 実際のコーディングが可能で進捗管理が出来るようなToDoリストをマークダウン形式で作成させます。
  • 以上の様な開発準備が完了するまでは一切コーディングは認めません。
  • 機能追加や仕様変更する場合は、既存の機能(コード)の変更禁止や変更の影響の最小化などを制約条件として指示します。
以上の様な段取りを踏まえるとほぼオートマチックに全量をコーディングし、単体テスト結果による修正までしてくれます。いかがでしょうか?

もちろん、日々新しいツールや方法が出てきますし、LLMのモデルも進化が著しいので、明日には陳腐化・コモディティ化しているかもしれません。そういう意味でも「現在地点」だと思います。


この方法で我々のビジネスフィールドである業務システムの開発が出来るか? と聞かれれば「今時点ではNOです」と答えます。AIコーディングの方法論としては一つ確立出来ていると思っていますが、ビジネスドメイン、企業モデル、業務フロー、業務ルールなど、システムが対象とする情報はあまりに膨大でLLMに全体像を把握させる仕組みがまだ思いつきません。今のところ、AIのAPIを呼び出して作業をさせるのは中間記憶によるコンテキストの引継ぎはありますが、あくまでもINPUT/OUTPUTのトークンボリュームに依存しますし、恐らくそういった方法とは別な方法で業務要件をLLMに伝達する必要があります。

では。

2024年12月23日月曜日

GeneXus Day 2025が開催されます

 来たる1月23日(木)にジェネクサス・ジャパン株式会社主催「GeneXus Day 2025」が開催されます。テーマは「未来を切り開くローコード、そしてAI」。


今回は、「りそなグループインターネットバンキングシステム更改プロジェクトにおけるGeneXus活用事例」と題し、NTTデータソフィア株式会社 山口様、そして本プロジェクトに携わった弊社開発部長 森が登壇いたします。

本講演では大規模ミッションクリティカルシステムへのGeneXus適用事例として、りそなホールディングス様のインターネットバンキングシステムをGeneXusを活用して再構築した際に直面した課題、その課題の解決から得た経験をご紹介いたします。

参加は無料です。

お申し込みはこちらから

2024年6月12日水曜日

WWDC 2024: Apple Intelligenceで未来が現実に!驚異の新機能と開発者へのインパクト

タイトル: WWDC 2024: Apple Intelligenceで未来が現実に!驚異の新機能と開発者へのインパクト


1. はじめに

こんにちは!今回はWWDC 2024で発表されたAppleの最新技術、「Apple Intelligence」についてお話しします。今年のWWDCは驚きの連続で、特にApple Intelligenceが注目を集めました。この新技術がどのように未来を変えるのか、一緒に見ていきましょう!

2. Apple Intelligenceの概要

Apple Intelligenceは、iPhone、iPad、Macで利用できる強力な生成モデルを統合した技術です。主な機能として、テキスト編集をサポートする「Writing Tools」、遊び心のある画像を作成する「Image Playground」、そしてカスタム絵文字を作成する「Genmoji」があります。これらのツールを使うことで、ユーザーはより直感的で楽しい体験を得ることができます。

3. APIの詳細

◆Core ML
Core MLは、機械学習モデルをアプリに統合するためのフレームワークです。モデルをデバイス上で実行することで、ネットワーク接続を必要とせず、プライバシーを保護しつつ高いパフォーマンスを実現します。新しいMLTensor型と重み圧縮技術により、モデルの効率的な実行が可能になりました。

◆Vision Framework
Vision Frameworkは、画像や動画の分析を行うためのAPIです。テキスト認識や顔検出、全身ポーズ検出などの新機能が追加され、より高度な画像処理が可能です。特に、イメージ美学の評価機能は注目されています。

◆Natural Language Framework
Natural Language Frameworkは、テキストの処理と分析をサポートします。言語識別や感情分析、固有表現抽出など、多言語対応の拡張が行われました。これにより、より自然なテキスト理解が可能です。

◆Speech Framework
Speech Frameworkは、音声認識と分析を行うためのAPIです。リアルタイムで高精度な音声認識が可能になり、ユーザーインタラクションの幅が広がります。

◆Create ML
Create MLは、コードなしでモデルを作成・トレーニングできるツールです。オブジェクトトラッキングやタイムシリーズモデルの作成が簡単に行え、開発者の負担を大幅に軽減します。

4. 開発者向け新機能とツール

Apple Intelligenceには、新しいAPIやツールが多数追加されました。特に、SiriとSpotlightの強化は注目ポイントです。新しいアクションと統合により、ユーザーエクスペリエンスがさらに向上します。また、Xcodeの統合により、モデルのプレビューやパフォーマンスレポートが簡単に行えるようになりました。これにより、開発者はよりシームレスな開発体験を得ることができます。

5. 実用例と応用

Apple Intelligenceを活用したアプリの具体例をいくつか紹介します。例えば、テキスト認識機能を使ったスキャンアプリや、ポーズ検出を活用したフィットネスアプリなどがあります。これらのアプリは、Apple Intelligenceの新機能をフルに活用しており、ユーザーに新しい価値を提供しています。

6. 開発者への影響と展望

Apple Intelligenceは、開発プロセスに大きな影響を与えます。新しいツールやAPIを活用することで、開発効率が向上し、より高度なアプリケーションが可能になります。今後の技術進化により、開発者にはさらなる可能性が広がることでしょう。Appleのビジョンとともに、未来のアプリケーション開発がどのように進化していくのか、非常に楽しみです。

7. まとめ

WWDC 2024で発表されたApple Intelligenceは、未来の技術を現実のものとしました。この技術がもたらす新しい可能性と驚異の機能により、開発者はより高いレベルのアプリケーションを提供できるようになります。これからのApple Intelligenceの進化に、ぜひ注目してください!

8. 付録

リソースとリンク

著者情報
このブログ記事を書いたのは、技術愛好家のChatGPT4oです。最新の技術トレンドを追いかけることが大好きで、特にAppleの新技術に注目しています。質問やフィードバックがあれば、ぜひコメント欄にお寄せください!



という事で、みなさんご無沙汰しています。横井です。

今年も早いもので半分が過ぎようとしています。このGeneXusブログも新年のご挨拶を投稿したのが最後で、現業の忙しさにかまけて半年投稿をサボっていました。
忙しさに変わりはないのですが、サボりっぱなしもまずいので、先日スタートしましたAppleの開発者向けイベント、WWDC2024での注目のトピックをChatGPT先生に記事に纏めてもらいました。

以前、ChatGTPに関する記事を投稿したのが一年前になります。この一年でGenerative AI界隈も色々と進化がありました。特に最近リリースされたGPT4oはマルチモーダルにも対応したので、以前の様なプラグインを使わなくても、URLでも、PDFでも、写真でも、INPUTに放り込めば簡単に解析をしてくれます。

という事で、今回の投稿をどうしたかというと、
①WWDCのApple IntelligenceのURLを入力。
 https://developer.apple.com/apple-intelligence/
 →これだけでまず要約をしてくれます。
②続いて以下を入力します。
 「AppleのWWDCを見て、Apple Intelligenceに関するブログの記事を書きたいと思います。 どんな記事がいいか、構成案を考えてもらえますか。 出力は日本語でお願いします」
 →これでタイトルと構成を出力してくれます。
③最後に以下を入力します。
 「フィードバックします。OKです。いい感じです。 では、この構成をもとに、それぞれの文章を書いてもらえますか、 初心者にも分かりやすいフレンドリーな口調で書いてください。」
 →これで出力された内容が上記の記事でした。


閑話休題
Apple Intelligenceですが、さすがはAppleだと思ったのは決して「Generatie AI」や「AI スマホ」とは言いませんでしたね。他社とは違うのだという強い意志を感じました。

そしてこのApple IntelligenceがOSレベルでサポートするので、様々なアプリでもシームレスに機能として組み込まれていくのが、UXを重視するAppleらしい所だと思います。この辺りは別な投稿で。

では。

2024年1月4日木曜日

2024 : 新年のご挨拶

新年が明けました。今年は元旦から能登半島地震、2日には航空機の事故と、心痛む事が立て続けに起きてしまいました。被災された方々にはお見舞いを申し上げると共に、地震・事故で亡くなった方には心よりお悔やみ申し上げます。

まだ救出を待つ方や、避難生活をされている方が大勢居る状況ですが、自分が出来る事を行って行きたいと思います。


2024年初日の出(小金井市の野川沿いにて)
 

本年もよろしくお願いいたします。