🗣️

Rails学習者がLaravelを使って感じた違い①

2024/11/18に公開

はじめに

プログラミングスクールでRubyonRailsを中心に学習・ポートフォリオ作成・転職活動をしています。
就活をする中では、PHP/Laravelを使用している企業がいくつかあったため、PHP/Laravelのキャッチアップをすることになりました。
元々Railsを学んでいた筆者が、Laravelを使ってみた時に感じた違いを、メモとして残したいと思います。
(キャッチアップを始めたばかりのため、記事内容は適宜追加する可能性があります。)

なぜ2つのフレームワークの違いをメモするのか

学習する中で、新しい言語をキャッチアップする上では、元々使える言語をベースにして考えたほうが早くキャッチアップできると感じたからです。
Laravelを学習する中で、「このコードはRailsでいう〇〇だな」と考えると覚えやすかったので、備忘録として残します。

RailsとLaravelの共通点

どちらもMVCの構成を持っており、
Railsは主にRubyで使われるフレームワーク、Laravelは主にPHPで使われるフレームワークです。
Model、View、Controller間で処理を指示したり処理結果を伝えたりする構成は同じなので、Railsを使用したことがあれば、Laravelに記載されているコードがどのような意味・役割を持つのかは比較的理解しやすかったです。

RailsとLaravelの違い

①ORMの名称の違い

どちらにも、データベース操作を容易にするオブジェクトリレーショナルマッパー(ORM)の仕組みが備わっています。
このORMに関して、
Railsでは「Active Record」
laravelでは「Eloquent」と呼ばれます。

②LaravelのControllerでは、変数を定義した後に、「どのviewファイルにどの変数を渡すのか」記載する必要がある

Railsでは、メソッドが呼び出された際、「メソッドの名前」と「メソッドが書かれているコントローラーの名前」から、どのviewファイルを呼び出せば良いか自動で判別してくれています。
また、「メソッド内で定義したインスタンス変数」は、そのまま呼び出したviewファイル内で使用することができます。
一方、Laravelではメソッドが呼び出された際に「どのviewファイルにどの変数を渡すのか」を指定する必要があります。
それぞれTaskコントローラー内への記述を想定した際の、具体的なコードの違いの例は下記の通りです。(メソッド部分のみ抽出しています)

Rails

#app/controllers/tasks_controller.rb

  def index
    #インスタンス変数@tasksは、views/tasks/index.html.erb内でそのまま使用可能
    @tasks = Task.all
  end

Laravel

#src/app/Http/Controllers/TaskController.php

    public function index()
    {
        $tasks = Task::all();
        return view(
            #viewファイルを指定
            'tasks.index',
            #viewファイルに渡す変数を指定
            compact('tasks')
        );
    }

③ルーティングの書き方の違い

Userコントローラーのアクションを呼び出すためのルーティングの書き方は、それぞれ下記の通りです。(ルーティング部分のみ抽出)
こちらでも、Railsでは「users」と指定するだけで自動でUserコントローラーを探してくれますが、Laravelではコントローラー名を指定しています。

Rails

#config/routes.rb

resources :users

Laravel

#src/routes/web.php

Route::resource('users', UserController::class);

おわりに

全体的に、「Railsの方が書き方がシンプル・指示しなくても色々やってくれる」という印象を受けています。
実務未経験なので、実務を進める上でのそれぞれのフレームワークのメリット・デメリットはまだわかりませんが、こうやって比較してみるとシンプルに言語の違いって面白いなと感じるので、これからも様々なフレームワークに触れてみたいと思います。

参考記事

Laravelドキュメント
Railsガイド

Discussion