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 |
+--------+----------+--------------------+------+----------------------------------------------+--------------+
なんとなくざっくり理解できました。
ちょっと気に食わないところ
箇条書きでいきます。
- ControllerがHttp配下にあるのが慣れない
- ModelがApp直下にあるのはどうなの?
- ルーティングファイルの名前が
web.php
だと?
まだ殆どLaravelのメリットは感じられていませんが、とりあえず慣れ親しんだ感じのフォルダ構成から結構逸脱してるなぁという印象。まぁこういうのは慣れだし、そこまで障害にはならないんですが(自分好みの定義にも変えられるんだろうけど、なるべくデフォルトから逸脱したくはない)。
おわりに
なんか全然Laravelの機能が把握できなかった気がするけど、触りとしてはこんなもんでいいですかね?
次回はソーシャルログイン辺りを実装していきます。