この記事はエムスリー Advent Calendar 2018 の21日目の記事です。
こんにちは。エンジニアリンググループの滝安(@juntaki)です。
先日のJJUG CCC 2018 Fallで「エムスリーでのKotlinへの取り組み」と題して、スポンサーセッションで星川(@oboenikui)と2名で登壇しました。
発表内容
資料はこちら
構成は大きく3つに別れており、前半を私が、後半を星川が発表しました。
- Kotlinとエムスリーの歴史
- サーバサイドの取り組み
- Androidの取り組み
先日の記事にも書かれていますが、発表の内容は2016-2018年にかけての「Kotlin in エムスリー総集編」です。 全体として、Javaで作ってきたアプリをKotlinに置き換えるときの技術的なノウハウと、ビジネスを進めながら新しい言語・技術を導入するという汎用的な観点で役立つ事例を共有するものにしました。
サーバーサイドのセクションでは、エムスリーエンジニアが発表した過去のスライドや記事を沢山ポイントしているので、リンクを紹介しておきます。
- 8割完成済みのjavaプロジェクトにkotlinを途中導入した話 - Speaker Deck
- 10年前のレガシーシステムをサーバーサイドKotlinでフルリニューアルしている話 #jjug_ccc #ccc_g2 - Speaker Deck
- Spring Boot と一般ライブラリの折り合いのつけかた - Speaker Deck
- Swagger Codegenで APIクライアントgem 自動生成 #m3kt - Speaker Deck
- フロントエンド向けの API サーバリニューアルに GraphQL を検討している話 - エムスリーテックブログ
Golden file testingについて
社内でも何それ?という反応をたくさんもらったのですが、発表では"Golden file testing"について紹介しました。 詳細はスライドや、(Goの記事ですが)下記のページなどをみていただくと、わかると思います。簡単に言うと、テストで使うFixtureをテスト対象のコードによって外部ファイルとして生成する仕組みです。
Testing with golden files in Go – SOON_ London – Medium
複数人でガリガリコードを書いていたり、Kotlin自動コンバートなどの何が起こるかわからないことをやってみる際に、既存の部分が壊れてないことを確認できるテストが無くて困ることがありました。そんなときにこのノウハウがあれば、お手軽にリグレッションテストを量産することができます。
…というのを、はじめから知っていればよかったのですが、実際に問題に直面したときには、JSONをテンプレートで書いてFixtureを作ってみたり、Swagger UIをスクレイピングして、全エンドポイントのテストの雛形を生成してみたり…、など試行錯誤をしていました。結果としてたどり着いたものが、スライドでも紹介した下記のGolden fileを生成するKotlinの関数(説明のため簡略版です)です。そのプロジェクトが終わったあとに、あれはGolden file testingって呼ぶらしい、ということを知ったのでした。知ってみれば、まぁ、そりゃそうだよね。という話ではあるのですが。
fun assertEqualOrSaveJsonFile( actual: Any, javaClass: Class<Any>, fileName: String ) { val javaClassPath = javaClass.name.replace(".", "/") val path = "src/test/resources/testdata/$javaClassPath/$fileName.json" val expected = TestForApplication::class.java.getResource(path)?.readText() if (expected == null) { saveToJsonFile(path, actual) } else { assertEqual(expected, actual) } }
発表してみて
資料準備のときには45分も喋ることが無いんじゃないかと思っていたのですが、蓋を開けてみると終了の合図と同時に話し終わるくらい、色々詰め込んだ発表になっていました。 資料作成やヒアリングを通して、単なる経験を共有できるナレッジとして棚卸しすることで、意外といろいろやってるなという発見があったりしました。
懇親会では「リニューアルをどんどん進めているのいいですね!」といったフィードバックや、「KotlinはいいけどSpringBootの学習コストが高くてこまる」といった悩み、「次はマイクロサービスで作ろうとしているんですが、Goいいんですかねぇ」といったJavaのイベントらしからぬ会話もしつつ盛り上がりました。
また、発表をグラフィックレコーディングしていただいたり(ありがとうございます!)、社外発表ならではのフィードバックが沢山いただけて、自分としても勉強になりました。
エムスリーでのKotlinへの取り組み を聞いてきたメモ #ccc_a5
— Nakayama san (@nakayama_san) 2018年12月15日
#jjug_ccc pic.twitter.com/lpyQO34bSX
関連記事
まとめ
本記事では、JJUG CCC 2018 Fallで登壇した内容について紹介しました!
Kotlin/Java/Scalaエンジニアを募集しています!
エムスリーでは、Kotlin / Java / Scalaでアプリケーション開発したいエンジニアを募集しています!
ご興味のある方は、下の採用ホームページ末尾のフォームからお気軽にカジュアル面談やM3 テックトークに申込みください。