#はじめに
udemy で laravel のコースを一つやってみただけなのですが、それまで勉強してきた ruby on rails を書くくときと比べて感じたことを書き残す。
テーブル内の要素(カラム・オプション等)の変更がしやすい
laravel は、データベースの内容を変更するのが、rails と比べてかなり楽です。migration ファイルにデフォルトで、up と down のメソッドが記述されているのもかなり助かります。
railsを使っているときにめんどくさいなあと思っていたのが、テーブルにカラムを追加したり削除したり、オプションを追加したりするとき、いちいち rollback したり新しく migration ファイルを作らなきゃいけなかったりしなきゃいけないことです。
さらには、オプションを追加する際、自分で up, down のメソッドを記述しないと、後で migration ファイルを削除したくなって、rollback を使って遡ることができなくなるんです( migrate:status を down にできなくなる)。このことを全く知らずにやってしまい、かなり痛い目にあったのを覚えています。
#validation の書き方が若干違う
記述場所
rails では model に validation の記述するのに対して、
laravel では、controller または FormRequest という rails にはなかったファイルに記述します。
validation 実行のタイミング
rails では Model の create や save,update の実行時に validation が実行されていましたが、
laravel は controller のメソッド内です。また、FormRequest に記述すれば、controller のメソッドに入ったタイミングで validation が終わっているという状態にできます。
#謎のDI ( Dependency Injection ) という考え方
これが今のところ一番理解できていない部分。railsではなかった考え方だ。(自前で実装することはできるらしい)。詳しくは、この記事の最後にある参考文献のページを読んで欲しい。なんとなくは理解できるのだが、実際に使えと言われると難しい。
なのでここでは詳しい説明はできない。
簡単にいうと、クラス内でインスタンスの生成をすることはやめましょう、ってことです。
#記述量が多い
railsと比べるとlaravelはコマンドラインにしろコーディングにしろ、長くて書きにくいです。
###rails
items = Item.all
item = Item.find(1)
name = item.name
#コマンドライン
rails s
rails db:migrate
###laravel
$items = Item::all();
$item = Item::find(1);
$name = $item->name;
//コマンドライン
php artisan serve
php artisan db:migrate
ご覧の通りです。
#ユーザー認証系の機能がデフォルトで備わっている
railsには、ユーザー認証系の機能を追加するためには、devise という gem をインストールする必要がありましたが、laravel の場合はデフォルトで備わっています。そんなに大きな違いではないのですが、参考までに。
#おわりに
まだまだlaravel始めたてで、理解が浅い部分がありますが、まとめてみました。もし記述に間違いがご指摘いただけると幸いです。
参考資料
LaravelとRailsの機能を比較!ルーティング・ORM・DIなどをまとめてみました
https://techblog.raccoon.ne.jp/archives/1550033605.html
Laravelの依存性の注入(DI)を具体的にどう使うのか
https://qiita.com/ishiitakeru/items/e47dbb3e5b07078cc9b5
依存性の注入について
https://laraweb.net/surrounding/2001/