「LINE DEVELOPER DAY 2019」レポート

DAY-2,iOSアプリ開発秘話/開発プロセスをビジュアル化して改善

この記事を読むのに必要な時間:およそ 4 分

Xcodeプロジェクトの肥大化に伴う問題

Xcodeプロジェクトのサイズが大きくなるにつれて,いくつかの問題が出てきました。中でも,コンフリクトの問題はプロジェクトのサイズにかかわらず常に問題となるものですが,この問題を解決するにはプロジェクトが「読めるようになっている」必要があります。そこで採用したのが「XcodeGen」というツールです。これはXcodeプロジェクトをYAMLで記述するためのツールで,ドキュメントセッティングにコメントを書くことも可能です。ほとんどのコンフリクトはファイルの削除や追加をするときに発生しますが,XcodeGenでそれらを解消できます。

XcodeGen

XcodeGen

ビルド時間に影響する問題もあります。ヘッダを修正したときは,Objective-Cコードのリビルドが必要です。ツールプログラムの問題で,コードにほとんど変更がないにもかかわらず,すべてがリビルドされてしまうこともあります。

ビルド時間を改善する方法として有効なのは,まず,生成されたヘッダファイルへの変更を回避することです。変更をしてしまうと,実質的にクリーンビルドと同じだけ時間がかかります。また,Swiftの特定のエクステンションへのアクセスを制限する(つまり,アクセス修飾子のスコープを限定的にする)ことも有効です。これにより,リビルドするファイルの量を劇的に減らすことができます。

より長期的な視点での解決策として,同社ではコードベースをモジュールに分けておくという方法も取り入れています。LINEの依存関係は大きくなり過ぎていて全体を把握するのが難しく,新たなコードを追加するときにどこに入れていいのかわからないことが多くなります。また,小さなモジュールを修正したが,はたしてこのモジュールをインポートしていいのかどうか判断できないといったこともあります。さらに,LINEのエクステンションに関してバイナリサイズを減らしたいというのも動機の1つにありました(静的フレームワークを使っているため,エクステンションで大きなモジュールをインポートするのはそれなりのコストを伴うことになります⁠⁠。

このようにして整理したモジュールは,⁠Bazel」を使ってビルドしていきます。Bazelは,Googleが開発したオープンソースのビルドシステムで,速くて再現性があるのが特徴です。Bazelについては,開発者のエクスペリエンスを改善する作業が今も続いていて,同社ではBazel自体へのコードの追加もしています。

Rogers氏は,今後もコードベースの分割をさらに進め,個々のモジュールを精査していくことを課題として挙げ,話を締めくくりました。

「自動テストとZipkinを活用したマイクロサービスの障害検知の仕組みの構築」by 伊藤宏幸氏

LINE SET TF TF Leaderの伊藤宏幸氏からは,⁠自動テストとZipkinを活用したマイクロサービスの障害検知の仕組みの構築」というテーマでセッションが行われました。

伊藤宏幸氏

伊藤宏幸氏

マイクロサービスの拡大に伴う問題

本セッションの結論は,障害をより迅速に検出することを,リリース前にすべてのバグを検出することよりも優先する自動テストだと伊藤氏は語ります。MSA=マイクロサービスアーキテクチャの時代には,いろいろと考えることが多くあります。

マイクロサービスでは,事前にすべてのバグを予見して取り除くことは事実上不可能です。一方,それゆえにバグの事前検出も必要ではあるものの,それよりもResilience(回復力)のほうが重要となってきます。

テスト自動化に,次の3つの観点を加えることは重要です。MTTR(障害が発生してから解決するまでの時間)を短くすることは有益です。そしてマイクロサービスの回復力の達成と強化,事業に貢献するといったことが重要となります。

『LINE』アプリや各種ファミリーアプリなど,現時点で約2,500のマイクロサービスが稼働しています。その理由の1つは,同社の事業が成功し,広がってきていることです。マイクロサービスが拡大すると,それに伴って,それぞれの接点であるIntegration Pointも増えていきます。そこで,多くの障害が発生してしまいます。

同社では,マイクロサービスが広がったことで2つの問題に直面しています。そのうちの1つが,障害検知の難しさです。それよりも難しいのが,どのマイクロサービスで障害が起こったのかという,根本原因を突き止めることでした。

さらに同社では,このマイクロサービスを巡って大きく3つの混乱が起きていました。マイクロサービスの開発を行うということは,各サービスだけでデプロイすることができるということです。そのため,何か障害が起きても「うちのサービスは動いているから関係ない」というようなことが起きてしまうというわけです。

テストにおいても混乱がありました。QAの人にテストをお願いするときに,それを呼び出せるUIも作ってほしいといわれることがあったそうです。

また,障害が起きたときの検出方法はどうすればいいのか? サービスを迅速に回復させるにはどうすればいいのか? ビジネスや顧客,ユーザに貢献するにはどうすればいいのか? ということがわからない人が多かったそうです。

著者プロフィール

高島修(たかしまおさむ)

コンピュータホビー雑誌『ログイン』の編集者やドワンゴでモバイルサイトの企画・運営等を経て,2014年よりフリーで活動中。XRやPCなどのIT系やゲームをメインに,年間120本以上の取材をこなしています。

バックナンバー

「LINE DEVELOPER DAY 2019」レポート