Windows版のcurlが何かと使い辛い件

f:id:ts0818:20211023131110j:plain

www.itmedia.co.jp

 米Y Combinatorの共同創業者でOpenAIのCEO、サム・アルトマン氏が共同創業した米新興企業Worldcoinは10月21日(現地時間)、「地球上のすべての人間に提供する新しいグローバルデジタル通貨」構想を発表した。

サム・アルトマン氏、虹彩スキャンで暗号通貨を提供する「Worldcoin」立ち上げ - ITmedia NEWS

 社名と同じWorldcoinと名付けられた暗号通貨はイーサリアム上に構築されており、オープンソース化され、分散化され、公平に分配されるという。「インターネット経済によって推進される、より統一された公平な世界経済を推進するための取り組み」。

サム・アルトマン氏、虹彩スキャンで暗号通貨を提供する「Worldcoin」立ち上げ - ITmedia NEWS

 すべての(botではなく)人間に平等に無料の暗号通貨を配布するために、本人確認用の虹彩キャンシステム「Orb」を開発した。スキャンした虹彩データを一意な短い数値コードに変換し、この数値コードと引き換えにWorldcoinの無料シェアを提供する。ユーザーはアプリで生成したウォレットで暗号通貨を受け取る。この数値コードは暗号化され、ユーザーのウォレットやトランザクションにもリンクされない。

サム・アルトマン氏、虹彩スキャンで暗号通貨を提供する「Worldcoin」立ち上げ - ITmedia NEWS

⇧「虹彩認証」を取り入れた「仮想通貨」ということらしく、

techcrunch.com

Bitcoin isn’t scalable to billions of people,” Blania says. “As we see today, it’s very expensive because transactions are slow.”

https://techcrunch.com/2021/10/21/sam-altmans-worldcoin-wants-to-scan-every-humans-eyeball-and-give-them-crypto-in-exchange/

⇧ と言ってるように、「Bitcoin」などは「コスト」は高く、「トランザクション」も遅いという欠点があることに言及してるということは、それを改善できるかもしれないのが「Worldcoin」ってことなのかね?

worldcoin.org

⇧ う~ん、「Orb」ってデバイスで「虹彩」をスキャンしないといけないところが、「Worldcoin」を始めるためのハードルを上げてますな...

coinpost.jp

同社によると、Worldcoinプロジェクトは、ユニバーサル・ベーシック・インカム(UBI)を暗号化したものであるという。

「全世界に仮想通貨を配布」Worldcoin、a16zなどから約28億円調達

⇧ この思想を実現してくれるなら、ありがたいですね。

「仮想通貨」の情勢も変わっていくんですかね?

冒頭から全く関係ない話でしたが、今回は、Windows 10 Ver.1803(RS3)で標準搭載されたらしい 「curl」コマンドについてなどです。

レッツトライ~。

 

Windows版のcurlが何かと使い辛い件

事の発端は、母親から『「新型コロナウィルスワクチン 予防接種済証」を無くさないようにね』ってLINEがあり、はて?接種記録とかって政府が管理してないのかな?と気になって調べてみたところ、

cio.go.jp

⇧ 上記のページの「いま知ってほしいワクチン接種記録システム」ってリンクをクリックで参照できるPDFによりますと、

⇧ という記載があり、「ワクチン接種記録システム(VRS:Vaccination Record System)」っていう、政府が管理するシステムで接種記録を保管してるっぽい。(赤枠は自分が勝手に加えてます。)

ちなみに、

cio.go.jp

⇧ 上記の「ITダッシュボード」というページによりますと、国の情報システムの予算なんかが見える化されてますと。各省庁で、どれだけシステム数があり、どれだけ運用にコストがかかるのかがなど細かいことは分からんので何とも言えないのですが、「厚生労働省」の情報システムに対する予算は優先的に割当てられてるのかしら?

まぁ、話が脱線しましたが、

cio.go.jp

⇧「ITダッシュボード」で「Web API」が用意されているということで、軽い気持ちで「curl」コマンドとかで情報を取得してみたんですよ、勿論、Windows環境で特に「WSL 2(Windows Subsystem for Linux 2)」や「Virtual Box」とかも使っていない状況です。

以下のようなコマンドを試してみました。

curl https://itdashboard.cio.go.jp/PublicApi/getData.json?dataset=[データセット名] > [保存先のファイルパス]\[適当なファイル名].json

f:id:ts0818:20211023103844p:plain

で、「Web API」を叩いた結果のレスポンス内容がJSONファイルに保存されたので、開いてみたところ(「ファイル」を「vrs.json」って名前にしちゃったけど、「ワクチン接種記録システム(VRS:Vaccination Record System)」の「Web API」では無かったみたいです)、

f:id:ts0818:20211023104100p:plain

f:id:ts0818:20211023104236p:plain

何と言うことでしょう、一部が「Unicodeエスケープ」されてしまっていて、人間様が読める状態ではありませんと。

ちなみに、「Unicodeエスケープ」については、

note.nkmk.me

una.soragoto.net

qiita.com

⇧ 上記サイト様の説明が参考になるかと。

JavaScriptで用意されてる「unescape」という関数のドキュメントによると、

developer.mozilla.org

unescape() 関数は 16 進数エスケープシーケンスを、それが表す文字列に置換します。エスケープシーケンスは escape などの関数によって生成されます。通常は decodeURI または decodeURIComponent が unescape よりも推奨されます。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/unescape

⇧ という説明になっているところを見ると、

  • encode、ないしは、escape
    • 文字列→エスケープシーケンスを含む文字列
  • decode、ないしは、unescape
    • エスケープシーケンスを含む文字列→文字列

っていう相互変換処理をしてる感じなんですかね?

で、話を戻すと、「Unicodeエスケープ」されてるものを「curl」で「Unicodeアンエスケープ」ないしは、「Unicode decode」しようとすると、

qiita.com

Linux環境と割かし互換性の高いMac環境とかでも面倒くさい模様...況やWindowsをや、とのことでお察しの通り、

tech-mmmm.blogspot.com

atmarkit.itmedia.co.jp

Windowsでは絶望的に面倒くさそうでありますと...。

というか、「Web API」側でちゃんとこのあたりの「encode」「decode」に関する対応方法なんかの説明を記載しておいてくれるとありがたいんですけどね...

で、おそらく、Windows環境の「curl」で「decode」したい場合は、

takuya-1st.hatenablog.jp

⇧ 上記サイト様にあるように、「jq」コマンドをインストールしてしまうのが、一番手っ取り早いような気がしたので、試してみることに。

インストールしている「パッケージ管理ツール」の「winget」で「jq」がインストールできるかを確認してみます。

f:id:ts0818:20211023114229p:plain

残念ながら、「winget」でインストールできる「アプリケーション」として「jq」は認識されていない模様...

というわけで、インストールしている「パッケージ管理ツール」の「chocolatey」で「jq」がインストールできるかを確認してみます。

f:id:ts0818:20211023114538p:plain

⇧ どうやら、「chocolatey」であればインストールできそうなので、「chocolatey」でインストールしていくことにしてみます。

それにしても、「winget」がまともに使えるようになるのは、だいぶ先の話になりそうですかね...

管理者権限でコマンドプロンプトを起動して、「jq」をインストールします。「Do you want to run the script?([Y]es/[A]ll - yes to all/[N]o/[P]rint):」って聞かれたら、「y」を入力し「Enterキー」押下で。

f:id:ts0818:20211023115040p:plain

f:id:ts0818:20211023115116p:plain

新たにコマンドプロンプトを起動して、「jq」コマンドないしは「jq --help」コマンドなどが機能すれば「jq」がインストールされたということらしい。

f:id:ts0818:20211023115545p:plain

f:id:ts0818:20211023115631p:plain

改めて、「jq」とコラボした「curl」コマンドを実行して、「Web API」を叩いてみた。

curl -X GET -H "Content-Type:application/json;charset=utf-8" https://itdashboard.cio.go.jp/PublicApi/getData.json?dataset=[データセット名] | jq > [保存先のファイルパス]\[適当なファイル名].json

f:id:ts0818:20211023115823p:plain

結果、見事に「decode」されたようです。

f:id:ts0818:20211023120409p:plain

ちなみに、

qiita.com

両者を比較してみると、Windowscurlで送信したパケットはJSONが「Line-based text data」となっているのに対して、Linuxcurlで送信したパケットでは「JavaScript Object Notation」として格納されています。また、Windowsの方では、「data」や「hello」といったキー、値である文字列につけたはずの「"」が外されています。おそらく原因はこれでしょう。

Windows版curlでJSONをPOSTする際に困った話 - Qiita

⇧ 上記サイト様が「Windows版」と「Linux版」の「curl」の実行した際の「パケット」の中身を解析しており、「Windows版」の「curl」が「JSONJavaScript Object Notation)」に対応しきれていないっぽいように見えますね。

やはり、WindowsとWeb開発の相性は良いとは言えない感じですかね...

そして、「政府CIOポータル」で紹介されてる「Web API」で気になったのが、

データセット データセット名(日本語)
BasicInformationAll 情報システム全体
BasicInformation 基本情報

という「データセット名」があるのですが、「BasicInformation」を指定して「Web API」を叩いた結果のレスポンスデータの中にある「system_id」の1つを、「BasicInformationAll」を指定して「Web API」を叩いた結果のレスポンスデータ内で検索してみたのですが、ヒットせずというね...

これ、本当にシステムの全量を管理できてるの?って気になって夜も眠れないってことはないんですが、「情報システム全体」に存在しない「system_id」とか出てきちゃってる時点で、「情報システム全体」って言葉の意味が分からんのだが...

おまけに、「ワクチン接種記録システム(VRS:Vaccination Record System)」は、システムとしてカウントされていないのか、まだシステムの管理情報として反映されていないだけなのか「BasicInformation」に存在しませんと...

「最終更新日:2016/06/21」ってのは、「政府CIOポータル」で紹介されてる「Web API」のドキュメントのページ自体の更新日のことだとは思うけど、まさか、取得できるデータが更新されていないなんてことは無いとは思うけど...

本サイトは、過去のIT総合戦略室の情報発信サイトです。2021年9月以降、原則として更新を停止します。(一部ページ除く)
現在のデジタル政策に関するデジタル庁の公式サイトはこちらをご覧ください。

https://cio.go.jp/itdashboard/webapi

⇧ って情報はあるけども、

⇧「更新情報」の内容を見る限り、2021年5月6日には、「ワクチン接種記録システム(VRS:Vaccination Record System)」を紹介してるので、「ワクチン接種記録システム(VRS:Vaccination Record System)」が稼働し始めたのは、原則として「政府CIOポータル」の更新を停止するって言っている2021年9月より前だと思われるので、管理されてるシステム情報に「ワクチン接種記録システム(VRS:Vaccination Record System)」が存在しないのは不透明過ぎて何とも言えませんな...

システム運用に関する予算削減とかの取り組みをしていただいているのは、非常に素晴らしいとは思うのですが、システムの全量を把握できるようにしてくれていないのは残念過ぎる...

ちなみに、「ワクチン接種記録システム(VRS:Vaccination Record System)」から算出されてそうなデータを取得する「Web API」が用意されてはいるっぽいのですが、

cio.go.jp

⇧ 流石に、個人を特定できる接種記録の取得はできるようになってないですね、まぁ、当たり前か。

なので、「新型コロナウィルスワクチン 予防接種済証」を万が一紛失した場合は、「ワクチン接種記録システム(VRS:Vaccination Record System)」を管理してる人に接種記録を参照してもらうしかないっぽいですかね。

そんな、「ワクチン接種記録システム(VRS:Vaccination Record System)」ですが、

news.yahoo.co.jp

⇧ 早速、運用に難ありというか、課題が見つかってるらしい。

まぁ、

xtech.nikkei.com

⇧ 2か月しか開発期間が無いんじゃ、不具合が頻出したって仕方がない気がしますね...

データが上手く読み取れないってなると、その後の処理で挽回しようもないですし、皮肉なことですが「Garbage In, Garbage Out」の良い例というか、データの重要性が分かる気がしますね。

「ワクチン接種記録システム(VRS:Vaccination Record System)」のデータの整合性が怪しいこともあり、ちょっとシステムが管理してるデータについて信用できないので「新型コロナウィルスワクチン 予防接種済証」については、できるだけ紛失しないように管理していくのが吉ですかね...

国のシステムでさえ、「デジタルトランスフォーメーション(DX:Digital Transformation)」の達成が芳しくない状況を見るに、経済産業省の掲げる「2025年の崖」に向けた目標はなかなか無謀な気もしなくもないですかね...

現実は理想を上回ることは無いという考えから理想を高くすることで現実の結果を底上げしようという気持ちは分からんでもないけど、もうちょっと現実を考慮する必要はあるんじゃないのかという気がしないでもない...

毎度モヤモヤ感が半端ない...

今回はこのへんで。