ツールが全ての問題を解決してくれるわけではない。 でも、ツールは本来人がやらなくても良い作業を効率的に行ってくれる。 そして、人は人にしかできない事により注力すべき。 つまり、それがクリエイティビティ(創造性)。 システム開発におけるクリエイティビティを高めるお手伝いをしています。
2025年2月27日木曜日
AIテストは信用できる? AIテストの外堀の埋め方
2025年2月21日金曜日
AIコーディングの品質はどう担保する?
今回は、AIコーディングにおける品質担保についてです。以前の記事でも触れたように、LLM(大規模言語モデル)が学習済みのアーキテクチャやデザインパターン、アルゴリズムを活用すれば、人間が苦労して作業するよりも遥かに高速にコーディングが可能になります。しかしそれと、実際に要件や仕様を満たしたコードが得られているかどうかは、また別の問題です。
まず、LLMの種類によってもコーディングの品質は大きく異なります。私自身は(コーディングのさせ方にも影響されるのでしょうが)、Claude 3.5 Sonnet 一択です。最近リリースされ、評判の高いGemini 2.0 Proについては、私にはあまり合わない印象を受けました。いかにマネジメント方法でコーディングをコントロールできるように見えても、実際には要件を無視したコードや、途中で省略されたコードが生成され、期待外れとなるケースが多々ありました。無償なのでなんとか使いこなそうと試みるものの、金銭面では節約できても、結果として時間がかかり、満足度が低くなってしまうという現実もあります。
次に、仕様通りのコーディングが実現されているかどうかという点ですが、結局のところ、テストを行って確認するしかありません。幸い、現在では多様なテストツールが存在します。私も色々とテストコードをAIコーディングしてみましたが、実際に試してみると、ソースコードとテストコードの両方が作成された後、テスト実行でエラーが発生した際に、どちらに原因があるのか判断がつかなくなり、場合によってはテストコード自体を修正してしまうこともあるのです。こうなると、テストコードの実装が問題なのか、テストケースそのものが変わってしまっているのかが不明瞭となり、混乱を招きます。
また、以前にも書きましたが、テストエラー発生→エラー修正→テスト再実行→テストエラー発生と修正とエラーの無限ループも起きがちです。どうしても視野が局所的になり、局所的な修正になるので、あちらを直せばこちらがおかしくなる。みたいな事になってしまいます。
そこで、テスト実行後にいきなり修正を加えるのではなく、テスト結果をまずファイルに出力し、エラー(Test Fail)が発生した場合は原因と対応策もファイルに追記するテストレポートの作成を義務付けるなどのルールを設ける事で、いきなり修正→エラー頻発といった負の連鎖を防ぐ事ができます。
この様にコードを自動的に生成してくれるといっても、その品質を担保するためには色々な工夫が必要になってきます。
では。
2025年2月20日木曜日
全体を把握すること、全てを見通すこと
こんにちは、横井です。
AIコーディングを進めていると、あたかもAIがリポジトリ全体を見通して作業しているかのように錯覚することがあります。
実際にはAIはその都度のリクエストに対して応答しているだけです。LLM(大規模言語モデル)やエージェントのメモリ機能のおかげで、連続してリクエストを送ると、あたかも学習し成長しているかのような印象を抱いてしまいます。
しかし、例えばコードにエラーがあり修正を行うのですが、エラーが解消されない場合は再び修正を試みる。。といったコード修正の無限ループに陥った場合、一度作業を中断して状況を見直し再び作業を再開すると、これまでの経緯が反映されず、ルールに反した動作が現れることがあります。その結果、コードが破損し「最初から作り直した方が早いかな?」といった残念な感じになることもありました。
また、AIコーディングでは、依存関係の確認、すなわちクロスリファレンス機能が機能していない点も問題です。たとえば、GeneXusでは、オブジェクトや項目属性がどこで利用されているかがクロスリファレンスとして即座に把握できるため、使用されているものは削除できない安全策が整っています。しかし、スクラッチ開発におけるソースコードの管理では、GitHubのようなリポジトリでも依存関係が完全には把握されず、「問題ない」と判断して削除したファイルが、実は他の部分から参照され、システムが正常に動作しなくなるといった事態が起こりやすいです。まあ、これはAIコーディングに限った話ではありませんが、GeneXus開発に慣れているとクロスリファレンス機能が存在するのが当たり前だったので結構困りました。
別な話としては、アジャイルにAIコーディングを進めると、機能を追加してくなかでリファクタリングを提案してくるのですが、あたかも全てを見直してコード修正してくれているようで実はメモリに残っている範囲でリファクタリングを行い、随分と初期に行ったコーディング個所が漏れ落ちてしまう事もあります。
例えばデータベースアクセスのコードが、効率向上を考慮してコネクションプールを利用するようにリファクタしてくれるのですが、初期のコーディング部分は直接接続のまま残されてしまっていたり。といった具合です。
このように人は広い視野で物事(リポジトリ内)を記憶しておくことができるので「ここ大丈夫だったかな?」と目くばせする事ができます。(もちろん、業務システムの様に量が多く、漏れ抜けが許されない場合は横展開チェックなど記憶に頼らない確認手段は必要ですが)
一方でLLMはリポジトリ全体を記憶しておくこと、記憶し続ける事が現状では難しいので、その都度のリクエストに含まれる情報や短期的なメモリ機能の範囲でしか「把握」という状況ができません。
なんらか代替手段が無いと業務システムのような規模は難しいなと感じています。
私がAIコーディングにおいてリポジトリ管理として望む点は、以下になります。
- クロスリファレンス機能
- 例えば、グラフデータベースのように各ソースコード間の関係性を表現できる仕組みがあれば、どの部分に依存しているかが一目で分かり、誤って必要なファイルを削除してしまうといったリスクを減らすことができます。
- リポジトリ(ソースコード)全体の把握
- こちらは、リポジトリ全体を文脈で検索可能なデータベース化ができれば。と思います。現状のRAG(Retrieval Augmented Generation)で実現できるかは不明な部分もあります。ソースコードのファイルは大きいため、通常RAG化する場合はファイルを複数のチャンクに分割してベクトル化します。ひとつのチャンク内に収まる文脈であれば、文脈検索により正確な抽出が可能です。しかし、ロジックが分割されたチャンクに跨った状態だと、文脈が分断され検索精度が出ない(ヒットしない)可能性もあります。逆に、ソースコード全体を丸ごとベクトル計算してしまうと、文脈が広がりすぎてベクトルの意味が希薄になってしまいます。そのため、適切な文脈情報を保持するには、チャンク分割は避けられませんがその要求は矛盾したものとなってしまいます。ただ単に機械的に分割するのではなく、ロジックの処理単位に分割できれば、チャンク単位での検索でも高い正確性が持てるかもしれません。ただ、この場合はどうやって分割するか? コードのロジックを解釈しながら分割ができるのか? といった技術課題が多々あり実現可能かどうかは未知数ですが、今後の技術の進展に期待したいところです。
といった感じで、全体を把握する・全てを見通す。という人にはごく当たり前にできる事が実は結構難解で高度な機能なのだとAIを使い込んでみて気づかされました。
では。
2025年2月19日水曜日
AIコーディングはアジャイル向き?ウォーターフォール向き?
2025年2月18日火曜日
AIの賢い使い方、エージェントとして使う方法
こんにちは。横井です。
今回は、LLM(大規模言語モデル)やエージェントをどのように活用すればよいのか、その基本的な考え方を書いてみたいと思います。
まず最初に大切なのは、何をアウトプットとして求めているのか? という作業のゴールを明確にすることです。当然これは人が指示する事になります。このゴールの定義が曖昧だとアウトプットも想定したものと違ったものになってしまいがちです。たとえば(コーディング作業で例えると)、
- コーディングする前に必ずドキュメントを書いておく
- コーディング前にやるべきことをリストアップしておく
- アプリケーションコードとテストコードをセットで書く
- テストコードを先に書く
といった手順や方針です。これらはある意味、「ウォーターフォール型」のように、プロセスの進め方を先に定めてしまうこととも言えます。こうした方法論や方向性を設定したうえで、アーキテクチャや要件、そして実装したい機能をもとに「具体的にどう作るか」というステップをLLMに考えさせるのです。
次に、作業計画についてです。これはHowの部分をさらに具体的な作業レベルのタスクにブレイクダウンし、詳細化させる事です。これもLLMに任せた方がよいです。タスクを細かく分解してもらうことで、「何をいつ、どの順序で行うか」を明確化できますし、その進捗を管理するToDoとしても活用できます。LLM自身が考える事で、ゴールへ向かう道を見失わずに、一直線で進むことが可能になります。
以上のように考えると、人が考えて指示すべきことと、LLMが考えたり作業したりすべきことを明確に定義・分担することが重要だといえます。具体的に言えば、人間が考えるべきことは主に以下の二点です。
- ゴールの定義
- LLMに仕事を考えさせたり、実行させるための方法論やプロセスの方向付け
一方、ゴールを達成するための具体的なステップやタスクのブレイクダウン、作業順序、ドキュメント出力などについては、LLMに考えさせた方が良いです。そして、人はLLMが出してきた実現手段や実行計画、To Doリストなどをレビューするという役割を担います。
エージェント機能を使う場合は、たとえばシステムプロンプトやカスタムインストラクション、ルール設定などにおいて、どのレイヤーで何を定義するかを整理し、指示の重複や矛盾を起こさないようにすることが肝心です。
こうした工夫をこらせば、自動的・自律的にLLMやエージェントに作業を進めてもらうことも十分に可能になるのではないでしょうか。繰り返しになりますが大切なのは、「人が定めるべき前提や方針」と「LLMに委ねるべき具体的な実行手段や計画」の切り分けを明確にし、お互いの役割をはっきりさせることだと感じています。
では。
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がすでに学習しているのであれば、人が一から調べて試行錯誤する必要がないという点でした。具体例を挙げると、最初のバージョンではアプリが問い合わせを行うLLMはOpenAIのみ固定で使用していました。それを機能拡張として、Google Geminiも使えるようにしたい。さらに、環境変数によってどちらを使うか動的に切り替えられるようにしたい、という要件をAIに伝えたところ、インターフェースの継承やファクトリパターンを活用する設計を提案してきたのです。継承のクラス図やシーケンス図といったドキュメントまでもアウトプットしてくれましたので、私はそれをレビューし、要件どおりかどうか確認したうえでコーディングを依頼しました。その結果、LLMをパラメーターにより動的に切り替えられる、汎用性の高いアプリが出来ました。
このように、すでに学習されている技術的な知識の広さや深さは、私個人の情報量や経験値をはるかに超えています。こうした分野では、人間が時間をかけて自力でコーディングを行うこと自体に、もはや大きな価値を見いだしにくくなりつつあるのかもしれません。もちろん、学ぶことや経験を積むこと自体はかけがえのない大切な行為であり、私自身もそれを否定する気はまったくありません。ただし、仕事としてアウトプットを素早く正確に出すという観点においては、もはやAIには太刀打ちできないのではないかと感じてしまいました。
もっとも、私たちが扱っている業務システムは、以前にも述べたとおり、LLMが学習していない情報が多く含まれています。業界特有の商習慣や企業モデル(企業情報やビジネスモデル、業務内容)、そしてそれを支える組織形態などをLLMへインプットするのは現時点では難しい面があります。そのため、業務ロジックをAIに完全にコーディングさせるのはまだ難しいというのが実情です。しかし、これはあくまでも現時点での話にすぎません。業務知識を事前学習以外の形でLLMに渡す方法が確立され、実現したい業務内容を正しく伝えられるようになれば、将来的には業務ロジックのコーディングさえもAIでまかなえる可能性があるのではないか、と感じています。
では。
2025年2月14日金曜日
AIと人の違い
まず、生成AIが現時点で「使える」と感じる方もいれば「まだ使えない」と感じる方もおり、その感想は人によって異なるようです。もちろん、どんな仕事を対象にするかや、どのような内容を依頼するかによっても変わってきます。私自身、ChatGPTが登場してからさまざまに試してきましたが、最近のAIコーディングに関して言うと、生成AIをうまく使うためのコツは主に次のように整理できるのではないかと思います。
やること(ゴール)とやらないことを明確にする
いわゆる仕事のスコープをはっきりさせることです。ゴールに向かう詳細なステップと順序を決める
これは、指示する側が具体的に定義するか、あるいはAIに考えさせるのかによってやり方が変わってきます。前提条件や制約条件など、ゴール達成のための条件を定義する
これらをきちんと定義しておくことで、AIの回答精度や作業の方向性が大きく変わります。作業と進捗をどの単位で確認するかを決める
何を、どのタイミングで、どのようにチェックするのかを伝えれば、生成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のモデルも進化が著しいので、明日には陳腐化・コモディティ化しているかもしれません。そういう意味でも「現在地点」だと思います。