【Team & Project】LINEアプリのAndroidクライアント開発をしているチームを紹介します

LINEの開発組織のそれぞれの部門やプロジェクトについて、その役割や体制、技術スタック、今後の課題やロードマップなどを具体的に紹介していく「Team & Project」シリーズ。

今回は、LINEアプリのAndroidクライアント開発チームを紹介します。マネージャーの岡本雄三と池永健一に話を聞きました。

LINEアプリのAndroidクライアント開発チームのzoom会議の様子

―― まず、自己紹介をお願いします。

岡本:LINEアプリのAndroidクライアントの開発を担当している岡本です。LINEがリリースされた直後に入社して、現在は2つのチームのマネージャーを兼務しながら、実際の開発も担当しています。

池永:同じくLINEのAndroidクライアントの開発を担当している池永です。LINEに入社して5年、LINEのAndroidクライアントの開発を始めて2年半ほどになります。

―― お二人がLINEに入った理由、働くやりがいなどを教えてください。

岡本:私はLINEアプリのリリース直後に入社したのですが、当時はNAVERまとめや検索アプリなどの新しいサービスを短期間で沢山リリースされていました。それぞれのサービスでUIがとてもシンプルで使いやすく、技術力が高いユーザフレンドリーな会社だと強く感じたことが入社の決め手です。

池永:私は前職の同僚の紹介で入社しました。入社前にLINEの開発について聞く機会があったのですが、ソフトウェア開発としての技術力が全体的に高く、少人数によるスピードのある開発ができること、プロジェクトの立ち上げからクローズも含めて、素早い判断が行われていることにとても魅力を感じました。開発者の意見が通りやすいということを聞いていたのも決め手の一つですね。入社直後はLINEのファミリーサービスの開発に携わっていましたが、その後LINEアプリのクライアント開発に携わるようになりました。規模感の違う開発を経験できるのはとても面白いです。

岡本:そうですね、様々な開発の経験ができるのはLINEならではですね。LINE上のサービスはどんどん増えてきて、多くの人たちの日常の役に立つサービスが提供できるようになりました。LINE自体すでに多くのユーザーがいるので、新しく開発したサービスもリリース直後から多くのユーザに利用してもらえて、良いこと悪いこと含めすぐにフィードバックを得ることができます。
私はマネージャーとして、それぞれのエンジニアが最大限に力を発揮できるように適性に応じてタスクの割り振りなどをしていますが、みんなに満足して仕事をしてもらえることが今は一番のやりがいです。

池永:LINEは長年開発されているアプリのため、サービス開始の当初に開発されたメンテナンスが難しいコードなど、技術的負債は多くあります。その乱雑な状態を解消し、他に影響が少ない形で理想的な構造を作るために日々私たちはプランニングしています。そういった技術的負債を返すことによって、次の人の設計に繋がることはとてもやりがいに感じますね。リファクタリングによって綺麗にコードを書き換えたりすることは、とても面白いですよ。

左からLINEアプリのAndroidクライアント開発チームのマネージャーの岡本と、開発担当の池永

―― チームの構成・役割などについて教えてください。

岡本:現在、LINEアプリのAndroid開発は、東京・福岡・韓国・台湾の拠点で働くエンジニアが関わっていて、それぞれの拠点でLINEのチャット・音声・ビデオ通話機能やタイムラインやニュース、決済機能など様々な機能開発をしています。 東京オフィスには20名ほどのAndroid開発エンジニアが働いているのですが、台湾・ベトナムなどのアジア圏をはじめ、フランス・オーストラリアなど様々な国籍の方がいます。6割程度が外国籍の方なので、基本的には英語を中心にしたコミュニケーションとなっています。全員が英語が完璧ということはないのですが、英語でのコミュニケーションに興味がある人じゃないと厳しい環境かもしれないです。逆に英語を使って学びながら働きたい人には非常に良いバランスの環境だと思います。

主に担当している業務としては、LINEのコア機能であるメッセージングやソーシャルグラフ管理、LINEスタンプ・着せかえショップなどの各種サービスを動作させるプラットフォームやLIFFに関する機能開発、基盤機能の改善およびModularizationなどです。

組織としては、LINE開発2室という名称のLINEアプリのクライアント開発組織があって、その中にApp Dev1~7チームという名称でAndroidとiOSの開発チームがそれぞれ複数存在しています。Android領域は現在3チーム構成で、App Dev1チームが主に登録・認証まわり、App Dev3チームがトーク関連機能、App Dev7チームがChannelやホームタブなどを担当しています。しかし、開発業務の重要性やそれぞれのチームの開発リソースに応じて、適宜他のチームの開発業務を代わりに担当したり、一部実装をサポートしたりと臨機応変に対応しています。

App Dev1チーム

アカウント登録フロー・認証関連
アカウントの新規作成・移行を行う画面における新規機能の実装や改善を行なったり、QR コード Login や 設定画面にある認証関連の新規機能実装や改善を行う。

LINT(LINE Improvements for Next Ten years)プロジェクト
「『LINE』の次なる10年のための改善」を目標とする組織横断プロジェクト。長い歴史を持つLINEが抱える技術的負債を解消するため、より利便性や信頼性の高いアプリを目指し、アーキテクチャ改善を行う。具体的にはクライアント−サーバー間の通信に利用しているSPDYプロトコルからHTTP/2プロトコルへの移行やネットワークレイヤーの実装のリファクタリングなど。

Modularization
Android の Dynamic feature module の仕組みを利用して機能ごとにモジュールを切り出し、build speedの向上やコードの責任範囲の明確化などを行う。また、Dynamic delivery の仕組みにより機能の動的配信を行えるようにして、アプリのインストールサイズの縮小も目指している。

App Dev3チーム

トーク関連機能
LINEのトークリスト画面やトーク画面、メッセージ送受信に関連する機能を担当。メッセージ送受信に関する新規機能の実装や改善、友だちやグループなどの Social graph の管理なども行う。

App Dev7チーム

Channel/LIFF関連機能
LINE上で動作するアプリのためのウェブプラットフォームである Channel/LIFF に関連する機能の新規機能の実装や改善を行う。

Home Tab
ホームタブ (旧友だちタブ)の新規機能の実装や改善を行う。

チームについて話す岡本

また、東京オフィスのチームでは毎日朝会を開き、ぞれぞれのメンバーのタスクと進捗管理、開発における課題管理などを共有しています。また、東京と韓国の各チームのマネージャー達が週1回TV会議を開いて、各チームやオフィスでの開発状況や問題点の共有、課題の検討なども行っています。
その他チームの活動としては、各メンバーがAndroidに関わらず興味を持った技術やツール、参加した勉強会やカンファレンスについて紹介をするチーム勉強会を週1回開催したり、有志で集まって技術本を読む会を開催したりするなど、技術のインプット・アウトプットをチーム全体として積極的に取り組んでいます。

―― チームメンバーを紹介してください。

岡本:先ほどお話しした通り、約20名のエンジニアが東京オフィスにはいるのですが、メンバーの国籍も様々です。
それぞれのチームでは、Kotlin coroutineがまだ検証段階の時から調査しLINE Androidアプリに導入した方、各開発者が可読性の高いコードをかけるようになるようにと、東京オフィスや各ブランチでエンジニアのマインドを向上させる為の活動をしている方、カンファレンスで登壇・受賞、OSS活動を積極的に行い多方面で活躍される方など多彩なエンジニアが集まっています。

―― 利用技術・開発環境について教えてください。

岡本:開発当初は主な言語としてJavaを利用していましたが、Kotlinへの書き換えを進めており、現在では約半分を超えています。新規機能の開発などはすべてKotlinを利用しているので、今後利用言語の割合はKotlinがどんどん増えていく予定です。また、ネイティブで書く必要がある部分に関してはCやC++で書いています。
基本的には一般的に使われているAndroid JetpackやGoogle mobile servicesなどのライブラリやフレームワークを使っているのですが、自分たち独自で作ったものも活用しています。例えば、Custom Lint、lich libraryやfeature flag、ApngDrawableです。

Custom Lint:コミュニケーションのオーバーヘッドが幾何級数的に増加し、メンバーの時間の大半を占めるようになります。静的解析は、時間コストを削減し、コードレビュープロセスを合理化し、大きなチームの同期を保つことに役立ちます。世界各地にいるチームの同期を保つことが納期のスピードアップにつながるので、コミュニケーションのオーバーヘッドを減らし、チームの生産性にプラスの影響を与えるために独自で作成しました。

Lich library:LichはAndroidアプリの開発を強化するライブラリ集です。すべてのライブラリはJCenter上で利用可能です。先ほどチームの取り組みでもご紹介しましたが、LINEのAndroidアプリではModularizationを進行して機能ごとにモジュールを切り出し、build speedの向上やコードの責任範囲の明確化などを行う予定で進めています。その際に利用できるlich componentというlibraryを実装してOSSとして公開しました。

ApngDrawable:Androidプラットフォーム用の高速・軽量なAnimated Portable Network Graphics(APNG)イメージデコーダライブラリです。KotlinとC++で書かれています。

feature flag:このプラグインは、プロパティファイルから機能フラグを生成し、機能フラグベースの開発を実現します。フラグの値はソースコードではブーリアン値として表示され、機能の有効化・無効化を行うのに便利です。どの機能を有効にするかは、ビルドバリアント、ユーザ名、アプリケーションのバージョン、別のフラグの値、およびそれらの組み合わせで指定できます。

また、LINEのAndroidアプリでは現在Kotlin coroutineを活用しています。このKotlin coroutineについては、チームメンバーの一人がまだ検証段階の時から調査していました。皆さんご存知の通り、Kotlin coroutine自体はとても強力な機能です。しかしそれ故に誤った使用をしてしまうと大きな問題となってしまいます。そのような問題が起きないように、そして様々なスキルレベルのエンジニアでも正しく利用できるようにと導入するにあたり、ドキュメント・規約の整備やutil classの実装準備を進めました。
このように私たちはLINEのメッセンジャーの基盤機能に新しい技術を導入したり、OSSの開発にも注力しています。

– 関連リンク –
Lich library
LINE Android アプリの開発をいかにモダン化していくか
SavedStateを手軽に扱う機能を追加した Lich ViewModel 2.0 をリリースしました
feature flag
Journey of Feature Flag development in LINE Android

―― 今のチーム課題を教えてください。

池永:大人数開発に起因する課題が主に私たちチームの課題です。例えば、コード品質に対する意識やスキルの違いは必ずあります。人数が多く様々な考えの人がいる中で完全に統一するのはとても難しいことですが、一定の品質を保つためにはとても重要です。

また、その課題を解決するためにPRレビューを行っていますが、実際はそのレビューのやり取り自体に多くの時間を割いてしまっている状態です。これは開発人数の多いプロジェクト全体の課題だけではなく、数名からなる私たちの小規模なチームにもそのまま当てはまる課題となっています。 その理由として、私たちのチームが開発を担当しているチャット機能は、LINEのメッセンジャーアプリの様々な画面に機能が絡んでいるため、大人数開発に起因してチームの受け保つコード領域が曖昧になってしまうからです。また、寿命の長いサービスなので、初期に開発されたスピード重視の開発による技術的負債も課題の一つです。チャット機能は一番古くからある機能の一つなので、技術負債が新しい機能に影響を及ぼすケースが多い為、重要な課題として解決に向けて取り組みを進めています。

チームの課題について話す池永

―― 課題解決に向けた取り組みを教えてください。

池永:コード品質に対する課題について、私たちチーム内ではコードオーナーとなるべき人を事前に数人選び、PRレビューではコードオーナーの承認を必須としました。また、コードオーナーの品質意識やスキルの共有のため、以下の流れで2段階のPRレビューを行なっています。これは、レビューする力を育てる目的もあり、全員がコードオーナーとなることがゴールです。

  1. コードオーナー以外がレビューをする
  2. コードオーナーがレビューをする
  3. コードオーナーのレビューを1のレビュワーにフィードバックする

また、コード品質の指針となるべきドキュメントを作り、それを社内外に共有することを精力的に行っているチームメンバーもいます。他チームのレビューを選択し、それのフィードバックを行うという活動も積極的に行われています。このような形で、コード品質に対する課題解決に向けて様々な方面から取り組みを進めています。

次にコード領域が曖昧になっているという課題についてですが、「モジュールを分けコードの責任範囲を明確にする」ということを取り組んでいます。
現在、AndroidではDynamic feature moduleという機能が導入され、フレームワークとしてのサポートを受けられる状態にあります。これを利用し、「トーク機能」の中でも重要なソーシャルグラフやメッセージのデータを切り出すことを行っています。現在はそれに向けて、曖昧糢糊としたインターフェイスを整備しているところです。
技術的負債における課題については、新規実装を行う際には常に既存の関連するコードをリファクタすることを徹底しています。その作業は常にモジュールを分けることを意識して行われています。

それぞれの課題に対して「いつまでに」という期限はないのですが、「コードオーナーの割合を増やす」、「チャット機能のコアデータにあたる部分のモジュールの切り出し」の二つは今私たちチームが持っている直近の目標です。コードオーナーの役割を増やすことが達成できると、開発品質と開発効率のアップに繋がり、今まで以上にスピードを上げた開発を行うことができます。 またモジュールの切り出しを達成することで、LINEのメッセージングアプリのコアとなるデータを守ることに繋がります。その状態にすることによって、よりアグレッシブなリファクタや、パフォーマンス改善を行うことができるようになります。

―― 最後に、LINEアプリのAndroidクライアント開発チームに興味を持ってくれた人にメッセージをお願いします。

私たちのチームでは、日本だけでなくグローバルに展開し、数億人のユーザが利用する大規模なアプリケーション開発をすることができます。国際色豊かなチームや国外の他拠点チームとの協業などグローバル環境で働くことに興味がある方、大規模コードベースの内部構造改善やアプリのパフォーマンス改善に取り組んでみたいエンジニアの方は、是非私たちのチームに参加してください!

LINEアプリのAndroidクライアント開発チームではメンバーを募集しています。

Android クライアント開発エンジニア / LINEアプリ

Related Post