こんにちは、開発3センターの堀内(horiuchi)です。
現在は LINEドクターのサーバ開発リーダーとマネージャーをしております。
この記事は、2023年3月末にサービス提供を終了したライブ配信サービス「LINE LIVE」において、今まで行ってきた施策の紹介や大規模サービスならではのクロージングに関わる話を連載するシリーズの3本目の記事です。
今回の記事では、日本向けの LINE LIVE アプリの終了にフォーカスして紹介します。
はじめに
LINE LIVE は2015年12月にリリースされ7年以上続いてきましたが、2023年3月31日にサービス終了しました。
LINE LIVE は大きく分けて2種類の方法でサービスを提供していました。
- 誰でも使える iOS/Android 向けの LINE LIVE アプリを使って個人配信者が配信して、一般ユーザは LINE LIVE アプリで視聴したり応援したりする
- パートナー企業が公式アカウントで配信したことを LINE のトークルームに通知して、一般ユーザは LINE のトークルームでそのまま視聴する
なお、LINE LIVE は日本(JP)、タイ(TH)、台湾(TW)、インドネシア(ID)の4カ国に展開していましたが、JP には1の LINE LIVE アプリを使ったサービスも提供していました。
ここでは LINE LIVE のサービス終了において最も大きかった、1の LINE LIVE アプリにフォーカスしてサービス終了した方法や工夫した点を紹介します。
また、TH や TW については6月くらいまで使いたいという話があり特別対応をしています。その話は2の件と一緒に別の連載記事で紹介しますので、ぜひそちらもご覧ください。
やることの整理
はじめに、サービス終了時刻を2023年3月31日の15時と定義しました。
その時刻までに準備したことや実施したことは、大まかに分けると下記になります。
- ターゲットの時刻になったら LINE LIVE アプリではサービス終了した旨の画面を出して、全ての機能を使えなくする
- ターゲットの時刻以降に動いてはいけない処理を停止する(主にバッチ処理)
- データの削除やサーバの撤去の計画と実行
- サービス終了当日のタイムテーブル作成と、開発環境を使った事前のリハーサル
- Sunset Server の運用計画
それでは、これらを順に紹介します。
LINE LIVE アプリの終了画面
LINE LIVE アプリの終了画面の機能要件を簡単に列挙すると下記です。
- 想定外の事態に備えて、終了画面の文言などはすぐに変えられること
- サービス終了時刻を過ぎたら、あらゆる画面で終了画面になること
1に関しては、社内運用者向けの CMS にサービス終了のための設定機能を追加することで満たしました。
エンジニアの工数を最小限にするため、デザインや設定項目については必要最低限の簡素な作りにしました。また、終了画面を出す時刻もフレキシブルに画面から変更できるようにしました。
2に関しては、LINE LIVE アプリが使っている API で網羅的にサービス終了のレスポンスすることで満たしました。
網羅性を満たすために、Spring Boot の HandlerInterceptor を使って処理を記述し、対象範囲は TH や TW のために残す機能やモニタリングのための機能を除外する形としました。LINE LIVE アプリで使っている API が圧倒的に範囲が広いためです。
2を満たすことで、個人配信者の配信画面も終了画面に切り替わります。これにより、LIVE 中のストリームが切れて配信が終了するのでサービス終了時刻を過ぎても LIVE 中の配信が残ることがないようにしました。また、後で紹介する個人配信システムのサーバを撤去することで、個人配信が残らないようにすることをより確実にしました。
LINE LIVE アプリ側の作りについては別の連載記事で紹介しますので、ぜひそちらもご覧ください。
サーバ側の最小限の停止
先ほど紹介した LINE LIVE アプリの終了画面以外にも、サーバ側では止め忘れがないように注意すべき機能がいくつかありました。一般的な代表例としては iOS や Android への自動 Push 通知です。それらを事前に洗い出し、当日の手間をできるだけ減らせるように全て時限式で管理できるようにしました。
時限式にした機能の一覧は簡単に確認できるようにしつつ、それぞれの機能で停止時刻を細かく制御できるように enum で定義をしました。これらの作りは、特に開発環境における動作確認に非常に役立ちました。
当日の停止漏れ防止や正確な停止タイミングが必要ない機能やバッチ処理に関しては、すぐに止めるようなことはせず様子を見つつ止めるようにしました。止めたものが万が一 TH や TW に影響があったら困るので、確実に止めるべきもの以外は完全にサービスが終了するまでは無理に止めないようにしました。
これにより、サーバ側で多少のエラーログが数日後に発生するなどありましたが、そのつど確認をしつつ機能を停止することで特に問題はありませんでした。
データの削除とサーバの撤去
データガバナンスの観点で、可能な範囲で事前にユーザのデータを削除していきました。
LINE LIVE では配信した動画をアーカイブとして残しているデータの割合が非常に大きいので、ここにフォーカスして優先的に削除計画を立てました。実際にはデータを管理しているのは別の部署なので、そこに協力してもらいつつ範囲を指定して一括削除することで最小限の手間で対応しました。
また、この削除作業は事前に行っていく関係でユーザに告知が必要でしたので、法的観点から法務とも相談しつつ進めました。
サーバの撤去に関しては、LINE LIVE で使っている全てのサーバを洗い出して効率よくリソースを解放できるサーバをピックアップしました。その結果、個人配信のためのストリーミングサーバを優先的に撤去することが、個人配信を確実に止めるという意味でも相乗効果を発揮するため優先的に撤去計画を立てました。
タイムテーブル作成と事前のリハーサル
当日は企画・開発・QAがそれぞれ作業をしたり確認すべきことがあります。それら全てを計画通りに進行させつつ漏れも発生させないために、チェックリストを含むタイムスケジュールを作成しました。
タイムスケジュールを作る上での観点は下記3点です。
- 前日までに行う事前のタスク
- 当日の開発観点のタスク
- 当日の運用観点のタスク
指定された時刻でサービスを終了させる1発勝負のため、念には念を入れるために開発環境にてリハーサルも実施しました。リハーサルでは「はじめに」の2で紹介した公式アカウントによる配信の方で、事前に配信しつつ終了時刻を過ぎるとそのまま配信し続けられるという気づきがありました。そしてそれは、社内運用者向けの CMS を使えば対処できるという確認までリハーサル内で終わらせることができました。
予定したタイムスケジュール通りに進行可能かどうかの確認に加えて、追加の気づきも得られたため、リハーサルをやる意義は十分にありました。
Sunset Server の運用計画
話をシンプルにするために紹介が遅れましたが、LINE LIVE には Web 版と LINE LIVE-VIEWING(LLV) という Web サービスの2つがありました。これらは JP に向けたサービスでしたので一緒に終了させます。
また LINE LIVE はサービス内通貨(LIVE コイン)を運用していたので、それに伴う返金システムの稼働開始や撤去予定もあり、時期によって終了ページを変更する必要があります。
具体的にやることは下記です。なお、LLV はサービス終了のページのみを表示し続けます。
- 2023/03/31 15:00 にサービス終了のページを表示
- 2023/04/05 11:30 に返金システムへの導線を追加したサービス終了のページを表示
- 2023/07/05 12:00に返金システムへの導線を排除したサービス終了のページを表示
弊社には Sunset Server という、単純な静的ページやリダイレクトを設定しておけるサービスがありますので、担当者と調整して静的ページを所定のタイミングで入れ替えることで上記を満たしました。そして Sunset Server を使うことで LINE LIVE に関わっていたエンジニアが面倒を見続ける必要はなくなります。
ここで1点工夫したことを紹介します。1に関しては予定時刻になったらすぐに切り替わるのが望ましいので、時限式にしつつ LINE LIVE 側のサーバでも終了ページを表示するようにしました。これをすることで、Sunset Server への切り替えはタイミングを見つつ落ち着いて進めることが可能になりました。
おわりに
リハーサルを含めた計画をしっかり立てられたことで、当日は特にトラブルもなく終了画面への切り替えが完了してサービス終了できました。
当日に物理出社が可能な人は会議室に集まって最後を見届けました。寂しさはあるものの、15時になった瞬間に狙い通りにアプリが動いた時には喜びの声で会議室が沸いたりもして、LINE LIVE はみんなで作っていたという実感を最後まで持てたことは非常に良いことだと思いました。
違うサービスでも情報発信をしていければと思いますので、これからもよろしくお願いします。