Dear Great Hackers

  1. イベント

NewsPicksと開発者体験、そしてJavaからKotlinへ〜「Qiita Engineer Summit 2021 Winter」イベントレポート


2021年12月17日、エンジニアとして活動している方を対象にしたオンライントークセッション「Qiita Engineer Summit 2021 Winter」が開催されました。こちらは、“Be a Contributor”がメインテーマとして据えられて、「エンジニアリングは社会に、そして世界にどう貢献できるのか?」を各企業が考え、取り組むそれぞれのエンジニアリングについて語るべく、Qiitaが主催したものとなります。

第3弾のセッションテーマは「NewsPicksと開発者体験、そしてJavaからKotlinへ」。「経済を、もっとおもしろく。」をコンセプトに、ビジネスパーソンや就活生向けのソーシャル経済メディアを提供している株式会社ニューズピックスによるセッションです。2020年2月にCTOとなった高山 温氏の開発に対するスタンスが「開発者体験」ということで、具体的にどのような取り組みを進めているのか、本記事でレポートします。

※本レポートでは、当日のセッショントーク内容の中からポイントとなる部分等を抽出して再編集しています。

登壇者情報

高山 温
株式会社ニューズピックス
執行役員 CTO(※肩書きはイベント登壇時。現フェロー)
イギリス・カナダで物理を学んだ後に2012年にピクシブ株式会社に入社。同社では主にサーバーサイドエンジニアとしてチームリーダーや新規プロジェクトの立ち上げ担当を歴任した後に、2016年12月から2019年12月まで執行役員CTOとしてエンジニアリング組織づくりなどを務めた。2020年2月よりニューズピックスCTOに就任。

NewsPicksと開発者体験


高山:まずは「NewsPicksと開発者体験」ということで、主に僕が入社した2020年以降の話をしていきます。2021年2月に開催されたDevelopers Summitで、その前の1年を総括するような発表をさせていただきました。
NewsPicksは2013年に誕生したサービスで、創業期から周辺サービス含め、多くの機能を作ってきました。2013年から2018年までは15人ほどのエンジニアで作ってきたとのことで、全員が全部の場所をだいたい知っているみたいな感じでやってきたみたいです。その後2年ほどで開発メンバーの数が一気に50人程度になり、少人数だったらできていたことがうまくできない、というフェーズに入っていきました。具体的には、新規の開発が先行して開発効率が後回しになる。「開発者が増えてもスピードが出にくい」という、まあよくある話の状況になってしまったわけです。
これに対してすごく良い本として『LeanとDevOpsの科学』という本を布教しまして、キーメトリクスとして「デプロイ頻度」をKPIにし、またSLOなどいくつかの品質にまつわる指標を定点観測して、ガンガンと改善していきました。そんな発表をDevelopers Summitで行いました。

高山:この他にも、Qiitaさんとの文脈で言いますと、共同でイベントを開催して「ビジネス中心に7年間走り続けたAndroidをリアーキしてる話」や「デザイナー×フロントエンドエンジニアで追求する最高の開発者体験」を、会社のメンバーと一緒に発表しました。また広報面でも、同じく最高の開発者体験について取材をしていただきました。何かと言うと「開発者体験をどんどん良くしていく」ということで、こればかりはやってもやり尽くすことがないと言いますか、終わりがない旅になっていて、みんなで使うツールをみんなで良くして、みんなで効率を上げていきましょう、みたいなやり方をしています。

※参考記事
DX時代に注目される開発者体験(Developer eXperience)の重要性。「Qiita × Uzabase Tech Meetup #2」イベントレポート
「最高の開発者体験」を実現したい。急成長する「NewsPicks」ブランドの開発思想を探る

高山:2020年と2021年のやったことをまとめたものが、こちらになります。
2020年には、例えばデプロイに関して、色々な作業を通じて一時間半ほどかかっていたところを、今だと10分で出来るようにしました。また、SLOを常にモニタリングして、これはやっていいんだろうか/悪いんだろうかといった属人的な判断を減らし、「SLOを満たしているから僕たちは大丈夫だよね」みたいなスムーズな判断ができるようにもしました。
同じように2021年も、開発者体験を元に長期的な技術基盤を整えていきました。例えばこれは信じられない人もいるかもしれませんが、今まさに、jQuery + CoffeeScriptだったところを、React+Next.js + GraphQL(Apollo)というスタックに変えている最中です。そして最後のKotlin化について、本日じっくりとお話ししたいと思います。
このように、開発者体験というところをベースにしていくと、会社として良い挑戦ができていくと、結論から言うとそういう話になります。

開発者体験とKotlin

高山:次に「開発者体験とKotlin」ということで、皆さんKotlinという言語のことはご存知だとは思いますが、「Javaを書いてきた会社の中でのKotlin」ということで聞いていただければと思います。
こちら(上スライド)は2017年に配信された「NewsPicksによるサーバサードKotlin活用事例」ということで、現在Chief Product Officer、当時はエンジニアだった文字(もんじ)という者がサーバーサイドKotlinについて発信して、色々挑戦していますということを発表をしていました。この時、僕はまだ入社していなかったのですが、それまでにこういった積み上げがあって、僕が入った時には社内ではKotlinがちょこちょこ使われるといった状態でした。

高山:先ほどもお伝えしたとおり、NewsPicksの歴史が2013年に始まって今に至るのですが、元々Javaで始まったNewsPicksから、こういう感じでマイクロサービスだとかサテライトサービスについては、だいたいKotlinですという状態でした。そして直近の2021年に、会社の言語をJavaから全部Kotlinにしていこうという形で打ち出しました。2021年8月には、NewsPicks本体と呼ばれるメインのシステムでもKotlinが使えるようになったので、今後は段階的に移行予定となっております。

高山:今更ですが、Kotlinには開発体験を後押しする数々の言語機能があります。先ほどの「僕らKotlinで今後いくぞ」という発表をした時に、社内の声としては「書きやすい」ということでボイラープレートのコードが減るよねとか、あるいは「入門しやすい」ということでJavaとそんなに変わらないとか、IntelliJというエディターがすごく強烈にサポートしてくれるとかが挙がりました。あとは「モダン」ですね。例えばC#だとはるか昔から当たり前にできてたことが、Javaだと最新版になってもそこまでいってないってやつがちゃんと出来てることが凄いとか、そういう話もありました。

高山:もう一つは「ぶっちゃけどっちでもいい」というものもあります。つまり、書く必要があれば書くし書く必要がなければ書かない、みたいな人もいました。この意見はすごく重要かなと思ってます。
Kotlinにしたいという強烈な人も居るには居ます。そういう人たちが推進してくれてやっているのですが、そう思うほど他の人は気にしないといいますか。例えば、もっとお客さんに対する価値を届けていきたいんだとか、Kotlinも良いけど今はデータサイエンスに興味あるんだとか、フロントエンドに興味あるんだとか、そういう人もいる。つまり、色んな開発者がいるわけです。その中ですごく重要なことは、「絶対にKotlinは嫌だ」と言う人はいなかったことですね。もし僕たちが、仮にJavaからGoにいきますとかRubyになりますとかって話になっていくと、「ちょっと待て」という声は絶対にあるはずです。
Scalaという言語がありまして、僕は数年前にScalaを結構書いたのですが、ウィザードのための言語という風に呼んでいました。Kotlinはウィザードのための言語ではないなと思っているので、そういう意味でも開発者体験は良いなと思っております。

会社のメイン開発言語を変えるということ

高山:「会社のメイン言語を変える」という時に、僕はCTOという立場でこの判断をしたのですが、その時にどういうことを考えていたかということを次にお話しします。皆さん、メンバーが開発言語を新しく増やしたいという話を持ってきた時にどう思いますか?感度が高い皆さんであれば「それは良し、なぜやらないのか」という話になるのかと思いますがちょっと待ってください。

高山:そもそも開発言語を増やすというのは、すごく高くつくと思ってます。例えばGoogleは数万人規模、開発者5万人とかになるまで、メインの言語はC++、Java、Python、JavaScriptだけだったんです。最近は他の言語もOKになってるみたいなんですけど、本当にそういうものなんですね。他のGAFAの会社も似たような状況だし、「開発言語がものすごくいっぱいあります」という会社は、NewsPicksを含むユーザベース全体で見たらものすごくいっぱいあるのですが、NewsPicksとしては今までJavaとかPythonとかこのくらいのスタックしかなかったんです。つまり、世の中全体として、開発言語を増やすことは高くつくってことは認識されていることなんだと、僕は理解しています。
また、多くの会社にとって開発言語の選択というのは、数年に一回あるかないかという話もあると思っています。もちろん、むちゃくちゃ選ぶ会社というのもあるにはあるでしょうが、レアケースかなと。どんな開発言語の選択をしたとしても、完全な移行というのはまずないですよね。長期間併存するっていう前提で考えないといけません。あとは、社内文化がどうしても分断されがちというのもあります。Javaを書きたい人、Goを書きたい人、Rustを書きたい人みたいな感じで分断が起きてしまうのを会社全体として良しとするかどうかは、重大な戦略かなと思っています。
もちろん、金銭的にも大きな投資になりますし、リスクが大きいという点もあります。間違った選択をしたと思った時に、それがすごく尾をひいてしまう。なかなか軌道修正するというのが難しいです。それを思って僕自身はCTOとして、開発言語を増やしたいという気持ちは良く分かるが、ほとんどのケースは移行なんてしない方が合理的だというのが、第一にくる判断です。
ただし、その上でNewsPicksでは、言語を増やすという選択をすることにしました。

なぜ「NewsPicksは」開発言語を変更するのか

高山:なぜそういう選択をしたのかと言うところで、最近プロダクト開発組織のチームビジョンというものを作りました。これは僕たち自身がどんな姿でありたいか、どんなチームでありたいかを言語化したものです。開発メンバーみんなで意見を持ち寄って、こういうキーワード入れたい、こういうところに自分たちってワクワクするよね、というのを書き出していって短く言語化していきました。
「個の強みを活かす。」とか「ワクワクしながら不確実性に飛び込む。」、「現状維持ではなく未来を創るための挑戦をしよう。」など、こういうのに自分たちワクワクするよね、っていう風に決めたわけです。
なので、開発言語を増やそうとか変えようという判断になった時に、よりワクワクする方、より挑戦する方を選ぼうと思って、変化を起こすことに決めました。

高山:なので、少なくともNewsPicksにとっては、Kotlinは合理的な選択だったと思っています。
まずは「JavaからKotlinというのはメンバーにとってはすごく自然だった」ということで、4年以上僕たちはKotlinと付き合ってきたからこそ、ボトムアップで新しいマイクロサービスを増やそうという時に、自然に選択肢になっているという状況が、僕が入った時には既にできていました。そういう、ある種「非公式で使ってもいいよ」という存在だったところから「公式にこれで行こう」と背中を押してあげることが、まずは大事なんだろうなと思ったのもあります。その流れが加速していって、「選んでもいいんだ」から「選ぶべきなんだ」という風になっていくと。こういうのはトップダウンだけでも成功しないと思いますし、ボトムアップだけでも上手くいかない。それがバチっと噛み合うところがKotlinという選択でした。
それから、「みんなで使うツールをみんなで良くして開発者体験を高めていこうという文化」を、僕も含めてチームメンバーで大事にしていきたいと思っています。プログラミングに強いエンジニアはKotlin化を後押ししていけば良いし、Kotlinにあまり興味ないがお客さんにとって大事なプログラムや体験を作りたいんだって人は後押ししてくれる人の上で開発すればいいし。テストに強いエンジニアとかデータサイエンスに強いエンジニアとか、得意領域で活躍していくためにも、みんなで使うツールをみんなで良くするという考え方でやってます。
さらに、変化を作っていこうと会社として宣言することで、その「コスト」と「リスク」は会社として負っていくべきものなんだと示せたことも、また良かったかなと思っています。そして、それをチームビジョンとして明文化して、どういう風に書けばいいのか悩ましいところは開発基盤のチームに協力してもらいながら、会社全員で扱えるようにしていきました。

高山:最近Kotlinとは違うんですが「Next.js Update!」というイベントがありまして、弊社のメンバーが「Web Frontend Unitの立ち上げとリアーキテクチャに際してNext.jsを採用したワケ」という発表をしました。このスライドの中でも、僕の今日のテーマとすごく似たような話をしています。
「より今のフロントエンド技術を取り入れやすい環境にするためにリアーキテクチャを実践中で、迷ったら挑戦する道を選ぶということを、変化を起こしていくことで可能にしていきたい」という内容です。Next.jsの話をするというよりも、組織としての挑戦にたまたまNext.jsを選んで用いている、ということで発表してくれました。正にこのあたりが組織を貫く文化かなと思っています。

これからについて

高山:最後に、これからの話をしたいと思いまして、要するに「決断してからが本番」かなと思っています。
どういうことかというと、Kotlinにしようとか既にKotlinを使っていた人たちはアーリーアダプター、イノベーターだったのかなと思ってます。それに対して僕たちは、レイトマジョリティやラガード、こう言ってしまうと遅れているみたいに思いますけどそういう意味ではなくて、UXに強いとか機械学習に強いといった人たちも含めて、Kotlin化の波に巻き込んでいくことがしていきたいと考えています。なので、社内でKotlinを書くということが自然であって、迷ったら社内のどこかに解決手段があるという状態にまで持っていきたいのです。
例えば僕たちは「社内Kotlin知見共有会」というのをやっていて、ここの雰囲気作りも大事かなと思っています。初心者の人でも質問大歓迎で、前にも同じことを言ってた人がいた、みたいな発言は絶対言ったらダメ、誰しも皆初心者からはじまるんだから、というような感じでKotlinを使っている人たちの知見を聞こうという会を開いています。
また結構重要な取り組みとして、「優秀なコピペ元」と呼んでいる、たとえばJavaではこう書くんだけどKotlinだと良くわからないという処理があった時に「こういう場合はこう書け」みたいなものを社内ブログでどんどんと増やしています。
あとは、社内外への発信や、「Kotlin Premier2021」のリアルタイムSlack翻訳などを通じて、Kotlinの文化を盛り上げていってます。これがその時のまとめですね。こういう感じで、発表を箇条書きにして英語の発表を聞きながら日本語に翻訳して、Slackに投げていくということをやっていました。

高山:そして、ここまでの取り組みを前提に、「やるからには日本一を目指す」というのをやりたいなと思っています。僕は「技術を使っているだけ」というのはかっこ悪いと思っています。技術を使うからには、日本一使いこなしているというところまで持っていきたいと思っております。考えてみてください、今からJavaで日本一を目指せますかと。それよりもKotlinで日本一を目指そうと。そっちの方がチャンスがあるんじゃないかと思っています。

高山:まとめますと、「NewsPicksではKotlinを日本一使いこなしたいエンジニアを募集中」となっております。ぜひ応募していただければと思います。僕の発表は以上になります。

取材/文:長岡武司

関連記事