COCOA王国の興亡
国家が作ったアプリと、4ヶ月鳴らなかったベル
あなたが2年5か月持ち歩いていたあのアプリが、どう作られて、どう止まったのか――その記録です。
本稿は実在のシステム障害・行政文書・報道に基づきます。固有名詞・年月日・契約金額はすべて公開資料を典拠としています。ただし、章立てや一部の語り口は「情報処理王国史 外典」シリーズの様式に倣い、年代記風・ブラックコメディ調で再構成しています。引用には意訳が含まれます。読み物としてお楽しみください。
60日で出来た国家アプリ
2020年5月20日、AppleとGoogleが世界へ「Exposure Notification API」を公開した。
その「窓口」がiOS 13.5に組み込まれてからわずか30日後、2020年6月19日、日本の厚生労働省は接触確認アプリ『COCOA』をプレビュー版としてリリースした。iOS版が午後3時頃にApp Storeで、Android版が午後7時頃にGoogle Playで公開されている。
初日のダウンロードは85万件、翌日昼には155万件に達した。日本でアプリを国家が作って配るというのは、ほとんど前例のない出来事だった。だが、この「60日で配った」というスピード感が、のちに王国の屋台骨を蝕んでいくことになる。
ボランティアの設計図
COCOAには、ひとつ珍しい出生の事情があった。土台となったのは、日本マイクロソフト社員の廣瀬一海と有志エンジニア集団が、業務外で立ち上げたオープンソース・プロジェクト『Covid19Radar』だったのである。
国がOSSを採用するのは、当時としては画期的だった。2020年9月1日、厚労省はCOCOAのソースコードもGitHubに公開した。
「市民参加型のアプリ」――そう謳われた船出だった。問題は、設計図は市民に開いたが、運営は丸ごと外注した、ということだった。
ベルが鳴らなくなった日
2020年9月28日、Android版『COCOA』がバージョン1.1.4にアップデートされた。
このアップデートに、たった一行ぶんの致命傷が紛れ込んでいた。AppleとGoogleが提供するExposure Notification APIには、iOSとAndroidとで「接触あり」と判定する内部パラメータが微妙に違う、という設計上の落とし穴があった。開発チームはApple側の指示に従ってiOS用のパラメータを変更した際、誤って同じ値をAndroid側にも適用してしまった。
結果、Android版COCOAは「どんなに長い時間、どれだけ近くにいても、接触として検出しない」という、皮肉な境地に達した。陽性者と15分一緒に座っていても、ベルは鳴らない。なんなら一晩同じ部屋で寝ていても、鳴らない。
公式アプリとしての最重要機能が、丸ごと無効化された瞬間だった。
誰も気づかない4ヶ月
不思議な静寂は、なんと4ヶ月続いた。
2020年11月以降、公開されたGitHub上で第三者の有志が「Android版で接触通知が正常に届かないのではないか」という指摘を出し始めていた。世界中誰でも見られる場所に、指摘の声は出ていたのである。だが、運営側はこの一連の指摘を拾い上げられなかった。
なぜ気づかなかったのか。厚労省が後にまとめた報告書は、3つの原因を挙げた。
要するに、「動いているかどうか確かめる仕組み」が、最初から無かった。1億2千万人を対象とした公衆衛生インフラの、中心機能を確かめる環境が、無かった。
発覚と「丸投げ」会見 ― 担当大臣が自国の発注を斬った日
2021年2月3日、厚労省は「Android版COCOAは、昨年9月から接触通知機能が機能していなかった」と発表した。アプリはすでに約2,500万件ダウンロードされていた段階での発表である。Androidユーザーの大半が、4ヶ月、何の通知も受けていなかったことになる。
2月12日、平井卓也デジタル改革担当大臣は会見でこう述べた。
「デジタル系で国民の期待に応えられないような事案が結構出てきた。COCOAはその最たるもの」
「そもそも発注自体にも問題があったと言わざるを得ない」「発注金額も、とてつもなく高い」
担当大臣自身が「発注に問題あり」「金額が高すぎる」と公の場で言ったのである。これは王国側の重臣が、自国の建築様式そのものに苦言を呈したに等しい。
94%の丸投げ ― 1,615万円の中核機能
平井大臣が「とてつもなく高い」と言った発注の中身は、こうなっていた。
元請けはパーソルプロセス&テクノロジー(PP&T)。HER-SYS(厚労省の感染者情報管理システム)の予算9億4千万円の一部を振り分ける形でCOCOA関連業務を受注した。
PP&Tはこの業務の94%を、3社に再委託した(運用・維持の随意契約3億9千万円のうち94%が再委託対象という構造で、東京新聞・日経クロステック等が報じた)。各社の役割と契約額(複数報道による概数)は次のとおり。
・株式会社FIXER(クラウド監視):約1億2,062万円
・日本マイクロソフト(PMO支援、技術支援):約2,201万円
・株式会社エムティーアイ(運用、保守、カスタマーサポート、Android/iOSアプリ改修):1,615万円
└ エムティーアイはここからさらに2社に再々委託
つまり、利用者がスマホで触れるアプリ本体の改修は、1,615万円の契約で動いていた。元請けはCOCOA本体の開発契約として2億9,448万円で受注しているという報道もある。厚労省内規では「再委託は原則2分の1未満」とされていたが、実質は逆になっていた。
東京新聞の調査記事の見出しが、王国の本質を一行で射抜いている。
「APIの使い方を誤ったのは、結局どの会社の、どのエンジニアだったのか」――この問いに、誰も明確に答えられなかった。
12.7億円の教訓
2021年4月16日、厚労省は不具合に関する報告書を公表。4月19日にはPP&Tが1,200万円を自主返納すると発表した。額は控えめだった。
2022年11月17日、COCOAは機能停止版(バージョン3.0.0)の配信を開始。陽性者の全数届け出見直しに伴って、アプリの存在意義そのものが薄れたのである。配信開始から2年5ヶ月、累計約4,117万ダウンロード、369万件の陽性登録(同年11月11日時点)を残して、王国は静かにベルを下ろした。
2023年2月17日、デジタル庁と厚労省は総括報告書を共同公表。総費用は12億7千万円。利用者アンケートでは「7割以上が行動変容につながった」とまとめられ、「一定の効果が確認できた」と結論された。報告書はこう書く。
「迅速さ」と「体制整備」の両立は、行政の永遠の宿題である。
他国の景色 ― 同じ窓、違う家
同じExposure Notification APIという「窓」を使っても、出来上がる家は国によって違った。
ドイツの『Corona-Warn-App』は、ドイツテレコムとSAPが共同開発し、最初からオープンソースで公開された。バグはコミュニティの目で潰し、本番投入前に修正されることが多かった。2020年6月16日リリース、24時間で約650万ダウンロード(Computer Weekly報)。ドイツの公衆衛生機関(RKI)が運営主体として可視化されていた。
シンガポールの『TraceTogether』は、独自プロトコルから開始したが、専用トークン(カード型端末)を高齢者などに配布し、最終的に普及率は7割を超えた。
日本のCOCOAは、累計約4,117万ダウンロード。人口比でおよそ3割。設計図は市民に公開したが、運営の責任主体は5社の連名表で曖昧になり、最重要機能が4ヶ月鳴らなくなっても、誰も気づかなかった。
技術ではなく、「誰がオーナーシップを持つか」の問題だった、というのは、後年多くの識者が指摘した点である。
王国の年代記
ベルは鳴らなかったけれど ― 人を責める前に、構造を見る
COCOAの2年5ヶ月を、誰か一人の失敗として語るのは、たぶん筋が悪い。
オープンソースのアイデアを国が採用したことは、当時としては勇気ある選択だった。Apple/GoogleのAPIを使って60日で公衆衛生インフラを立ち上げた事実そのものは、海外と比べても遅くない。批判の中心は「動かなかったこと」ではなく、「動かなくなっても誰も気づかない設計」「気づいた指摘を拾い上げられない体制」「最終的に誰が責任を負うのかが曖昧な発注の連なり」にある。
そしてこれは、COCOAだけの話ではない。1,615万円の契約で巨大な公的アプリの中核機能を直す、という構造は、特許庁基幹システムでも、みずほ銀行の大規模システム障害でも、形を変えながら何度も繰り返されてきた風景である。発注側に技術知見が乏しいまま「迅速にやれ」と求めれば、元請けは安全策として大手に丸投げする。大手は中堅に投げ、中堅はさらに小さな会社に投げる。その途中で、誰がベルを点検する役なのかが、いつのまにか名簿から消える。
人を責める前に、構造を見たほうがいい。構造を見ずに人を責めると、次の王国でもまた、同じ場所のベルが鳴らなくなる。
数年経って振り返ると、COCOAは「日本の行政が初めて、自分でアプリを動かそうとした」記録でもある。失敗の総括が公開資料として残っているという点で、すでに一つの教訓として機能している。次の王国の建築家が、この資料を読むかどうかにかかっている。