保守性と依存の考え方
依存を増やしすぎない理由と、小さく始める考え方。
Composerを必須にしない
Naifyはpure PHPで書かれており、フレームワーク本体を動かすためにComposerを必須にしません。プロジェクト側でComposerを使うこともできますが、FW自体がComposerに縛られないことを重視しています。
Composerを否定したいのではなく、FW自体の前提にしすぎません。
- 依存パッケージの破壊的変更に振り回されにくい
- namespaceとディレクトリの対応を追いやすい
- 配布やデプロイの前提を単純に保ちやすい
- コードを読み始める入口がぶれにくい
TwigやNaifyDbなど、プロジェクト側で外部ライブラリを使うことは自然な選択肢として残しています。重要なのは、Naifyのコアがその選択を強制しないことです。
AIネイティブ時代の自前実装
Naifyは「何でも自前で作るべき」と考えているわけではありません。仕様が公開されていて必要機能が限定されているなら、外部依存を足す前に「本当に自前で持てないか」を一度考えます。
判断基準は便利さだけではありません。長期でどちらのコストを持つか、依存ツリーをどこまで引き受けるかまで含めて決めます。
外部依存を選ぶ理由
実装量が大きい
仕様追従が重い
周辺機能もまとめて必要
実装量が大きい
仕様追従が重い
周辺機能もまとめて必要
自前実装を選ぶ理由
必要な範囲が明確
依存ツリーを浅くしたい
コード全体を自分で把握したい
必要な範囲が明確
依存ツリーを浅くしたい
コード全体を自分で把握したい
AIにより自前実装のハードルは下がっています。だからこそ、依存を足す前に「本当に必要か」を一度考える余地を残しています。
小さく始める
Naifyは「小さな構成を正しく保つ」ことに向いています。最初から巨大なアーキテクチャを置くのではなく、必要になった層をあとから足していきます。
不要な層は最初から置きません。構造はあとから育てればよく、最初に抱え込むことを前提にしません。
| 規模 | 構成の目安 |
|---|---|
| 小規模 | Controller + echo |
| 中規模 | Controller + Service + View |
| 大規模 | Controller + Service + Repository + Entity + View |
最初から抱え込みすぎる構成
使わない層まで先に用意する
覚えることが増える
変更のたびに全体が重くなる
使わない層まで先に用意する
覚えることが増える
変更のたびに全体が重くなる
必要に応じて足す構成
今必要なものだけ置く
読む範囲を小さく保つ
成長に合わせて自然に拡張する
今必要なものだけ置く
読む範囲を小さく保つ
成長に合わせて自然に拡張する
知識を持ち出しやすい
Naifyが強く依存するのは、PHP、MVC、PSRといった長く共有されている概念です。フレームワーク固有の作法に寄りすぎないことで、コードも知識も別の環境へ持ち出しやすくなります。
| 寄せたいもの | 理由 |
|---|---|
| PHP | 言語仕様として広く共有されている |
| MVC | 責務分離の考え方として説明しやすい |
| PSR | HTTPやインターフェースの共通前提として扱いやすい |
互換性管理やIDEとの相性は 品質管理 で扱っています。ここでは「なぜ依存を増やしすぎないか」という判断理由に絞っています。