Friday, January 22, 2021

約8300万人を対象とした全国調査を支えたシステム~COVID-19に対してLINEが取り組んだこと - Gihyo Jp

インタビュイー

LINE OA Dev 1 チーム ソフトウェアエンジニア 小川拡

画像

LINEは厚生労働省と締結した協定に基づき,⁠新型コロナ対策のための全国調査」を5回に渡って実施しました。この調査は約8,300万人を対象とする大規模なものとなりましたが,そこで使われたシステムはわずか6日間で開発されています。⁠LINE DEVELOPERS DAY 2020」では,LINE OA Dev 1チーム ソフトウェアエンジニアの小川拡氏が,このシステムについて「2500万ユーザから回答を集めた新型コロナ対策のための全国調査を1週間で作った話」と題して講演を行っています。ここでは,このシステム開発の裏側を小川氏に聞きました。

短期間で堅牢なシステムの開発を可能にしたアイデア

――「新型コロナ対策のための全国調査」をLINEで実施するために,わずか6日でシステムを構築したとのことですが,このプロジェクトの話を最初に聞いたときはどのように感じましたか。

小川:社会的にインパクトのある取り組みで,自分も参加したいと思いました。最速で開発する必要があり,システムを落としてはいけないというチャレンジングなプロジェクトでしたが,自分のエンジニアとしての力を発揮して成功に貢献したいと考えていました。

実際にプロジェクトに参加して日々ミーティングを重ねる中で,徐々に社会的な注目度も高い取り組みであることを実感し,これは失敗させられないと強く感じました。

――システムを絶対に落とさないというのは非常に難しい要件だと思うのですが,それをどのように担保しようと考えたのでしょうか。

小川:実装上で細かい工夫を重ねるというよりも,構造的に落ちない設計になっていることが必要だと考えました。当初はアンケートの回答を受け付けるWebアプリケーションを開発するといった方向性で検討を進めていたのですが,それだと時間もかかる上,実装したコードがちゃんと動くかどうかの検証も容易ではありません。そこでWebサーバであるNginxを利用し,そのアクセスログで回答内容を集計するという方向で話が進みました。

――ログで回答を集計するというアイデアは,すぐに生まれたのでしょうか。

小川:それほど頻繁に使っているわけではありませんが,同様の仕組みで集計する事例は社内にあったんです。具体的には,広告関係のシステムで,広告を表示した,あるいは広告をタップしたといったイベントを集計するシステムで利用していました。

こうしたシステムでは,結果を受け付けるだけでよく,レスポンスを返す必要がないため,アクセスログを使った仕組みでも対応できます。実は私の上司がそうしたシステムを担当していたことがあり,私もその事例を見ていたため,相談する中でその方向で実装しようということになりました。広告での実績があったためにとくに大きな懸念もなく,割とすぐに決まりました。

LINE社内で密に連携して課題をクリア

――実際の開発はスムーズに進んだのでしょうか。

小川:最も肝になるNginxの部分はすんなり進みましたが,ユーザを識別する部分が課題となりました。

今回,フロントエンド部分はLINEのWebアプリプラットフォームである「LIFF」⁠LINE Front-end Framework)のアプリとして開発しました。LIFFアプリとすることで,LINEアプリ内で調査ページを開いた場合には,明示的なログインなしにLIFFアプリ側でユーザを識別できます。

ただ,識別されたユーザの情報をクライアントからサーバに送信する部分で問題が生じました。LIFFでは,LIFFアプリに対して発行されたアクセストークンをクライアントからサーバに送信し,受け取ったサーバ側ですぐに検証することを前提に,アクセストークンは短時間で失効する仕様でした。Nginxで受け取ったログを非同期で検証する際に,この仕様だと検証のタイミングでアクセストークンが失効している可能性がありました。

画像

最終的にIDトークンを使ってユーザを識別するようにしたのですが,全国調査のシステムを開発している時点では,その機能はまだ公開されていませんでした。

実はLIFFを開発しているチーム内では,外部からIDトークンを取得するための仕組みを準備していたのですが,チーム外である私たちは知らなかったのです。ただLIFFの開発メンバーに相談したところ,そういう仕組みがあることがわかり,ちょっと工夫すれば正式リリースの前に使えるということだったので,それを使って課題を解決することができました。

あとは時間との戦いだったのですが,とくに大変だったのはQA(品質保証)で動作を確認しつつ,バグを取り除く作業です。

中でも重要だったのは,アンケートの回答内容が適切に反映されているかどうかでした。そこで周りのメンバーにも協力してもらい,データベースの内容を簡単にチェックすることができるツールを開発し,それをQAチームに使ってもらって迅速に検証できるようにしました。

今回のプロジェクトはリリースまで6日間しかありませんでしたが,そのうちの2日間をQAに割り当てています。またプロジェクトの最初の段階からQAチームにも入ってもらい,検証にどの程度の時間が必要かといったことを相談しながら進めています。

それでも検証の時間が十分と言うわけではなかったため,正直なところ不安もありました。ただNginxでリクエストを受け,その結果をログとして出力するという部分に関しては,パフォーマンスも含めて必要なテストを行うことができたので,調査がまったくできないといったトラブルが起きる可能性は小さいのではないかと考えていました。

Let's block ads! (Why?)


からの記事と詳細 ( 約8300万人を対象とした全国調査を支えたシステム~COVID-19に対してLINEが取り組んだこと - Gihyo Jp )
https://ift.tt/3o8HCE2
Share:

0 Comments:

Post a Comment