Slide 1

Slide 1 text

© LY Corporation maru / Mori Atsushi End-to-Endで考える信頼性 ̶ LINEアプリにおける クライアント開発×SRE連携の実践 SRE NEXT 2026

Slide 2

Slide 2 text

© LY Corporation maru SREを担当。 LINEスタンプ、着せかえ、LYPプレミアム、etc 本セッションでは、クライアント開発のMoriさんを中⼼に SRE的な⽂脈の補⾜や相槌を担当します。 2 © LY Corporation

Slide 3

Slide 3 text

© LY Corporation Mori Atsushi LINEのAndroidアプリを担当。 著書:良いコードの道しるべ 変化に強い    ソフトウェアを作る原則と実践 © LY Corporation

Slide 4

Slide 4 text

© LY Corporation Public オフラインファースト アプリにおける信頼性 本⽇のテーマ 4

Slide 5

Slide 5 text

© LY Corporation Public インターネットにアクセスしなくても、コア機能の⼀部または全部を実⾏できるアプリ オフラインファースト 例えば: - 以前⾒ていたコンテンツが⾒れる - チャットが閲覧できる - チャットの送信予約ができる

Slide 6

Slide 6 text

© LY Corporation Public オフラインファーストと対障害性 サーバ側で障害が発⽣しても ある程度使える ユーザのネットワーク接続が 不安定でもある程度使える

Slide 7

Slide 7 text

© LY Corporation ⽬次 LINEのUIレンダリングのしくみ 問題が発⽣するリスクがある場所と解決⽅法 障害対策の品質管理 チームで解決するために クライアント視点のオブザーバビリティ

Slide 8

Slide 8 text

© LY Corporation Public LINEのUIレンダリングのしくみ BFF (Backend for Frontend) Client (Android / iOS) サービスA サービスB サービスC

Slide 9

Slide 9 text

© LY Corporation Public プラットフォームチーム BFF (Backend for Frontend) Client (Android / iOS) サービスA サービスB サービスC プラットフォームチーム

Slide 10

Slide 10 text

© LY Corporation Public 問題が発⽣するリスクがある場所 BFF (Backend for Frontend) Client (Android / iOS) サービスA サービスB サービスC 通信エラー システム障害 システム障害 システム間 通信エラー クライアント 内部エラー

Slide 11

Slide 11 text

© LY Corporation Public ⼀番避けるべき状態 真っ⽩な画⾯が表⽰される なにが起きているかわからない 友達リストにもアクセスできない

Slide 12

Slide 12 text

© LY Corporation Public ⽅針:コンテンツをキャッシュする ⼀度読み込んだコンテンツはクライアントにキャッシュしておき、最新情報が取れない場合はそれを再利⽤する。 ローカルDB サーバ リポジトリ UI ページアクセス コンテンツが 期限切れ キャッシュを利⽤ コンテンツ取得 YES NO

Slide 13

Slide 13 text

© LY Corporation Public キャッシュが期限切れでも表⽰する キャッシュを表⽰ フォールバック 表⽰ (後述) コンテンツが 期限切れ ページアクセス 期限切れから ⼀定期間以内 キャッシュを表⽰ YES YES NO NO

Slide 14

Slide 14 text

© LY Corporation Public 表⽰可能なキャッシュがないときは? アプリインストール直後にコンテンツ取得に失敗 コンテンツを取得してから⻑時間経っている

Slide 15

Slide 15 text

© LY Corporation Public 解決策: クライアント側にフォールバックをもたせる ローカルDB サーバ リポジトリ UI フォールバック コンテンツ

Slide 16

Slide 16 text

© LY Corporation Public いつリトライする? コンテンツ取得に失敗した後、すぐにリトライすると サーバに負荷がかかり続ける

Slide 17

Slide 17 text

© LY Corporation Public 解決策: 待機時間の調整 すぐにリトライ可能なもの → Exponential Backoff - 再試⾏のたびに待機時間を指数的に⻑くする 初回リクエスト 1秒 3秒 7秒 1秒待機 2秒待機 4秒待機 8秒待機 直後のリトライが不可の場合 → 1時間待機 初回リクエスト 1時間 1時間待機 1時間待機

Slide 18

Slide 18 text

© LY Corporation Public 部分障害: 他のサービスの障害によって、 さらに別のサービスが表⽰できなくなる BFF (Backend for Frontend) Client (Android / iOS) サービスA サービスB サービスC システム障害 稼働中 稼働中 なんらか コンテンツを返したい

Slide 19

Slide 19 text

© LY Corporation Public 表⽰できるコンテンツは返す BFF (Backend for Frontend) Client (Android / iOS) サービスA サービスB サービスC システム障害 稼働中 稼働中 コンテンツ1 コンテンツ2(エラー) コンテンツ3 … エラーのコンテンツのみ あとでリトライする

Slide 20

Slide 20 text

© LY Corporation Public サーバが全部のリクエストを 捌けないとき リクエストが多すぎて、BFFサーバーに負荷がかかりすぎている場合

Slide 21

Slide 21 text

© LY Corporation Public BFF (Backend for Frontend) Client (キャッシュあり) サービスA サービスB サービスC Prioritized Load Shedding Client (キャッシュなし) キャッシュ有無 キャッシュ有無 コンテンツ エラー ⾼負荷時

Slide 22

Slide 22 text

© LY Corporation Public 対策まとめ オフラインでもコンテンツを⾒せたい 表⽰可能なキャッシュがない場合の処理 リトライをいつすべきか ⼀部サービスで障害がおきた場合は BFFの負荷が上がりすぎた場合は コンテンツをキャッシュする 期限切れでもキャッシュを表⽰する クライアント側にフォールバックを定義する Exponential Backoff / 1時間待機 表⽰できるコンテンツのみ表⽰し、後でリトライ

Slide 23

Slide 23 text

© LY Corporation Public 障害対策の品質管理 エラーケースを含めた仕様書の作成 エラーケースを含めたテストケースの制定 エラーを再現するためのクライアントデバッグメニュー/障害注⼊ システムの状況を把握するための仕組み、オブザーバビリティ

Slide 24

Slide 24 text

© LY Corporation Public クライアント視点のオブザーバビリティ ユーザ体験に⼀番近いところで計測する クライアントログをもとに、品質観点で分析 リアルタイム監視ではなく、傾向把握を⽬的として運⽤ 毎朝のチーム会議で状況を確認 同期完了時間など、ユーザー体験に直結する指標を可視化 ▷ サーバー・端末状態など、外部要因も含めて分析 APIリクエスト数 / PV 経過時間 ⽇付 ユーザがページを開いてから サーバとの同期完了までの時間 リクエスト回数 ⽇付

Slide 25

Slide 25 text

© LY Corporation Public 実際の事例:サーバとの同期完了が遅い 経過時間 ⽇付 ユーザがページを開いてから サーバとの同期完了までの時間 API呼び出し時 キャッシュ利⽤時 UIスレッドによる ブロックを解消 分析結果から実際に改善

Slide 26

Slide 26 text

© LY Corporation Public チームで解決するために チームで議論 各チームで個別に解決 サーバ クライ アント SRE サーバ クライ アント SRE

Slide 27

Slide 27 text

© LY Corporation Public 開発初期から複数の視点で議論を進める 要望 企画 設計 実装 QA リリース QA プランナー サーバ / クライアント / SRE

Slide 28

Slide 28 text

© LY Corporation Public 開発者の誰もが改善の提案ができる環境 改善 提案 実装 サーバ担当 クライアント担当 SRE担当

Slide 29

Slide 29 text

© LY Corporation Public ⽂化形成 関係者(プランナー、開発者、QA)全員が集まる週1定例 対⾯で話すワークショップの開催 個別議題の会議を設定して集中的に議論する

Slide 30

Slide 30 text

© LY Corporation Public ⽂化形成には時間がかかる 私たちのプラットフォームチームでも、共通認識と信頼関係を 育てるまでに約1年かかった じっくり根気よく、対話の機会を作り続けることが重要

Slide 31

Slide 31 text

© LY Corporation Public まとめ 障害時でも、ユーザーにできるだけコンテンツを届ける ユーザ体験に⼀番近いところで計測し、チームで傾向を把握する 信頼性は、特定のチームだけでなく、プロダクトに関わる全員で育てていくもの