PHP
ZendFramework
laravel

PHPのフレームワーク、レガシーなZendとモダンなLaravelを入社してから使ってみた感想

新卒アドベントカレンダー18日目です!Webエンジニアの高木です。
日頃は、PHP,JS,HTML,CSSを書いています。

今回は研修中や業務で使ったPHPのフレームワーク、
レガシーなZend frameworkとモダンなLaravelを使ってみた感想を紹介したいと思います。
(爆速で書いたため、間違いがあったらコメント欄にでも書いていただけるとありがたいです。)

ちなみに両方ともWebサービスを作る時に使いました。

Zend Framework について

2006年3月にイスラエルのZend Technologiesによって公開されたフレームワークです。
今はPHP7.0まできましたが、当時5.0が出たばかりの時に、まだまだ使えないフレームワークが多かった中、PHP5でも使えるようにと開発されたものでもあります。

Laravel について

2011年6月に出た、MVCのWebアプリケーション開発用の無料・オープンソースです。最近ではPHPのフレームワークとしてとても有名で、人気のフレームワークの一つとなっています。

書きやすいと思ったフレームワークは・・・

まあそうだろうなと思うかもしれませんが、もちろん、Laravelです。

スクリーンショット 2017-12-18 20.27.39.png

青がLaravelなので、Googleトレンドで見ても歴然の差です。

Laravelのいいなと感じたところ

ドキュメントや日本語ドキュメントが充実している

日本語ドキュメントも非常に充実しているのと、使っている人が多いので、日本語での解説やブログなども多いです。
http://laravel.jp/

学習コストが低い

個人的な感想なのですが、会社の新卒研修で今回Laravelを使ったのですが、PHPが初めての子でもあんまり悩まず使いこなしていたので、学習コストも低いのではないかと思いました。

デフォルトでログインや会員登録機能が備わっている

Laravelでは、ユーザ登録、ログイン機能が標準機能として、コントローラーが用意されています。個人でサクッとWebサービスを作りたいときにとても便利だなと思います。

ライブラリも豊富

画像アップロードといった手軽に使えるライブラリが豊富です。Composerを使ってサクッと入れることができます。

Vue.jsといったモダンなフレームワークとの相性がいい

研修中にも使ったのですが、Vue.jsという今話題のJSのフレームワークと相性が良く、またVue.jsのドキュメントもしっかりとしているため使いやすい印象を受けました。

Eloquent ORMというORMがフレームワークにデフォルトで入っている

標準でORMが入っているため、簡単にデータベースやテーブルを作成することができ、また、LaravelのModelと結びついているので、データ連携がしやすいです。

seederがあるので簡単にデータを入れることができる

テスト用にデータを入れたりするのって意外と大変ですが、Laravelは標準でseederが入っているので簡単にデータを入れることができます。またユーザーであったり、文字といった設定もしやすいのが特徴です。

<?php

use Illuminate\Database\Seeder;
use Illuminate\Database\Eloquent\Model;

class DatabaseSeeder extends Seeder
{
    /**
     * データベース初期値設定の実行
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => str_random(10),
            'email' => str_random(10).'@gmail.com',
            'password' => bcrypt('secret'),
        ]);
    }
}

Zend Frameworkのよくないと感じたところ

ドキュメントが非常に少ない

あまり人気が出なかったフレームワークでもあるので、ドキュメントが少ないのが印象です。日本語となるとさらに減ってくるので、エラーや予想しない動作になったときに解決するのが大変です。

非常に重い

フレームワーク自体が非常に重く、通常27MBで、最小構成でも5MBあるらしいです。大規模Webアプリケーションには向いてないのかなとも思います。

標準のORMがない

Laravelと違い、標準のORMがないため、もし使いたい場合は外部のORMを自分で導入しなければいけません。それか頑張ってSQLを書くかということになるのかなという感じです。Zendと一緒に使われているORMとして多いのは、Doctrine2だと思います。

SQLとの相性が悪そう

上記のDoctrineを使っているのですが、デフォルトのメソッドでデータを呼び出したりするとオブジェクトごととってきて、稀にメモリリークを起こします。個人的にSQLと相性が悪いなと感じ、それってWebサービスを作る上で致命的だなと感じました。

まとめ

てなわけで、PHPを書くならLaravelを書きたい、せめてSymfonyといったところでしょうか・・・。
これからもPHPと向き合っていきたいと思います!

参考記事

http://laravel.jp/
http://www.itmedia.co.jp/enterprise/articles/0702/28/news028.html
https://rdlabo.jp/codeigniter-228.php