Interview/

Ishikawa/ Rogers/

ーー自己紹介をお願いします。

石川

LINEのメッセンジャーのAndroidクライアントを開発するチームに所属しています。LINEには2015年に入社し、トークルームの機能実装やコード品質向上、開発環境の改善などに取り組んできました。

Rogers

2009年にLINEに入社しました。もう10年経ちますね。LINEには5年働くと10日連続で休めるリフレッシュ休暇制度があるのですが、来年その制度を使うのが2回目になります(笑)。元々はJavaを書いていて、2年半くらいJavaエンジニアをした後にiOS開発のチームに異動しました。
LINEのiOSアプリにローンチから関わっています。領域としては、ネットワーク通信、データベース周り、スタンプショップなど何でもやりました。最近やっていることは、「LINE DEVELOPER DAY 2019」で話すので、ぜひ聞きに来てください。

石川

私も2017年のLINE DEVELOPER DAYで発表したことがあります。あと、最近書いたブログが結構反響があったのが嬉しいです。このブログ記事はコードの可読性を向上させるためのアイデアをまとめたスライドの解説で、そのスライドは700ページを超える大作です(笑)。

左:石川 / 右:Rogers

ーークライアントエンジニアの組織や役割を教えて下さい。

石川

我々は二人とも、LINEのメッセンジャーのクライアントを開発する組織に所属しています。室という中規模組織の中にAndroidとiOSのクライアントチームがそれぞれ複数あって、メッセンジャーの中でも機能領域によって分担して担当しています。Androidエンジニアは合計で約15名が所属しています。

Rogers

iOSエンジニアは20名くらいいるので、メッセンジャーを担当しているクライアントエンジニアが両OS合わせて35名ほどという組織ですね。あと、福岡や韓国、台湾、ベトナムの拠点にもメッセンジャーに携わるクライアントエンジニアが居て、合計するとAndroidもiOSも50名以上は居ると思います。
もちろんLINEが提供しているサービス・機能はメッセンジャーだけではないです。LINEのメッセンジャーは開発がすごく大規模なのでクライアント専門のチームがありますが、その他の様々なサービスには担当の開発組織が付いていて、そのそれぞれにクライアント開発をするエンジニアが所属しています。

石川

機能ごとに組織が分かれていても、仕事上で組織をまたいで関わることは多いです。他のサービスの機能をメッセンジャーに連携する場合などは、それぞれのクライアント担当が協力して開発を行います。また、設計の相談などは組織をまたいで行うことも多いですね。

ーー具体的な業務内容を教えてください。

Rogers

私が最近やっているのはビルド環境の改善とか、コンパイラの中を見たりとか、チームメンバーが書くSwiftのビルドエラーの原因を見つけるようなサポートとか。直接機能を作るような仕事は最近あまりやってないですね。

石川

我々二人は、最近だと典型的なクライアントエンジニアとしての仕事はしていないですよね。私の最近の仕事としては、他の人のコードをレビューして設計改善の提案をしたり、先ほども少し触れたコードの可読性についての解説を行ったりしています。

一般的なLINEのクライアントエンジニアの仕事を説明すると、コードの改善を行いながら、並行してユーザビリティを向上する機能開発をすることが多いです。例えば最近、複数の写真をトークルームに送信すると、写真をまとめて表示する機能が実装されました。こういう機能を実装する際には、既存のデータベース構造やプレゼンテーションロジックの設計を考慮した上で、コストとユーザビリティのバランスを取りながら実装を進める必要があります。

ーー今そして今後の課題はなんでしょう?

Rogers

現在メッセンジャーのiOS開発ではコードをモジュール化しているんですけど、もっとテスト性の高いコードにリファクタリングしたいと思っています。本当はもっと前から取り組まないといけないことだったのですが、LINEアプリももうローンチから8年経っていて、大規模に見直さないといけない部分もたくさんあります。これは私たちが直接関わっているものではないですが、LINT(LINE Improvement for Next Ten years)という次の10年に向けて技術的負債を解決しようというプロジェクトも走っていたり、積み重ねたものが多いからこそ大変な部分もありますね。

石川

そこはどちらのOSも共通です。一般論として、技術的負債を0にするのは非現実的です。ただ、持続可能な開発を目指して環境を改善し続けるということは、我々の課題であると同時に、LINEのメッセンジャーのような大規模なアプリだからこそできる経験だと思います。LINEにはメッセンジャー以外にも、歴史や多くのユーザーや大規模コードベースのあるたくさんのプロダクトがあって、今後を見越した改善を続けています。

Rogers

私たちが最初にLINEをシンプルなメッセンジャーとして作っていたときに、今の姿を想像できていた人はいないです。たくさんの機能や連携の追加をしていく中で、どうしても最適じゃないチョイスもしてきました。そういう環境で、サービスの成長のために何が新しく必要で、何を見直す必要があるのか、エンジニア自らが課題を見つけて取り組むのが、LINEらしい開発スタイルだと思っています。

石川

私たちはLINEも他のサービスもまだまだ成長させるつもりですし、金融などの新しい事業にもたくさんのチャレンジをしています。LINEという会社は常に新しいサービスを準備していますので、そういう希望があれば面接や入社後にも伝えていただければチャンスがあるはずです。

ーークライアントエンジニアに必要な素養やスキル、志向性などはありますか?

石川

LINEで働いているクライアントエンジニアはみんな実装力は高いです。だからこそ、コードレビューを通じてより良いコードとは何かを考える力を高めたり、他の人のコードを見て学ぶ、指摘を受けて学ぶといった姿勢は必要だと思います。
あと、LINEのような巨大なコードベースに対して、エンジニアとしてどうしたら貢献できるのかということを、一歩引いた視点で考えられる人だといいと思います。仕様とコードの間で、あるいはユーザビリティとコードの可読性の間でバランスを取ることは、エンジニアにしかできない仕事です。
この辺は今居る我々にとっても課題です。単に実装力が高いというだけではなくて、その力を活かしてチーム全体の生産性について考えられる人に来てほしいですし、そういう志向性のある人を育てていきたいとも思っています。

Rogers

あとは単純に言うとサービスを作るのが好きな人、コンピュータサイエンスが好きで勉強することが楽しい人ですね。基礎知識があって、さらに学習する能力や意欲があることは大事です。技術プラットフォームのトレンドや仕様は毎年変わりますし、その変化や勉強を楽しめないとエンジニアとしてポジティブに働き続けることは難しいです。新しい技術を使うことでユーザーのメリットになることも、自分の仕事が楽になることも多いので。

石川

そういう意味で、とりあえずコードを触ってみたり、動かしてみることが好きな人には向いてる仕事だと思います。これはクライアントだけではないですが、LINEのエンジニアはだいたい開発が好きで楽しくてやってる人が多いと思います。ピュアなエンジニアの仲間がたくさんいて楽しいですね。

Rogers

あと、クライアント開発の良いところで他の領域と違うのは、クライアントはクライアントとして開発領域が閉じていること。ネットワークのようなレイヤーからユーザーが直接触るUI実装のようなレイヤーまで、幅広い開発ができます。

ーー活躍している若手、伸びる人の特徴はありますか?

石川

Android クライアントチームでは、Android に限定することなく、いろいろな技術や知識に触れている人が活躍している印象があります。新しいプラットフォームを採用したり、複数の設計の候補を比較して最適なものを選ぶ時などに、そういった技術や知識が有利に働くからだと思います。

Rogers

自然な意欲とか好奇心があって、アルゴリズムとかデータ構造とかのコンピュータサイエンスの基礎知識がしっかりしていれば、ほとんどのことはできるようになると思います。

ーー最後に学生の皆さんにメッセージを。

石川

エンジニアとしてキャリアを伸ばしていくには、スペシャリストになることも大切ですが、それと同じぐらいどの分野でも共通して使われる知識や技術を習得することも重要だと思います。例えば、プログラミングパラダイムとかソフトウェア工学とかですかね。弊社に限らず、それらを習得できる環境は多種多様にあるので、いろいろな会社を比較しながら進路を決めてもらえればと思います。

Rogers

iOSもAndroidもたくさんの経験を持っている人がいますし、新卒入社のメンバーも本当に活躍していて、みんなお互いを尊敬しています。尊敬できて良い刺激を与え合えるエンジニアたちと働けることは価値があります。ぜひ私たちに新しい刺激を与えてくれる方と一緒に働きたいですね。ご応募をお待ちしています。