LIGHT@NOON【Laravelアンチパターン編】振り返り
こんにちは、Fusic チーム LIGHT の近藤です!
今回は、4/20(火) に開催されたチーム LIGHT 主催イベント LIGHT@NOON Laravelアンチパターン編 の振り返り記事となっております。
当日ご参加くださった皆さま、ありがとうございました〜!
放送はアーカイブとして残してありますので、未視聴の方はぜひご覧ください!
https://youtu.be/qww8M6cktFc
目次
- 各章の補足とコメント返し
- 感想
- 次回予告
1. 各章の補足とコメント返し
ORM
櫻川さんが紹介していた N+1 を検知するプラグイン
https://github.com/beyondcode/laravel-query-detector
with メソッドを無効にする without メソッド(恐らくこれだと思われます)
https://github.com/laravel/framework/blob/314bf875ba5d37c056ccea5148181fcb0517f596/src/Illuminate/Database/Eloquent/Model.php#L290
コメント
突き詰めていくと、フレームワークなんでも良くなる
これには完全同意です。
ただ、「好き勝手しやすさ」はやっぱりフレームワークによって違いますよね。
もともと規約で縛る思想の CakePHP より、 Laravel のほうが柔軟に、いろいろな設計思想に対応させやすい。
これは Laravel がここまで広まった理由の1つかもしれません。
Laravelで無駄に便利だなと思ったのはSoftDelete対応。
FuelPHP => Laravel の順で触った人間としては、これを知ったときはなかなか衝撃的でした。
私個人は論理削除反対派なので、SoftDelete のお世話にはならないのですが……。
こういった 一定数需要があるものは手軽に実装できる のが Laravel というフレームワークの強みですよね。
ただし、プロジェクトの規模やメンバーの習熟度によっては、その手軽さは諸刃の刃になり得ます。
LIVE 中話題になった N+1 問題も、「手軽さ」によって生まれる悲劇の1つではないでしょうか。
Facade
Facade を使わない開発についてコメント欄で紹介されていたスライド
https://www.slideshare.net/KenjiroKubota/laravelfacade
コメント
いまだにFacadeにするのか、ただのStaticなクラスを作るのかの違いがしっくりしてない
これについては、そもそも static メソッドの呼び出しが必要なシーンがどれだけあるか、という点が疑問です。
「コード中で明示的にインスタンス化せずとも呼べて便利だよね」以上の意味があるならば、
static クラスである必然性があり、迷うことはないと思います。例えば、クラス変数を利用したい場合など。
必然性による判断ができない場合は、テスト容易性の観点から考えると良いかもしれません。
LIVE 中でも語りましたが、 Facade は shouldReceive メソッドを持っているため、モック化が非常に簡単です。
Mockery の提供する基本的な機能のほとんどを利用できます。
一方、 static メソッドの場合は違います。
static メソッドのモックについて、Mockery はエイリアスの機能を提供しています。
しかし、
Even though aliasing classes is supported, we do not recommend it.
とあるように、 Mockery は お勧めしていません。
そもそも static クラスをモックしたいと思った時点で、クラス設計に誤りのある可能性が高いです。
その場合には、 Facade で代替可能である、と考えたほうが良いでしょう。
Laravel についてもう少し踏み込んだ理解のある方は「本当に Facade である必要があるか」も一考すべきでしょう。
Laravel の特徴の 1 つに、 DI(依存性注入) が容易であることがあります。
DI を利用することで、モック化したインスタンスを利用したテストが可能です。
Task Scheduling
Task Scheduleing の GUI ツールとして紹介のあった Laravel-totem
https://github.com/codestudiohq/laravel-totem
コメント
N分毎に実行したい、はアプリケーションなので、関心の分離的にもコードに落としたいですね
確かに定期実行処理は、いわゆるビジネスロジックな場合が多いですね。
Task Scheduling は単一障害点になる、という意見もありますが、
アプリケーションコード全体の設計を見たときには、利用するほうが良いように思います。
2. 感想
初めてのオンラインイベント、非常に緊張していましたが終始楽しくお話することができました。
あれから 3 週間も経っていることが信じられません(記事を書くのが遅くてすみません)。
司会と配信準備のすべてを担った吉野先生、
LIGHT@NOON のアイキャッチやロゴを考えてくれた礒谷さん、
当日社内 Slack でがやがや励ましてくれた坂井さん・岸田さん、
出演頂いた櫻川大先生、
そしてご視聴くださった皆様、ここまで読んでくださった皆様、ありがとうございました!
この振り返り記事が、誰かの学びのヒントになれば幸いです。
3. 次回予告
さて、次回の LIGHT@NOON は 2021/05/25 12:00〜
「初めての社内デザイナー編」!
我がチーム LIGHT の誇る、Fusic 唯一の Web デザイナー・礒谷悠莉さんが登壇します!
エンジニア組織に 1 人飛び込んできた磯谷さんが、
入社から 4 ヵ月経った今、これまでの振り返りやこれからについて語ります。
connpass ページはこちらから!
皆様のご参加をお待ちしております〜
https://fusic.connpass.com/event/211143/