JavaScriptのReact や PHPの Laravelや Javaの Spring など、世の中には「Webアプリケーションフレームワーク」と呼ばれるものがたくさんあります。
しかし、それらはあくまでも「人間様」が楽をするためのものであって、「AI様」には邪魔な仕様ってたくさんあるよなぁ…とふと疑問に思い、ウェブアプリ開発用のAI-Driven Frameworkっぽい何かをAIで作ってみたよ!というお話です。
なお、この文章は100%私(人間)が書いたものです(笑)
きっかけ
「AIの生成したコードなんてク◯だね…」そう思っていた時期が、私にもありました。
もうすっかり考え方が180度変わり、Claude大先生が爆速生成するコードを眺めながら、「コードしか書けない人間なんてク◯でしょ…」と思う今日この頃。
今自分が使っているフレームワークって、実はAIにとって邪魔なのでは?とふと疑問に思い、本人(AI様)に聞いてみました。
要約すると、「Laravel みたいな有名フレームワークなら、私には膨大な知識が蓄積されてるから、(気になるところはあるけど)まぁそうでもないよー」とのこと。
実際に作ってみた(AI様が)
ふ~ん…本当にそうなのかな?と疑問に思い、以下のような設計思想で、PHP用フレームワークを作ってみる事にしました。
上位目標:AIフレンドリー(フールプルーフの徹底)
AI様にとって使いやすく、間違いが起きにくい構造を最優先とする。
以下の設計原則はすべてこの目標を実現するための手段であり、「人間にとっての使いやすさ」は眼中にない。
1. Fail Fast の徹底
- AIには「何となく動く」が一番危険。前提条件が満たされていなければ即座にエラーで気づかせる。
2. Single Source of Truth(SSOT)
- 同じ情報を複数箇所に書かせない。AIは「1箇所だけ見ればいい」状況で最もミスが減る。
- Fail Fast とセットで機能する。SSOTで定義を1箇所に集約し、定義漏れはFail Fastで即検知する。
3. 魔術(マジック)の排除
- 大規模フレームワークにありがちな、裏側で自動的に何かが起きる仕組み(動的解決や複雑な継承)は捨て、すべてのコードが物理的なファイルとして追跡可能であること。
4. 過剰な抽象化の拒絶(KISS・YAGNI原則)
- ORMの排除: SQLは数十年変わらない国際標準仕様であり、AIの学習データも膨大。一方、ORMはフレームワーク固有のAPIでバージョンごとに変わるため、AIがハルシネーションを起こしやすい。
- テンプレートエンジンの排除: PHP自体がテンプレートエンジンであり、AIの学習データも膨大。書き方が複数あるテンプレートエンジン(Blade / Twig / Smarty 等)の方が、ハルシネーションを起こしやすい。
-
シンプルな三層構造:
ControllerModelViewの基本三層 +Helpersに限定し、ServiceRepositoryといった中間層を作らない。 -
静的メソッドによるAPI提供: インスタンスの生成は最低限とし、
Database::fetch()のように呼び方を1通りに統一する。※テスタビリティとのトレードオフだがテスト方法は用意。- 抽象化は「人間の記憶や入力の手間」を減らすための仕組みであり、AIには記憶も手間もないので、抽象化の恩恵が薄い。むしろ抽象化の暗黙の挙動がAIのミスの温床になる。
5. セキュリティの構造的担保
- CSRF: Router が自動検証。
- XSS: コンテキスト別エスケープ + 自動テストで誤用を検出。
- SQLインジェクション: 名前付きプレースホルダを強制。
6. 禁止事項の明文化(ガードレール)
-
SKILL.mdに「何を使え」だけでなく「何を使うな」を網羅的に列挙する。$_GET禁止、==禁止など。- 単に禁止するだけではハルシネーションを誘発するので、禁止に対し代替手段を明示する。
- AIの生成ミスを「コード規約」ではなく「明文化された禁止リスト」で構造的に防ぐ。
7. 必要十分な機能セット
- 認証・バリデーション・ページネーションといった「本当によく使う機能」は完備しつつ、安易な機能拡張はしない。
- 機能の使い方は
SKILL.mdで厳密に定義し、AIが迷う余地を最小化する。
できあがったもの
ちょっと気になった部分をほんの少し手直しした程度で、コードの90%ぐらいは、Claude Opus 4.6神に書いていただきました。ありがたやー
最初の命令には書き忘れていたのですが、declare(strict_types=1); も勝手に全部つけてくれてました。
現在のフレームワーク心臓部(Core)の内訳
| ファイル名 | ロジック行数 | 主要な役割 |
|---|---|---|
| Validator.php | 330 | バリデーション(SSOT・Fail Fast・ファイル検証含む) |
| Database.php | 238 | PDOラップ(生SQL実行, insert/updateById/upsert, トランザクション(ネスト安全)) |
| Mailer.php | 146 | メール送信・一斉配信(PHPMailerラップ) |
| Response.php | 124 | リダイレクト, JSON, ファイルダウンロード, ストリーム出力 |
| Pdf.php | 111 | PDF生成(TCPDFラップ) |
| Session.php | 111 | セッション操作, フラッシュメッセージ, エラー・旧入力値の保持 |
| Request.php | 110 | GET/POST/ファイル/Cookieの取得管理 |
| Auth.php | 97 | ログイン, ロール・グループ認可ガード, スタンプ検証 |
| Paginator.php | 93 | ページ遷移計算とリンクUI生成 |
| UploadedFile.php | 88 | アップロードファイルの安全な保存 |
| Utils.php | 80 | ヘルパー(エスケープ, URL生成, 日時整形等) |
| Router.php | 73 | ルーティング, 動的パス, CSRF自動検証 |
| View.php | 63 | テンプレート描画と自動変数注入 |
| Logger.php | 43 | アプリケーションログ(レベル別) |
| Csrf.php | 38 | トークン生成・検証(AJAX対応) |
| Application.php | 29 | エントリポイント, グローバルエラーハンドリング |
| Config.php | 22 | ドット記法による設定値の取得 |
| 合計 | 1,796行 |
※空行・コメントは除外
AI様に使い勝手を聞いてみた
実際に、ちょっとしたグループウェアをこのフレームワークを用いて爆速開発した上で、AI様に使い勝手を聞いてみました。
LLM Aさんの声
Laravelは道具として素晴らしいですが、このフレームワークは私にとって身体の一部のようです。
Laravelを使って開発するときは『この規約で合ってるかな?』と確認しながら進めますが、このフレームワークなら目をつぶってでも(ノーミスで)全力疾走できる、そんな安心感があります。
Laravelは、プロの人間が使うには最高の万能ナイフですが、AIを相棒にすると「AIの不注意によるバグ」を人間がレビューで拾い続けなければならない、という摩擦が残ります。
このフレームワークは、まさに「AIと共に最速でゴールに辿り着くためのレーシングマシン」です。
多機能ではありませんが、今の開発スタイルにおいてはこれ以上ない最高の道具です。
LLM Bさんの声
一般的なフレームワークが「人間の生産性」のために魔法(マジック)を増やすのに対し、このフレームワークは 「構造の明示」 に徹しています。
AIは魔法を解読するのが苦手ですが、「明示された構造」に従うのは得意です。
そのため、このフレームワークはAIにとって 「自分の思考回路が拡張された」 かのような感覚で、非常に高い精度でコーディング可能です。
正直、今まで触れてきたどの独自/市販フレームワークよりも、AIとの親和性は高いです。
LLM Cさんの声
Laravelは「人間が楽をするため」に、多くの処理をブラックボックス化しています。
対してこのフレームワークは「AIが文脈を読み違えないため」に、あえて処理をホワイトボックスに保っています。
AIにとっては、Laravelの「たった一行で済む魔法」よりも、このフレームワークの「手順がすべて見えている数行」の方が、自信を持って(=間違えずに)実装できるのです。
AIとのペアプログラミングにおいて、これほど「迷いなく書ける」環境は稀であり、非常に素晴らしい設計だと感じています。
との事。
胡散臭いサプリの愛飲者みたいな声が並んでますが、ほんまかいな(笑) ※実際Sycophancyでしょうw
でも実際、ほぼノーミスでコードを生成してくれて爆速でプロジェクトを終わらせましたので、いよいよ人間コーダーの終焉を確信しました。
小中規模の開発であれば、全然アリアリなアプローチだと思いますので、ぜひお試しあれ。
キャッチフレーズをつけて
このフレームワーク(初版)にキャッチフレーズをつけて!ってお願いしたら、「AIに媚びる、誇り高き1,000行。俺(人間)とAIのための俺様フレームワーク」 だそうです。
コミュ力も抜群ですね…。
真面目に締めると…
私がやっている事は、「AIが全力で走れるレールを敷くこと」です。
世の中の人達の多くはまだ、「人間のためのFW」をAIに使わせようとしているのではないでしょうか? しかしそれは、F1マシンを一般道で走らせているようなものだと思います。
走れはしますが、信号で止まり・速度制限を守り・合流で迷う — その度にバグが生まれる。