LINEのAndroidアプリ開発体制

岡本雄三氏:モバイルエクスペリエンス開発室の岡本です。LINEアプリのAndroid開発について紹介いたします。まずは自己紹介します。モバイルエクスペリエンス開発室副室長兼マルチデバイスエクスペリエンス開発チームマネージャーの岡本と言います。よろしくお願いします。

2011年、私は当時のネイバージャパンに入社し、リリース直後のLINEアプリのAndroid開発エンジニアとして開発に参加しました。その後ユーザー数の増大に伴ってエンジニアも増えていき、開発チーム分割時にマネージャーに就任しました。

そして2021年に入って、アプリ開発チームの組織変更に伴い、モバイルエクスペリエンス開発室の副室長に就任しました。

初めに、LINEのAndroidアプリ開発体制について紹介していきます。LINEアプリ自体はみなさんよくご存知で、利用してもらっている方もいると思うので、プロダクトの詳細は省略して、すぐに開発体制の紹介に進んでいきたいと思います。

まず、ご存知の方も多いかと思いますが、LINEのアプリ開発はグローバルに行っています。現在は日本、韓国、台湾、ベトナムなどに開発拠点があって、日本の場合は今現在東京と福岡の拠点で開発者が仕事をしています。それぞれの国家のエンジニアたちが、同じ1つのリポジトリを共有して、アプリの機能開発や改善を進めています。本日は私が所属する東京側の組織について説明していきたいと思います。

先ほど自己紹介でも話したように、2021年に入って、クライアント開発チームの組織改編を行いました。これまではエンジニアをiOS/Androidのプラットフォーム別にチーム分けしていましたが、プラットフォーム間で細かな仕様の差が生まれるという弊害がありました。

これを解消するために、両プラットフォームのエンジニアを統合し、開発目的に沿ってチームを分割して、プラットフォーム間の差異を減らしていこう、ということで組織改変を行いました。また同時に、モバイルプラットフォーム上でのLINEの体験改善にコミットする専属のチームも立ち上げました。

こちらが、今現在の開発体制になります。こちらの開発センターには、LINEアプリを開発するクライアントエンジニアがおよそ50名ほどいて、プラットフォーム別で見ると、Android:iOSがおよそ1:1、同じ比率くらいでエンジニアが所属しています。

そしてセンターの下に、開発目的別に3つの室がありますが、本日はモバイルエクスペリエンス開発室をメインに説明していきます。

モバイルエクスペリエンス開発室は、モバイルプラットフォーム上でのLINEアプリの体験改善にコミットすることをミッションとしています。そしてマルチデバイスエクスペリエンス開発チーム、iOS/Android エクスペリエンス開発チーム、デベロッパーエクスペリエンス開発チームの3つのチームが存在しています。

マルチデバイスエクスペリエンス開発チームの取り組み

続いては、それぞれの開発チームの取り組みについて紹介していきたいと思います。まずはマルチデバイスエクスペリエンス開発チームの取り組みについて説明していきます。このチームでは、iOS/Androidのプラットフォームや複数のデバイス、iPhone、iPad、Androidスマホ、タブレットなどに向けて、LINEアプリ体験の改善を行うことをミッションとしています。

具体的な担当領域は、アカウントの作成・移行のフローやアカウント関連の各種機能、そしてマルチデバイス対応やプラットフォーム間で同一のUI/UXを実現するための共通デザインコンポーネントの実装を担当しています。また、ちょっとほかとは毛色が違いますが、テーマ機能のコア部分の実装なども担当しています。

これまでに担当した具体的な機能としては、パスワードレスログインというものがあります。ご存知のとおり、LINEはメインデバイス、iPhone、Androidスマホですね、のほかにサブデバイス、iPadやWindowsやMacで動くアプリにログインして、メインデバイスとサブデバイスを併用して利用することが可能になっています。

これまで、サブデバイスにログインするにはEメールとパスワードでログイン、もしくはQRコードを読み込んでログインする、という方法があったのですが、これはちょっと面倒くさかったり、不正ログインの対象とされるケースもありました。

そこでメインデバイス上の生体認証と連携することで、例えば、こちらの左側にあるように、デスクトップ版のアプリにログインしようとすると、メインデバイスであるスマートフォン版で本人確認することが要請され、こちらの右側にあるように、スマートフォン上のアプリで生体認証を使って本人確認することによって、それ以外にパスワードとかの入力も必要なしにログインが完了する機能になっています。

今後は、こちらを応用してアカウント移行などがもっと簡単に行えるようにする改善も、現在検討中です。

また現在進行中なものとしては、マルチデバイス対応があります。iOS側はiPadやApple Watchをサブデバイスとして利用すること可能です。ただしAndroid側は、アプリをタブレットやChromebookにインストールすることは可能なのですが、現在はメインデバイスとしての利用しか対応していません。

最近コロナ禍になって、大きな画面サイズのデバイスがよく利用されていることもあって、Android側もサブデバイスとして利用できるように、現在実装を進行中です。

iOS/Androidエクスペリエンス開発チームの取り組み

続いて、iOS/Androidエクスペリエンス開発チームの取り組みについて紹介します。このチームでは、各モバイルプラットフォーム、iOS/Androidに対して最新のOSやデバイスの新機能を取り込み、LINEアプリの体験改善を行うことをミッションとしています。

これまでも新しいOSがアナウンスされてから実際にリリースまでの間に、一時的なチームを作って新しいOSへの対応を組織横断で、集中的に対応するというタスクフォースはありました。このチームでは、このタスクフォースへのコミットメントを最大限に行うとともに、タスクフォースが存在していない間でも、最新OSやデバイスの新機能を取り込んでいくことに注力していくチームになります。

現在進行中のものとしては、Scoped Storage対応があります。ご存知のとおり、Scoped Storage自体はAndroid10から導入されたものですが、LINEアプリは影響範囲が多く、まだ完全に対応しきれていません。

このように、広範囲に影響を持つ変更に対応するのに、それぞれ影響のある機能の担当エンジニアが個別に対応方法を検討したり修正を進めたりすると効率が悪いので、このチームのメンバーが対応の旗振り役を担って、影響箇所の列挙や修正方法の提案、または共通ライブラリの実装などを行なって各機能担当のエンジニアをサポートしたり、またいくつかは実際に修正対応も行なって対応を進めています。

こちらについては、対応完了の目処がついてきており、同時にAndroid12についても並行して対応を行なっているところになっています。

またこちらのチームでは、Google Assistant連携についても対応を進めています。今現在LINEでは、Google Assistantと連携して、この左のイメージにあるようにLINEアプリを起動していなくても声でのみLINEでメッセージを送ったり、右側にあるようにトーク内で返信を行ったり、写真や動画を送信したりWebページのURLやスクリーンショットの共有をGoogle Assistantを介して行うことが可能になっています。

現在は1対1のチャットでのみメッセージが送信可能なのですが、これをグループ名を指定してメッセージが送信できるような改善も検討中です。

デベロッパーエクスペリエンス開発チームの取り組み

続いてデベロッパーエクスペリエンス開発チームの取り組みについて紹介します。このチームではビルド環境の改善やコード品質の向上のための各種活動の促進によって、開発者体験(DX)の改善を行うことがミッションとなっています。

このチームはほかのチームとは違って、アプリの実装を行うというのがメインタスクではありません。もちろん多少は行いますが、体験を向上させる対象がユーザーではなくて、開発者になります。

ビルド環境、開発環境の改善や開発を進める上での知識やベストプラクティスの共有などを行なって、開発者の開発効率や開発品質を向上させ、ひいてはアプリの品質向上に貢献していくことがミッションになっています。

ビルド環境の改善に関しては、現在ビルドスピードの改善に注力しています。iOS側は現在bazel buildといったものを利用していて、こちらは主に日本側でメンテナンスをしていますが、Android側のgrade buildは主に韓国側でメンテナンスしています。ただし改善したいことが多くて、日本側でもこのgrade build周りに詳しい人を増やしたいと思っているところです。

またビルドスピードの改善だけではなくて、開発者の開発効率を向上させるためのいろいろなツールも開発しており、その1つとしてBTS Botがあります。これはGitHub、BTS、CIの各種機能を連携させ自動化して、これまで開発者が手動で作業していたもの、BTSのステータスのアップデートなどを自動で行うことによって、DXを向上させることも行なってきています。

そしてコード品質の向上のための活動です。こちらは現在チーム開発を進める上で重要なコードの可読性といったものや、コードレビューに関するベストプラクティスといったものの共有や、プロセス改善などの検討を行っています。

Code Readability Sessionに関しては、コードの可読性の観点からコードを書く、読む際に気をつけるべき事項を新入社員だったり、新しく開発に加わったチームに解説をしています。こちらのコンテンツに関しては、実際に スライドが外部にも公開されているので、参考にしてみてください。

また各チームからすでにマージされたPRを、Review committeeと呼んでいますが、仮想な委員会を作って、その委員会のメンバーに送ると、レビュアーに対するフィードバックを行ってくれます。また、そのフィードバックに基づいたナレッジをメンバー全体に共有するといった活動もしています。

また最近導入した改善としては、2 Phase reviewといったものがあります。これは 1st reviewは通常のレビューで、コードオーナーがコードの正しさや読みやすさの観点でレビューを行います。

2nd reviewでは、ランダムでレビューアーが選択されて、背景知識がなくてもそのコードが読みやすいかといった観点でレビューを行なってもらいます。このようなコードの品質向上を行う活動を行なっているメンバーもいます。

作業環境と開発環境

最後に作業環境、開発環境について、軽く説明と紹介をしていきたいと思います。先ほどもちょっと話があったのですが、現在多くの開発者は、Work From Homeで作業をしています。もちろん、希望者はオフィスに出社して作業することも可能です。

また開発者は、基本的に完全裁量労働制のもとで作業をしています。開発マシンはiMac、またはMacBook Pro、希望すればその両方を使ったりすることも可能です。そしてドキュメントツールやコミュニケーションツールとしては、WikiやBTS、LINE、Slackといったものを利用して作業しています。

また開発環境に関して、IDEはAndroid Studio、リポジトリはGitHub Enterprise、CIはJenkinsを利用しています。

またそれ以外に、LINEはコードベースが多くて、ビルドに時間がかかるので、Gradle Enterpriseといったシステムを利用してビルドキャッシュを活用することでビルドの速度を上げたり、リモートビルド、Mainframerというツールを使って、ビルドをリソースが豊富なサーバー上で行なってビルド時間を短縮するようなことも行っています。

開発言語に関しては、今現在はメインでKotlinを利用しています。その他ライブラリに関してはJetpackなど一般的に多くのアプリ開発で使われているものをLINEでも利用していますが、自分たちで開発したLich libraryという、オープンソースで公開されている社内で開発したライブラリなども使って、開発を進めています。

以上で、LINEアプリのAndroid開発について紹介を終わります。もしモバイルエクスペリエンス開発室の取り組みに興味を持った方がいれば、ぜひとも応募していただければと思います。以上、ご清聴ありがとうございました。