コドモン Product Team Blog

株式会社コドモンの開発チームで運営しているブログです。エンジニアやPdMメンバーが、プロダクトや技術やチームについて発信します!

Kotlinの新機能Context Receiverについて登壇しました

こんにちは!プロダクト開発部の関根です。

6/23(金)に Server-Side Kotlin Meetup vol.9 『オフラインLT大会again!』 に登壇する機会をいただきました。
本記事では登壇することになったきっかけや発表内容の中で反応をいただいた点、登壇してみてのふりかえりをレポートします。

server-side-kotlin-meetup.connpass.com

登壇のきっかけ

コドモンには0.5投資という、週に0.5日つまり業務時間のうち10%程度を学習に利用できる素晴らしい制度があります。

www.codmon.co.jp

私はこの枠組みを利用して、チーム横断での業務効率改善ツールを作ったり、コードの保守性を上げるための技術調査などを行っております。その過程でKotlinのContext Receiver機能に目をつけ、実際のコードでどう使えるか、実際に使っている例は無いか、を検証してみようと考え、色々と試行錯誤していました。 そんな折に、Server-Side Kotlin Meetupの15分登壇枠に応募したところ枠をいただけることになり、このテーマで発表させていただくこととなりました。

当日の様子

株式会社ユーザベース様のオフィスでの開催でした。運営の方の呼びかけなどもあってかオフライン開催にも関わらず多くの方にお越しいただき、登壇側としてもモチベーションがあがる環境でした。twitterのタイムラインを見るかぎり、発表へのリアクションも多く、参加者の熱量が高い勉強会だということがわかります。良いですよね。

登壇が始まる際の会場の様子

オフラインとオンラインのハイブリッド開催ということで運営も難しいはずですが、StreamYardなどの配信ツールをうまく使いこなしながらスムーズに進行いただき、気持ちよく発表できる環境が整っているのが印象的でした。弊社でのイベント開催時にも参考になりそうです。

また、動画のアーカイブも残していただいており、いつでも見返すことができるようになっています。私の発表は45:00頃からとなっていますが、他の方の発表も興味深い内容が多いのでぜひ冒頭からご視聴ください。

www.youtube.com

登壇内容

『実践Context Receiver 〜現場で使えるかもしれないパターン3選〜』 というテーマで発表しました。
資料はこちらです👇

発表の中で一番反応をいただいたのは、Context Receiverを用いたDI(スライドp13)でした。
DIにも色々な手法がありますが、Context Receiverの以下のメリットが伝わったのではないでしょうか。お試しいただけたら嬉しいです。

  • 関数単位で依存性を注入できる点
  • 関数の入出力と依存性を分離して宣言できる点

私は後者のメリットが特に気に入っています。スライドでも示したUser生成時の時計の例のように、関数のロジックや責務において依存はするものの必ずしもロジックの本筋には関係ないような依存性について分離することができるため、メソッドシグネチャから関数の仕様が分かりやすくなるのです。
サーバサイドでのプログラミングにおいては、複雑な業務ロジックをコードに落とし込んでいきつつ保守性も高く維持する必要があり、これらのメリットは保守性向上の一助となるでしょう。

コドモンでのContext Receiverの利用について

発表の中でも触れているように、積極的に使っていくというよりは上記のような「明らかに有用であることが見えている状況において使っていこう」という程度に落ち着いています。無条件に使っていこうとならない理由としては、暗黙的に値を受け渡すという点において、その前提を知らないとコードを追いづらい・開発時にすべき考慮が見落とされるなどのリスクがあるためです。よほど長期にわたり同じメンバーで開発する場合はそれでも問題ないかもしれませんが、そのようなケースはチーム開発では少ないでしょう。

ほぼ仕様が固まっているとはいえ、Context ReceiverはまだPreview機能です。今後Kotlin2.0で正式リリースされますが、メジャーなライブラリなどでContext Receiverが多く採用されていくような未来があれば、扱いに関して再考が必要かもしれません。私は、今回試した結果、あくまで「現時点では」積極的に利用しないと結論づけました。メリットデメリットを理解したうえで、その方向性を確認できて良かったのではないでしょうか。

登壇の振り返り

私はこれまで5分程度のLT登壇経験しかなく、15分という枠で喋るのは今回が初めてでした。今回の登壇について振り返ると、事前準備を万端にできたなという感触があります。というのも、事前に社内で発表練習を行いフィードバックを集められたり、デザイン面の調整をデザイナーにお願いできるなど、いろんなメンバーが登壇準備に協力してくれたためです。このように心強いバックアップ体制があると、それに応えてうまくやろうという意欲も湧いてきますね。

発表に関しても、資料をほぼ暗記できていたことや事前の練習の成果もあり、落ち着いて喋り方まで意識しながら発表することができました。それでも、アーカイブを見ると早口なうえに声が高いなどと感じ、まだまだ改善の余地があることに気づいたのは反省です。

また、発表内容について、ターゲットを「Kotlin経験者でKotlinのアップデート情報を追いかけている方向け」と狭く設定していたため、15分という時間の中でうまく伝えられるかの不安もありました。これについては、当日のオフラインでの反応やtwitterで「勉強になった」「試してみよう」などのポジティブなリアクションもいただけていたので、大きな問題はなかったと安心しました。リアクションをいただけるのは嬉しい限りです。

YouTubeでの配信の様子

最後に

コドモンの0.5投資という制度が、自分のスキルアップや登壇の機会につながり、さらに自社内だけでなくコミュニティに対しても還元でき、いち開発者として非常に良い経験ができたなと感じています。この経験を残り90%の業務に活かしてプロダクト開発に取り組んでいきます。

そして何より、Server-Side Kotlin Meetupが、運営者の段取り力の面でも、参加者の意欲の高さの面でも素晴らしく、参加していて非常に居心地が良かったです。ありがとうございました。今後もServer-Side Kotlin Meetupに参加する方が増えるといいなと思っています。これからも、ともにServer-Side Kotlinを盛り上げていきましょう!!