Kotlin勉強会R.ktをはじめました
堀田 裕理
こんにちは。ホットペッパービューティーのAndroidアプリ開発を担当しているyuriです。開発言語はもちろんKotlinです。
弊社では最近、Kotlinの勉強会の運営を始めました。今日はそんな始めたばかりのKotlin勉強会、 R.kt についての記事を書きます。
リクルートライフスタイルとKotlin
昨今のKotlin界隈の盛り上がりについては、今更説明するまでもないでしょう。Javaのプロダクトも多く抱えている弊社の中では、Kotlinの利用・Kotlinへの移行を検討しているプロダクトが多くなってきています。
そんな中、弊社の代表サービスの一つであるホットペッパービューティー(以下、HPB)では、Androidアプリの全面作り変え(社内ではリプレイスと呼んでいます)をKotlinで行っています。私もHPBのAndroidチームメンバとして、Kotlinでリプレイスを行っています。
ネイティブアプリのリプレイスプロジェクト
弊社の小川の記事にもある通り、HPBでは幾つかの機能でリプレイスプロジェクトを行っています。
ネイティブアプリに関しては、約6年間、様々な機能追加・変更を経る中で見通しの悪いコードになっていました。いくつかの理由はありますが、HPBの事業成長の速度が大変速く、それに合わせてスピード重視の開発をしてきたことが一番大きかったと思います。
これまで事業が着実に成長を続けてきたこと・それを支えられるスピードで開発を進めてきたことはとても良いことである一方で、今後の更なる事業成長を見据えたときに、このコードと共に戦っていくことができるのか?というのがエンジニアの不安になっていました。
そこでエンジニアが声をあげ、社内で検討を始めました。その結果、ネイティブアプリについては一度機能追加をストップし、Android/iOSアプリ共にリプレイスを行うことにしました。いわゆるFat Viewになっているなど見通しが悪くなっていたコードに対しきちんとアーキテクチャを導入すると同時に、AndroidアプリはKotlinに、iOSアプリはSwiftに、それぞれ開発言語を変更しました。
Kotlin導入の経緯
iOSアプリのリプレイスにSwiftを使うのはある種の既定路線だったのに比べて、Androidアプリのリプレイスにどの言語を使うのかは問題点の一つでした。
AndroidでKotlinを使うと決めたのは2017年の3月です。この時点ではAndroidの公式開発言語になっていたわけではなく、社内でも慎重な声が聞かれました。しかし、HPBのエンジニアのKotlinへの熱い思い(と、それを支える様々な人からのサポート)により、Kotlinを採用するに至りました。
一度リプレイスを行ったら、今後はそのコードベースと一緒に長く戦っていくことになります。長い目で見たときにHPBのAndroidアプリ開発にはKotlinを採用する方が絶対に良い!と声を上げたエンジニアの目は、その2ヶ月後のGoogle I/O 2017で、正しかったと証明されます。
iOSアプリのリプレイスの詳細については来週公開予定のブログ記事にて詳しく取り上げる予定ですが、Androidアプリのリプレイスについても別の機会に発表できればと思っています。
R.ktについて
そんなHPBのAndroidチームのメンバが中心となり、 R.kt と題してKotlin勉強会を始めることにしました。
R.kt概要
リクルートライフスタイルが主催のKotlin勉強会です。第一回は2017年10月にグループ会社のリクルートマーケティングパートナーズとの共同で開催しました。第二回は2017年12月19日に開催する予定です。今後も数ヶ月に一度のペースで開催したいと思っています。
R.ktのテーマについては、 Kotlinの勉強会 以上のことは未だ決めていません。サイバーエージェントさんの「CA.kt」やエムスリーさんの「どこでもKotlin」など、Kotlin界隈の有名どころによる勉強会も多い中で、R.ktをどのような会にしていくのがよさそうかは継続的に考えていきたいと思います。
R.kt開催の経緯
Kotlinの利用事例は日に日に増えていますが、年間予約数が7000万件超(2017年11月現在)というような事業規模・元のJavaのコード行数で16万行以上というようなサイズのアプリを、フルKotlinに置き換えたという事例は、国内外でもまだ珍しいと思っています。大規模で一気に導入したからこそぶつかった悩みや生まれた知見などを、もっと社外に発信していきたいと思ったのがきっかけでした。
また、弊社でのKotlin導入検討の際にも「社内外における先行事例の有無」というのは1つの大きな論点になったため、このような事例を1つでも紹介していくことはKotlin導入を前向きに検討している方々にとって価値があるはずと思ったこともきっかけの一つです。
第一回の様子
10月に行われたR.kt#1の様子について紹介します。(写真のクオリティがあまり高くなく申し訳ありません……🙇)
R.kt#1は、(自称)Kotlinエバンジェリストであり日本Kotlinユーザグループ代表の長澤太郎(@ngsw_taro)さんをゲストスピーカーにお迎えしました。
約50名の参加者と共にたろうさんの乾杯で開幕したR.kt#1では、6名が発表しました。
たろうさんは弊社エンジニアからのリクエストに応えて、データクラスとスコープ関数の実際の使いどころについて話してくださいました。スコープ関数選択チャートでは会場が大いに盛り上がりました!
たろうさんの発表に続いて、弊社とリクルートマーケティングパートナーズの社員が自身のプロダクトでKotlinを利用している知見を元にLTを行いました。以下では弊社メンバの発表の様子を紹介します。
たろうさんの後に続いて私が発表しました。スライドは 文字化け 諸事情でアップロードできていませんが、『KotlinでのAndroidアプリ開発にJavaの知識は不要か』というタイトルで、サーバサイドJavaしか知らない(Android Javaを知らない)私からみて、KotlinでのAndroid開発に活きるJavaの知識についてお話しました。
HPBのAndroidアプリのKotlin化を決めた張本人であり、先日はKotlinConfに参加してきた索手は、『Spekではじめるユニットテスト』というタイトルで、HPBのユニットテストでも利用しているSpekというKotlin製のテストフレームワークについて話しました。
プロジェクト途中の入社ながらも、圧倒的な技術力で既にリプレイスの中心人物になっている中里は、『KotlinとRxJava2』というタイトルでnullとMaybeの扱いについて話していました。
懇親会では、発注ミスにより寿司ではなく刺身が届く(!)などのハプニングもありながら、参加していただいた方々に楽しく懇親していただけたと思っています。
初回ということもあり運営について至らない点も多々あったかと思いますが、多くの方に参加していただけて大変ありがたかったです!
発表資料
今後の展望
弊社では未だHPBのAndroidアプリ開発でしかKotlinを使っておらず、第三回あたりには 話せるネタが尽きてくる のではという強い懸念があります。今後はもっとオープンな形にして、持続可能な勉強会にできると良いと思っています。共催のご提案などもお待ちしています!
HPBのAndroidアプリのようなKotlinでのリプレイスに限らず、Kotlinへの一部移行、テストコードだけのKotlin化、あるいは新規サービスをフルスクラッチでKotlinで書くなど、Kotlinとの付き合い方は様々あると思います。
いろんな付き合い方に関する知見がもっと広まることで、もっともっとKotlinコミュニティの発展に貢献できるよう、今後も微力ながら活動を続けていきたいと思っています!
再度、宣伝
R.kt#2は2017年12月19日に開催します。皆さまのご参加をお待ちしています!LT枠もあるよ!