Catatsu Tech Blog


CatatsuはHASIGOです

PHP界隈で一番ナウい(けど遅い)という噂のLaravelをサクッと触ってなんとなく理解する


どうも僕(@nabeen)です。

RubyにはRailsというRubyのフレームワークといえばコレ!みたいなものがあるんですが、残念ながらPHP界隈にはRailsに該当するようなフレームワークはありません。

そんな中、個人的に一番ナウいと思っているPHPフレームワークLaravelに触れるべく、サンプルアプリを通してその使いやすさを実感してみようと思います!

開発環境構築

ナウいフレームワークだけあって、Laravelはcomposerで入れる、また、vagrantも標準で準備されています。最高!最高!ふぅうううーーーーーー!!

$ composer require laravel/homestead
$ php vendor/bin/homestead make

ここまでやればvagrant upまでたどり着きます。マジかよ楽かよ。

$ vagrant up
$ vagrant ssh

あとはアプリをサクッと作るぜ!

$ composer create-project laravel/laravel --prefer-dist laravel-apps

とここまで来て気づいたんですが、プロジェクト配下でアプリを作ってしまったので階層がちょっと気持ち悪い感じになってしまいました。

のでちょっと変えて、こんな感じに。vagrant関連はvagrant配下に押しやっています。ちょっとスッキリ。

$ tree -L 1 ./
./
├── app
├── artisan
├── bootstrap
├── composer.json
├── composer.lock
├── config
├── database
├── gulpfile.js
├── package.json
├── phpunit.xml
├── public
├── readme.md
├── resources
├── routes
├── server.php
├── storage
├── tests
├── vagrant
└── vendor

あとはブラウザからhttp://192.168.10.10/を叩けば、デフォルトページが出ていますね!ね?え?出るよね?

チュートリアル

公式にはチュートリアル的なものがなかったので、こちらのチュートリアル的なのを参考に、Laravelっていきます。

やることはリンク先にある通りなので爆、ポイントをかいつまんで説明します。

マイグレーションファイルを作るコマンドは以下。中身は完全Skeletonなので、自分でガリガリ書いていきましょう。書くべし書くべし!

$ php artisan make:migration create_topics_table

マイグレーションの適用もちゃんとコマンドで。

$ php artisan migrate

戻したければロールバックもできる。ロールバックは、「前回適用したもの」がロールバックされるようだ(※一気に幾つかマイグレーションしたら一気にいくつかロールバックされる)。

$ php artisan migrate:rollback

モデルもジェネレータで生成できる。

$ php artisan make:model Topic

ときたら当然コントローラーもジェネレータで生成できます。

$ php artisan make:controller TopicsController

でもこれ、ホント単一ファイル(テストもないしViewもない)しか生成してくれないので、そんなに使い勝手は良くないかも。。コレくらいだったらcpでコピーしちゃった方がいいかもしんない。

まぁそれは置いといて、rails c的なあれもあります。

$ php artisan tinker

ルーティングは前のバージョンとは変わっていて、routes/web.phpで定義されてるっぽい。設定されているルーティングを見るにはこのコマンド。resourceでRESTfulなURIも生成できる!Railsライクですね。

$ php artisan route:list
+--------+----------+--------------------+------+----------------------------------------------+--------------+
| Domain | Method   | URI                | Name | Action                                       | Middleware   |
+--------+----------+--------------------+------+----------------------------------------------+--------------+
|        | GET|HEAD | /                  |      | App\Http\Controllers\TopicsController@index  | web          |
|        | GET|HEAD | api/user           |      | Closure                                      | api,auth:api |
|        | GET|HEAD | topics/add         |      | App\Http\Controllers\TopicsController@add    | web          |
|        | POST     | topics/create      |      | App\Http\Controllers\TopicsController@create | web          |
|        | POST     | topics/delete      |      | App\Http\Controllers\TopicsController@delete | web          |
|        | GET|HEAD | topics/edit/{id}   |      | App\Http\Controllers\TopicsController@edit   | web          |
|        | POST     | topics/update/{id} |      | App\Http\Controllers\TopicsController@update | web          |
|        | GET|HEAD | topics/{id}        |      | App\Http\Controllers\TopicsController@show   | web          |
+--------+----------+--------------------+------+----------------------------------------------+--------------+

とまぁこんな感じで←え、なんとなくざっくり理解できました。

ここまでのソースはGithubにあげているので、ご自由にどうぞ。

ちょっと気に食わないところ

箇条書きでいきます。

  • ControllerがHttp配下にあるのが慣れない
  • ModelがApp直下にあるのはどうなの?
  • ルーティングファイルの名前がweb.phpだと?

まだ殆どLaravelのメリットは感じられていませんが、とりあえず慣れ親しんだ感じのフォルダ構成から結構逸脱してるなぁという印象。まぁこういうのは慣れだし、そこまで障害にはならないんですが(自分好みの定義にも変えられるんだろうけど、なるべくデフォルトから逸脱したくはない)。

おわりに

なんか全然Laravelの機能が把握できなかった気がするけど、触りとしてはこんなもんでいいですかね?

次回はソーシャルログイン辺りを実装していきます。