Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
【あじわう Zend Framework】~ Laravel との徹底比較 ~
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
ranoooooooooooo
December 03, 2025
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
【あじわう Zend Framework】~ Laravel との徹底比較 ~
ranoooooooooooo
December 03, 2025
More Decks by ranoooooooooooo
See All by ranoooooooooooo
【AIで爆速UI開発!】Vercel_v0 を使ってみた
ranoooooooooooo
0
50
【あじわう EC-CUBE 2系】~ Laravel との徹底比較 ~
ranoooooooooooo
0
21
Featured
See All Featured
For a Future-Friendly Web
brad_frost
184
10k
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
780
Building a Scalable Design System with Sketch
lauravandoore
464
34k
Applied NLP in the Age of Generative AI
inesmontani
PRO
4
2.5k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
35
2.9k
Six Lessons from altMBA
skipperchong
29
4.5k
Building AI with AI
inesmontani
PRO
1
1.3k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
410
The untapped power of vector embeddings
frankvandijk
2
1.9k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
520
Accessibility Awareness
sabderemane
1
250
Transcript
あじわう Zend Framework ~ Laravel との徹底比較 ~ 2025.12 株式会社アドシード 平野
雄己
• PHP製のフルスタック・エンタープライズ向けフレームワーク • Laravel が今の覇権になる前に、 企業システムでめっちゃ使われてた「 堅い・重い ・ちゃんとしてる」系 • MVCをガッチリ守った構造で、コンポーネントも大量
Zend Framework とは?
• クラス多すぎ ◦ 「Zend_Foo_Bar_Hoge」みたいなクラス名が永遠に出てくる • 拡張性は高い ◦ でも「自由度=複雑さ」も付いてくる • 学習コストは高め
◦ Laravel よりも明確に難しい ◦ “書けば動く ” じゃなく “構成を理解しないと動かない ” タイプ 特徴(ざっくり)
• 設計がめちゃ 堅い • 大規模開発で破綻しにくい • パーツごとに使える( DB、メール、ログなど) たとえば 「ログだけ
Zend」 「認証だけ Zend」 みたいにコンポーネント単体でも 使われてた 企業システムで人気だった理由
Zend Framework → Laminas Project に移行済み • Zend Framework は
2019年に開発終了 • そのまま Laminas Project として OSS 化 • 今後は Laminas が後継フレームワーク Laravel が流行りまくってる今、 新規で Zend/Laminas を選ぶ会社は少なめ ただし レガシー保守ではまだまだ現役 で、今は?
エンジニアの声 • 「難しいけど堅い」 • 「昔の企業案件でよく見た」 • 「クラス長すぎて読むの疲れる」 • 「Laravel のありがたみが倍増する」
どういう印象?
ざっくり言うと ―― • Zend Framework は “Laravel が出る前の 企業向け王者 PHPフレームワーク
” • 今は Laminas に名前が変わってる • 案件で出てきてもビビらんで OK、ただ書き味は重い 触るのはちょっとしんどいけど、 MVCやオブジェクト指向の学びにはめっちゃ良いヤツ 理解まとめ
Laravel との 徹底比較!
Zend Framework • 企業向けガチガチ設計・ コンポーネント 志向 • 歴史古い( Zend Framework
1 → 2 → 3 → Laminas へ) • 「フレームワーク」というより 巨大なライブラリ集 + MVC • 自由度高い けど、そのぶん 設計力要求高い Laravel • 「書きやすさ・わかりやすさ・気持ちよさ」全振り • Rails や Django をかなり意識したモダン PHPフレームワーク • クラシックな Web も API もサクッと書ける • エコシステム( Breeze, Jetstream, Horizon, Vapor, Sail, etc)が超充実 Zend と Laravel の違い
Zend(ZF) • コンポーネント指向 ◦ Zend\Db, Zend\Mail, Zend\Log, Zend\Authentication … みたいに「
部品の集合 」として設計されてる ◦ MVC もあるけど、あくまで「 コンポーネントの一つ 」 • 「何でも自分で組む前提」 ◦ ルーティング、 DI、プラグイン、フォーム、バリデーション … ◦ 仕組み自体はあるが「 初期設定から自分で組み立てる 」イメージ Laravel • フルスタック・フレームワーク指向 ◦ MVC + ルーティング + Eloquent + Queue + Event + Auth など全部セット ◦ 基本的な Web アプリなら デフォルト構成のまま 8割方いける • 「ベストプラクティスを最初から用意」 ◦ ディレクトリ構造、命名規則、サービス層の置き方など “Laravel 流” が用意されてて、それに乗っかる形 1. アーキテクチャ思想の違い
➡ Zend : レゴブロックを渡されて「 好きに家を作って 」 ➡ Laravel : すでに家が建ってて「
内装と機能を足していって 」 1. アーキテクチャ思想の違い
Zend • ZF1 時代は「Front Controller + config ベース」の ルーティングが多い •
ZF2/3 では module.config.php に配列ベースで ルートをズラっと書くスタイル • 宣言的で堅いけど、コードから直感的に追いにくいことも 2. ルーティングの違い Laravel • routes/web.php, routes/api.php に コードで書く • ルートにミドルウェア , 名前, パラメータ制約など 全部チェーンで書ける ➡ Laravel のほうが「見て一瞬でわかる」 ➡ Zend は設定ファイルを眺める時間が長くなりがち
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 は「自分で設計ちゃんとしたいガチ勢向け」
Zend • ZF2/3 はサービスマネージャ( ServiceManager)という DI コンテナを持っている • 設定ファイル( module.config.php
など)で Factory, Invokable, AbstractFactory をずらっと宣言して 使う • DI パターンを理解してないと、正直とっつきにくい 4. DI / サービスコンテナ Laravel • app()->bind() / app()->singleton() などコードでバインド • ほとんどは 自動解決(オートワイヤリング) で事足りる • コントローラやサービスで type-hint すると勝手に解決してくれる ➡ DI 設計力を鍛えるなら Zend も良いけど ➡ 「開発スピード」と「わかりやすさ」は Laravel がダントツ
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 文化が浸透してて扱いやすい
Zend • 伝統的な PHP View (.phtml) が多い → コードとテンプレ混在しやすい •
ZF2 以降は ViewHelper などあるが、記法は重ため • Smarty や Twig を組み合わせる案件も多い (その分セットアップは自力) 6. テンプレートエンジン・ビュー Laravel • Blade テンプレート一択で OK なくらい強い • セクション、レイアウト、コンポーネント、スロットなど 大規模でも構造化しやすい ➡ ビュー周りは Laravel圧勝 と言っていいレベル
Zend • 昔はドキュメント・書籍・企業サポートが強かった • ただし今は: ◦ 開発終了 → Laminas プロジェクトへ移行
◦ 新規案件よりは、レガシー保守・段階的移行の 文脈が多い 7. エコシステム・周辺ツール Laravel • エコシステムが化け物クラスに強い ◦ Breeze / Jetstream:認証テンプレセット ◦ Sanctum / Passport:API 認証 ◦ Horizon:キューモニタ ◦ Telescope:デバッグダッシュボード ◦ Scout, Cashier, Livewire, Inertia, etc… • Laracasts, ドキュメント、日本語記事、 Qiita 記事も 山ほどある ➡ 「学習コスト vs 帰ってくる生産性」で見ると Laravel がかなりお得
Zend • OOP / デザインパターン / DI / 設計思想を ちゃんと分かってないとしんどい
• レガシー感+ドキュメントの古さもあって、 今から始めるのは結構ハード • その分、ちゃんと理解すると設計力はめちゃ鍛えられる 8. 学習コスト・開発体験 Laravel • チュートリアルに沿って書いていけば、とりあえず動く • 「こう書けばいい」がドキュメント・サンプル・ Qiita に揃ってる • 開発速度が速く、 ”作ってて楽しい ” ➡ 「学習コスト vs 帰ってくる生産性」で見ると Laravel がかなりお得
もし案件で「 Zend触ることになった」場合 • 正直、モダンさ・生産性は Laravel に劣る • ただし: ◦ OOP
な設計 ◦ DI コンテナ ◦ コンポーネント指向 ◦ 設定駆動型のアーキテクチャ ここら辺を実戦で叩き込まれるので、 基礎体力はめちゃ上がる 9. どっちをどう捉えればいいか Laravel 経験がすでにある立場から見ると … • Laravel = ◦ 「Rails 的な、“いい感じ” が最初から用意された世界」 • Zend = ◦ 「フレームワークという名の 巨大ライブラリセット 。 組み上げるのはお前だ 」
➡ Zend は “企業向けの 堅牢なレゴブロックキット(設計力必要) ”、 ➡ Laravel は “開発者体験・生産性・エコシステム全振りのモダン
PHPフレームワーク ” 10. 結論ざっくり一文まとめ
Zend のレガシー保守に入ったときの 読み方のコツ
Zend のレガシーコードは 以下の特徴がある: • 設定ファイルが多い( XML / INI / config
PHP) • MVC が “完全に” 分離されてる( = 見えにくい) • DI と Factory が設定ファイル側に書かれている • コントローラの処理が薄く、ロジックが Model/Service に散る • Zend_Db_Table 系のクラスが大量 • クラス名が長くて辿りにくい • モジュール単位で区切られてる( application/modules/...) だから 「どっから呼ばれてんねん」問題 が頻発する Zend レガシー保守 = まず 地形把握 が最優先
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 の流れを“必ず”追う
Zend のレガシーで一番見るのはコレ これがあると、 Controller や Service から呼ばれやすい 例: Zend は
ActiveRecord ではなく TableGateway なので、Laravel 的に「User::where()」ではなく、 “このテーブルから SELECT/INSERT を呼ぶ専用クラス ” と割り切って読む コツ②:Zend_Db_Table は「DBアクセスの窓口」と理解する
Zend は設定ファイルが多くて、そこに DI や Factory がある 例:module.config.php これが何を意味するか? → 「UserService
は UserServiceFactory から生成される」 Factory を開くと、中で依存性を組み立ててる コツ④:Config(設定ファイル)を “コード” と同じレベルで読む
Zend のビューは Blade みたいに整ってない 例: Laravel ほど気持ちよくはない 「ビューは表示だけ。ロジックはサービスにある」と割り切る コツ⑤:ビューは .phtml(生PHP)なので
Laravel より深追いしない
Zend は Controller Plugin、Action Helper という 裏側の仕組みが動いていることが多い 例:ログインチェック、権限、共通処理など library/My/Controller/Plugin/ みたいなフォルダをよく見る
▼ Action 内で見たことあるやつ これは “Helper が処理している ” → Helper のフォルダを漁る コツ⑥:“見えない処理 ”は Helper と Plugin にいる
Zend1 の場合: Zend2/3 の場合は Module.php が同じ役割 • DB接続 • 設定読み込み
• Plugin登録 • ViewHelper登録 いろいろ書いてあるので必ず読む コツ⑦:Bootstrap に共通処理が詰め込まれている可能性が高い
Zend は命名規則が超厳格 例: = Application → Module → User →
Service → Auth 階層が名前に全部出てるので ディレクトリ構造のように読めば迷わなくなる コツ⑧:クラス名が長すぎるので「階層」を理解する
Laravel ならコントローラ → モデルで追えば見えるけど、 Zend は • config • Factory
• Service • Model • Plugin • Helper のどれが噛んでるかわからん なのでトレースは call stack のいちばん上(設定読み込み) から読むのがコツ コツ⑨:エラー trace は “設定ファイル起点 ” で読むべき
Zend は 「レゴブロックを自前で組み上げてる世界 」 と思うとすごく読みやすくなる コツ⑩:Zend は「Laravel 脳で読む」と地獄になるので注意
Zend レガシー保守の鉄則はこれ: まず 設定ファイル → Factory → Service → Model
の順で読む コントローラから探すと迷子になる Zend は 「どこでインスタンス作ってるか」 「Factory が何注入してるか」 を見ない限り全貌が見えん けど、裏返すと 設定ファイルと Factory 探すだけで “全処理の流れが見えるようになる ” から、慣れるとむしろ Laravel より読みやすい部分もある コツまとめ