「Kotlinで書くとJavaには戻れない」Androidアプリ開発にKotlinを導入したヤフーが感じたメリット

GoogleがAndroidアプリの開発言語に選定したことで「Kotlin」の注目度が高まっています。展開しているAndroidアプリの半数以上でKotlinを導入しているというヤフー株式会社に、Kotlinの魅力を伺いました。

「Kotlinで書くとJavaには戻れない」Androidアプリ開発にKotlinを導入したヤフーが感じたメリット

Androidアプリを作るならJavaではなくKotlinを使った方がいい」という声をよく聞くようになってきました。Kotlinは2011年に発表された言語。2017年にGoogleがKotlinをAndroidアプリの開発言語に選定したことがきっかけで、近年導入する企業が増加しています。

その中の一つが、ヤフー株式会社です。現在ヤフーでは、展開しているAndroidアプリの半数以上でKotlinを導入。特に「Yahoo!ニュース」のAndroid版では、多くの画面でKotlinを利用しています。

Javaよりも自由に書くことができ、型変数の推論や高階関数(クロージャ)⁠、拡張関数などを備えたKotlin。モダンな言語でありながらJavaとの互換性も非常に高い言語として知られていますが、ヤフーのようなエンジニアが数千人いる大企業で、どのようにJavaからKotlinへの移行を進めていったのでしょうか。Kotlinの魅力や、新しい技術をどう導入していったのかなど、移行の裏側を伺いました。

1

森 洋之(もり・ひろゆき/2@moridroid)(写真左)
ヤフオク!開発本部のアプリ開発部に所属。入社以来Androidのアプリ開発に関わっており、ヤフー社内で、ある分野に突出した知識とスキルを持つ第一人者にだけ任命される「黒帯」にも選ばれている。社内はもちろん、外部での講演も多数行っている。
樫村実紅(かしむら・みく/3@k_miku)(写真中央)
2013年に新卒で入社後、ニュース・スポーツ事業本部開発部に配属され「Yahoo!ニュース」のAndroidアプリをリリースから担当。Yahoo!ニュースのJavaからKotlinの移行の際は、数千行のコードをメイン開発担当としてリファクタリングした。
池田 惇(いけだ・じゅん/4@jun_ikd)(写真右)
Yahoo!ニュースAndroidアプリ開発チームリーダー。2011年に新卒でヤフーに入社。映像配信サービス「GYAO!」や「Yahoo!ニュース」のiOS・Androidアプリ開発を行い、PMや開発チームリーダーを経験。3年ほど前からKotlinに注目しており、社内でいち早く導入した人物。

Kotlinでコードを書くと、Javaには戻れない

――Yahoo!ニュースやYahoo!カレンダーなどのアプリで、JavaからKotlinに移行しているとお聞きしました。現在、ヤフーではどれくらいのAndroidアプリでKotlinを導入しているのでしょうか?

現在、Google Playで公開しているアプリは38個で、そのうち20個にKotlinを導入しています。また、ヤフーには技術的に推奨する言語などを定めた「スタンダード(開発標準)」という制度があり、そこにKotlinも入っています。

――すでにかなり数のアプリがKotlinを導入しているんですね。導入はいつ頃から始まったのでしょうか?

:ヤフー全体としては、AndroidにKotlinが公式採用されてからなので、2017年以降ですね。ただ、その前からイベントを開いたり、少人数でセッションしたりする動きはありました。池田もかなり前から導入していたみたいで。

池田:GYAO!を担当していたころに、少しだけKotlinを導入しました。おそらくヤフーでは、一番最初にKotlinを導入して世に出したサービスだと思います。「一番初めに導入した」と後で言えればいいな……と思って(笑)

5

いち早く導入できたのは、僕がいたGYAO!チームが技術をある程度自由に選択しやすい環境だったのも大きいですね。ただ、KotlinがAndroidに公式採用される前にヤフー社内に広まらなかったのは、仕方のないことだとも思っています。オフィシャルじゃない言語に抵抗があるのは当たり前で、せっかく学んでも廃れてくリスクだってありますし。やっぱり公式に採用されているかどうかで、安心感が違いますから。

――GYAO!はもともとJavaで作られていたんですよね。どういう流れでKotlinへ移行していったのでしょうか?

池田:GYAO!でKotlinを導入したタイミングは全部で2回ほどです。最初は先ほども話した3年ほど前。ただ、初めての導入ということで試しに数行書いたくらいで、「機能」と呼べるものを作ったわけではありませんでした。

本格的に導入したのは2017年1月からです。新機能の画面を2つほど作る際に、Javaだとうまく設計できなくて「Kotlinならうまくいくんじゃないか?」と思い、もう一度Kotlinをちゃんと導入してみることにしました。開発期間が1~2週間ほどと規模が小さく、失敗しても巻き返せるものだったので。

――そこからヤフー全体に広まるまで、どのように働きかけていったのでしょう。

:うーん。実は社内でスタンダードになってからも、強制的に「Kotlinを使いなさい」というような働きかけは特にしていません。ヤフーには数千人のエンジニアがいて、サービスの内容も多岐にわたるので技術を強制するのはあまりよくないんです。大切なのは「ユーザーに価値を提供できるかどうか」であり、使うかどうかは各サービスによって決めるのがいいと考えています。技術を移行するためだけのプロジェクトは避けるべきかなと。ただ、Kotlinを使うとJavaが書きたくなくなるエンジニアが多いのか、自然に広まった感じですね(笑)

――「Javaが書きたくなくなる」というのは驚きです。それほどKotlinが書きやすいんですね。では、これからまったく新しいアプリを作るときもJavaではなく、Kotlinを採用しますか?

:逆に、これから新しいアプリを開発するときに、Kotlinを選ばない意味が分からないくらいです(笑)。それほどKotlinの書きやすさを実感しています。現在は外部のAndroidアプリ勉強会に参加すると、発表時のスライドに掲載されている例題コードがほとんどKotlinで書かれていたりします。

シンプルに書きやすいというのは大事なことで、コードレビューなどがしやすいという利点にもつながりますから。

6

――それほどまでにKotlinの良さを体感している、と……! 森さんと樫村さんはAndroidに正式採用された頃からKotlinを触り始めたと伺っているのですが、使い始めた最初の印象を教えてください。

:私はもともとSwiftを触っていて、Kotlinは文法がSwiftに似ていることもあり、特に違和感なく使い始めることができました。勉強した記憶もほとんどないですね……。

樫村:私はずっとJavaで開発をしていて、モダンな言語に触れるのはKotlinが初めてでした。触ってみるとJavaで歯がゆかった部分がキレイに書けることが分かり、すぐに使いやすい言語だなと感じました。例えば、Javaだとファイルを分けて書かないといけないことが多くて、どうしても冗長になってしまうときがあるけど、Kotlinだと1つのファイルで書くことができたり。一度Kotlinを触ると、もうJavaには戻れません(笑)

――書きやすさ以外にKotlinを導入してよかったメリットはありますか?

:そうですね、例えばヤフオク!のAndroidアプリではクラッシュ率が目に見えて減っています。もともとクラッシュ率が高かったわけではないのですが、Kotlin導入前の3分の1ほどに減りました。

あとは、Kotlinで書くと値が変わらないイミュータブルな宣言で変数を書けるので、Nullではないことがすぐに分かる点もメリットですね。値が変わらないことが分かっているのは、安全性を保つためにも大事だと思います。

Yahoo!ニュースアプリは、Javaからの移行で数千行のコードを減らした

――池田さんと樫村さんは、Javaメインで書かれていたAndroid版Yahoo!ニュースを、Kotlinメインでリニューアルしたと伺いました。どうやってKotlinに移行していったのでしょうか。

池田:最初は新規の機能を作るタイミングや新しいクラスの作成時に、少しずつKotlinを使用し始めました。その後、Androidアプリのメイン画面をリニューアルする際に、設計のリファクタリングをする計画があり、そのタイミングで大部分をKotlinに差し替えていきました。あくまでユーザーに届ける機能開発のために書き換えただけで「Kotlinに移行するためだけの作業」というのはほとんどしていません

設計変更の結果、開発速度が上がりましたし、コードを数千行ほどリファクタリングすることができました。その数千行のリファクタリングはほとんど樫村が担当しました。Yahoo!ニュースに関しては、僕たち2人だけでAndroidアプリの開発をやっているので。

――1人で数千行も! コードの移行で苦労した点があれば教えてください。

樫村:実は、それほど苦労した部分はありませんでした。強いて挙げるとすれば、既存のJavaライブラリと密接に関わっている部分は、やりにくいですね。今回は大きな設計変更での改修だったので、そういった古いライブラリを考慮する大変さはありましたが、Kotlin自体に苦労した部分というのは、やはりあまりないと思います。書き方に慣れてからは、JavaよりもKotlinの方が楽なくらいでした。

7

――なるほど。ではJavaメインだった頃と、Kotlinメインになった今、新規の機能開発の工数はどれくらい違いますか?

樫村:設計を変えたため開発スピード自体変化したという点も大きいですが、Javaだと1週間かかっていた機能追加が、Kotlin移行後は2~3日でできるようになりました

――工数が半分以下に減ってるんですね……! Android版Yahoo!ニュースではまだJavaを使っている部分もあるかと思いますが、今後Kotlinへ完全移行する予定はあるのでしょうか?

樫村:正直、現時点ではそれはなかなか難しいと思います。もし実現するとなると、フルリニューアルするタイミングになるのかなと。

池田:先ほども話したように、僕らはユーザーに新機能を届けるためにKotlinを使用しましたが、JavaからKotlinへの移行だけを目的に開発することはありません。それは森が話していた「技術を強制しない」という点とも共通してくることかなと。私はKotlinでコードを書くこと自体が楽しいと感じます。だから、開発していると自然にKotlinのコードが多くなっていくんじゃないかなとは思います。

――「移行ありきの開発」はせず、あくまで「必要な部分に必要なだけ導入していく」ということですね。すでにAndroid版Yahoo!ニュースの多くの画面をKotlinで書いているとのことですが、じっくり使ってみて感じたメリットはありますか?

池田:Kotlin導入後、Androidアプリに複数の新機能を追加しているのにもかかわらず、コード量がほとんど増えていない点ですね。冗長なコードが減っている何よりもの証拠だと思います。

樫村:Android版Yahoo!ニュースはクラッシュしないことを重視して実装していたため、Nullチェックなどでコードが冗長になっていました。本質と違うところで工数がかかっていたんです。しかし、Kotlinにしたことで「コードのためのコード」を減らすことができ、プロジェクトの本質的な部分に集中できるようになりました

池田:あとは少し個人的な話になりますが、Kotlinをじっくり学んだことで自分自身がスキルアップしたとも感じています。1年前より開発スピードがあがりましたし、出せるものの品質も向上していると思います。

JavaからKotlinへの移行デメリットは「ほぼない」

エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く