コロナ禍でヤフーは混雑把握のための機能を次々と追加
松村雅治氏は2012年にヤフーに新卒入社して以来、ずっと大阪でアプリケーションのフロントエンドやバックエンド開発に携わっている。ヤフーは大阪駅を挟んで2か所にオフィスを構えており、どちらもフリーアドレス制なのでどこで働いてもいいようになっていた。
新型コロナウィルス感染症が広がるなか、ヤフーはリモートワークへと素早く移行。松村氏も2月下旬ごろからずっと在宅勤務を続けている。コロナ禍が長引くなか、ついに7月15日、ヤフーは「無制限リモートワーク」を発表した。10月1日より、リモートワークの回数制限やフレックスタイム勤務のコアタイムを廃止するなど、オンラインを前提とした働き方への移行を表明した。開発の仕事はしばらくオンラインが普通になる。
今回中心となるのが「Yahoo! MAP」アプリ。2017年に「Yahoo!地図」がリニューアルされ名称が変更された。「Yahoo!地図」の主要機能を引き継ぎつつ、現在地を起点に行きたい場所を選べるようになっている。公共交通機関の経路検索はもちろん、徒歩案内では地図上のナビのほか、実際の風景に進む方向を矢印で示すARモードもある。周辺の店舗や防犯マップも提供しており、「安心で快適なおでかけをサポート」がコンセプトだ。
コロナ禍で三密回避の重要性が高まるなか、ヤフーは混雑状況を確認できる機能を次々と実装していった。アプリを開くと地図の右上に「混雑」アイコンがある。これをタップしていくと混雑レーダー、混雑アイコン、混雑予報などが表示される。混雑レーダーは混雑具合に応じて色分けされたヒートマップだ。位置情報の利用を許可したユーザーの位置情報をもとにしており、過去24時間分の混雑状況が分かる。
混雑アイコンは7月30日から提供している新機能で、駅や店舗など施設周辺の混雑状況をアイコンの色で表示する。このアイコンをタップすると、施設周辺の曜日ごとの混雑傾向と当日の混雑実績が重ねて表示される。
なお、混雑レーダーは2015年9月から提供していたものの、サービス運営コストとニーズのバランスを鑑み、2020年1月にはいったん提供を終了していた。ところが新型コロナウィルスで状況は一転した。三密回避が重要になり「混雑状況を知りたい」という要望が高まってきたのだ。
ヤフーの決断と行動は早かった。4月1日にプロジェクトを発足し、翌日にはメンバーを集結。7営業日後となる4月10日には混雑レーダーを復活させた。
コロナ時代におけるアプリケーション開発の攻略法を伝授
ここからはリモートワークで開発を進めていくうえで松村氏が心がけたことを紹介する。松村氏は「これらは個人の考えです。みなさんと意見を交わしたいところです」と話す。
攻略★1 とにかく具体的な画像コミュニケーション
アプリケーション開発チームはSlackでコミュニケーションしている。松村氏が投稿するメッセージのうち、画像やファイルを用いている割合はなんと20%。
画像を添えて投稿することについて、松村氏は「伝える手間が少なく、伝わる速度も速い。誤解が少なくなる。目立つ。文字だけだと固い印象になるのを緩和できる。海外など言語が違う相手でも通じやすい」とメリットを挙げる。
ただし注意点もある。地図アプリでスクショを撮ると、当然ながら自宅が現在地点として表示されてしまう。開発チーム内のコミュニケーションとはいえ、松村氏は「個人情報が意図せず映りこむ可能性に注意」と指摘する。また画像だと面をとるため、前後の会話ログが流れやすくなる。Slackならスレッドを活用すればある程度は回避できる。画像だけの投稿だと将来見返したい時に検索できないかもしれないので、キーワードとなる文字情報も添えておくのがいいそうだ。
文字での会話でも「具体例」を挙げて相互の認識を確認しあうことがコツとなる。文章で表現するより「こういう具合ですか? >10:10に9:00~10:00のデータを集計」という具合だ。
Zoomなどビデオ会議では「画面共有が重要」と松村氏。スクラムボード、議事録、システム構成図、APIのレスポンス結果など、ディスカッションしている対象となる画面を共有することで伝わりやすさが向上する。
攻略★2 担当にしばられすぎない。共通のゴールはユーザー
先述したように、混雑レーダーはいったんクローズしたものを復活させた機能だ。クローズ前に利用していた位置情報プラットフォームがEOL予定だったため、再開にあたり、新システムに移行する必要があった。
松村氏の担当は位置情報データソースではなかったため「詳しく知らない状況で、うまく復活するためにどう立ち回るべきか。担当範囲を超えるべきか。どこまでなら超えていいのか」と悩んだ。しかし最終的には「共通のゴールはユーザーだ。そのために我々は存在する」と気づき、分からないなりに担当者と状況を共有しながら解決策を模索していった。
また松村氏は「やりたいことの優先順位はあるものの、できない理由はできる方法を考えるための踏み台として利用する」と話す。
攻略★3 アプリケーションログの可視化を極めて健全化
4月に混雑レーダー機能を復活したものの、5月には改善を加えた。4月に復活した時、最新情報は2時間前時点だったところを20分前にまで鮮度を良くした。また更新間隔は1時間毎から10分毎へと頻度を高めた。
5月の改善では松村氏の担当はタイル画像生成部分にも広がった。ここで取り組んだのがプログラムの可視化だ。ヤフー社内にはログをWebから確認できるプラットフォームがあるそうだ。
エラーログを可視化することで障害パターンを可視化し、改善を進めていくことができた。松村氏は「寝ててもあらゆる障害が自動復旧するのが最高ですね」と話す。起こりうる異常系パターンを一つひとつつぶすことで緊急対応を減らし、人間の労力は開発に充てることができるからだ。
攻略★4 とにかく動かせ。動かすと皆「見えて」くる
松村氏は「まずはプログラムを(最小構成でも)早く動かすこと」と言う。動かすことで関係者間でいろんな課題が見えてくるからだ。課題が共有されると優先順位を判断できる状態になり、よいプロダクトに近づけるようになる。
実際に動かしてみると、たまに調子が悪いことが判明してきたという。ログ出力で可視化することで不調が把握できるようになり、処理が失敗した場合に備えてリカバリー策を用意することで最終的には最新情報を20分前時点のものに改善することができた。松村氏は「安定をとり最新情報を30分前にするか迷いがあったが、大半のケースで20分前の情報を提供できるのであれば、その価値を提供することを優先したかった」と熱く話す。
攻略★5 自分が最初のユーザー。使用感をI/Oしよう
6月19日には混雑予報をリリースした。店舗や地点における曜日毎の混雑傾向と現時点での混雑実績をグラフで表示する機能だ。ここで松村氏は自分ごととして開発できるように、自分のお気に入り地点を定めた。それが「あべのキューズモール」。ユーザーの立場でアプリと向き合い、「なんじゃこりゃ」「なるほど」など、いろいろと感じとりながら開発を進めた。
アウトプットも惜しまなかった。「自粛が終わったせいか、水族館にいる人が増えてきていますね」、「この動きは面白いですね!」など実際にアプリで表示される画面を示しつつ、率直な感想をどんどんアウトプットしていった。こうした発言はチームを盛り上げ、よりユーザー目線のアプリに近づけることができそうだ。
攻略★6 武器を使う時と、磨く時
今回のプロジェクトで松村氏が使ったプログラミング言語は、混雑レーダーはシェルスクリプト、混雑予報の入稿部分はPHP。もともとのソースを踏襲したことと、自分の得意な言語であるためだ。
たまたま得意な言語がソースだったのでそのままだったが、松村氏は「古い武器にしがみつき過ぎるとよくないのも確か」と言う。使い慣れた武器(言語)なら生産性が高く、急いでいる時はいいものの、これから覇権をとりそうな新しい武器も使いこなせるようにしておくことも必要だ。
松村氏は個人が武器をアップデートする方法として、「趣味やプライベートでいろいろかじっておく。ハック系イベントに参加する。研修を受ける。カンファレンス等に参加する」と挙げた。
さらに「アップデートすべきは個人だけではない」と松村氏。急ぐ時は即戦力パーティーで開発するのが理想だが、ずっと繰り返していると属人化など、後々に響く課題が生まれることもある。いざという時には磨き抜いた武器を使い、余力がある時は武器を磨く。状況に応じてうまく使い分けていきたい。松村氏は「こういう時代こそ、いざというときのために武器を磨いておきましょう」と呼びかける。
最後に松村氏はリモートワーク前提の開発体制の攻略法を生き生きと語った。「コロナ時代では具体的かつ可視化することが一層重要になりました。余裕がない時は使い慣れた武器を使い、全力でスモールスタートしましょう。どの役割でも楽しむことが大事です。特にバックエンドはその作品の本質に触れる最初のユーザーです。どの立場でも、ユーザーファーストを忘れずに。エンドユーザーのことを考え続けて開発を続けることがモチベーションを上げる最大のキーファクターです。ユーザーが便利に使えて、自分も便利に使える。これが開発者の幸せですね」