Kotlinコントリビュータへの険しい道、なぜ僕はそれを目指したのか ──コネヒト・Androidエンジニア富田健二の場合
Androidアプリの開発においてGoogleも正式にサポートを表明した言語「Kotlin(コトリン)」。これを採用するエンジニア、企業が増えている。ただ、OSS発展に欠かせないコントリビュータの数は世界で200人規模。日本人のコントリビュータが多いわけではない。
コネヒトでAndroidアプリ開発を担当するエンジニア富田健二氏はその一人。なぜ富田氏はKotlinコントリビュータの道を目指したのか。コントリビュータ挑戦を仕事に生かすやりがいや自身の成長について聞いた。
Kotlinを抱えて転職してきた男
「ママの一歩を支える」をテーマに、妊活・妊娠・出産・子育ての疑問や悩みを解決するQ&Aアプリ「ママリ」を展開するコネヒト。Androidアプリ開発を担当する富田健二氏はライブドアやマッチング系アプリ開発のスタートアップ、Diverseを経て、2016年10月、同社に転職してきた。
転職を決意したきっかけは、CTOの島田達朗氏と話す機会があり、そのとき 「ママリ」のアプリ画面を見せられたこと。エンジニアとしての技術的関心とビジネスの社会的意義の両方が入社の決め手になった。
「ママたちの出産報告の投稿が1時間に1回ぐらいの頻度で寄せられ、それを祝うコメントがタイムラインにあふれていました。純粋に感動するとともに、コネヒトという会社と『ママリ』というサービスは、こうして社会に貢献しているんだなと実感しました」
▲コネヒト株式会社 富田 健二氏
もともと、富田氏はダイバース時代、Kotlinがまだバージョン1.0.0以前から活用し、プロダクトのいくつかをそれで書いていた。Androidエンジニアとして新しい技術への関心は人並み以上だったのだ。
当時KotlinはAndroidの標準言語とはされていなかったし、国内で採用する企業も少なかった。富田氏の入社が決まり、まだ社内に一人もKotlinエンジニアがいないにも関わらず、コネヒトはKotlinを採用することを決定した。まさに、富田氏がKotlinを抱えてコネヒトにやってきたという感じだった。
もちろん、富田氏が入社をしたという理由だけで導入をしたわけではない。Kotlinを導入するには社内で導入の意義をプレゼンした。Syntaxがモダンで簡潔、Javaにはない便利な文法も多数存在、誰もがよりメンテナビリティの高いコードが書ける、結果的にコード量が少なくて済むなど、Javaに替えてKotlinを使うことの意義を一生懸命語った。たしかにAndroid開発の公式言語ではないので技術情報はまだ少ないが、「入れないメリットより、導入するメリットの方がはるかに大きい」と力説した。
富田氏はプレゼン内容を実践するかのように、入社後わずか1カ月で「ママリ」全体のコード量の10%をKotlinで置き換えた。それまでWebViewを使っていた「ママリ」だが、機能の一部をネイティブ化したり、新機能を追加したりするタイミングで徐々にKotlinに移行。現時点ではコードの85%がKotlinで書かれるまでになった。
ただ「Kotlin導入とプロダクト改善だけでは、自分の会社への貢献は不十分。何かもっと仲間たちに刺激を与えたい」とは最初から考えていた。そこで自身に課した目標が「Kotlinのコントリビュータになる」ことだったのだ。2016年段階ではコントリビュータ数が150 名ほどで日本人のコントリビュータも少なかったため、コントリビュータを目指す意義は十分にあった。
最初の環境設定にハマった。何から手をつけていいかも迷う
「『ママリ』のKotlin化を1割程度終えた時点でブログを書きました。簡単な内容でしたが、意外と社外からの反響が大きかった。みんなKotlinに注目しているんだなって。コントリビュータとしてさらにOSSに貢献できたら、その挑戦はきっと社内によい刺激を与える。今がトライするいいタイミングだ。そう考えたのです」
しかし、コントリビュータへの道はそれほど平坦ではなかった。
Kotlinにコントリビュートするためには、Kotlinをローカル環境で動かすための環境構築が必須だが、ここでまずハマった。
「僕はもっぱらAndroid Studioでの開発が中心だったので、新しい環境をビルドする経験があまりなかったんです。しかも、今でこそビルド自動化ツールのGradleを使ってビルドはものすごく簡単になりましたが、当時はまだそれが整っていなかった。
最終版をブランチからマージするも全然動かない。なんで?って感じ。この作業に2~3カ月ぐらいかかっています。著名なKotlinコントリビュータであるしらじさんのブログを参考にしながらなんとか最初の壁を乗り越えました」
その後も戸惑うことは多かった。例えばバグ修正、機能改善、パフォーマンス改善、機能追加など課題(Issue)は無数にある。どこから手をつけていいのか。どれが貢献しやすいのか、難しいのかの見当もつかなかった。
迷う間に熟練のコントリビュータたちがどんどんIssueを解決していく。自分ができるものってあるんだろうか。コントリビューションの初心者には焦りが生まれる。
「しかし、なんでもいいから着手しないことにはコントリビュータにはなれません。短いコード、簡単なものでもまずはマージされ、コントリビュータになることが重要なんです。僕が最初のとっかかりとして取り組んだのは、標準ライブラリのサンプルを提供して欲しいというIssueでした。Kotlinの言語構造には直接関係ないとはいうものの、サンプルコード提供もKotlinに貢献するための素晴らしい方法です。
だが、Issueに応えてサンプルコードをプルリクエストしても、それをレビューしてもらうまでには結構な時間がかかった。早くて1〜2週間。長い場合は数ヶ月というのもざら。
この間の富田氏といえばずっとKotlin漬け。さすがにコントリビュート作業は業務時間には持ち込まなかったものの、家に帰れば深夜までコードを書き続けた。土日は趣味のゴスペル合唱やフットサルの練習も欠かさなかったが、そのスキマの時間はすべてカフェでのコーディングに明け暮れた。
自分の部屋でやるとさぼってしまう。他人がいる環境のほうが集中できるというのだ。Kotlinに全身全霊を打ち込み、もくもくとキーボードをその叩く姿は、おそらくカフェの客たちには修行僧のように見えたことだろう。
2017年11月。富田氏の書いた最初のサンプルコードがようやくマージされた。初めてのコントリビュータ認定。それまでになんと11カ月の期間を要している。
何ヶ月もマージされずに落ち込む彼に、CTO島田がかけた言葉とは
「コントリビュータになることで社内の他のエンジニアに刺激を与え、そのモチベーションアップにつなげたい——そんな思いで挑戦を続けていたのですが、なかなかマージされることがなく、自信を失うこともたびたびありました」
実はコントリビュータ挑戦のことを社内で知るのは、富田氏以外にはCTOの島田氏のみ。もし挑戦を諦めても周囲は誰も気にしないはずだ。
「島田さんには毎日顔を合わせて進捗を報告していましたが、半年かかってもアウトプットゼロ。もしこの時間をサービス開発のために注いだら、目に見えるアウトプットを出せたはず。自分がやっていることは無意味ではなかったのだろうかと、つい愚痴ったら『結果はどうなるかわからないけれど、最後までやろう』と言ってくれました。それで腹が決まりましたね」
エンジニア集団の中でCTOにできることの一つが、メンバーのモチベーションのサポートだ。「簡単なほうへ逃げるな。挑戦は必ず良い結果をもたらす」——島田氏の言葉を富田氏はそのように受け止めたのだ。
なぜCTOの島田氏は辛抱強く彼の一歩を支え続けたのだろうか? それは、会社が利用するOSSに対してコミットをすることは、大きなリスクヘッジになると考えているからだ。コミットできるくらい使い倒したり、最新のリリースや今後の開発方針などを把握していることは次の技術選択のとても有益な情報になる。こうした考えに基づく島田氏の協力もあり、コントリビュータ挑戦は無事に実を結ぶことになった。
現在では、数少ない日本人Kotlinコントリビュータの一人として、富田氏は現時点で13個のプルリクエストを行い、そのうち10個のコードがマージされている。現時点で、世界に239名いるコントリビュータ(ちなみにKotlinコミュニティでは、ContributorではなくあえてKontributorと表示する)の中で10個以上がマージされているエンジニアは多くはない。
挑戦当時はコントリビュータになったときの自分をイメージできていたわけではない。もちろんOSSを活用するエンジニアとしては、コントリビュータに名前を連ねることは名誉には違いない。当然、自分のスキルアップにもつながる。
今後はその波及効果も期待される。最新の技術を積極的に導入している企業であることが知られれば、それはエンジニア採用において有利に働くはずだ。
「Android開発者なら、Material Design、アーキテクチャ、サービスデザインなど、何か特化した技術のある人が来てくれると嬉しいですね。何より自分から動き出せる人。自分の技術で、ユーザーや他のエンジニアを支えるというマインドが重要です」
これはコネヒトのAndroid開発者において求めていることであり、今回富田氏が自ら、今後を見据えてKotlinをユーザーのために導入したことに近しいものがあるはずだ。もちろん富田氏もKotlinだけに執着しているわけではない。サービスを向上させるために必要かつ最適な技術をその都度、選択できることがエンジニア資質としては最も重要なことだからだ。
「今後、Kotlinを使わなくなる日もあるかもしれない。2~3年先のことはわからない。それが言語の宿命です。しかしどんな技術でもその発展に貢献するという気持ちは失うことはないと思います」
コントリビュータ比率が異常に高い会社。次なる課題は─
富田氏の挑戦が、知らず知らずのうちに、社内のエンジニアによい刺激を与えたことはたしかだ。社内で開催している「コネヒトマルシェ」というLTイベントやもくもく会などで行われる技術情報の共有体制は社内によい空気をもたらしている。
いまや富田氏以外にCakePHPのコントリビュータが4人誕生している。現在コネヒトにいるエンジニアは11名。コントリビュータ比率がきわめて高い企業といえる。
「僕がもがき苦しんでいることは、なんとなくみんなも感じていたような気がします。新しい課題に挑戦するきっかけは与えることができたのかもしれない」と、富田氏は振り返る。
今後は自分自身の課題として現在10個のマージ数を3桁台に乗せることが目標。さらに社内からのOSSへのさらなる貢献はもちろん、社外向けに「Kotlinコントリビュータもくもく会」を開催しコントリビュータの輩出を支えることもしていきたいと考えている。
「コントリビュータとは、自分が使っているコードに責任を持ち、技術に対して自信をもつことにほかならない」と富田氏は言う。そうしたエンジニアの意識をさらにもっと高みへと引き上げていきたいのだ。
取材/文:広重 隆樹
撮影:刑部 友康