Upgrade to Pro — share decks privately, control downloads, hide ads and more …

【あじわう Zend Framework】~ Laravel との徹底比較 ~

Avatar for ranoooooooooooo ranoooooooooooo
December 03, 2025
59

【あじわう Zend Framework】~ Laravel との徹底比較 ~

Avatar for ranoooooooooooo

ranoooooooooooo

December 03, 2025
Tweet

Transcript

  1. • クラス多すぎ ◦ 「Zend_Foo_Bar_Hoge」みたいなクラス名が永遠に出てくる • 拡張性は高い ◦ でも「自由度=複雑さ」も付いてくる • 学習コストは高め

    ◦ Laravel よりも明確に難しい ◦ “書けば動く ” じゃなく “構成を理解しないと動かない ” タイプ 特徴(ざっくり)
  2. • 設計がめちゃ 堅い • 大規模開発で破綻しにくい • パーツごとに使える( DB、メール、ログなど) たとえば 「ログだけ

    Zend」 「認証だけ Zend」 みたいにコンポーネント単体でも 使われてた 企業システムで人気だった理由
  3. Zend Framework → Laminas Project に移行済み • Zend Framework は

    2019年に開発終了 • そのまま Laminas Project として OSS 化 • 今後は Laminas が後継フレームワーク Laravel が流行りまくってる今、 新規で Zend/Laminas を選ぶ会社は少なめ ただし レガシー保守ではまだまだ現役 で、今は?
  4. ざっくり言うと ―― • Zend Framework は “Laravel が出る前の 企業向け王者 PHPフレームワーク

    ” • 今は Laminas に名前が変わってる • 案件で出てきてもビビらんで OK、ただ書き味は重い 触るのはちょっとしんどいけど、 MVCやオブジェクト指向の学びにはめっちゃ良いヤツ 理解まとめ
  5. Zend Framework • 企業向けガチガチ設計・ コンポーネント 志向 • 歴史古い( Zend Framework

    1 → 2 → 3 → Laminas へ) • 「フレームワーク」というより 巨大なライブラリ集 + MVC • 自由度高い けど、そのぶん 設計力要求高い Laravel • 「書きやすさ・わかりやすさ・気持ちよさ」全振り • Rails や Django をかなり意識したモダン PHPフレームワーク • クラシックな Web も API もサクッと書ける • エコシステム( Breeze, Jetstream, Horizon, Vapor, Sail, etc)が超充実 Zend と Laravel の違い
  6. Zend(ZF) • コンポーネント指向 ◦ Zend\Db, Zend\Mail, Zend\Log, Zend\Authentication … みたいに「

    部品の集合 」として設計されてる ◦ MVC もあるけど、あくまで「 コンポーネントの一つ 」 • 「何でも自分で組む前提」 ◦ ルーティング、 DI、プラグイン、フォーム、バリデーション … ◦ 仕組み自体はあるが「 初期設定から自分で組み立てる 」イメージ Laravel • フルスタック・フレームワーク指向 ◦ MVC + ルーティング + Eloquent + Queue + Event + Auth など全部セット ◦ 基本的な Web アプリなら デフォルト構成のまま 8割方いける • 「ベストプラクティスを最初から用意」 ◦ ディレクトリ構造、命名規則、サービス層の置き方など “Laravel 流” が用意されてて、それに乗っかる形 1. アーキテクチャ思想の違い
  7. Zend • ZF1 時代は「Front Controller + config ベース」の ルーティングが多い •

    ZF2/3 では module.config.php に配列ベースで ルートをズラっと書くスタイル • 宣言的で堅いけど、コードから直感的に追いにくいことも 2. ルーティングの違い Laravel • routes/web.php, routes/api.php に コードで書く • ルートにミドルウェア , 名前, パラメータ制約など 全部チェーンで書ける ➡ Laravel のほうが「見て一瞬でわかる」 ➡ Zend は設定ファイルを眺める時間が長くなりがち
  8. Zend • 古い世代は Zend_Db_Table みたいな Table Data Gateway パターン •

    1テーブル = 1クラス が基本 • エンティティ(行のオブジェクト)と、 テーブル操作ロジックが分かれにくい • ZF2以降は Zend\Db\TableGateway や Zend\Db\Sql など 「クエリビルダ & TableGateway」がメイン • 最近の ORM みたいな リッチモデル ではないことが多い 3. モデル/DB 層の違い Laravel • Eloquent ORM が標準 • ActiveRecord パターン( 1レコード = モデルインスタンス) • リレーションがモデル内に自然に書ける • ソフトデリート、グローバルスコープ、アクセサ /ミューテータなど 「DB + ビジネスロジック寄りの機能」がフレームワーク側に豊富 ➡ DB 周りの生産性は 圧倒的に Laravel/Eloquent が楽 ➡ Zend は「自分で設計ちゃんとしたいガチ勢向け」
  9. Zend • ZF2/3 はサービスマネージャ( ServiceManager)という DI コンテナを持っている • 設定ファイル( module.config.php

    など)で Factory, Invokable, AbstractFactory をずらっと宣言して 使う • DI パターンを理解してないと、正直とっつきにくい 4. DI / サービスコンテナ Laravel • app()->bind() / app()->singleton() などコードでバインド • ほとんどは 自動解決(オートワイヤリング) で事足りる • コントローラやサービスで type-hint すると勝手に解決してくれる ➡ DI 設計力を鍛えるなら Zend も良いけど ➡ 「開発スピード」と「わかりやすさ」は Laravel がダントツ
  10. Zend • config 配列が基本 • application.ini, module.config.php, config/autoload 下の PHP

    配列など • 大規模になればなるほど設定ファイルの 量と複雑さが増えがち 5. 設定・コンフィグの違い Laravel • config/ 配下に用途別の PHP ファイル (app.php, database.php, mail.php, …) • .env で環境ごとの差分を持てる • config('app.name') みたいにアクセスしやすい ➡ Zend は「設定のための設定」感が出やすい ➡ Laravel は割と素直& .env 文化が浸透してて扱いやすい
  11. Zend • 伝統的な PHP View (.phtml) が多い → コードとテンプレ混在しやすい •

    ZF2 以降は ViewHelper などあるが、記法は重ため • Smarty や Twig を組み合わせる案件も多い (その分セットアップは自力) 6. テンプレートエンジン・ビュー Laravel • Blade テンプレート一択で OK なくらい強い • セクション、レイアウト、コンポーネント、スロットなど 大規模でも構造化しやすい ➡ ビュー周りは Laravel圧勝 と言っていいレベル
  12. Zend • 昔はドキュメント・書籍・企業サポートが強かった • ただし今は: ◦ 開発終了 → Laminas プロジェクトへ移行

    ◦ 新規案件よりは、レガシー保守・段階的移行の 文脈が多い 7. エコシステム・周辺ツール Laravel • エコシステムが化け物クラスに強い ◦ Breeze / Jetstream:認証テンプレセット ◦ Sanctum / Passport:API 認証 ◦ Horizon:キューモニタ ◦ Telescope:デバッグダッシュボード ◦ Scout, Cashier, Livewire, Inertia, etc… • Laracasts, ドキュメント、日本語記事、 Qiita 記事も 山ほどある ➡ 「学習コスト vs 帰ってくる生産性」で見ると   Laravel がかなりお得
  13. Zend • OOP / デザインパターン / DI / 設計思想を ちゃんと分かってないとしんどい

    • レガシー感+ドキュメントの古さもあって、 今から始めるのは結構ハード • その分、ちゃんと理解すると設計力はめちゃ鍛えられる 8. 学習コスト・開発体験 Laravel • チュートリアルに沿って書いていけば、とりあえず動く • 「こう書けばいい」がドキュメント・サンプル・ Qiita に揃ってる • 開発速度が速く、 ”作ってて楽しい ” ➡ 「学習コスト vs 帰ってくる生産性」で見ると   Laravel がかなりお得
  14. もし案件で「 Zend触ることになった」場合 • 正直、モダンさ・生産性は Laravel に劣る • ただし: ◦ OOP

    な設計 ◦ DI コンテナ ◦ コンポーネント指向 ◦ 設定駆動型のアーキテクチャ ここら辺を実戦で叩き込まれるので、 基礎体力はめちゃ上がる 9. どっちをどう捉えればいいか Laravel 経験がすでにある立場から見ると … • Laravel = ◦ 「Rails 的な、“いい感じ” が最初から用意された世界」 • Zend = ◦ 「フレームワークという名の 巨大ライブラリセット 。  組み上げるのはお前だ 」
  15. Zend のレガシーコードは 以下の特徴がある: • 設定ファイルが多い( XML / INI / config

    PHP) • MVC が “完全に” 分離されてる( = 見えにくい) • DI と Factory が設定ファイル側に書かれている • コントローラの処理が薄く、ロジックが Model/Service に散る • Zend_Db_Table 系のクラスが大量 • クラス名が長くて辿りにくい • モジュール単位で区切られてる( application/modules/...) だから 「どっから呼ばれてんねん」問題 が頻発する Zend レガシー保守 = まず 地形把握 が最優先
  16. Zend は Laravel と違って、ルーティングが設定ファイルにある、ここ見ないと永遠に迷子 例:application/configs/application.ini や   module.config.php, routes.ini など 🔥

    調査フロー(必ずこの順に追う) • URL → ルーティング定義 ◦ どの Controller/Action が動くか確認 • Controller の Action を開く ◦ indexAction, editAction など ◦ Zend は Controller 名 + Action 名で決まる • Action 内の“連鎖”を追う ◦ $this->_helper->… ◦ $service = $this->serviceLocator->get('FooService') ◦ $model = new Application_Model_User() など • Model(Table)を追う ◦ Zend_Db_Table_Abstract を継承してるクラス コツ①:FrontController → Routing → Controller → Action の流れを“必ず”追う
  17. Zend のレガシーで一番見るのはコレ これがあると、 Controller や Service から呼ばれやすい 例: Zend は

    ActiveRecord ではなく TableGateway なので、Laravel 的に「User::where()」ではなく、 “このテーブルから SELECT/INSERT を呼ぶ専用クラス ” と割り切って読む コツ②:Zend_Db_Table は「DBアクセスの窓口」と理解する
  18. Zend は設定ファイルが多くて、そこに DI や Factory がある 例:module.config.php これが何を意味するか? → 「UserService

    は UserServiceFactory から生成される」 Factory を開くと、中で依存性を組み立ててる コツ④:Config(設定ファイル)を “コード” と同じレベルで読む
  19. Zend は Controller Plugin、Action Helper という 裏側の仕組みが動いていることが多い 例:ログインチェック、権限、共通処理など library/My/Controller/Plugin/ みたいなフォルダをよく見る

    ▼ Action 内で見たことあるやつ これは “Helper が処理している ” → Helper のフォルダを漁る コツ⑥:“見えない処理 ”は Helper と Plugin にいる
  20. Zend1 の場合: Zend2/3 の場合は Module.php が同じ役割 • DB接続 • 設定読み込み

    • Plugin登録 • ViewHelper登録 いろいろ書いてあるので必ず読む コツ⑦:Bootstrap に共通処理が詰め込まれている可能性が高い
  21. Zend は命名規則が超厳格 例: = Application   → Module   → User   →

    Service   → Auth 階層が名前に全部出てるので ディレクトリ構造のように読めば迷わなくなる コツ⑧:クラス名が長すぎるので「階層」を理解する
  22. Laravel ならコントローラ → モデルで追えば見えるけど、 Zend は • config • Factory

    • Service • Model • Plugin • Helper のどれが噛んでるかわからん なのでトレースは call stack のいちばん上(設定読み込み) から読むのがコツ コツ⑨:エラー trace は “設定ファイル起点 ” で読むべき
  23. Zend レガシー保守の鉄則はこれ: まず 設定ファイル → Factory → Service → Model

    の順で読む コントローラから探すと迷子になる Zend は 「どこでインスタンス作ってるか」 「Factory が何注入してるか」 を見ない限り全貌が見えん けど、裏返すと 設定ファイルと Factory 探すだけで “全処理の流れが見えるようになる ” から、慣れるとむしろ Laravel より読みやすい部分もある コツまとめ