COCOA王国の興亡
情報処理王国史 外典第十四巻
((( )))

COCOA王国の興亡

国家が作ったアプリと、4ヶ月鳴らなかったベル

COCOA EXPOSURE NOTIFICATION

あなたが2年5か月持ち歩いていたあのアプリが、どう作られて、どう止まったのか――その記録です。

この記事について
本稿は実在のシステム障害・行政文書・報道に基づきます。固有名詞・年月日・契約金額はすべて公開資料を典拠としています。ただし、章立てや一部の語り口は「情報処理王国史 外典」シリーズの様式に倣い、年代記風・ブラックコメディ調で再構成しています。引用には意訳が含まれます。読み物としてお楽しみください。
【用語解説】COCOA(ココア)
『COVID-19 Contact-Confirming Application(新型コロナウイルス接触確認アプリ)』の略。Bluetoothで近くのスマホ同士を匿名で記録し、後から陽性登録した人と過去14日間に「1メートル以内・15分以上」接触していた可能性があれば、利用者へ通知するアプリ。厚生労働省が発注し、2020年6月から2022年11月まで動いた。
CH.01

60日で出来た国家アプリ

2020年5月20日、AppleとGoogleが世界へ「Exposure Notification API」を公開した。

【用語解説】Exposure Notification API
「曝露(ばくろ)通知API」の意味。「Exposure=さらされること(ここでは感染者と接触したこと)」、「API=Application Programming Interface(アプリ同士をつなぐための窓口)」。AppleとGoogleが共同で作った仕組みで、各国の保健機関がこの窓口を使えば、自前で接触確認アプリを作れる。

その「窓口」がiOS 13.5に組み込まれてからわずか30日後、2020年6月19日、日本の厚生労働省は接触確認アプリ『COCOA』をプレビュー版としてリリースした。iOS版が午後3時頃にApp Storeで、Android版が午後7時頃にGoogle Playで公開されている。

初日のダウンロードは85万件、翌日昼には155万件に達した。日本でアプリを国家が作って配るというのは、ほとんど前例のない出来事だった。だが、この「60日で配った」というスピード感が、のちに王国の屋台骨を蝕んでいくことになる。


CH.02

ボランティアの設計図

COCOAには、ひとつ珍しい出生の事情があった。土台となったのは、日本マイクロソフト社員の廣瀬一海と有志エンジニア集団が、業務外で立ち上げたオープンソース・プロジェクト『Covid19Radar』だったのである。

【用語解説】オープンソース(OSS)
ソフトウェアの設計図(ソースコード)を一般公開し、誰でも閲覧・改良・再配布できるようにしたソフトウェアの作り方。「OSS=Open Source Software」。バグを世界中の人が見つけて直せるという長所と、誰がどこまで責任を持つかが曖昧になる短所がある。

国がOSSを採用するのは、当時としては画期的だった。2020年9月1日、厚労省はCOCOAのソースコードもGitHubに公開した。

【用語解説】GitHub(ギットハブ)
世界最大のソースコード共有サービス。プログラマがコードを置いておく「倉庫」のような場所で、ここでバグ報告(Issue)や修正提案(Pull Request)を世界中の人が出し合える。

「市民参加型のアプリ」――そう謳われた船出だった。問題は、設計図は市民に開いたが、運営は丸ごと外注した、ということだった。


CH.03

ベルが鳴らなくなった日

2020年9月28日、Android版『COCOA』がバージョン1.1.4にアップデートされた。

このアップデートに、たった一行ぶんの致命傷が紛れ込んでいた。AppleとGoogleが提供するExposure Notification APIには、iOSとAndroidとで「接触あり」と判定する内部パラメータが微妙に違う、という設計上の落とし穴があった。開発チームはApple側の指示に従ってiOS用のパラメータを変更した際、誤って同じ値をAndroid側にも適用してしまった

結果、Android版COCOAは「どんなに長い時間、どれだけ近くにいても、接触として検出しない」という、皮肉な境地に達した。陽性者と15分一緒に座っていても、ベルは鳴らない。なんなら一晩同じ部屋で寝ていても、鳴らない。

公式アプリとしての最重要機能が、丸ごと無効化された瞬間だった。


CH.04

誰も気づかない4ヶ月

不思議な静寂は、なんと4ヶ月続いた。

2020年11月以降、公開されたGitHub上で第三者の有志が「Android版で接触通知が正常に届かないのではないか」という指摘を出し始めていた。世界中誰でも見られる場所に、指摘の声は出ていたのである。だが、運営側はこの一連の指摘を拾い上げられなかった。

なぜ気づかなかったのか。厚労省が後にまとめた報告書は、3つの原因を挙げた。

「テスト環境が整備されておらず、不具合の原因を調べるためのログ送信機能も実装されていなかった。不具合が頻発し、感染防止策として必要な改修に追われていた」
― 厚生労働省『接触確認アプリ「COCOA」の不具合の発生経緯の調査と再発防止の検討について』(2021年4月16日公表)より要約
【用語解説】テスト環境
本番のアプリと同じ条件を再現した「練習用の場所」。新しい修正を入れたとき、「実際にちゃんと動くか」を本番に出す前に確かめる場所のこと。これがない状態でアプリを直すのは、暗闇の中でジェンガを積み増すようなもの。

要するに、「動いているかどうか確かめる仕組み」が、最初から無かった。1億2千万人を対象とした公衆衛生インフラの、中心機能を確かめる環境が、無かった。


CH.05

発覚と「丸投げ」会見 ― 担当大臣が自国の発注を斬った日

2021年2月3日、厚労省は「Android版COCOAは、昨年9月から接触通知機能が機能していなかった」と発表した。アプリはすでに約2,500万件ダウンロードされていた段階での発表である。Androidユーザーの大半が、4ヶ月、何の通知も受けていなかったことになる。

2月12日、平井卓也デジタル改革担当大臣は会見でこう述べた。

「設定の問題。原因はAPIの使い方を誤ったことに尽きる」
「デジタル系で国民の期待に応えられないような事案が結構出てきた。COCOAはその最たるもの」
「そもそも発注自体にも問題があったと言わざるを得ない」「発注金額も、とてつもなく高い」
― 平井卓也デジタル改革相 2021年2月12日 記者会見要旨(ITmedia NEWSほか)

担当大臣自身が「発注に問題あり」「金額が高すぎる」と公の場で言ったのである。これは王国側の重臣が、自国の建築様式そのものに苦言を呈したに等しい。


CH.06

94%の丸投げ ― 1,615万円の中核機能

平井大臣が「とてつもなく高い」と言った発注の中身は、こうなっていた。

【用語解説】再委託(さいいたく)/多重下請け
国や大企業から仕事を受けた会社(元請け)が、その仕事を別の会社(下請け)に丸ごとまたは大部分を回すこと。回した先がさらに別の会社に回すと「多重下請け」になる。中間で抜かれる手数料が積み重なるほど、現場でコードを書く人の取り分は減る。

元請けはパーソルプロセス&テクノロジー(PP&T)。HER-SYS(厚労省の感染者情報管理システム)の予算9億4千万円の一部を振り分ける形でCOCOA関連業務を受注した。

【用語解説】HER-SYS(ハーシス)
『Health Center Real-time information-sharing System on COVID-19(新型コロナウイルス感染者等情報把握・管理支援システム)』の略。コロナの感染者情報を保健所と医療機関で共有するための国の情報システム。COCOAとは別物だが、予算と発注の入り口が同じだった。

PP&Tはこの業務の94%を、3社に再委託した(運用・維持の随意契約3億9千万円のうち94%が再委託対象という構造で、東京新聞・日経クロステック等が報じた)。各社の役割と契約額(複数報道による概数)は次のとおり。

・株式会社FIXER(クラウド監視):約1億2,062万円
・日本マイクロソフト(PMO支援、技術支援):約2,201万円
・株式会社エムティーアイ(運用、保守、カスタマーサポート、Android/iOSアプリ改修):1,615万円
  └ エムティーアイはここからさらに2社に再々委託

【用語解説】PMO(ピーエムオー)
「Project Management Office」の略で、複数の関係会社をまたがる大型プロジェクトの進行管理を専門に行うチームのこと。要するに「全体の交通整理係」。

つまり、利用者がスマホで触れるアプリ本体の改修は、1,615万円の契約で動いていた。元請けはCOCOA本体の開発契約として2億9,448万円で受注しているという報道もある。厚労省内規では「再委託は原則2分の1未満」とされていたが、実質は逆になっていた。

東京新聞の調査記事の見出しが、王国の本質を一行で射抜いている。

「COCOA開発受注企業が事業費94%を3社に再委託、さらに2社に…不具合の原因企業『分からない』」
― 東京新聞デジタル 2021年4月

「APIの使い方を誤ったのは、結局どの会社の、どのエンジニアだったのか」――この問いに、誰も明確に答えられなかった。


CH.07

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日時点)を残して、王国は静かにベルを下ろした。

【用語解説】全数届け出見直し
コロナ禍前半は、医師がすべての陽性者を届け出ていた(全数届け出)。2022年9月以降、高齢者など重症化リスクの高い人だけに絞られた。これによりCOCOAに陽性登録できる人が大幅に減り、アプリ存続の意味が薄れた。

2023年2月17日、デジタル庁と厚労省は総括報告書を共同公表。総費用は12億7千万円。利用者アンケートでは「7割以上が行動変容につながった」とまとめられ、「一定の効果が確認できた」と結論された。報告書はこう書く。

「迅速な導入が優先されたため、開発・保守運営などの体制整備が十分になされなかった。所管する厚労省が新型コロナ全般の対応で人員不足だった点に加え、システムの開発・運用に関する知見も不十分だった」
― デジタル庁・厚生労働省『新型コロナウイルス接触確認アプリ(COCOA)の取組に関する総括報告書』(2023年2月)より要約

「迅速さ」と「体制整備」の両立は、行政の永遠の宿題である。


CH.08

他国の景色 ― 同じ窓、違う家

同じExposure Notification APIという「窓」を使っても、出来上がる家は国によって違った。

ドイツの『Corona-Warn-App』は、ドイツテレコムとSAPが共同開発し、最初からオープンソースで公開された。バグはコミュニティの目で潰し、本番投入前に修正されることが多かった。2020年6月16日リリース、24時間で約650万ダウンロード(Computer Weekly報)。ドイツの公衆衛生機関(RKI)が運営主体として可視化されていた。

シンガポールの『TraceTogether』は、独自プロトコルから開始したが、専用トークン(カード型端末)を高齢者などに配布し、最終的に普及率は7割を超えた。

日本のCOCOAは、累計約4,117万ダウンロード。人口比でおよそ3割。設計図は市民に公開したが、運営の責任主体は5社の連名表で曖昧になり、最重要機能が4ヶ月鳴らなくなっても、誰も気づかなかった

【用語解説】RKI(ロベルト・コッホ研究所)
ドイツの国立公衆衛生機関。日本でいう国立感染症研究所+厚労省感染症対策部のような立ち位置。Corona-Warn-Appの「責任主体」として、開発と運用の窓口になった。

技術ではなく、「誰がオーナーシップを持つか」の問題だった、というのは、後年多くの識者が指摘した点である。


CH.09

王国の年代記

2020年5月20日 Apple/Google「Exposure Notification API」公開(iOS 13.5)
2020年6月19日 厚労省「COCOA」プレビュー版リリース(iOS版15時頃/Android版19時頃)、初日85万DL
2020年7月3日 陽性者からの通知機能を運用開始
2020年9月1日 ソースコードをGitHub上に公開
2020年9月28日 Android版「1.1.4」にアップデート、接触判定パラメータ誤変更
2020年11月 GitHub上で第三者からAndroid版の異常を指摘する声が出始めるも、運営側で吸い上げられず
2021年2月3日 厚労省「Android版が4ヶ月間機能していなかった」と公表
2021年2月12日 平井卓也デジタル相会見「APIの使い方を誤った」「発注に問題」
2021年4月16日 厚労省、不具合に関する調査報告書を公表
2021年4月19日 パーソルP&Tが1,200万円自主返納を表明
2022年9月 全数届け出見直し開始、陽性登録の入口が大幅縮小
2022年11月17日 機能停止版「3.0.0」配信開始(累計約4,117万DL、陽性登録369万件)
2023年2月17日 デジタル庁・厚労省、総括報告書公表(総費用12.7億円)
2023年3月 増補版報告書公表

CH.10

ベルは鳴らなかったけれど ― 人を責める前に、構造を見る

COCOAの2年5ヶ月を、誰か一人の失敗として語るのは、たぶん筋が悪い。

オープンソースのアイデアを国が採用したことは、当時としては勇気ある選択だった。Apple/GoogleのAPIを使って60日で公衆衛生インフラを立ち上げた事実そのものは、海外と比べても遅くない。批判の中心は「動かなかったこと」ではなく、「動かなくなっても誰も気づかない設計」「気づいた指摘を拾い上げられない体制」「最終的に誰が責任を負うのかが曖昧な発注の連なり」にある。

そしてこれは、COCOAだけの話ではない。1,615万円の契約で巨大な公的アプリの中核機能を直す、という構造は、特許庁基幹システムでも、みずほ銀行の大規模システム障害でも、形を変えながら何度も繰り返されてきた風景である。発注側に技術知見が乏しいまま「迅速にやれ」と求めれば、元請けは安全策として大手に丸投げする。大手は中堅に投げ、中堅はさらに小さな会社に投げる。その途中で、誰がベルを点検する役なのかが、いつのまにか名簿から消える

人を責める前に、構造を見たほうがいい。構造を見ずに人を責めると、次の王国でもまた、同じ場所のベルが鳴らなくなる。

数年経って振り返ると、COCOAは「日本の行政が初めて、自分でアプリを動かそうとした」記録でもある。失敗の総括が公開資料として残っているという点で、すでに一つの教訓として機能している。次の王国の建築家が、この資料を読むかどうかにかかっている。


通知 沈黙
接触 未検出
王国 解散
―― ベルは鳴らなかったけれど、
誰がベルを点検する役だったのかは、
ちゃんと書類に残った。

参考・引用資料
厚生労働省「接触確認アプリ(COCOA)」公式ページ
厚生労働省「新型コロナウイルス接触確認アプリ(COCOA)をリリースします」(2020年6月19日)
厚生労働省『接触確認アプリ「COCOA」の不具合の発生経緯の調査と再発防止の検討について』(2021年4月16日)
デジタル庁・厚生労働省『新型コロナウイルス接触確認アプリ(COCOA)の取組に関する総括報告書』(2023年2月17日/同年3月増補版)
平井卓也デジタル改革担当相 記者会見要旨(2021年2月10日/12日)
ITmedia NEWS「COCOA不具合の原因は『APIの使い方を誤った』 平井デジタル相、改善を約束」(2021年2月12日)
ITmedia NEWS「COCOA元請けのパーソルP&Tが1200万円自主返納 対応に疑問の声も」(2021年4月19日)
東京新聞デジタル「COCOA開発受注企業が事業費94%を3社に再委託、さらに2社に…」(2021年4月)
日経クロステック「COCOA中核機能のバグを4カ月放置 開発ベンダー選定の『丸投げ』に遠因」「COCOA重大バグの4カ月放置に3つの原因」「COCOAが検知不能バグから『再起動』、因縁のGitHubをフル活用」
ケータイ Watch「Android版『COCOA』に接触しても通知されないバグ、昨年9月から」「厚労省、4カ月見逃された”Android版COCOA”不具合の調査結果を発表」
Impress Watch「接触確認アプリ『COCOA』、2000万ダウンロード突破」「さよなら『COCOA』 最終版3.0.0で機能停止後に削除を」
Computer Weekly “Data privacy fears emerge as German contact-tracing app downloaded 6.5 million times in first day”
Wikipedia「新型コロナウイルス接触確認アプリ」
COCOA Open Source Project(cocoa-mhlw.github.io/cocoa/)/GitHub上のIssueログ
Apple/Google「Exposure Notification API」公式発表(2020年5月20日)
MIT Technology Review “Is a successful contact tracing app possible?”(2020年8月)
ドイツ連邦政府/RKI Corona-Warn-App公式情報・シンガポール政府 TraceTogether公式情報