Why

Naifyの6つの特徴と、それぞれが実現することを紹介します。各項目から詳しい説明も確認できます。

Manifesto
PHPがわかれば、そのまま書けます。

Naifyとは?

長期運用の経験をもとに、普遍的な設計の骨格をPHPで形にしています。

5年10年経っても変わらない、変える必要のないものを主軸において実装したMVCフレームワークです。

フレームワーク独自の記法・ルールを減らす事で「PHPが使える」人なら、誰でも触れる体験を提供します。

なぜ作ったのか?

こんな経験はないだろうか
  • コントローラにDB操作や認証処理が混在する
  • 1つのクラスに、役割の異なる処理が増えていく
  • ビューに業務ロジックが書かれている
  • 同じ処理が複数の場所にあり、修正が一部にしか反映されない

どのフレームワークでも、規約を決めるだけでは実装は揃いません。処理の役割が曖昧になると、不具合や修正漏れにつながります。

大規模なフレームワークで多くの機能や依存関係を利用している場合、こうした問題の影響は広がりやすいです。長期運用で変更が積み重なるほど、調査や修正にかかる保守負担も大きくなります。

参考:長期運用システムの課題

Pure PHP

PHPの知識で読み書きできることを大切にしています。フレームワーク固有の DSL や巨大な設定レイヤを前提にせず、HTTP と MVC の基本の上に立ちます。

設定もPHPで記述し、処理の流れを追いやすくします。IDEの補完やAIによるコード理解も活用しやすいです。

PHPの知識をそのまま使えることが、読みやすさとレビューしやすさにつながります。
基本的なコード例は 実装サンプル と リクエスト処理フロー で具体的に追えます。

疎結合な設計

Web・DB・テンプレートを分け、必要なパッケージを選んで使えます。Web処理は Naify、DB操作は NaifyDb、テンプレートは NaifyView が担います。

使用するパッケージや実装は、案件ごとに選べます。

Naify・NaifyDb・NaifyViewは、同じ思想で設計された別責務の疎結合パッケージです。
依存の考え方は 長期運用と依存戦略、パッケージの全体像は パッケージ一覧 で確認できます。

Composerすら不要

Naifyは、ファイルを配置し、PHPから初期化して使えます。疎結合な設計で外部依存を抑え、導入時に必要なライブラリ間の依存解決やバージョン調整を少なくしています。

追加のライブラリは案件に応じて選び、必要な範囲だけ組み合わせます。

参考:保守性と依存の考え方

長期運用に備えた設計

コアに入れるのは、案件固有の機能ではなく、長く使う普遍的な部分だけです。何年経っても必要になる骨格だけを残しています。

運用が長くなっても評価軸がぶれにくいです。便利機能の多さではなく、壊れにくさ、説明しやすさ、差し替えやすさをコアで守ります。

長期運用では、便利さよりも壊れ方の小ささが効いてきます。
この背景は 10年運用で見えやすい差 で整理しています。

Small Core

責務を抱え込みすぎず、役割ごとに小さく分けて保ちます。

巨大な1ファイルや1クラスに崩れにくいです。読む範囲が小さく、レビューしやすく、必要になった層だけをあとから足せます。

  • 大きな責務をコアへ抱え込みすぎない
  • 役割ごとにクラスや層を分けやすい
  • 最初は小さく始めて、必要に応じて育てられる
大きな責務を抱え込まないことが、Small Coreの価値です。
参考:小さく始める / Naifyパッケージ

暗黙の処理を行わない

メソッドを実行すると何が起こるのか、どのような処理が走るのか。

そのような迷いを減らすため、マジックメソッドを必要最低限に留め、コードをシンプルな書き味にし、処理を追いやすいようにしています。

便利な仕組みを増やすより、流れを見えやすくして壊れにくさを作ります。
ルールの背景は 3つの原則、実際のコードは 実装サンプル で確認できます。