「Weather as a Service」を標榜する世界最大級の気象情報サービス
ウェザーニューズは日本国内においては約2500社と取引を行い、世界50カ国にサービスを展開する世界最大級の気象情報企業。「Weather as a Service」を標榜し、全世界78億人に向けた気象情報サービス提供を目指している。
「テレビの天気予報はもちろんのこと、陸・海・空といったあらゆる分野に適合した気象情報を提供しています。例えば、船舶向けでは安全性や環境負荷を考慮した航海ルートの選定、コンビニ向けでは気温変化に応じた商品仕入れの支援などを行っています」(邉見氏)
日々の生活の中で気づかないところに、ウェザーニューズの気象情報が活用されているのだ。主にアプリやWebでサービスを展開しており、2017年から開始したDevOps体制によるグロースハック、広告投資などの強化により、MAUが増えていると、邉見氏は明かす。
開発・コンテンツ運営・マーケティング三位一体のGrowth Hack体制
「モバイル・インターネット事業部全体の開発チームは約30名。DevOpsのOpsは一般的にシステム運用担当を指すと思いますが、ウェザーニューズではコンテンツ運営チームとなります」
例えば、コンテンツ運営チームから気象情報が共有され、開発チームはアクセス負荷が増えるタイミングに備える。逆に開発チームがリリース予定を共有して、システムに影響がないかコンテンツ運営チームにチェックしてもらったりもするという。アプリのプッシュ通知を送る際のABテストの実施、分析などでも連携している。
開発・コンテンツ運営だけでなく、マーケティングを合わせた三位一体のGrowth Hackチームといった体制をとりながら、ユーザーに使いやすいコンテンツを届けている。さらに、UI/UXの改善も重点項目の一つとしていると、邉見氏は強調する。
「ユーザー数の増加や気象情報の更新頻度が上がることで負荷が増えるため、パフォーマンス維持向上が必要となります。そのため、アプリの非クラッシュ率の向上や起動スピードの改善などに取り組んでいます」
アプリのUI/UX改善のために可観測性プラットフォーム「New Relic」を活用
UI/UX改善はユーザーの獲得や利用者増にも繋がり、広告収益にも影響する。どのようなパフォーマンス改善を行ったのか。ウェザーニューズアプリにおいて実践した具体的な改善策が紹介された。
ウェザーニューズアプリは、累計3000万ダウンロードのお天気アプリ。1kmメッシュの細かさで天気予報がわかる。また、雨がいつ降って、いつ止むのかを見ることができる雨雲レーダーや、雨雲が近づいたタイミングでお知らせする雨雲アラームなどの機能が搭載されている。
まずアプリのパフォーマンスに関しては、実際にどのくらいの影響が出ているかを把握することが求められた。また、サーバーについては、サーバーダウンを回避するためオンプレからクラウドへ移行し、包括的な監視とAPIのパフォーマンス改善が必要だった。このどちらの改善にもNew Relicが活用されている。
New Relicとは、デジタルサービスを提供しているシステムの振る舞いが観測できるオブザーバビリティ(可観測性)プラットフォーム。根本原因を突き止めて早期解決を可能とし、デジタルビジネスの信頼性を高めるソフトウェアを実現させるサービスだ。
ウェザーニューズアプリでは、9割以上のユーザーが「ピンポイント天気」という画面を、起動して最初に表示する。そこでまずは、このピンポイント天気を表示するまでの表示時間に着目して、改善を進めていくことになった。
New Relicを導入する前は、このピンポイント天気に対して、以下のような認識をしていたと邉見氏は振り返る。
「現在地の天気を表示するのが遅いことに関しては、位置情報を取得してから天気APIを取得して描画するため、仕方がないと感じていた。また、アプリ開発当初からのレガシーな記述部分があるため、リファクタリングすれば改善できると考えていた」また、起動画面という影響範囲が大きい箇所のため、どこから手をつけるべきか悩んでいたという。
意外な原因の発見からはじまった、オブザーバビリティの実践
そのような背景の中、実際どうなっているのかをNew Relicのモバイルアプリ用エージェントを使って分析した画面が以下である。アプリの各画面の処理にかかる時間を見ることができる。分析の結果、位置情報取得以外に、画像に関する処理時間の割合が高いことがわかった。
さらに、画像処理という観点で確認を進めたところ、時間ごとの天気を構成するビューが最終的に一つの画像になるケースがあることが判明したため、Collection Viewを使って書き換えを行った。また、天気アイコンの生成をUIイメージnamedで行っていた工程を、UIイメージコンテンツをファイルに置き換えるというキャッシュを作らない書き方に変えて、生成を速くした。
「自動で上がるデータはメソッドごとの単位で上がってくるので、さらに掘り下げていく必要がありますが、これまで認識していなかった原因に気づきがあるのが良い点だと感じました」
このように各時間を見比べると、時間がかかっていると思っていた位置情報の待ち時間はそれほどかかっておらず、現在地の地名APIのレスポンスの待機時間が原因だとわかった。そこで地名は天気APIに含めるようにして時間短縮を図った。
「カスタムのラップタイム計測は、可視化する際にそのデータ用テーブルを作ってスケジュールしておく作業があるのですが、New Relicでは不要になります。送信したデータをすぐグラフにしてリアルタイムに確認できることは、大きなメリットだと思いました」
サーバーについては、オンプレからAWSへの移行を進めてスケールし、高いトラフィックを捌けるように開発を行った。ECS、AutoScaling、Golangによる実装や、負荷に強いサービスを活用している。
その上でパフォーマンスを監視するため、New RelicのAPMを使い、ECSの監視を行った。例えば、ECSからAPI、AWSリソースへの参照は期待通りのパフォーマンスかどうか。また、大雨、地震時のパフォーマンスは問題ないかといったところを見ている。
また、New RelicのSytheticsを活用して、エラーがあった場合はSlackで通知する、またPageDutyと連携して電話をかけるシステムも構築した。
この事例に対し、本セッションのファシリテータを務めたNew Relic社のオブザーバビリティ技術本部 担当部長である佐々木千枝氏は、このように感想を述べている。
「急激なアクセスがあるアプリの特性上、柔軟なスケーリングができるサーバレスという環境が積極的に使われている。その中で、New Relicを活用し、サーバー環境とはまた異なった新しい運用の仕組みを作っていただいた。まさにモダンアーキテクチャにおけるオブザーバビリティを実践されていると思います」
アプリの起動スピードを2倍に! 高評価に繋げる
その他の取り組みとして、起動時に必要ではない初期化処理を、必要になるタイミングの前に実行。「ピンポイント天気」のデータロード中に、前回起動時のキャッシュデータを表示することで待ち時間を短く感じさせる工夫も行った。
その結果、なんとアプリの起動スピードを2倍高速化することができたという。まさに、「スピードは正義」を実現した結果を出すことに成功したのである。
「アプリの起動を1秒以内にすることを目標に着手しましたが、天気を描画するまでの時間はかなり目標に近づく結果となりました。またアプリのレビューでも、パフォーマンスに関する好意的な内容が増え、評価のアップに繋げることができました」
今回の取り組みを通して、邉見氏は以下のような考察をしている。
<アプリ>
- 可視化して定量的に評価することの大切さを実感
- 仕方がないと思っているところにこそ、改善の余地がある
<サーバー>
- APMはエラーがなくてもモバイルでエラーになるケースがある。この現象はトラフィックが捌き切れていないときに発生するため、APMでエラーがなくても安心せず、モバイルやSyntheticsでの監視が重要になる
今後の取り組みとして、邉見氏が挙げたのは「雨雲レーダーなど人気コンテンツのUI/UX改善」。「例えば描画が重くならず、サクサクと動いて快適に使えること。コンテンツが増えても見たい情報にすぐアクセスできるようにする。また地震などの緊急情報も、いざというときに役立つコンテンツとして強化していきたい」と力強く語り、セッションは終了した。