2021年11月10日・11日の2日間にわたり、LINEのオンライン技術カンファレンス「LINE DEVELOPER DAY 2021」が開催されました。特別連載企画「 DEVDAY21 +Interview 」では、登壇者たちに発表内容をさらに深堀り、発表では触れられなかった関連の内容や裏話などについてインタビューします。今回の対象セッションは「すべてのLIFFアプリ開発者の開発体験を向上させるために」です。
LINE上で動作するWebアプリケーションを開発するためのプラットフォームとして、LINEではLIFF(LINE Front-end Framework)を提供しています。このLIFFの開発において重視していることの1つに、利用する開発者の開発体験の向上があります。そのために、LIFFの開発チームは様々な取り組みを進めています。
今回はLIFFの開発チームが開発体験を重視する理由、そして開発中のプロダクトなどについて、開発をリードする岡本拓也と、開発体験の改善に取り組む上野康平が語りました。

左から上野康平、岡本拓也
開発者の不満を受け止め、開発体験の向上に取り組む
――LINE DEVELOPER DAY 2021で語られた、LIFFの開発者体験向上を目指した取り組みはどのようなきっかけで始まったのでしょうか。
岡本:LIFFの最初の利用者となるのはデベロッパーです。そのデベロッパーは、LINEが提供するLIFFの機能を用いてサービスを作り、エンドユーザーはデベロッパーが開発したサービスを通じて価値を受け取ります。つまり、デベロッパーに一貫した機能や開発環境を提供すれば、結果的にエンドユーザーにも一貫したUXを提供することが可能です。
開発面におけるLIFFの強みとして、初めてLIFFに触れる開発者でもそれほど悩まずにアプリを開発できるとっつきやすさがあります。ただ継続して開発を行い、LIFFへの依存度が高まると不満が生まれる傾向がありました。実際に外部のデベロッパーから、デバッグがしづらく開発しづらい、結果的に開発のテンポが下がるといった不満の声が寄せられていました。
LIFFを使ったコードを書けば書くほど、つまりLIFFでサービスを作れば作るほど不満が生まれるといった構造を解決し、開発者体験の向上を図る必要がありました。このような背景からSDK内部の実装を「Plugin-able Archtecture」へ移行し、さらに負荷試験や単体テストを容易に実施できる「LIFF Mock」や、普段のWebアプリ開発と同様のデバッグ体験を提供する「LIFF Inspector」などを開発することになりました。
LIFFの開発体験向上の土台となるPlugin-able Architecture
――Plugin-able Architectureへの移行は、LIFFにとって大きな転換点になる変更だと思いますが、それによってどのようなベネフィットが生まれたのでしょうか。
岡本:まず独自のAPIをプラグインとして実装できるようになったことがあります。これにより、LIFF SDKを容易に拡張することができるようになりました。また開発したプラグインは、機能拡張として第三者へ公開することが可能です。
すでにLIFF SDKはこのPlugin-able Architectureで動作しているため、同様のAPIを外部の開発者の方でも開発できるようになりました。
またすべての人にとって必要ではない機能を追加する際、それをプラグインとして実装することにより、本体サイズの増大を避けられることもメリットだと考えています。
たとえば外部のペイメントサービスをLIFFアプリで利用するといった際、その機能を本体側に組み込んでしまうと、そのサービスを使わない人にとってはファイルサイズが大きくなるというデメリットしかありません。しかしプラグインとして実装すれば、必要な人だけが読み込めばよく、不要な人にまで影響が及ぶのを防げます。
また本体とは別に開発することが可能であるため、単体テストを書きやすいこと、そしてパッケージ管理が容易になることもPlugin-able Architectureのメリットです。
上野:従来のコードに対する大がかりな変更となるため、開発は大変でした。従来は1つのレポジトリですべての機能が絡み合っている状態であり、それから1つひとつの機能を分離し、それを最終的にプラグインの形でまとめる必要がありました。そのため、かなり根本的な部分から手を加えています。
ただ今回頑張ってPlugin-able Architectureを実現したことで、将来の機能拡張などに向けて作業しやすい土台を作ることができたと考えています。
開発者のテスト負担を軽減するLIFF Mock
――従来のLIFFはデバッグしづらかったとのことですが、開発者の方々はどのようにデバッグしていたのでしょうか。
岡本:オープンソースで公開されているものに、ブラウザーの画面上でGoogle Chromeの開発者ツールと似た機能を提供するツールがあり、それを利用してデバッグを行っている開発者が多いようです。
上野:ただ、そのツールは不安定な面があるほか、一部の情報を取得できないといった問題があります。またデバッグオプションをオンにすると、LIFF本体のアプリケーション側に影響が生じ、挙動が変わるといったデメリットもありました。
このようなデバッグ面での課題を解決することを目的として開発したのがLIFF MockとLIFF Inspectorです。
現在LIFFプラットフォームは、サーバー負荷の観点からLIFFアプリの負荷テストを許可していません。またLIFF SDKはサーバーに強く依存しているため、単体テストが書きにくいといった課題もありました。これらの課題を解決するのがLIFF Mockです。
特に負荷テストのニーズに対して、どう改善すればそれを実現できるかについて色々と考えていました。また、それを実現するための機能を提供する際に、開発者にとって使いやすいものでなければならないという目線もあり、要件定義はなかなか大変でした。
実は当初、Mockサーバーを立ててもらい、そこにLIFF SDKが接続するといった方式も考えました。しかしMockサーバーを立てる手間が発生しまうことや、今回のPlugin-able Architectureのメリットを十分に活かすことができないといったデメリットがあったため、SDKで完結するモックをプラグインとして提供することにしました。
使い慣れたツールでのデバッグを可能にしたLIFF Inspector
――LIFF Inspectorの開発も苦労したのではないでしょうか。
上野:先ほどお話したように、すでにオープンソースに同様のツールがあったため、それと同じものを作っても意味がないと考えていました。また、オープンソースのツールにあった課題を解消しつつ、LIFF特有の価値を提供する必要があり、その価値をどこに見出すかを考えるのは苦労した部分です。
また、LIFF Inspectorで使っているGoogle ChromeのDevToolsは、このような使い方は想定されていないため、多くのことがドキュメント化されていませんでした。そこでGoogle ChromeとDevToolsの通信に使われているプロトコルを読みつつ、実際の通信の内容を見てそれを再現するといった形で、LIFFアプリのネットワークログとコンソールログの監視、そしてDOMインスペクションを実現しています。
このLIFF Inspector内部では、私たちが開発した「Headless Inspector」を利用しています。これはUIを持たないWebインスペクタであり、JavaScriptの各メソッドコールに応じて「headless-inspector-core」と呼ばれるパッケージが様々なイベントを発生させ、そのイベントを「headless-inspector-cdp」がDevToolsのプロトコルに変換するという流れで処理を行っています。
このHeadless Inspectorの2つのパッケージは、オープンソースとして公開する予定です。
岡本:LIFF Inspectorは、これまでLIFFのペインポイントであったデバッグのしづらさを解消することができるツールであり、少しでも早くみなさんにお届けできるように開発を進めているところです。
またHeadless Inspectorをオープンソースとして公開することで、LIFFだけではなく、WebViewを使っている世界中の人たちにも貢献できると考えています。今後メンテナーが増えれば、仮にDevToolsのプロトコルが変わったときでもすぐに対応できるでしょうし、発展性のあるプロダクトになるのではないかと期待しています。

――最後に、LIFFにおける今後の展望を教えてください。
岡本:今回の施策を実施したことで、開発者体験における様々な課題を解決できたと思いますが、これで満足しているわけではありません。さらに気持ちよく開発していただけるように、今後も開発者の方々に寄り添っていかなければならないと考えています。
そのためには、現状では私たちが把握できていない開発者の方々の気持ちを知らなければなりません。ぜひ我々のコミュニティやQiitaなどで、フィードバックしていただきたいと考えています。
このような取り組みを通じ、LIFFとして統一化された開発ツールを提供できれば、統一化されたUIや機能をユーザーに提供できることにつながり、それによって開発サイクルが活性化すれば、ユーザーのニーズに迅速に応えられるといった良好なサイクルを生み出すことができます。また、世の中に素晴らしいLIFFアプリがどんどんリリースされて、それを見てLIFFで開発する人たちが増えるといった好循環も生まれるでしょう。
そうした世界を目指して、今後もLIFFの開発者体験を向上するための取り組みを積極的に進めていきます。
採用情報
LINE株式会社では一緒に働くエンジニアを募集しています!
今回のインタビューと関連する募集ポジションはこちらです。