エムスリーテックブログ

エムスリー(m3)のエンジニア・開発メンバーによる技術ブログです

JJUG CCC 2018 Fallで登壇しました

この記事はエムスリー Advent Calendar 2018 の21日目の記事です。

こんにちは。エンジニアリンググループの滝安(@juntaki)です。
先日のJJUG CCC 2018 Fallで「エムスリーでのKotlinへの取り組み」と題して、スポンサーセッションで星川(@oboenikui)と2名で登壇しました。

f:id:juntaki1:20181219141257j:plain

発表内容

資料はこちら

構成は大きく3つに別れており、前半を私が、後半を星川が発表しました。

  1. Kotlinとエムスリーの歴史
  2. サーバサイドの取り組み
  3. Androidの取り組み

先日の記事にも書かれていますが、発表の内容は2016-2018年にかけての「Kotlin in エムスリー総集編」です。 全体として、Javaで作ってきたアプリをKotlinに置き換えるときの技術的なノウハウと、ビジネスを進めながら新しい言語・技術を導入するという汎用的な観点で役立つ事例を共有するものにしました。

サーバーサイドのセクションでは、エムスリーエンジニアが発表した過去のスライドや記事を沢山ポイントしているので、リンクを紹介しておきます。

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のイベントらしからぬ会話もしつつ盛り上がりました。

また、発表をグラフィックレコーディングしていただいたり(ありがとうございます!)、社外発表ならではのフィードバックが沢山いただけて、自分としても勉強になりました。

関連記事

www.m3tech.blog

まとめ

本記事では、JJUG CCC 2018 Fallで登壇した内容について紹介しました!

Kotlin/Java/Scalaエンジニアを募集しています!

エムスリーでは、Kotlin / Java / Scalaでアプリケーション開発したいエンジニアを募集しています!

ご興味のある方は、下の採用ホームページ末尾のフォームからお気軽にカジュアル面談やM3 テックトークに申込みください。