■ 1. バイブコーディングの問題提起
- 大規模言語モデル(LLM)によるコード生成がソフトウェア開発の風景を一変させた
- 多くの開発者は雰囲気(vibe)に頼ったコーディングの危うさを感じ始めている
- MITの研究チームが概念と同期という2つの要素を核とした新しいソフトウェア構造パターンを提案
- 人間とAI双方にとって可読性の高い(legible)ソフトウェアの実現を目指す
■ 2. 機能の断片化問題
- 現代のソフトウェアは内部構造が極めて複雑化
- 一つの機能(例:SNSアプリのシェアボタン)でもロジックが投稿、通知、ユーザー認証などコードベースの複数箇所に散らばる
- MITのDaniel Jackson教授がこれを機能の断片化と呼び、システムの保守性や信頼性を著しく低下させる根源的課題と指摘
- LLMの台頭によってこの問題がさらに深刻な形で顕在化
■ 3. AIコード生成の課題
- GitHubの最新データではAIによるコード支援は普遍的となり開発効率を飛躍的に向上
- プロセスはバイブコーディングと揶揄される
- LLMは驚くべき速さでコードを生成するが既存システムとの相互作用や副作用を完全には理解していない
- 既存コードベースへの機能追加指示で意図しないモジュール変更や既存機能破壊が頻発
- 堅牢なコーディングに不可欠な3要件の欠如:
- インクリメンタリティ(局所的変更で小さな改善を重ねる能力)
- インテグリティ(既存機能を破壊しない能力)
- トランスペアレンシー(変更内容や実行時動作が明確であること)
■ 4. 概念(Concepts)の定義
- ユーザーが認識する機能の自己完結した単位
- SNSアプリでは投稿、コメント、いいね、フォローといった個々の機能が独立した概念として定義
- 特徴:
- 自己完結性: 各概念は自身の状態と実行可能なアクションを保持
- 独立性: 概念同士が直接的な依存関係を持たない
- 特定機能の修正・拡張時に他機能のコードを気にする必要がない
- マイクロサービスと類似するが決定的な違いは概念が互いに完全分離されている点
- マイクロサービスは相互にAPI呼び出しでもつれたクモの巣のような依存関係を生み出しがち
■ 5. 同期(Synchronizations)の役割
- 独立した概念間の相互作用を記述するための宣言的なイベントベースのルールセット
- 複雑な手続き型コードではなく「何が起きたら何をするか」というルールを定義
- 記述例:
- ユーザーAが投稿Pにコメント実行時(when)
- 投稿Pの作者がユーザーBならば(where)
- 通知概念の送信アクションをユーザーBに対して実行(then)
- ドメイン特化言語(DSL)を用いてシンプルかつ明確に記述
- 宣言的性質によりルールセット全体の見通しが向上
- LLMによる自動生成や形式的検証も容易
■ 6. AIとの相性の良さ
- LLMに与えるコンテキストを限定可能:
- 概念のコード生成時はその概念の仕様のみに集中すればよい
- アプリケーション全体の複雑さを考慮不要
- 同期ルール生成時も各概念のインターフェース仕様の理解で足りる
- LLMへの指示(プロンプト)がシンプルになり生成コードの精度と信頼性が劇的に向上
■ 7. バグ修正事例
- 問題: ユーザー登録フローで不正パスワード試行後に正しいパスワードで再試行すると「ユーザーが既に存在する」エラーが発生
- 新モデルでの解決プロセス:
- 問題が発生した一連の処理(フロー)を特定
- そのフローに関連する同期ルール群を抽出
- 抽出したルール群と問題概要をLLMに提示し修正方法を問う
- LLMの回答:
- パスワード検証前にユーザー作成が行われていることが原因と特定
- まずパスワード検証し成功時のみユーザー作成という修正案を新しい同期ルールとして提示
- システム動作が明示的ルールとして記述されているからこそ可能な人間とAIの理想的協調作業
■ 8. 実証実験の成果
- RealWorldベンチマークアプリケーション(Mediumのようなブログプラットフォーム)のバックエンドを実装
- 従来実装では複数サービスやモジュールにまたがっていたお気に入り登録やタグ付け機能が単一の概念として明確にカプセル化
- システムの可読性と保守性が大幅に向上
- LLMを用いた各概念の仕様書・コード・同期ルール生成プロセスもほぼ成功
- 提案モデルが理論上のものではなく実用的な開発手法として機能することを証明
■ 9. 専門家の評価
- バージニア大学Kevin Sullivan准教授の評価:
- 人間の理解に基づいた抽象化である概念の上にソフトウェアを構築することを主張
- ソフトウェア設計の理論と実践における新しく重要な方向性
■ 10. 将来展望
- Jackson教授が描く未来像:
- 再利用可能な概念を集めたライブラリであるコンセプトカタログの構築
- コンセプトは新しい種類の高レベルプログラミング言語になる可能性
- シンクロナイゼーションはその言語で書かれたプログラムになる可能性
- 開発の変化:
- ゼロからコード記述ではなく検証済みの概念をカタログから選択
- それらをどのように連携させるかという同期ルールの記述に集中
- 開発がより創造的で本質的なものになる
- 曖昧な雰囲気ではなく明確な構造と対話により人間とAIが共に未来のソフトウェアを築く知的で冷静な設計図