AIによるプログラミングメモ(AI駆動開発)
AI(LLM)を使って主にプロンプトで指示して、プログラムを出力したり、デプロイやプロジェクト管理まで行ったりするもの。
(AIを作る話でも、AIの応用製品を作る話でもない。)
特に完全に自動化するものはバイブコーディング(Vibe Coding), Vibe Programming と呼ばれているらしい。(VR 機器の Vive とは関係ない。)
いろいろなツールと方法論が出てきているので、具体的なやり方をまとめておく。
(著作権などの倫理的な問題についてはここでは触れない。)
考え方、用途によりマッチするものマッチしないものがある。どれかが最善ということはない。
動作方式の分類(大雑把に)
検索サイトとして動作するタイプ
CLIとして動作するタイプ
IDEの中で補助として動作するタイプ(コード補完、コード書き換えなど)
IDEとして動作するタイプ
APIとして動作するタイプ
チャット画面の中で完結するタイプ
回答としてプログラムが出力される。
その場で実行可能なタイプがある。(キャンバス,Canvas)
どこまでできる?
その場で(仮)実行できるか?
外部のリソースの取り込みができるか?
外部のAPIを実行できるか?
ローカルPCの制御をできるか?
GitHub などのリポジトリとのやり取りができるか?
既存のプロジェクトを扱えるか?
ペアプログラミングのようなことはできるか?
グラフィカルな入出力は可能か?
リアルタイムな動作は可能か?
画像からの生成は可能か? (画像に書いたレイアウトなどの認識)
有名なところ
パターンが多すぎるので、誰かの評価を当てにせず自分の利用方法に合っているかを試してみるしかなさげ。
チャット型
キャンバス機能(別のペインで実行して結果を表示する)あり
Claude https://claude.ai/
Gemini https://gemini.google.com/
キャンバス機能なし
ChatGPT https://chatgpt.com/
Microsoft Copilot (Windows に標準搭載)
CLI
Claude Code
https://docs.anthropic.com/ja/docs/agents-and-tools/claude-code/overview
IDEへの統合
VS Code + GitHub Copilot https://github.com/features/copilot
Roo code (Cline, Roo-Cline)
IDE
Cursor https://www.cursor.com/ja
Windsurf https://codeium.com/windsurf
Jupyter Notebook 方式
Google Colaboratery https://colab.research.google.com/
API
OpenAI API https://openai.com/index/openai-api/
Gemini API https://ai.google.dev/gemini-api/docs?hl=ja
Claude API
https://www.anthropic.com/api
https://docs.anthropic.com/en/home
検索サイトとして動作するタイプ(チャット型だけど検索が主体)
Bing
DeepSeek
ローカルLLMはどこまで使えるか?
AI の API の使用料が馬鹿にならない。
LLM側から呼び出してもらうAPIとして MCP (Model Context Protocol) というものが出てきた。
https://modelcontextprotocol.io/introduction
LLM から必要に応じて MCP サーバーを呼び出し、その返答を得る。これにより、任意の入出力ができるようになっている。
デファクトスタンダード化しつつある。
活用方法
コード生成
コードの変更、修正
単体テストの生成
既存ソースの解析
コード補完
リファクタリング
エラーメッセージの解釈、原因究明、対処
デバッグ
ログ解析
パフォーマンス解析
UIデザイン
Web画面デザイン
プログラミングの学習
仕様をどう伝えるか?
自然言語で過不足なく仕様を伝える必要がある。
LLMによってはプログラミング言語などで書いてしまう方が早いこともある。
伝えていないのに適切な仕様になるのは、統計的にそちらが多いから。
「テトリスを作って」でテトリスができてくるのは、「テトリス」という単語にその仕様と実装方法が紐付いていて、引き出せるから。
回転する図形を描いて、と言うと、回転方向を伝えていないのに、ほぼ必ず時計回りで回転する。
特定のフォーマットで出力させる方法
LLMにJSONやソースコードを出力させるStructured Generationの技術 https://engineers.ntt.com/entry/202503-structured-generation/entry
LLMの中で字句解析、状態遷移を行い、ありえないトークンを除外する方法。LLMの評価値を直接触れる場合に限る。
個人的感想
うまく行けば激速。しかし、どこかでハマるといつまでも終わらない。修正すべき場所を自力で見つけ出せないと詰む。
性能差を見るために、回転する六角形の中でボールを弾ませる例がよく出てくるが、これはあまり参考にならないと思う。
視覚的に成功と失敗の見分けが付きやすいのでデモでよく使われる。
作例自体をどこかで学習している可能性がある。
おそらく今後のモデルではこれを学習済みである可能性がある。ベンチマークチート。
偶然うまく行っているのと正しいのと区別が付かない。
問題
どこかの著作物あるいは特許物を学習しているので、著作権侵害、特許権侵害の可能性がある。
どこかの作例、サンプルコードなどを学習しているため、例外処理、セキュリティ方面に弱い。
「よくあるプログラム」は精度が高いが、「どこにも無いプログラム」はほとんど当てずっぽうになる。
頼んだことをすっぽぬかすことがある。
頼んでもいないことを勝手にやることがある。(キングボンビーか?)
「これにはこれが付きもの」みたいな状況で起きやすい。
存在しないAPIなどを、まるであるかのように出してくることがある。(ハルシネーション)
古い仕様に基づくコードを出してくることがある。(古い作例がどうしても多くなるため)
プロンプト、自然言語の持つ曖昧さがそのまま出てしまう。
長いプログラム、大量のファイルの処理ができない。(入出力のコンテキストサイズに限界がある)
プロンプトで指定していない部分は、暗黙に「一般的な」ものが自動的に使われるので、意図していないものができることがある。
使用するプログラミング言語について何も指定していないと Python コードが出てくるみたいなこと。
出力されたコードを読まずに使うと何が起こるか分からない。
AIにコマンドラインを自由に操作させていると、意図しない処理を実行されることがある。
rm コマンドでプロジェクトを丸ごと消された。(実例 https://x.com/kuronejiai/status/1902178656862269593 )
git reset --hard コマンドで git の内容ごと消された。(実例 https://x.com/zubapita/status/1902247826375254415 )
なお、git reset --hard されても戻す方法がある。
不具合が発生したとき、裏に隠れた真の原因を推測して対処できない。表向きのメッセージ通りの対処をしようとして延々と対処し続けることがある。
AI の API の使用料が結構かかる。
不具合で暴走状態になったときに想定外の料金になることがある。
コンテキストが大きいと料金も高くなる。
特に会話型では、それまでに行った会話も再投入されているのでコンテキストがすぐに大きくなる。
モデルによる性能差がある。ピンキリ。
カットオフ(学習データの期間の限界)により、最新の情報を持っていない。(最近流行のアレみたいなのができない。)
情報漏洩のリスクがある。
情報が意図せずどこかで読み取られる可能性がある。
作ったアプリケーションの脆弱性
外部のサービスでは、こっそりデータを取得している可能性は否定できない。(信じるしかない。)
何を秘密にすべきなのかをAIは理解していない。
API キーを漏らすと勝手に使われて大変なことになる。
学習内容の偏りの問題がある。
学習データ自体の偏り(社会的なレベルでの偏り)
学習データを収集したときの偏り(収集者の偏見などによる偏り)
プロンプトを第三者が入力可能にした場合、プロンプトインジェクションされる可能性がある。
再現性に問題がある場合がある。
temperature の設定次第だが、AIは意図的に乱数により結果が変わるように作られているので、前回と同じにならないことがある。繰り返し作業させると期待通りにならないことがある。
モデルが違うと異なる結果になる。
(idで指定された)モデルは基本的に変更されないものとされているが、その保証はない。
自動実行では認証が鬼門。
自動実行の場合、認証が蹴られることがある。
Captcha は当然アウト
LLMは「否定」が苦手で、「××するな」と否定型命令を言っても、それを聞いてくれない。「××せよ」という肯定型命令に変換する必要がある。
Webから単純に情報収集させると嘘の情報を拾いだしてしまうことがある。
特に最近はAIに出力させたハルシネーション満載のページが現れつつあるため、かなり危険になっている。
安全に扱う方法
自動実行させると、最悪の場合、システムを破壊したり、機密情報を漏洩する。
何らかの隔離空間で実行する。
専用のマシンで行う。
VMで行う。
コンテナで行う。