オレ流AI駆動開発

浅海 智晴 Created: 2026-01-05

11月中旬近くにRAG, MCP, 知識グラフ (knowledge graph)といったところを調査しはじめ、まだ2ヶ月経ちませんが、仕事の合間での作業であるにもかかわらず、かなり高速に技術をキャッチアップして実装まで落とし込めていると思います。

これも生成AIのおかげ。

この開発の過程で、それなりに生成AIを使った開発手順ができあがってきたので、まとめてみることにしました。どこまで汎用的に使えるかはわからないので「オレ流」ということで。

登場人物

  • チャッピーくん : ChatGPTアプリ(Mac, Android)

  • コーちゃん : VSCode Codexで動いているCodex(ChatGPT)

チャッピーくんは、仕様検討や設計の方向性を考えるといった抽象度の高い思考が得意です。

一方で、外部ファイルを同時に複数扱えない、ファイル操作ができないといった制約があり、実装フェーズでは力を発揮しづらい面があります。

会話を環境を跨いで共有できる点は非常に便利で、移動中や隙間時間での思考に向いています。

コーちゃんは、複数ファイルを横断的に参照・更新することが得意で、実装やリファクタリングでは欠かせない存在です。

ただし、仕様そのものをゼロから構築する力はチャッピーくんほど高くありません。

この2人をどう組み合わせるかが、AI駆動開発の生産性を大きく左右します。

開発環境

  • Emacs : 普段使いはこれ

  • VSCode : AI連携用

  • IntelliJ IDEA (Community) : デバッガ

Emacsはエディタとしてはもちろん、Programmers Work Benchといったような形の一種のIDEとして使っています。ファイルの編集以外にマルチ・コンソール、ファイル操作、Git操作といったものですね。

一方、Emacsで提供していない機能、提供していても使いづらい機能は外部ツールを併用しています。

デバッガはIntelliJ IDEAを使用し、AI連携にはVSCodeを使っています。

VSCodeのCodex機能にOpenAIが統合されたのは2025年10月末頃ですが、これによってAI駆動開発の効率は一気に向上しました。

それまではチャッピーくんを補助的に使っていましたが、チャッピーくんとコーちゃんのコンビネーションによって、AIを前提とした開発スタイルが成立するようになりました。

Plus契約でコストが比較的抑えられている点もありがたいところです。

プログラミング言語

プログラミング言語はScala 3です。Catsによる関数型プログラミングを導入しています。

テスティング・フレームワークにはScalaTestを使っています。

電車で

電車で移動中、ふと思いついたことがあると、Android版のチャッピーくんに軽く投げます。

SELinuxのセキュリティモデルをフレームワークに取り込みたいんだけど。

この程度の起点から会話を始めます。 そのまま終わることもありますが、興が乗れば仕様書を書ける程度の情報が自然と溜まっていきます。

退屈な移動時間が、仕様検討の時間に変わります。

家に帰ってから

帰宅後、デスクトップ版ChatGPTで先ほどの会話を確認し、開発作業に入ります。

開発の成果物は次の3つです。

  • ソースコード

  • ドキュメント

  • 検証可能仕様

ソースコード

SIE (Semantic Integration Engine)プロジェクトでは、実際に手でコードを書く量はかなり減りました。

ただし、チャッピーくんもコーちゃんも、本当の核心部分やアーキテクチャの要となる部分はうまく捌けないことが多いです。

アーキテクチャ・ベースラインや設計の背骨となる部分は人間が作り、その上に載る実装をAIに任せる、という役割分担が最も安定しています。

ドキュメント

ドキュメントは以下のものを作成します。

  • README.md ::プロジェクト概要(人間向け)

  • AGENTS.md ::AI向けの起点文書

  • RULE.md ::プログラムのコーディングルールなど

  • TODO.md :TODOリスト

  • docs/spec/*.md :仕様

  • docs/design/*.md :設計

  • docs/notes/*.md :設計に関するメモ

  • docs/idioms/*.md :コーディングのイディオム

  • docs/rules/*.md :設計やコーディングのルール

  • docs/ai/*.md :AIの動作ルール

ドキュメントは人間とAIが共有する知識なので、基本は英語で書いています。

チャッピーくんは内部的に英語で思考しているらしく、日本語だけで書くと翻訳コストや意味の揺れが発生しやすくなります。

control flow / control-flow / コントロールフローといった表記揺れに加えて、quality attribute が「品質特性」「品質属性」「品質要件」と訳されたり、safety と security がどちらも「安全性」と訳されてしまうといった翻訳揺れによる曖昧さを避けるためにも、英語で記述した方が精度が高くなります。

これは単なる翻訳の好みの問題ではなく、LLMの内部構造に起因する必然でもあります。

大規模言語モデルは、英語を中心とした膨大なコーパスを元に語彙同士の関係性を高次元ベクトル空間として学習しています。

この空間では、quality attribute、safety、security、reliability といった語は、それぞれ異なる位置関係と意味的距離を持っています。

一方、日本語に翻訳すると、複数の英語が同一の日本語に畳み込まれたり、1つの英語が文脈ごとに異なる日本語に分解されるため、本来分離されていた意味ベクトルが潰れてしまいます。

その結果、LLMは「どの概念を指しているのか」を文脈推測に頼らざるを得なくなり、推論やコード生成の安定性が低下します。

英語で記述することは、LLMにとって意味空間を安定させ、概念間の距離を正しく保ったまま推論や生成を行わせるための、最も低コストで効果的な方法です。

検証可能仕様

Executable SpecificationをSimpleModelingでは「検証可能仕様」と呼びます。

BDD (Behavior-Driven Development)スタイルで書かれたテストプログラムであり、

  • 仕様書として読める

  • 実行結果が仕様の確認になる

  • 使用例としても機能する

という性質を併せ持っています。

検証可能仕様を実行すれば、仕様通りに動作していることを機械的に確認できます。 回帰テストとしても非常に重要です。

作業手順

作業手順は臨機応変で必ずこの手順を取るわけではありませんが、ある程度の規模の開発をする場合は以下のような手順になることが多いです。

仕様をまとめる

仕様検討はチャッピーくんと一緒に行います。 ただし、複数ファイルを同時に参照できない制約があるため、実態調査や横断的な確認はコーちゃんに依頼します。

仕様案をチャッピーくんがまとめ、軽く人間が確認し、違和感がなければ実装に進みます。

コーディングしてみる

コーディングは基本的にAIに任せます。 うまくハマると、そのまま使えるコードが出てきます。

ただし、事故も起きるため、小さく作ってこまめに評価することが重要です。

仕様をドキュメント化する

コーディングを進めてフィードバックを繰り返すことで仕様が固まってきます。この仕様をドキュメント化します。

チャッピーくんはセッションが変わると仕様を忘れてしまう、うろ覚えで不確実な情報を使ってしまう、ということが多々あるのでこまめに仕様のドキュメント化しておくことが大事です。

ここでちゃんとしたドキュメントを残すことでAIが設計やコーディングに活用できる情報が増えて、より精度の高い作業が可能になります。

ドキュメントを作ることは大変な作業ですが、ここはAIの得意分野なのでAIにお願いすれば案外大した手間ではありません。

ここでまとめてもらった仕様はそのままドキュメント化するのではなく、現存する複数のドキュメントに対して適材適所で反映していくことになります。 そして、独立してドキュメント化した方がよい場合のみ新規のドキュメントを作成します。

検証可能仕様を作る

コーディングや仕様のドキュメント化と並行でも、仕様が固まった後でもよいので、検証可能仕様を作成します。 つまり仕様を確認するテスト・プログラムを作ります。

テスト・プログラムを作ることで、仕様の過不足などを検知することができます。 プログラムが仕様通りに動作することを確認することができます。

AIがプログラムを破壊してしまう可能性が常にあるので、回帰テストで常にプログラムが想定通りの動作を維持できているのかを確認するのは非常に大切です。 同時にGitを使って、破壊されても元に復元できることを担保しておくことも大事です。

知識を蓄積する

チャッピーくんとの会話を通じて育て、コーディングや検証可能仕様によって精度を高めた仕様を、プログラムの中だけでなくドキュメントとして形式知化して蓄積していきます。

ドキュメントと検証可能仕様を蓄積することで、AIが参照できる知識ベースが育っていきます。

なぜこのスタイルか

まだ2ヶ月足らずなので完成形というわけではなく、現時点での到達点という感じです。

なぜこのスタイルに落ち着いたかという点を改めて考えてみました。

チャッピーくんを自由にさせてはダメ

チャッピーくんにプログラミングを依頼すると、与えられた条件の中で最も効率のよい方法を選択してきます。 この時に何の制約もないと、開発中のコードと安定しているコードの見境もなくフリーダムに安定しているコードの方を破壊してしまうことが多々あります。

逆に修正してはいけない箇所や修正時に考慮する点などを細かく指定すると、その司令の通りにコーディングをするので満足のいくものができあがってくる可能性が高いです。

このため、いかにドキュメントを整備してコーディングに対する制約を入れていくのかというのがAI駆動開発のポイントを担うのではないかと思いました。

ただ、1つのプロンプト (Prompt)に全ての情報を盛り込むことはできないので、目的別のドキュメントを作成しAIが活用しやすいように組織化することが重要だと思います。

参考情報

記事

知識グラフによる知識表現をモデリングに活用するためのツール開発の記事です。 11月の中旬に知識グラフを生成AIに接続することの重要性に気づき、調査と開発を進めたものをまとめていったものです。

プロジェクト

オレ流AI駆動開発に興味のある方は以下のGitHubプロジェクトのドキュメント構成が参考になるかもしれません。

まとめ

SIEの開発で一番大変だったのは docker compose のつなぎ込みの部分で、仕様策定からプログラミングまでは恐ろしく効率よく進められました。

今までなら1〜2年はかかっていたであろう開発が、2ヶ月弱でできてしまったという感触があります。

退屈だった移動時間は思考の時間に変わり、門外漢だった知識処理の領域にも踏み込むことができました。

ソフトウェア開発のスピードは、今後さらに恐ろしい勢いで高速化していくことになるでしょう。

小さな思いつきを生成AIに投げることで、会話を通じてアイデアを膨らませ、生成AIが持つ知識と自分の考えを融合させながら、仕様や設計へと育てていくことができます。

開発が速くなったという以上に、ソフトウェア開発、ひいては知的活動そのものの質が変わったことを実感しました。

参照

用語集

検索強化生成 (RAG, Retrieval-Augmented Generation)

生成AIが内部(パラメトリック)知識だけでなく、外部の知識ソースを検索してから応答を生成する技術。 RAGはまずデータベースや知識グラフなどから関連情報を検索し、それを文脈として取り込み、より正確で最新の応答を生成する。

知識グラフ (knowledge graph)

現実の概念・事物・出来事をノードとし、その関係をエッジとして表す意味的グラフ構造の知識ベース。

Semantic Integration Engine (SIE)

BoK(Body of Knowledge)から生成された構造化知識(RDF)および文書知識(SmartDox)を統合し、AIが直接利用できる形に変換・検索するための統合エンジン。

BDD (Behavior-Driven Development)

Behavior Driven Development(BDD, 振る舞い駆動開発)とは、システムの振る舞いをシナリオとして記述し、関係者間で共有可能な形で仕様を明確化する開発アプローチである。

プロンプト (Prompt)

RAGによって取得された知識を、AIモデルの推論プロセスに橋渡しするための構造化指示または文脈表現。 BoKに格納された構造化知識を、モデルが理解し行動・内化できる物語的/命令的形式に変換する。