今年2回目の地域ICTクラブ全国ネットワーク交流会、基調講演は、CoderDojo 宮島さん!

ポケモンなど企業との連携による取り組みがおもしろいCoderDojoは、7〜17才のこども達が無料で学べる「子どものためのプログラミング道場」。Railsで作られGitHubでオープンソースになっているウェブサイト、「近日開催の道場まとめ - CoderDojo Japan」から地域別で開催日が確認できてステキです!

CodeDojo Kata」で紹介されていた「まよえるニンジャのためのやりたいことさがし」がステキだったので、オリジナル版を作ってみました。

プログラミングガイド
「ゲームはすき?」で始まり「はい」か「いいえ」で答えるだけで、プログラミングの世界へといざなうイメージで作ったものです。

prog-guide/data.yesno.csv at main · IchigoJam/prog-guide
質問文と遷移先を記述したシンプルなCSVデータ(yesno.csvデータ)を読み込んで動くウェブアプリなので、GitHubでforkしていろいろと派生版づくりの元ネタにもお使いください。

ウェブアプリもシンプルなHTML1ファイル構成。前半がJavaScriptによるプログラミング部分、後半のデザイン部分は画面構成を記述するHTMLと見た目を変更するCSS。 特別なツールなしに、誰でも気軽にチャレンジできます! <!DOCTYPE html><html lang="ja"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width"> <title>プログラミングガイド</title> <!-- プログラム --> <script type="module"> import { CSV } from "https://js.sabae.cc/CSV.js"; import { waitClick } from "https://js.sabae.cc/waitClick.js"; const reload = async () => { await waitClick(retry); document.location.reload(); }; onload = async () => { reload(); const data = CSV.toJSON(await CSV.fetch("data.yesno.csv")); let cur = data[0]; for (;;) { if (cur.no == "-") { no.style.display = "none"; yes.textContent = "つぎへ"; if (cur.yes == "-") { yes.style.display = "none"; } } else { no.style.display = "inline"; yes.textContent = "はい"; } if (cur.url) { q.innerHTML = `<a href=${cur.url}>${cur.label}</a>`; } else { q.textContent = cur.label; } const ans = await waitClick([yes, no]); if (ans == 0) { cur = data.find(d => d.id == cur.yes); } else { cur = data.find(d => d.id == cur.no); } } }; </script> <!-- デザイン --> <link rel="stylesheet" href="https://code4fukui.github.io/neomo.css/neomo.css"> <style> body { text-align: center; padding: 0 40px; } h1 { font-size: min(7vw, 65px); } body { max-width: 800px; } #q { font-size: min(5vw, 40px); margin: 1em; height: 4em; } button { font-size: min(5vw, 40px); margin: 1em; } </style> </head><body> <h1>プログラミングガイド</h1> <section><section><section> <div id=q></div> <button id=yes>はい</button> <button id=no>いいえ</button> </section></section></section> <br> <button id=retry>リトライ</button> <hr><a href=https://github.com/ichigojam/prog-guide/>prog-guide on GitHub</a><br> </body><html> 楽しもう、広げよう、プログラミングの輪!

創廃業ダッシュボード」で使う法人番号。体系が気になって「法務局サイト」と「会社法人等番号」を元に、パーサーを実装。


法人番号パーサー
法人番号は13桁ですが、先頭1桁はチェックデジット、後ろ12桁から計算できるので実は不要です。(src on GitHub) // https://www.houjin-bangou.nta.go.jp/documents/checkdigit.pdf const isValid = (s) => { s = s.toString(); if (s.length != 13) { return false; } return s[0] == calcCheckDigit(s.substring(1, 13)); }; const calcCheckDigit = (s) => { if (s.length != 12) { return null; } let n1 = 0; let n2 = 0; for (let i = 0; i < 12; i += 2) { n1 += parseInt(s[i]); n2 += parseInt(s[i + 1]); } const c = 9 - (n1 * 2 + n2) % 9; return c; }; export { isValid, calcCheckDigit }; チェックデジットの計算、プログラムの練習によいですね。軽くテストコードを書いて、deno test でチェック! import * as t from "https://deno.land/std/testing/asserts.ts"; import { isValid } from "./CheckDigit.js"; Deno.test("simple", () => { t.assert(isValid("8700110005901")); t.assert(!isValid("8700110005902")); });

残り、12桁の内訳は、先頭4桁が主に登記所を表し、次の2桁で種別、残り6桁が通し番号や、地方公共団体コードなどとなっています。


日本で登記されている外国の企業一覧
種別401を全部取得したところ、現在全9593社ありました。 import { GBizINFO } from "./GBizINFO.js"; import { CSV } from "https://js.sabae.cc/CSV.js"; const gbiz = new GBizINFO(); const data = await gbiz.getBasicByKind(401); // 外国企業 9593社 2021-09-16 data.forEach((d) => d.cityID = d.cityID ? d.cityID.substring(d.cityID.length - 5) : ""); data.sort(gbiz.filterByCorporateID); console.log(JSON.stringify(data, null, 2), data?.length); await Deno.writeTextFile("data/foreigns.csv", CSV.stringify(data)); (src on GitHub)

熱いソフトウェアツール、ディープラーニングをテーマにした高先生向けコンテスト「DCON2022」のメンターになりました。 審査時に1チーム選択肢、来年4月の本線に向けてメンタリングします!本日、高専生向けの説明会にてオンライン登壇。


フラーの渋谷さん交えた応援トーク。一日一創という創ることの習慣化、おすすめです。


日本の法人数推移src on GitHub
今日の一日一創。今回のグラフは、Chart.mjsではなく、D3.jsを使ってみました。
世の中の転換期、コロナによる廃業という話も聞きますが、今年7月14日からの法人数の推移は一貫して増加。2ヶ月で14,000社も増えてます。 日本に約500万社とそこそこビッグな法人オープンデータ、ディープラーニングを使った新しい知見発見も有りえます。


人類が過去発明してきた画期的なツール、ネットは、言葉、文字に継ぐ、5,000年来の大発明!

jig.jpが手掛ける動画配信アプリ「ふわっち」は、放送というビジネスモデルをすべての人に開放するサービス。 新CMが完成!
みんなのライブ配信「ふわっち」 2021年9⽉17⽇よりTBSテレビにて新CMを放送 |A Inc.のプレスリリース


みんなのライブ配信ふわっち、働くママ編


みんなのライブ配信ふわっち、働く男編


こちらも熱い学生向けのコンテスト、いよいよ来週に迫った「鯖江市地域活性化プランコンテスト」の参加者からヒアリング依頼。 電脳めがね、xRの未来についてディスカッション。おもしろいユースケースと、ステキなソフトとちょうどいいハードの組み合わせにチャンスあり!

日本全体のデータが集まっていて毎日更新されるのが楽しい法人オープンデータ。
創廃業ダッシュボード」から広がるいろんな使い方、引き続きアイデア募集です!

今回はgBizINFOREST APIの方を使って調達オープンデータを取得してみました。

調達オープンデータ 10億円以上
過去データは2020年日付以前ではヒットしない様子。いくつかデータを取得し、調達金額10億円以上でまとめてみました。金額が大きい順にソートしたところ、なんとトップは、9京円!?

2019-04-01T00:00:00+09:00,平成31年度技術協力活用型・新興国市場開拓事業(インフラ海外展開支援),"90,000,000,167,598,800円",経済産業省

さすがに間違いだと思うので、早めな修正、希望です。(単純に自動処理すると、円グラフのほとんどがこの9京円案件になってしまいますw)

話題になった769億円の持続化給付金事務事業の他、護衛艦が497億円、潜水艦が433億円、貨幣の製造に関する事務一式166億円など、いろいろとおもしろデータが並びます。


調達オープンデータ 0円?
同じく、おかしなデータがありそうです。金額未記載または、amountが0と入ったデータ。

調達オープンデータ、政府が何をいくらでどこから買っているか、地方公共団体や、民間企業が予算を考える歳、購入する際の参考になりそうです。 政府の支出は、みんなの支出。賢く活用したいですね!

APIトークンは申請フォーム記載ですぐに発行、JSONが返るREST APIの仕様はswaggerで確認できます。

いろいろ楽しく活用しましょう!

先日作った「創廃業ダッシュボード」が、鯖江商工会議所の人と、産業担当の行政の人に刺さった様子。リクエストにお応えして、市町別表示に対応しました。

創廃業ダッシュボード - 福井県
9/13更新分では、福井県は創業も廃業も0だったので、上記画像は9/6のもの。


創廃業ダッシュボード - 東京都
創業162社-廃業64社 = +98社、となった9/13日の東京都の様子。

平日は毎日16時に更新される法務局の法人オープンデータ差分。 本日、スクレイピングがうまくいかないことが分かったので、fileNoの推測による自動更新としてGitHub Actionsで設定(downloadDiffLatest.js on GitHub)。

明日はうまくいくはず!

データ活用に欠かせないのはつなぐこと。複数のデータを比較し、組み合わせて、新たな知見を生まれます。

その足かせとなるのはデータ形式の不一致。数と一言で言っても半角全角、カンマ区切りの有無、小数を含むかどうか、万など漢数字表記の有無など、個性豊かな様々なデータ達・・・。

もちろんコンピューターなので、様々な表記方法を想定して対応することは可能ですが、網羅性を保証できず、膨大なデータ量に対する処理では何十倍ものコストとして跳ね返ります。 同じ手間ならデータを作る際にかけるのが効率的です。

どうデータ形式の定義するか?ベストはリソース記述フレームワーク(RDF)の語彙を使うことでしょう。 Googleの検索エンジン他で使用されるスキーマオルグ(schema.org)や、Facebookが提唱し一般化したオープングラフプロトコル(OGP)、日本政府が提唱する共通語彙基盤もその一種です。

語彙でつながるオープンデータを、LOD(エルオーディー/Linked Open Data)、5つ星オープンデータと呼びます。

5つ星オープンデータ/LOD 3基準

1. リソースとデータ項目(語彙)をURLで表現する
IDではなくURL。アクセス可能なURLを使用する。
自分のリソースのURLは、自分で編集可能なドメインを用いる。

2. 共通の語彙の利用
語彙は正しく、できるだけ既存の語彙を使う。(schma.org/url)

3. 外部リンク
できるだけ外部リソースへのリンクを含める。(SNSやWikidataへのリンク)

ただ、まだまだRDFへの理解が浸透していないため、まだちゃんとしたデータは多くはありません。よりシンプルに作りやすくするためのツール整備を進めました。


NQuads.js
語彙を含んだLODのJSON表現、JSON-LDを扱うライブラリjsonld-esを、Node.js用のライブラリjsonld.jsから移植。 依存ライブラリを次々と全部ESモジュール化して、GitHub Pagesとして公開。 require表記をgithub.ioを使ったURL importに書き換えたので、全ソース、ブラウザでも使用可能になりました。ESモジュールはDenoモジュールとしても使えるので、Denoでサクサク活用可能です!

NQuads.jsは、LODのテキスト表現「N-Quads」をJSONLD.jsを使って作成。 import { JSONLD } from "https://taisukef.github.io/jsonld-es/JSONLD.js"; class NQuads { static async parse(s) { return JSONLD.fromRDF(s, { format: "application/n-quads" }); } static async stringify(json) { return JSONLD.toRDF(json, { format: "application/n-quads" }); } } export { NQuads }; コアはこれだけ。JSONLDをimportして使うだけのライブラリなのでとってもシンプル!
ちゃんとしたオープンデータを増やしましょう!


データ活用はじめのいっぽ、コンピューターとプログラミングへの入り口、IchigoJamのファームウェアの不具合修正
- ichigojam-1.4b29.zip
OUT11,0が効かない不具合修正(OUT11、IN4を出力に切り替えて使う場合の番号です)


福井県独自の緊急事態宣言最終日、ランチは通常営業だった鯖江駅前商店会」でタコライス!

1日の創業数を都道府県別に表示するアプリに、GitHub Actionsを使った自動更新を設定。廃業データも加え、名前も「新型コロナウイルス対策ダッシュボード」と合わせ、「創廃業ダッシュボード」と改めました。

創廃業ダッシュボードsrc on GitHub
創業数が廃業数より大きいと赤背景、廃業の方が多いと青グレーな背景としました。クリックかタップすると、該当する会社名が表示されます。


gBizINFO/.github/workflows at main · code4fukui/gBizINFO
GitHub Actionsは、GitHubのサーバー上で指定した処理をやってくれます。パブリックリポジトリであれば、利用は無料。「.github/workflows」というフォルダを作成し、中にアクション毎にYML(ヤムル)ファイルを置くだけです。

Deno標準のコーディング規約に沿っているかチェックする「deno.yml」と、毎日自動的に創業廃業それぞれのデータを、CSVファイルにして、リポジトリにプッシュする「scheduled-fetch.yml」を置きました。

name: Scheduled fetch on: schedule: # 毎日17:44分に実行 (JST=UTC+9) - cron: '44 8 * * *' jobs: build: name: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: denoland/setup-deno@v1 with: deno-version: v1.x - name: fetch run: deno run -A downloadDiff.js - name: commit and push run: | git config --global user.email "workflow@example.com" git config --global user.name "workflow user" git add . git commit -m 'update data' && git push ${REPO} HEAD:${{github.event.pull_request.head.ref}} || true git push

使いたい環境を記述して、やってほしいことをstepsで記述するだけ、簡単ですね!
GitHub Actionsのワークフロー構文 - GitHub Docs
昨日の作品、福井高専ニュースも、定期更新の設定してみました。


国税庁法人番号公表サイト
データ元はこちら、差分のCSVダウンロードを使っています。gBizINFOのSPARQL APIを使った実装と、作りやすさやパフォーマンスを比べてみたいところです。


創業ダッシュボードsrc on GitHub
都道府県別新規創業会社数から名前をシンプルに変更し、日付で選べるようにしました。(差分公開されていた7/14以降)


廃業ダッシュボードsrc on GitHub
都道府県別に廃業のみを見たい方はこちらをどうぞ。

各地でインターンしている高専生。リアルな現場での学び、楽しいですね!

「コネクトフリー社で活躍する福井高専インターン生」

ものづくりへの想いがぐっと高まった、その勢いで、普段の学生生活自体も現場と見て、自分たち、教員たちの課題を解決してみるいい機会!


福井高専ニュースsrc on GitHub
古巣、福井高専のニュースを掲載している全件「スクレイピング / scraping」によって取得して、CSVオープンデータとして加工するプログラム。 シンプルなコードはこの通り。ぜひみなさん、自分の学校でチャレンジしてみましょう! import { HTMLParser } from "https://js.sabae.cc/HTMLParser.js"; import { CSV } from "https://js.sabae.cc/CSV.js"; const url = "https://www.fukui-nct.ac.jp/news/"; const html = await (await fetch(url)).text(); const dom = HTMLParser.parse(html); const lis = dom.querySelectorAll(".news-list li"); const data = lis.map(li => { return { url: li.querySelector("a")?.attributes.href, date: li.querySelector(".post-date").text, category: li.querySelector(".post-cate").text, title: li.querySelector(".post-title").text, } }); await Deno.writeTextFile("fnct-news.csv", CSV.stringify(data));

HTMLParserで、HTMLをパース(字句解析)して、欲しい項目を名前付きデータの配列に変換、CSVとして出力しています。(Denoを入れて動かしてみましょう!)


デジタル庁ニュース
動き激しい、デジタル庁。「第1回デジタル社会推進会議幹事会 |デジタル庁」にて、多数の興味深い資料が公開されています。 日本全体のデジタル化、身近な学校が取り残されて損するのは学生自身。動こう、創ろう!

gBizINFOでは、法人情報はweb標準のAPI、SPARQLで検索できるので、ひとまず種別で全件取得し、検索できるようにしてみました。

日本の地方公共団体一覧」「日本の国の機関一覧src on GitHub
現在、それぞれ7386法人と846法人、合計8232法人あります。1つの国、これだけの機関があると管理費も膨大ですね。デジタル化で一気に効率化しちゃいましょう!

気がついた点
- 日本語の語彙とSPARQLでの英字変数の対応を考えるのが煩雑
- 同じ住所で表記ゆれがある
- 語彙がリンク切れしている
- 市区町村コードのURIがリンク切れしている
- コード一覧もCSVやAPIで取得したい(法人種別 kind.csv など作成)
- SPARQL便利!(makeLocalgovs.js using GBizINFO.js based on SPARQL.js)

課題はいろいろありますが、網羅性あるオープンデータが機械判読できる状態で存在すれば、なんとでも変換できますね!Let's code for 日本!
デジタル庁とシビックテック|デジタル庁


本日、産官学の会「ゼロトラスト研究会」の第二回目を越前市役所にて開催。 ゼロトラスト研究会は、福井県情報システム工業会、DX推進委員会、行政手続き分科会での研究会で、工業会メンバー企業を中心に、福井県、福井県内市町、福井高専などで構成しています。 地球上さまざまな機関、安全にシンプルにつなぎましょう!


武生に来たら、ボルガライス

日本の法人はすべてオープンデータ化され、CSVダウンロード、API(SPARQL)でアクセスも可能です。

都道府県別新規創業会社数
こちら、2021/9/8の新規創業者数を都道府県別にカラム地図を使ってまとめてみました。 都道府県をクリックすると創業した会社名のリストを見ることができます。(一応、検索リンクを貼ってみました。)

こちら「差分データのダウンロード|国税庁法人番号公表サイト」から1日分の差分をダウンロード。 定義から各種項目をcsvファイルでまとめ、正規化するプログラムをJavaScriptで作成。新規企業でフィルタリングしたデータを使っています。(src on GitHub)


gBizINFO (METI)経済産業省
gBizINFO(ジービズインフォ)では、JSON形式などでのダウンロードや、API(SPARQL/REST)もあります。

今日1日に新規創業された企業数「610社」でした。
想像より多かったですか?少なかったですか?この日が特異日かもしれません。

いろんな切り口で日本の法人、調べてみるのもおもしろそうですね!

Tweet
クリエイティブ・コモンズ・ライセンス
この作品は「Creative Commons — CC BY 4.0」の下に提供されています。
CC BY / @taisukef / アイコン画像 / プロフィール画像 / RSS