3月1日、「Laravelのサービスコンテナをコードリーディングする会」を主催しました!
サービスコンテナって何?
一応ざっくり解説しておきますと、
- Laravelはプログラミング言語PHPによるサーバーサイドWeb開発フレームワークで、弊社のオンライン家庭教師サービスのマナリンクでのサーバーサイド実装にも使われている
- 具体的には、決済処理だったり、アカウント登録処理、先生の指導コース保存処理などが動いている
- フレームワークを使うことで、一般的なWeb開発でよくある機能は予め実装されている状態からスタートできるので、マナリンク独自の機能開発に注力できる
- サービスコンテナとは、Laravelの優秀な機能の1つ
- プログラムを”クラス”という部品に分けて開発している時に、開発者が必要としたクラスを臨機応変に引っ張り出してくれる機能
- 一般に、開発時はクラスを大量に作成して、処理ごとに分割して開発者がコードを読みやすく、改修しやすくする。そのときクラス同士がお互いを利用し合うと、関係性が見えづらくなり、むしろ可読性の面で逆効果になる。必要なクラスを引っ張ってくる役目をサービスコンテナに背負わせることにより、クラス同士の関係性を密にしない効果を生む
- そのため日頃からサービスコンテナは常用しているし、その詳しい仕組みを理解しなくても使える。とはいえやはり開発者としては仕組みまで理解しておきたいよね、というところが開催の動機
という感じです。
開催の動機について補足すると、フレームワークのコードはかなり量が多く、まともにカウントしたことはないですが数十万行はゆうに越えます。これを1人で読み続けて目的のコードにたどり着くのは至難の業です。複数人でやることで、モチベーションも維持されるし、しっかり納得するまで読み続けようと思うのだろうという目論見が有りました。
開催の経緯
きっかけはこちらのツイートです
30以上のLikeをいただき、これは僕だけじゃなくて絶対色々なLaravelユーザーにニーズがありそうだ、と思いました。
そこで、誰かいませんか、と追ってツイートしたところ、5人ほどのフォロワーさんから立候補をいただき、さっそくDMグループを作って打ち合わせとなりました。
(打ち合わせに乗ってくれたり、当日イベントの手伝いや参加をしていただいた皆様ありがとうございました!)
打ち合わせの結果、以下のように決まりました。
- 日付は3月1日20時〜
- Zoomでビデオ通話しながら開催
- なにかしら都合があり発話できない方もいるので、音声ON/OFFやビデオのON/OFFは自由
そうして当日を迎え、最終的には80人程度の方が視聴していただき、それなりに盛り上がったイベントとなりました!
イベントの様子は、こちらのYouTubeにも上げているので、作業用BGMにでもご活用ください!
事前準備で考えたこと
原則として、聴講者全員のレベル感を考慮するのは無理があります。そこで、僕のサービスコンテナに対する理解を事前に明示しておこうと思いました。
これを読んだ上で参加者には参加してもらったり、会の冒頭で主催の僕の理解度はこれくらいです、と言い切ることで進めやすくなるかと考えたのです。
わからないところを言語化すると、結構スッキリするとともに、こうやって実装されているのではないか、という仮説が浮かんできて、これはとてもやってよかったなと思いました。
イベントの集客
告知は特にしていないです。僕は何回かツイートしたくらいですが、Laravel会で知名度のあるucanさんや、他にもフォロワー数の多いナミザトさんといった方々のツイートが後押ししてくれた面があると思います。
それなのに100人ほどのエントリーがあったのは、以下のような要因があるからだと思います。
- みんな心のどこかでやるべきだ、と思っているが、個人ではどうしてもやらないラインを題材にした
- 開催の内容が記事化などされる保証がないので、見ないと損、という雰囲気を出せた
- 聞き専枠を用意することで、気軽に参加できた(聞き専枠はナミザトさんのアイデア)
- そもそもサービスコンテナという選定もちょうどよかった。Laravelの機能の中でも指折りの優秀な機能(個人の主観です)なので、読むことで勉強になりそう、という期待値も持てた
イベントの内容
開催したときは、Zennのスクラップに読んだコードと読み取れた内容をまとめていきました。
https://zenn.dev/meijin/scraps/9051cbca46c4f4
1時間半ほど実施したのですが、正直1時間経過したあたりで集中力が途切れてきました。数十人に見られている状態で、画面共有しながらコードを読み続けて、話としてもちょっと冗談を交えつつ絶えず発見を続けていかないといけないので、想像以上に消費したのだと思います。
ただ、集中力が途切れた時に、Zoomのコメントなどで、ここにその機能がありますよ!といったコメントを頂けて、とても助かりました。最後の方で目的のコードに辿り着けそうなところで迷っていたとき、コメントで助けられました。
結果としては、当初の目的となるサービスコンテナの中核にはあまり至れず、その周辺の機能を理解するところにとどまったのですが、副産物としてMiddlewareというLaravelの別の機能に対する理解が深まったので良かったです。
イベントのあと
Zoomの録画機能を使ってレコーディングした内容をYouTubeに上げました。
思ったこととしては、Zoomは確かに優秀ですが、技術イベントに特化したビデオ通話配信ツールがあってもいいなというところです。
StreamYardあたりが面白そうなので、機会があれば試してみようかと思います。
https://streamyard.com/
まとめ
心のどこかでやるべきだと思ってはいるが、知らなくても仕事はできるし、1人だと大変、というラインを題材にすると、盛況になりそうということがわかりました。今後も、Nuxt.jsのコードリーディング会とか考えてみたいです。
また、現在マナリンクのWebサービスはほぼ私1名で開発しています。社員が増えたら社内勉強会なども積極的にやっていきたいです。何卒エントリーをお願いします!
株式会社NoSchoolでは一緒に働く仲間を募集しています