イノベーション エンジニアブログ


株式会社イノベーションのエンジニアたちの技術系ブログです


このエントリーをはてなブックマークに追加

Laravelフレームワーク勉強会を開催しました

こんばんは、皆様Advent Calendarに追われる日々をいかがお過ごしでしょうか? 歳末大感謝モードでお送りします塚本です。

表題の通り、イベントレポートです。

実施概要

去る12月19日、弊社セミナールームにて社外講師を招いての技術勉強会を行いました。 題材は Laravelフレームワークについて

ビアバッシュ形式

Laravelとは

近年最もシェアを伸ばしているPHPフレームワークです。 以前のブログでも何度か触れていますが、弊社サービスの一つはLaravel5.2へ移行しました。

「なぜフレームワークを使うのか」に書きましたが、フレームワークの選定はある意味思想に則ることであり、それによってよりフレームワークの恩恵を受けやすいわけです。 ところがLaravelは当初自分たちが想定していたより自由度が高く、また作者のOtwell氏も公式ドキュメントには最低限の説明しか載せていないため、「どこからどこまでが原則的なものか」掴めないまま進んでいました。

実際にコーディングしているメンバーも、そのあたりに対する迷いからくる不安が払拭されないまま負債を増やしていくことに対して、なんとかしたい思いが芽生えていました。

そしてひょんなことから 草創期からLaravelに関わり深い造詣のある竹澤さん( @ex_takezawa ) 栗生さん( @kurikazu)の お二人をお招きして社内で勉強会を開くことになりました。

左から栗生さん 竹澤さん

(左から栗生さん 竹澤さん)

事前準備

チーム内に課題感があるのは承知していましたが、「では具体的にどこからどう着手」みたいな絵図はなく、ざっくりとしたオファーを出したところ、お二人とも快く受けてくださりました。

しかしそもそも若手が多い弊社開発組織ですので、Laravelがどうとか以前にフレームワーク自体を他にまともには触っていなかったり。 つまり、MVCパターンとはなんぞ? ActiveRecordパターン、DIパターンの目的って? など、最近のフレームワークの主流となっている基礎的なパターンを参加者全員が学んでおく必要がありました。 (あとリフレクションもやるべきだった。。)

当たり前のことですが、講師をお願いするプロセスとして

「学びたい!!」というニーズがあるから
↓↓↓↓
きてもらう!!

では何もかも足りないわけです。

  • 本当に「学びたい」と思っているか

  • 課題として捉えていることはチームの課題か個人の課題か

このあたりの炙り出し作業が大事でした。

勉強会に講師として来ていただく上で、最低限のこととして

ご厚意に甘えない
軽い気持ちでお願いしてはいけない

というのは強く言いたい。

勉強会テーマ

前置きが長くなりましたが、当日はざっくり以下のようなテーマ設定で臨みました。

  • Laravelを使う上で守るべき原則

  • Laravelを使う上でのアンチパターン

  • 状況によって使い分けするもの

  • 個別に聞きたいこと

ちなみにバージョンは > 5.1 を前提としています (リファレンス本に合わせて)

以下スライド補足

※あくまで補足なので、スライドをお読みになってから読むのを推奨

原則について

DIコンテナを使うというか、コンテナがLaravelそのものなので使うのは当たり前なんですが、 なるべくサービスコンテナ(DIコンテナ)に コンストラクタのタイプヒント解析と依存性の注入の再帰的実行を任せる という意味。

あとは、カーネルのソースコード読もう!

MVCについて語る前に、モデリングについて再確認しましょう(結局設計)

アンチパターンについて

  • Facadeは推奨しないが、アンチパターンというほどではなく使って良いケースも有る (Viewの中で呼ぶためだけなら良いんじゃないか)

ただし

ファサードをマネてstaicのクラスを作るのはやめましょう

また、Facadeの代わりに全てのContractをDIにすればよいわけではなく、罠もある

  • 使わないMiddlewareをはずしましょう デフォルトではすべてのMiddlewareを通ってしまう APIにセッションいらないよね?

Facade警察

竹澤さんの別称

Eloquent

本家ActiveRecordと同じように、元々Entityとレコードを対応させる機能が大量レコードのJOINのカバーまで発展したことで、MySQLのオプティマイザを飛び越えるようなクエリが走るようになった =つまり重い。 (会では言及されなかったけど)N+1問題もある

まぁ手軽に1レコードとってくるだけなら便利は便利(クラスによる使い分けもあり)

というわけで、そこそこの規模になると使わなくなるよねって話

テスト可能性

結局テストできないとツライ

スライド補足ここまで

とこんな感じで盛り沢山になりましたが、一様に疑問点に対しての納得感は高く、しっかり着地できて一安心でした。

参加者の感想

率直に

  • もっと本質的な知識(MVCやオブジェクト指向、デザインパターン等)を抑えないと、フレームワークの適切な使い方を判断するのが、難しいと思った。

  • 次に着手する事が明確になった点がとても良かった。

  • 後半難しかった(多し)

  • 設計思想についての話に寄っていたと思いますが個人的には楽しかった。

  • 事前に説明されていたDIなどがより深く理解できた。

聞けてよかった具体箇所

  • 各パターンの話

  • 守破離の話

  • 便利なものが正義なわけではない (Facadeつかうとき、値がほしいだけでオブジェクトが必要なわけではないでしょう?)

  • テストをするという観点で見た時に様々なアンチパターンが出てくるのだなと思えた

  • 知識として何が足りていないか見えてきた

難しかった箇所

  • サービスロケータとDIコンテナの違い

  • ドメイン駆動設計の話

  • デザパタ抑えてないと途端に話がわからなくなる

次回以降に向けて

  • これだけレベルの高い話なので、文字起こししたりすれば、ナレッジ的価値を埋めるんではないか

まとめ

粗いテーマ設定にもかかわらず、次から次へと溢れ出る思い言葉によって、参加者を巻き込んでいただいたお二人には大変感謝です。 計らずも、竹澤さん登場まで栗生さんにピコ太郎でつないでいただき、いい感じに暖まりました。(注:PPAPをやってもらったわけではない)

piko

栗生さん所属のディップ株式会社様が始めたばかりのコラボ企画だそうです。

個人的所感

元の問題を噛み砕いていくと、Laravelどうこうより、「オブジェクト指向プログラミングの理解」、「ソースコードの循環的複雑度」、「疎結合にする」、「多重責務にしない」 といった本当に基礎の部分で躓いていることに気づくわけです。

あるあるですが、Webアプリケーション開発のキャリアだけだとそこが抜けていても割りと問われず(周囲の誰もマズさに気づかず)成立してしまうケースが多いのが事実としてあります。 若手にとっては早い段階でこういった気付きに出会えてよかったと思います。 本当にお二人には重ねて感謝申し上げます。

そして、Laravelの本当のよさは便利さでなく、手軽なアプリ開発から【複雑かつ独立性を保った設計】まで両方実現できる柔軟さにあるように見えてきました。

リファレンス本について

勉強会にあたり、リファレンス本にひととおり目を通しましたので、こちらについても一言。

Laravel リファレンス[Ver.5.1 LTS 対応] Web職人好みの新世代PHPフレームワーク
新原 雅司 竹澤 有貴 川瀬 裕久 大村 創太郎 松尾 大
インプレス (2015-12-04)
売り上げランキング: 197,058

laravel.com からは読み取れない意図や目的をより現場の視点から説明されていると感じました。 一冊通しで全容を学ぶというよりは、各コンポーネントを理解したいときにそのチャプターを読むことで背景やユースケースがすっと入ってくるので、「今まさにLaravelを導入し始めている」「社内にそれほど精通している人がいない」といったケースで特に役立ちそうです。

今後について

感想にもありますが、まずスタートラインに立った状況ですので、ここから自分たちのサービスとフレームワークを最適化していく道のりになるかと思います。

ドメイン駆動設計についても、何度かこのブログで触れてきてはいますが、本気で取り組むのであればそれなりの(周りを巻き込む)覚悟がいります。 エリック・エヴァンス本は挫折した身ですので若干慎重姿勢になりすぎな面もありますが、実践可能なちょうどいいPJがあるかどうかもキーファクターかなと思っております。 ここは、メンバーとよく話し合って決めていければいいですね。

次回のテーマはAOP(予定)です。飛び級すぎだろというマサカリは既に刺さっております。

真面目に

今回は、社内でのクローズドな会でしたが、せっかくのスペシャルなお話なので、社内のエンジニアだけでは勿体ないと思っております。もし、Laravelについて一緒に勉強会やりたいという方々がおられましたらお声がけください。(Laravelに限らず、DDDやOOP、AOPやFacade警察についても) ご連絡は @hihats まで

それにしても楽しかったです。

こちらからは以上です。