LaravelエンジニアからRailsエンジニアになって感じたこと

こんにちは!Webエンジニアの奥村一貴(YOUTRUST / X)です。

今回は未経験エンジニアとして入社した前職でLaravelを使っていた自分が、Railsで開発しているYOUTRUSTに入社して感じたこと、言語・FWの大きな違いなどを紹介しようと思います。

未経験の言語を扱う会社に転職を考えている方の参考になれば幸いです。


1. 型

大きな違いとしてRubyは動的型付け言語なのに対し、PHPでは型指定ができ、PHP7系以降大幅に強化されたことがあります。

www.php.net

例えば以下のようにメソッドの引数や戻り値に型を指定でき、意図しない値が渡されたらエラーになります。

function add(int $a, ?int $b): int {
    return $a + $b;
}

このようにPHPでは型の指定があることで安全性が担保されており大規模プロジェクトなどに有効です。

YOUTRUSTの開発で使用しているRubyでは、最近はRBSやSteepによる型付けが盛り上がっていますが、基本的に型の指定はできないため実行時に型を判断します。

PHPからキャリアチェンジした自分からすると最初は不安でしたが徐々にメリットを感じてきました。

なんといっても柔軟性が高く、開発体験が良いです。 引数の型を分かりやすい命名にする必要はありますが、「変更に対する適応力」や「開発のスピード向上」といった点で非常に魅力的だと感じています。


2. 真偽値判定

真偽値判定の違いも大きなギャップでした。

PHPで「false」判定される値は以下などがあります。

判定
false false
nil / null false
0 false
"0" false
"" false
[] false

"0"が「false」と判定されるのは当時びっくりしました。

一方Rubyはシンプルでfalsenilだけが「false」となります。


3. バリデーション

LaravelとRailsではバリデーションの思想・設計が違います。

FW 処理の流れ
Laravel Request -> Validate -> Controller
Rails Request -> Controller -> Validate


Lavavel

表のようにLaravelではRequestControllerに渡される前にバリデーションを行うことが一般的です。

FormRequestというクラスを使用し、バリデーションロジック、認証・認可を切り出しています。 laravel.com

このようにすることでController以降の層ではパラメータの値が正常であることが前提となり、実装が容易になります。

メリットとしてはスッキリとしたアーキテクチャや可読性などがあります。


Rails

Railsでは主にController以降の層であるModel層でバリデーションを行います。

YOUTRUSTでは主に以下のような責務でバリデーションを行っています。

判定
Controller 認証、不正なパラメータのバリデーション
UseCase(ビジネスロジック) 認可
Query(取得ロジック), Command(更新系ロジック) モデルのバリデーション

Controller以降の層でその都度必要なバリデーションを行うため、実装はとてもしやすいです。

人によって好みなどがあると思いますがどちらにもメリットを感じています!


4. その他・感想

転職する前は約1年半経験を積んできたLaravelからRailsに変わることにやはり不安がありました。

しかしいざ転職してみると最初は戸惑うことが多かったですが、「何もかも違う!」ということはなく、すぐに慣れてしまう違いがほとんどでした。

どちらも経験できたことは逆に自分の財産になっていると感じています。これからも強いエンジニアを目指して精進していきます。


おわりに

最後まで読んでいただきありがとうございました。

YOUTRUSTでは、エンジニアを募集しています!

YOUTRUSTに興味を持っていただけましたら下記のリンクよりご応募お待ちしております!

herp.careers