GitHubリポジトリ Covid19Radar に対して起ったことがかなり特殊な状況だったため、開発を追い掛けていた視線からレポートをします。
この記事の著者について
- 代表作のない個人アプリ開発者(かなしい)
- Covid-19 Radar Japan の人ではない
- GAFAMやCode for Japan の人でもない
4/8 Covid-19 Radarを発見する
- Covid-19 Radarとは、この時点ではシンガポールのTraceTogetherの日本版を目指した個人開発者 廣瀬一海さんのアプリのリポジトリ
- 4月にContact Tracing技術について調べていたら偶然見つけた
Xamarin.Forms / “GitHub - kazumihirose/Covid19Radar: This app uses Bluetooth to get the contact logs of each other. We are waiting for your contribution and pull request.” https://t.co/uRR9lDjfhn
— laiso (@laiso) April 8, 2020
- 4/8時点で人が集っていて活発に開発されていた。Facebookで協力を呼び掛けていたらしい*1
sinsai.info
みたいなムーブメントかな。ぐらいの認識だった
4/10 Apple/Google APIの開発が発表される
AppleとGoogle、 新型コロナウイルス感染症対策として、 濃厚接触の可能性を検出する技術で協力 - Apple (日本)
- この時点では発表だけ。ベータリリースされたら使ってみるかぐらいの感想だった
4/15 コード・フォー・ジャパンもContact Tracingやってるらしい
COVID19Radarみたいなやつかな / “コンタクト・トレーシング・アプリの開発に関して|一般社団法人 コード・フォー・ジャパンのプレスリリース” https://t.co/Dm1zMVPj1e
— laiso (@laiso) April 21, 2020
5/5 APIを使えるアプリは各国1つのみ
“同様のアプリが乱立することを防ぐため、APIを使えるアプリは各国1つのみ。” / “グーグルとアップル、新型コロナ濃厚接触の可能性知らせる「Exposure Notification」のUIとサンプルコードを公開 - ケータイ Watch” https://t.co/i1tzjpEPcT
— laiso (@laiso) May 5, 2020
- ここで個人開発者オワタと思った
6/13 突然Covid-19 Radarが日本代表になっていたことを知る
> 3 前2項にかかわらず、オープンソースの利用に関連して、当該オープンソースの規定に従う必要がある事項については当該規定が優先します。当該オープンソースに関しては、 https://t.co/Ys8O5GKsMaにおいて確認することができます。 https://t.co/HiLZv6Yqn1
— laiso (@laiso) June 13, 2020
あのXamarin製アプリが使われるらしい
- コード・フォー・ジャパンのプロジェクトどうなったの? とかあれは個人プロジェクトでは? という疑問があった
6/15 開発が米マイクロソフトに移った??
- 日経新聞の飛し記事が出る
「想定と違う」「大企業のほうが安心だ」丸投げが起こるテンプレでは / “新型コロナ:接触検知アプリ、週内にも日本投入 マイクロソフト製 :日本経済新聞” https://t.co/30duMsH51c
— laiso (@laiso) June 15, 2020
- 「「コード・フォー・ジャパン(CFJ)」にアプリ作成を任せる方針」が覆った理由が全然わからない
- 5/11に投稿されたらしい 接触確認アプリ「まもりあいJapan」開発の経緯と今後について を読むと開発主体がCFJから厚生省に移ったことが要因らしい
- Covid-19 Radarの作者はたしかに日本マイクロソフトの人だったから、会社を巻き込んだプロジェクトにしたのかなー、と思った
- ちがうらしい
Covid19Radarの話ならメンバーにMSコミュニティの人が多いから記者が勝手に判断したのか / “接触確認アプリは米MS製? 日本MSは「事実ではない」と否定 - ITmedia NEWS” https://t.co/nathljV4yc
— laiso (@laiso) June 15, 2020
- 今思うと厚生省で「大企業のほうが安心だ」と意思決定したおじいちゃんも「米マイクロソフトに発注したぞ!」と本当に認識していたのかもしれない
6/19 アプリがリリースされる
- 開発者インタビューなどが世に出る
- GitHubリポジトリだけを見てるとチームで開発してる感がなかったのでどんな開発体制なんだろうと疑問だったんだけど https://diamond.jp/articles/-/240905 でデザインやリレーションを担当している人が存在することを知る。あれ、開発は本当に1人でやっているの??
GitHubリポジトリを見始める
- 日本初のApple/GoogleのContact Tracing APIを使ったアプリが出たぞということで技術的な関心駆動でコードを読み始める(Xamarinわからん過ぎるのでとりあえずチェックアウトだけして中身見てなかった)
この時点でいくつかのことが分かった
アプリサイドを廣瀬さん、サーバーサイドをdarkcrashさんが中心に開発している
- runceelさんalbilagaさんなどがXamarin系の修正プルリクエストを送って手伝っている
- norijiさんが前述の記事で出てくるデザイン作業で貢献している方
- changeworldさんという人がもの凄い勢いでIssueやプルリクエストを捌いている
過去にAd-Hoc版ビルドのテスト版が配布されていたことを知る。デバイス登録上限に達するぐらい参加者がいたらしい(注: このアプリは5月末にリリースされたiOS 13.5にアップデートした端末か事前のiOSベータ版配布を適応しないと動作確認すらできない)
この時の配布ツールApp Center用のライブラリが本番バイナリに入ってデータ送信していたらしく、mala(呼び捨て)が発見して取り除かれた。
Getting Started
- アプリをビルドしてみて修正しようと思ったけど全然やり方がわからない
- 開発環境構成ドキュメントはまだ存在しなく、なんとなくGitHubの外にチャットなどがあって、そこで開発が進んでいるのかな〜と思いはじめる
- ふて寝する
6/20 なんとかなったぜ
- いろんな方法を探っていたら結果うまくいってコードを編集して動作確認できるようになった
- iOSのビルド設定が廣瀬さん固定になっていたので誰でもビルドできるような変更をプルリクエストしてみる
iOS Bundle SigningOption to 'Automatic' by laiso · Pull Request #471
- ここでなんとApple/Google APIのデバッグは廣瀬さんの環境でのみしかできないことが判明(たぶん)。超SPOFじゃん・・と震える
はー。もしかして Exposure Notification API の実機デバッグは野良デベロッパーには無理……??
— laiso (@laiso) June 19, 2020
厚生労働省に入ります。
(カルチャーフィットしなさそうなので厚生労働省には入らないことにしました)
結局Exposure Notification APIをモック化する仕組みが既に用意されていて(有能)それを使うことにした。
About messages when sharing the app on line
「LINEでシェアすると表示がおかしい」というIssueを見たので検証して直してみる
change appStoreUrl to valid URL by laiso · Pull Request #474
「俺の修正のおかげで直ったわ〜」と達成感を味わっていたらmala(呼び捨て)が出てきてLINEのサーバーで修正されてしまう(チートでは??)
Line breaks not works in a mail app
- iOSのメールアプリでお問い合わせするとエスケープ済みの改行コードが入るらしい
- メール改行テキストの修正のパッチを提案する(普通にググってうまくいくか試しただけ)
Line breaks not works in a mail app · Issue #479
この問題翻訳ファイルの元の問題を修正する必要あるんだけど、翻訳ツールがWindowsでしか動かないことを知る(Macの人居なかったのか・・!)
翻訳用のツールを使うのにWindowsが必要っぽい
— laiso (@laiso) June 20, 2020
App crashes
- App crashes · Issue #450 が再現しやすいので修正を試みる
- ソースコードをいじって検証してみたけど前述のとうりSPOFで世界がヤバいので僕の環境ではデバッグすらできなく、直ったのかどうかわからんけどとりあえずプルリクエストにしてみる
fix a crash on StopExposureNotification() by laiso · Pull Request #484
- このあたりで前述のApp crashes Issueのやりとりを見た人たちが「公共サービスをこのような認識で開発されているのはいかがなものか?」と騒いでるらしいことを知人に教えてもらう
- 僕は彼等に対して距離を置くことで軽蔑やNOを示したいので、透明なおじさんは見えませんよみたいな感覚で見なかったことにした(不具合の事実の報告は重要なのでチェックだけする)
- とはいえ当事者の人たちはダメージを受けていたらしく「SPOF〜〜」と見守っていた
Xamarinについて
- 知人iOSエンジニアなどが「コントリビュートしたいけどな〜技術スタックがな〜Xamarinがな〜」と嘆いているのを見かける
- たしかにXamarin+Mac+iOSは少数派ゆえ茨の道っぽい……
Xamarin→Macつらい→Windowsで開発しよう→iOSビルドできない→Androidで確認しようみたいなルートある
— laiso (@laiso) June 20, 2020
- もしかしてiOS版のCovid-19 Radarをビルドができるの廣瀬さんと僕だけなのか? と思いはじめる(当然Apple/Google APIも使えない)
- amay077さん(Xamarinに詳しい人)などに助言をもらって開発環境の作り方を他のiOSエンジニアにシェアすることにした
- ちょうどいいIssueが作成されていたので以下で調べた内容がやりとりされている
- connection error on submitting to accept the Terms of Use · Issue #543
- [Android/iOS]アプリの通信処理の Mock 化 by amay077 · Pull Request #553
これまでの流れで思ったこと
- 国の意向で日本代表の感染症対策アプリ開発が個人開発アプリに丸投げされたっぽい(そんなことあるの??)
- 関係者の発言(公開された情報)によるとリリース日が事前に決まっていたらしい
- Covid19 RadarはMPL v2.0に基くソフトウェアだけどプロジェクトは一般的に知られる「GitHubで開発が行なわれているOSSプロジェクト」ではなく個人開発者とその周辺のボランティアだった
- GitHubリポジトリがとりあえずある(元が個人開発アプリなので)。というだけの状態
- 今後このプロジェクトは厚生省及び開発委託先によって管理されるらしい
- 「大企業のほうが安心だ」と意思決定する人がこのGitHubリポジトリを維持するものなのか
- userUuid および secret の廃止 · Issue #514 のような提議をできる場はあるのか
- 現在改善が進んでいるMPLのコードベースがどうなるのか
- 人類がはじめて直面する事態に対してアプリケーションのプラットフォームが特例的に出した仕組みを使って、1つの国で1つのアプリを1人が作る*2異常な状況なので何が正解なのか誰も分からない……
- 廣瀬さん関係者の方々お疲れさまでした
06/24/2020:この記事を投稿した後にわかったこととか
高木浩光さんの発言の反応について
- App crashesのIssueは高木さんの投稿(RT?)から話題になっていたのだと後から知った
- インストールしてセットアップ完了をさせる人数が重要で、それが生死に関わる問題のアプリケーションなので、感情や責任に対する議論に終始して「たいした問題じゃない」という言葉で弁護するのは賛同できないなと思った
- 自分なら「クラッシュの回避はとても重要である」という意見になる。最新の発言しか読んでないけど高木さんも似たような指摘をしていた
- そもそもフレームワークレベルで呼んだら捕捉できる例外を返して欲しい
- あとあれは正常系だと思う(用語の話)
- そして他に指摘されていた不具合はリリース当日の既にmasterブランチで修正されているものもあり(日付表示の問題など)、v1.0.0はその時点のスナップショットが世に出された印象だった(言いたいこととしてはフィードバックの修正が進んでいる)
HER-SYS(新型コロナウイルス感染者等情報把握・管理支援システム)
- 接触確認アプリはHER-SYSとの連携を予定している(陽性者登録のシステムなど)
- 接触確認アプリの開発はHER-SYS開発の契約の一部である
- HER-SYSの発注先がパーソルプロセス&テクノロジーである
これが知りたかった情報にもっとも近かった(楠正憲さんは内閣官房情報化統括責任者補佐官でもある)
早期にリリースするには予算要求からやっていては間に合わず、どのみちアプリの陽性患者登録のためにはHER-SYSの改修が必要だったので、アプリ自体をHER-SYSの一部と位置づけて契約変更で対応したのです。なので、そもそも政府ではなくHER-SYSの開発元が再委託先を選びました
— Masanori Kusunoki (@masanork) June 23, 2020
Covid-19 Radarへ
- 接触確認アプリはパーソルプロセス&テクノロジー以下へ委託される
- HER-SYSの基盤はMicrosoft Azureだった *3
- Covid-19 Radarも4月時点でAzure+.NET+CosmosDBを利用してAPIが実装されていた
- まもりあい JAPANのAPIサーバはAWS+Node.js+Firestore*4 で実装されていた
- Serverless FrameworkのプロバイダをAWSからAzureに移行する。これは互換性の面では可能だがFirestoreは維持するとなるとマルチクラウド構成になってしまう
- まもりあい JAPAN以外にもContact Tracingアプリ開発プロジェクトはあったし、スクラッチから開発するという選択肢もあった
- パーソルプロセス&テクノロジーが「アプリ開発」の部分の再委託先を決めないといけない。それには時間がかかる
- リスクを減らすには技術的な相性を加味する必要があるのではないか
- (それ以外にも採用してるライセンスや開発担当者の身元など様々な要素があると思うけど……)
- そして再委託先の決定+開発開始のリードタイムを埋めるべく作業を任されたのがCovid-19 Radar Japan?(ここまでは勝手な推測)
- なので「無報酬で依頼を受けるべきでなかった」は一面的な見方だと思う
こういうこと?
- 政府にとって第1イシューは「早期にリリースする」ことだった
- 早期にリリースするために各自が出した答えが現在の状況と体制
- 早期リリースは実現された
今後
- 完全にメンバーが変わるのなら、バックエンドはまだしもアプリ部分はネイティブ実装(Swift/Kotlin)に置き換えられていく可能性は充分あるなと思った(そちらのが信頼のおけるサービスになるのなら)
- GitHubリポジトリの運用も維持される可能性はありそう(他国事例や東京都サイトに続けて政府のIT施策アピールにもなる)。ただ委託先との契約上どうなっているのか次第なのかもしれない
お詫び
- 文章を読み返してみたら厚労省やXamarinに対して貶めるような表現が多くバランスを欠いていたなと反省しました。謹んでお詫び申し上げます
- 記事のコメントを読んでいたら著者について、実態よりCovid-19 Radar Japanのインサイダーっぽく受け取られているなと感じました。とくに開発に積極参加しているわけではなく、メンバーと交流があるわけではないのであくまでも部外者の視点であることを強調します