最近話題の「Kotlin」は本当に業務に使えるの? ―国内第一人者と「Yahoo!ニュース」Android版開発者が語るKotlin開発実践のコツ

急速に人気が高まりつつあるKotlinの魅力と向き合い方
2018/03/22 14:00
 

 近年、開発者の間で「Kotlin(コトリン)」への関心が急速に高まっている。Kotlinは2011年に、Javaとの高い互換性を持ち、Javaよりも簡潔かつ安全にプログラムが書ける言語として登場したが、その存在が一躍注目されるようになったのは、2017年のGoogle I/Oにおいて、GoogleがAndroidの開発言語としてKotlinを公式に認めたことがきっかけだ。Kotlinとはどのような言語なのか、実際に業務で使う際の留意点などについて、日本で早くからKotlinエバンジェリストとして活動してきた長澤太郎氏と、ヤフーでAndroid版 Yahoo!ニュースにKotlinを取り入れた池田惇氏に語ってもらった。

【読者アンケートのお願い】

Kotlinは「開発現場の現実がよく見えている」技術

池田:最近、ヤフーでもKotlinを使い始めているので、たろうさんに会えるのを楽しみにしていました。今日はよろしくお願いします!

長澤:こちらこそ、よろしくお願いします。

池田:始めに自己紹介をさせていただくと、私は大学院の工学研究科を卒業した後、新卒でヤフーに入り、これまでiOSやAndroidでのアプリ開発を手がけてきました。

長澤:私は大学でソフトウェア工学を学び、個人の研究としては主にフレームワークまわりをやっていました。卒業後はSIerに入り、そこで1年半ほどSEを経験した後、今勤めているエムスリーに転職しました。以降は、JavaやKotlinを使ったAndroidアプリやサーバサイドの開発を業務としてやっています。

池田:たろうさんは、Kotlinについて、かなり早くから情報発信をされていますが、実際にはいつごろから触っているんですか?

長澤:JetBrainsがKotlinを発表したのが2011年で、その半年くらい後の2012年初頭には「Kotlinエバンジェリスト」を自称して、ブログなどで情報発信を始めていました。当時は、まだ学生でしたね。勉強会で発表などをするうちに、雑誌の記事や連載を書いたりする機会があり、それが書籍の執筆にもつながっていったという感じです。

池田:Kotlinのどのあたりに「エバンジェリストになりたい」と思うほどの魅力を感じられたのでしょうか。

長澤:最初に触ったときに、「この言語は開発の現実をよく見ているな」と感じたのです。Kotlinには、良い意味での「妥協」が多く盛り込まれています。近年のパラダイムに合ったモダンな文法も使えますし、null安全の考え方や、拡張関数のような機能も採用されています。その一方で、技術そのものにはそれほど「とがった」ところがなく、すぐにでも実務に生かせそうな印象でした。そのあたりが、入れ込んだ一番の理由な気がします。

池田:私も、Kotlinを実際に触ってみて、まさにそれを感じているところです。最初、Kotlinについては、「新しいけれども難しい」と勝手に思い込んでいたところがありました。でも、実際に触ってみると、非常に使いやすい。

 通常のJavaとして書いてもほとんどそのまま動きますし、開発環境も整っていて、JavaからKotlinへ一発で変換するようなこともできる。始める際の敷居がとても低く、初心者に優しい言語だと感じました。

長澤:Kotlinのスマートなところは、すでにあるJavaのエコシステムに乗り入れる形で出てきたところですね。新しい言語にとって、周辺のツールなどが整備されるまでに時間がかかるというのは、普及の大きなネックです。Kotlinの場合は、それがはじめからあったことも、開発者に「現実味がある」と受け取られた理由なのではないでしょうか。

池田:私の所属するAndroid開発チームではメインの開発言語はKotlinになりました。たろうさんは、業務で手がけられているプロダクトにもKotlinを使われているそうですが、チームのメンバーも巻き込んでKotlinを活用していくためには、どんなやり方がいいと思いますか。

長澤:基本的にKotlinはJavaと共存させることができます。なので、まずはテストだけKotlinで書いてみるとか「お試し」のような形から、少しずつ適用範囲を広げていくというのがいいのではないでしょうか。それほど勇気はいらないと思います。

池田:これからKotlinについて勉強しようとするなら、どういう順番でやっていくのが一番いいと思いますか。

長澤公式サイトのリファレンスやチュートリアルは非常に充実しています。「Kotlin Koans」という、ハンズオンと問題集の形式で進められるチュートリアルは特におすすめです。まずは、このあたりで一通り手を動かしてから、次に進むといいのではないでしょうか。もちろん「英語が苦手」というのであれば、私の書いたKotlin本もお役に立つと思いますよ(笑)。池田さんは、どうやってKotlinを学ばれましたか。

池田:基本的には実際に触りながら、公式サイトはリファレンスをさらっと読んだ程度ですね。プロダクトに初めてKotlinのコードを入れたのはdata classを使った値をセットして取り出す機能だけを持つ2~3行の小さなプログラムでした。Javaで書くよりも、ずいぶんとシンプルに書くことができました。ヤフーでKotlinを最初にプロダクションコードへ出したのは、自分だと自負しています(笑)。

池田 惇(いけだ・じゅん)氏

 ヤフー株式会社 エンジニア。2011年度新卒入社。iOS・Androidのアプリ開発を行いながらPMや開発チームリーダーを経験。2017年10月より、Android版「Yahoo!ニュースアプリ」を担当。ユーザー数の多いアプリをさらに成長させることを目指している。最近の興味は子育て。

Android開発からサーバサイドへ広がるKotlinの世界

池田:Kotlinへの注目度が一気に上がったのは、昨年、Androidの開発言語としてKotlinが正式に採用されてからですね。

長澤:やはりGoogle I/O 2017で、Googleが公式にKotlinの採用を発表したことが、大きな転機になったと思います。あれ以降、ブログなどでの情報発信や勉強会が急に増えましたね。

 最近の傾向としては、クライアント側のAndroidだけでなく、サーバサイドでもKotlinを活用していこうという動きが盛んになっていると感じています。昨年の秋、サンフランシスコで公式イベントである「Kotlin Conf」が初めて開催されたのですが、全体で40を越えるセッションのうち、3分の1ほどは、Kotlinのサーバサイドでの活用がテーマになっていました。すでにクライアントでKotlinを使うのは当たり前になっていて、今後はサーバ側が盛り上がりそうだという雰囲気がありました。

 ヤフーでの、Kotlinの活用状況はどんな感じですか。

池田:先ほど、プロダクションコードに数行Kotlinを入れたという話をしましたが、実はその後、しばらくの間は特に進展がなかったんです。本格的にKotlinに取り組み始めたのは、あるとき、Javaで書こうとするとどうしても冗長になってしまい、きれいに書けない機能が出てきたことがきっかけでした。「これ、Kotlinならシンプルに書けるのでは?」という設計上の気づきがあって、1週間くらいかけてKotlinで書き直してみたところ大変うまくいきました。その経験から自信を得て、本格的に導入を進めだした状況です。

長澤:試しに使ってみた経験があって、それが本格展開のきっかけとなるインスピレーションにつながったということですね。現在は、どんなところにKotlinを使われているのでしょう。

池田:できるところから少しずつ入れていっている状況です。最近ではYahoo!ニュースのメイン画面など、比較的重要な部分にも使っていますね。Yahoo!ニュースのAndroidアプリエンジニアは3名なのですが、私以外のメンバーもすっかりKotlin好きになっています。最初は私がKotlinの導入をリードしていたのですが、今ではメンバーから「ここに使ってみようと思うのだけれど」と提案が出てくるような状況です。

長澤:それは素晴らしいですね。逆に、Kotlinを使うにあたって、つまずいたところや難しかったところなどはありますか。

池田:そうですね…。私はオブジェクトの初期化を遅延させるby lazyが便利で多用していたのですが、実は初期化のタイミングを変えるとうまく動かないところがあるというのが後で分かって、修正を余儀なくされたというのはありましたね。

長澤:Kotlin側の視点で見ると極めて普通の処理をしているにも関わらず、Android側でのオブジェクトのライフサイクルと組み合わせたときにズレが生じてしまうという感じですね。たしかにそういった話は聞いたことがあります。

 KotlinはJavaのエコシステムの一部を取り込む形で出てきたので、周辺ツールについてもJavaでの使い方を前提に、そのままKotlinで使おうとする人が多い印象を持っています。

池田:たしかに自分も、あるJavaのライブラリを使うときに、Kotlinとブリッジするようなクラスを自分で書いて、しのいだ記憶があります。KotlinはJavaと高い互換性がありますけど、周辺ツールを含めての完全互換というわけではないので、それを忘れているとたまに戸惑うことがありますね。

長澤 太郎(ながさわ・たろう)氏

 エムスリー株式会社 エンジニア。日本Kotlinユーザグループ代表。2012年3月に早稲田大学情報理工学科を卒業し、メーカー系SIerに入社。2013年10月にエムスリーに転職した。同社では、国内最大級の医療情報プラットフォームである「m3.com」のAndroidアプリの開発、医薬品情報サービス「MR君」Android版の開発を担当。「Kotlin」の発表直後より、国内での技術啓蒙、コミュニティ活動に取り組んでおり、『Kotlinスタートブック - 新しいAndroidプログラミング』『Kotlin Webアプリケーション - 新しいサーバサイドプログラミング』(いずれもリックテレコム刊)を上梓した。

Kotlinへの「漠然とした不安」をどう払拭するかが普及のカギに

長澤:業務の中でどうKotlinを使うかを考える際には、技術的な部分ももちろんですが、同じくらいに、チーム内や社内でKotlinの存在感をどう高めていくかも重要だと思います。そのあたり、池田さんはどのように進めてこられましたか。

池田:社内については、やはりGoogleがKotlinを公式に認めたことが大きかったです。「お墨付き」が出たことで、雰囲気は大きく変わりました。

 チーム内で広げていくにあたっては、当初、Kotlinに対する漠然とした不安を持っている人が多くて、それを払拭していくのが予想外に難しかったですね。

長澤:「漠然とした不安」ですか。どういうものなのでしょう。

池田:自分が使ったことのない新しい言語に対して、「難しそう」「導入コストが大きそう」と感じてしまい、実際には何が困るのかよくわかってないまま不安を持っている状態ですね。社内でKotlinの勉強会を開くと、「Kotlinすごい!」という雰囲気を盛り上げることはできるのですが、実際に使う「最初の一歩」を踏み出させるのが難しい。「Kotlinは導入コスト小さいよ」と言っても、現場のエンジニアの中には前述の不安を感じて躊躇してしまう人もいます。本人も不安の理由が明確ではない状態なので、説得しても簡単には変えられないんです。

長澤:その状況は、どう変えられたのでしょう。ペアプログラミングやコードレビューを念入りにやるといった感じですか。

池田:ペアプロなども併用しつつ、コードレビューは大量にやりましたね。書いている人のそばに張りついて、Android Studioを使ったコンバートまでを一緒にやってみせた上で「ほら、できたでしょ」と納得させるみたいなこともやっていました。

 「まずやってみる」ことで、その人の不安が根拠のないものなのか、そうでなければ、具体的にどこが難しいのか明確になるので、そこまで状態を持っていくことが大事です。その点、Kotlinは「まずやってみる」ことが許される素地があるという意味でも、使いやすい言語だと思います。

長澤:Kotlinのコードレビューは十分にできましたか。

池田:初めのうちは、お互いに「ここ、こんな書き方もできるんじゃない」とか「この機能が使えるんじゃないか」とか意見を出し合いながらやっていましたので、レビューというよりペアプロに近かったかもしれません。方針としては「いきなり完璧を目指さない」と決めてやっていました。

長澤:それはいい方針です。

池田:Kotlinは非常に表現力が高いので、勉強を始めたばかりに書いたコードと、学びながら使い続けて6か月後に書いたコードとでは、全然違うものになることもありますね。

長澤:表現力が高いがゆえに、使い慣れてくると「あの機能を使えば、ここはもっと格好良く書けるのでは!」という考えが止まらなくなり、後で読み返せないコードが増産される「暴走」が起こりがちなのですが、ヤフーではどうでしたか。

池田:言語の機能を「1つずつ試していく」ようにしているので、そういった問題は起こらなかったですね。たろうさんの業務では、Kotlinのコーディング規約のようなものは定めていらっしゃるのですか。

長澤:自分のチームでは決めていません。規約よりも、コードレビューで担保する形ですね。そこで、なるべく素直な書き方を是とするようにして「暴走」を防ぐよう心がけています。

池田:RxJavaとCoroutinesの関係をお聞きしたいと思っていました。これまで、Androidアプリの世界でRxJavaを使うのが標準的だったような処理が、KotlinのCoroutinesに置き換わっていくのではないかという議論もあります。それについてのたろうさんはどう考えていますか。

長澤:なかなか難しい質問ですね。個人的には、RxJavaが全部コルーチンに置き換えられるわけではないと思っています。ただ現実には、多くの人が主に「Future/Promise」、いわゆる「非同期」処理のためにRxJavaを使っています。そうした用途ではコルーチンのほうが素直に書けるので、結果的に置き換わっていくという形になるのではないでしょうか。

エンジニアとしてのブランディング戦略が「Kotlin」を選ぶ動機に

池田:ここからは、技術との向き合い方についてお話できればと思っています。これまでにエンジニアとして影響を受けた人や本などはありますか。

長澤:大きかったのは、Chad Fowler氏の書いた『情熱プログラマー ソフトウェア開発者の幸せな生き方』という本を読んだことでした。その中に「牧場で一番目立つ牛は『紫の牛』だ」という一節があったのですが、それを知ってから「人と違うものを身につけて、存在感を出す」ということを意識するようになりましたね。

 根が目立ちたがり屋なもので、勉強会でも、できるだけ発表者側にまわりたいという思いが昔からありました。ほかにも多くの発表者がいる中で存在感を出すためには、自分にしか話せないテーマを持てばいいと考えて、当時はまだマイナーだったKotlinという言語に目を付けたんです。

池田:その後、非常に精力的にブログや発表会での情報発信や、雑誌・書籍の執筆に取り組んでこられましたよね。私だったら、5年前の段階でKotlinにそこまで入れ込むことはできなかっただろうと思います。たろうさんの中で、将来的にKotlinが流行るといった予感のようなものはあったのですか。

長澤:正直なところ、始めた段階ではなかったです。発表直後は、Kotlinそのものも未完成の状態で、少しずつ機能を加えながら頻繁にリリースされていました。それを追いかけることで、ブログのネタにしやすかったというのはあります。

 そうしながら、英語のドキュメントを日本語に翻訳したり、Kotlinの紹介サイトを作ったり、発表会で話したりしているうちに、Androidコミュニティの知人から雑誌の執筆を紹介されて、それが書籍の執筆につながっていきました。

 Kotlinが正式版になり、最近Googleのお墨付きが出たことで、ようやく本格的に注目されるようになって、ホッとしているところはあります。なかなかブレイクする気配がなかったので、くじけそうになったことも何度かあったんですよ。

 記事を書いたり、人前で話したりするには、やはりきちんと知識を身につけておく必要があるので、リソースは相当注ぎ込んできました。性格的に損切りが苦手なこともあって、なかなかあきらめられずにいたことが、結果的によかったのかもしれませんね(笑)。

エンジニアとしての価値を高め続けるための投資戦略

池田:「Kotlinと言えばたろうさん」というブランディングは、かなり意識されてきたということなのですね。

 私は、どちらかというとプロダクト指向が強いと自分で思っているのですが、たろうさんの場合は、どんな技術を使うかは別にして「こんなサービスを作りたい」という思いはあるのですか。

長澤:そういう意味では、私はどちらかというと技術指向かもしれません。目指したい完成形のイメージを持っているというよりも、与えられたイメージを実現するのに、技術をどう使えばいいか、コードをどう書けばいいかを考えることに楽しさを感じるタイプですね。

 もちろん、どうせ作るなら面白いものを作りたいし、自分の作ったものを他人に誇れるようなものにしていきたいという思いは常にありますけれども。

池田:たとえプロダクト指向であっても、エンジニアであれば、最終的に重要なのは技術力だというのは私も感じています。気を抜いて立ち止まってしまい相対的に技術力が低下してしまうと、良いプロダクトを作ることはできなくなってしまいますからね。私としても、現場で高いレベルの技術力を発揮しつづけられるよう、技術面でも自分を磨き続けていきたいと思っています。

 最後に、たろうさんが今、Kotlin以外に気になっている技術があれば聞かせてください。

長澤:Webアプリと専用アプリの垣根をなくすと期待されているPWA(Progressive Web Apps)には注目しています。クライアント側の技術は非常に変化が早く、恐らく近いうちに、現在のように、人々が専用アプリをスマートフォンにインストールして使う時代は終わるだろうと思っています。業務で作っているアプリを、少しずつPWA化していくことを念頭に、個人的にも、しばらくはこの技術に投資してみたいと考えています。

池田:PWAについては、私も興味がありますね。自分も、業務の中にPWAを取り入れられるかどうか考えながら、チャンスがあれば手を挙げ、なければ自分でその機会を作れるよう取り組んでみたいと思っています。本日は興味深いお話しをありがとうございました。

【読者アンケートのお願い】


著:高橋美津
写真:小倉亜沙子

  • このエントリーをはてなブックマークに追加