NewsPicksの高山です。
NewsPicksではちょうど1年前の2021年8月に、サーバーサイド開発言語をJavaからKotlinに切り替えていく決断をしました。
今では社内でも最も歴史のある2つのシステムがKotlinでも書けるようになり、置き換えも徐々に進んでいっています。一般的な社内のサーバーサイドエンジニアはKotlinとJavaを半々ぐらいの割合で書いているような印象です。
さて、去る8月25日に、同じくサーバーサイドKotlinを使っている株式会社ヘンリーさんと合同勉強会を開催しました。
ヘンリーさんによるブログ記事はこちら。
NewsPicksからは以下の2つの発表をしました。
sefwgweoさんによる、Kotlinのreified機能の利用例
reifiedとは、インライン関数と一緒に使う機能で、これを使うことでコード中で if (変数 is クラス)
のような分岐をすることができるようになるものです。
Javaではリフレクションを使って実行時に型情報による分岐ができますが、Kotlinのreifiedはコンパイル時に解決されるので、コンパイルされた後は型情報を持たなくても良いという利点があります。
NewsPicksではreifiedを使って、ログ出力機能のE2Eテストのassertionを実装しています。
バーチャルむとうさんによる、JavaからKotlinに変換する2ステップ
NewsPicksのJavaのコードをKotlinに変換する時に、だいたいこんな感じのことをやるよという話をしてくれました。
この1年で社内ドキュメントに Kotlinでこういう時はこう書け という優秀なコピペ元を充実させてきており、それを見ながらやればほぼ迷うこと無くKotlinを書くことができます。
その優秀なコピペ元を整備してくれたバーチャルむとうさんから、「Kotlinのコードは全部私がレビューするので大丈夫です!」との心強い言葉をもらいました。また、「ヘンリーさんのコードは私は見られないので、頑張ってください」というオチもありました。
その他
質疑応答がメインコンテンツ
発表としては以上でしたが、合同勉強会ということで、敢えて一般公開せずに両社のメンバーだけにしたことで、質疑応答が盛り上がってものすごく濃い内容だったのが印象的でした。むしろ質疑応答がメインコンテンツと言っても過言ではありませんでした。
RepositoryパターンについてNewsPicks社内の熱い感想戦
ヘンリーさんのkohiiさんの発表(ブログ)でDDDのRepositoryパターンがあったのですがRepositoryのインターフェースはどうあるべきかということを話していました。
Repositoryには findByXXX
のようなメソッドを作るのがよくあると思いますが、必ずしもRepositoryはどういうインターフェースを持たなければいけないということは無く、重要なのはドメイン層が直感的で凝縮度が高いことなので、そのために設計を頑張るのが大事だよねという流れになりました。
合同勉強会をご希望の会社さんはこちらまで
他社さんがどんな課題を解決するためのどんな技術選択をしたのかを聞くのは非常に勉強になりますね。もし合同勉強会されたい会社さんがあれば、@edvakfにDMか、Meety でお知らせください。