コロナで延期されていた東京オープンデータデイ2020のオンライン開催。オンラインなので気軽に参加できるのがよい。zoomの参加者約100人! リレートークで、オープンソースとオープンデータの活用例を紹介させてもらった。

SDGsを計測可能な指標にする、ローカル指標のファーストバージョンができているとのこと、ひとりひとりが何に対して行動し、どう反映されたかを見られるときっとうれしい。

オープンデータは量も質も大事。日本中を多少古くても荒くてもまずは網羅し、各地方自治体はそのタイムリーで詳細なバージョンをCSVオープンデータで公開する。 CSVまでやってもらえれば、あとはエンジニアは如何様にも料理できる。

CSVオープンデータまででOK!文字コードは世界標準、UTF-8で!


「ダッシュボード駆動モデル」
まずは網羅的なオープンデータと出口であるアプリをシンプルにつくって、細かなオープンデータとつないで詳細化。


CSVオープンデータ x GitHubオープンソース、この組み合わせがシンプルでいい落とし所。
GitHubが自治体で使えない問題があるので、git.go.jp の立ち上げも検討したい。


日本の法令 CSVファイル - 2020-06-21現在8475コ」1.5MB
法令APIの存在を知り、法令番号にかぶりがあったり、容量オーバーで対象外があることに驚くw。 結局APIは使わず、バルクダウンロードがあるので、全法令をダウンロードし、法令番号と法令名、XMLのファイル名をまとまたCSVを作成。 これで活用する準備は整った!自動更新する仕組みをいれて、法律の誕生や、更新などが見られるダッシュボード化につないでみよう。 (2020-06-22追記、法令検索アプリ、つくりました)


私とオープンデータ、2010年にティムバーナーズリーに会い、鯖江市長へ提案したことから始まった。


CSVオープンデータでいきましょう!

links
- 東京オープンデータデイ2020 | Peatix

徳島県神山町に2023年開校予定「神山まるごと高専」の技術教育統括ディレクターとして選ばれました。新規の私立高専としては、ほぼ50年ぶり!


「神山まるごと高専」学校長候補に、クリエイティブディレクター 菱川勢一を選出|神山まるごと高専のプレスリリース」(写真は建設予定地付近)
ベンチャー友達、Sansanの寺田さんが発起人。プロジェクト代表は、神山町のシカケ人、大南さん。電通の国見さんがコンセプトワークを担当。 合流し、設立に向けた準備委員会にてカリキュラム策定を中心に活動しています。

福井高専を卒業して20年、ずっと続く高専との縁。教官室に遊びにいったり、講演したり、インターンの受け入れもそろそろ20期。 プログラミングの講義を受け持ったこともありました。

神山まるごと高専が目指す育成人物像は、何があっても生きていける「野武士型パイオニア」。 ITというステキな道具を手段として、自分だけの表現をアート作品としてアウトプットする場づくりIT面から貢献したいと思います。

技術教育統括ディレクターとして、2023年の開校に向けて、ハードからソフトまでを楽しくすばやく学べる、オープンなコンテンツづくり実験と、自分の力でどんどん学んでいくためのシクミとシカケを考案中。 詳細は、今後決まっていく予定の専門教員の人たちと詰めていきます。基礎を楽しく押さえれば、移り変わり早いITを大いに楽しむことができるでしょう。(神山まるごと高専、教員募集開始

GIGAスクール構想により、小中学校から根本的に学校のスタイルが変わろうとしている今。高専はその一歩先行く存在であってほしい。 私立ならではの自由度と、高専という仕組みを大いに活かした学校のあり方を探る議論を続けています。


発表後の初イベント、HLAB主催の高校高専生向けオンラインサマースクールで神山まるごと高専セッション。 学長予定の菱川さんの講義、映像制作に関わる様々なプロフェッショナル。監督(ディレクター)もひとつの役割。 アプリ製作でも、学校づくりでも一緒ですね。


私からも「IT未来づくり入門」と題して、ITを使った楽しさ紹介。 jig.jp版のサマースクールこと、「jigインターン」では、全国からものづくり高専生が集まって3週間の古民家での開発合宿(2020年は2週間)。 チームによるソフトウェアづくりという楽しい仕事を模擬体験してもらっています。 ともに学ぶ仲間、大事です。神山高専はこれの5年版!?


多くのIT少年少女を育てたベーマガこと、マイコンBASICマガジン。 本日、原題の少年少女にもバトンをつなぐ、復刻した別冊付録付きの電子工作マガジンの発売日! 特集マンガは、IchigoDakeのアマビエ様版、AmabieDake! 100円CPU、載ってます。


早速、改造してみました!内蔵のプログラムに居たアマビエ様をランダムな場所で表示。
AmabieDake、電池を入れるだけでもプリインストールのプログラムで光ります。お守りにもどうぞ。)


加えて、670行のSLEEPコマンドを追加。100円のCPU、低電力状態となって待機する機能を使って、ボタンが押されたら再起動する形にしています。 ボタンを押したら、3回輝く、疫病退散ペンダントのできあがり!IoTの要は、低価格と省電力。ハードもソフトも自在に操ろう!


巻頭には、先日の小中学生向け「PCNこどもプロコン」表彰式の様子が特集されていました! 今年の中学1年生、2023年の神山まるごと高専の1期生となるチャンス!

世界中で進む、新しい教育への転換チャレンジ。
海外評価も高い、日本発のユニークな教育システム「高専」を大いに活かしていきましょう!

links
- 「神山まるごと高専」学校長候補に、クリエイティブディレクター 菱川勢一を選出|神山まるごと高専のプレスリリース
- 海外から見た高専教育
- PCNこどもプロコン

目に見えない電波をARで見えるメガネも楽しそう!
ひとまず、ブラウザで動くBluetoothを探すだけのアプリを動かしてみました。

Bluetoothを探す
十数メートル飛ぶというBluetoothの電波、意外とたくさんのデバイスを拾うことがわかります。アンテナマークは電界強度。基本的に強いほど、近くにあるということです。

隣に並ぶ16進法の数値は、Bluetoothデバイスの48bit(6byte)のMACアドレス接触管理アプリでは、これが10分変わります。また、通常のBluetoothデバイスでも周期的に変更することが推奨されていますが、ほとんどの場合、変更していないという古い記事もあり、隠しています。
Bluetooth Low Energyでウェアラブルデバイスから情報がダダ漏れの恐れ - ITmedia エンタープライズ

今回使ったプログラムは、下記、たった1行。スーパーハッカーである必要はありません。

btn.onclick = () => { navigator.bluetooth.requestDevice({ acceptAllDevices: true }) };


日本政府も配布予定としている「接触管理アプリ」の解説に全体の流れがわかる図を追加しました。

もし、MACアドレスが変更されない、電波を発信し続けるBluetoothデバイスを持って町を歩くと、常に自分のIDを大声でアナウンスしながら歩いているに等しい状態です。

当たり前のように使っている電波ですが、その実態も知った上で使いたいですね。

厚生労働省から接触管理アプリが発表されました。 近距離無線通信、Bluetoothを使用し、このアプリの利用者同士が近くにいる時刻と長さを記録しつづけるアプリです。

もし、検査し陽性となった際、感染を自己申告すると、過去14日間に接触したアプリ利用者にその感染リスクを知らせることができます。 自己申告には、医療機関からもらう処理番号と共に、サーバーでIDが公表されることへの同意が必要です。 利用者は1日1回、アプリが自動的に感染者リストをダウンロードして確認し、自分の端末内の接触データと照合し、該当すれば通知などで伝えます。

GPSなどの位置情報や、電話番号や端末IDなど、個人情報を一切使わず、接触を管理する「接触管理アプリ」の仕組みを調べてみました。


Exposure Notifications: Helping fight COVID-19 - Google」を元に作図。

GoogleとAppleが共同で作成したAPI「Exposure Notifications」を使ったアプリを提供できるのは1国につき1医療関係機関のみ。 今回提供されるアプリは「接触確認アプリケーション利用規約|厚生労働省」からリンクがあるようにオープンソースです。 公開されている設計図(プログラム)を見て、自分でその安全性をチェックすることができます。

GoogleのAndroidとAppleのiOSを足すと、アクティブなモバイル端末のシェア99.68%(対策ダッシュボードアクセスログ調べ)、この2社が組めばスマホユーザーはほぼカバーできます。 特にiOSでは、Bluetoothの電波を常時出し続けることは仕様上できないようで、OS側の支援は必須だったようです。

ドキュメントには、実際は使われない開発途中のものが混ざっているので注意が必要です。 「Exposure Notifications」の「Exposure Notification Bluetooth Specification」と「Exposure Notification Cryptography Specification」で公開されているように、ユーザー毎のIDは連番ではなく、10分ごとに変わります。 常に、同じIDが発信されてしまうと、誰でも取得できるBluetoothの電波を補足し、個人の行動情報が第三者に補足されてしまいます。


Bluetoothで発信されるデータの仕様がこちら。アプリ固有値が公開されるので、接触確認アプリを使っていることは周知されることは了承した上での利用が必要です。


データの流れのもとになった仕様はこちら。暗号化に128bitのAES、iv付きのAES-CTRが使われています。


AES-CTRを使った暗号化を Node.js で、実験してみました。ESモジュール化に対応した、Denoや、ブラウザ上でも使えるものもほしいところです。(src on GitHub)

新型コロナ感染症、COVID-19の現在患者数、新規陽性者が少なく、続々と退院が進み、ついに福井県も0人になりました。 対策病床数として確保した分の2.6%しか使っていない計算です。

COVID-19 JAPAN 新型コロナウイルス対策ダッシュボード

もともとの感染病床数のみ使用するとどうなるか、「対策病床数オープンデータを使用する」チェックボックスを外したものがこちら。

COVID-19 JAPAN 新型コロナウイルス対策ダッシュボード」(対策病床数未使用)
石川県、北海道、東京都、神奈川県でまだ現在患者数が本来の感染症病床数を上回っていることがわかります。

感染をいち早く封じ込めることが重要です。テクノロジー、うまく使っていきましょう!

読めない漢字でロスする時間はもったいない。ふりがな付きドキュメントを用意して、低学年でも学びたいだけ学べる環境づくり、進めたいですね。

学校のクラブ活動での活用を想定して作成している、プログラミングで学ぶシリーズ「IchigoJamプリント」にふりがな付き「かけざん名人」を追加! と、同時に漢字にふりがなをHTMLのrubyタグを使った生成する、furigana-es を公開。

IchigoJam/furigana-es>IchigoJam/furigana-es on GitHub
HTML内にこんな風に埋め込み、CSVファイルと共にご利用ください。

<script type="module"> import furigana from "https://ichigojam.github.io/furigana-es/furigana.mjs"; window.onload = async () => await furigana.addRuby("kana.csv"); </script>


かけざん名人 - IchigoJamプリント
IchigoJamプリントは、A5印刷にちょうどいいように作成している、オープンデータなIchigoJamでの自学教材です。 GitHubでのオープンソース、貢献(バグ報告、ご要望、新しい教材作ったり修正案をプルリクしたり)も歓迎です!

links
- 「最強のプログラミング教育」著書、松田さんのオンラインお茶会、ホームIoTではじめる大人プログラミング
- プログラミングD分類、鯖江市では全小学校でIchigoJamを使ったプログラミングクラブとキーボードはじめのいっぽ

なぜ、こどもにプログラミングを教えるのか?
→ プログラミングが汎用的で強力なツールであり、こどもにできるほど簡単だから

社会にネット(=コンピューター)が広まる程、プログラミングの力は強まります。昔はゲームづくりや専門的な解析が中心でしたが、IoT時代、身近な課題解決にもすぐ活用できます。

「十分に発達した科学技術は、魔法と見分けがつかない(クラークの三法則)」
Bluetoothイヤホンで通話しながら歩いている様子はテレパシー、3Dプリンターはテレポーテーション、ドローンの編隊を自在に操る様はまるで魔法。自在に操れたらもっとステキです。


学校を変えた最強のプログラミング教育 | 松田孝
前原小学校元校長の松田さんの本にも、ドローンプログラミングがこどもや大人に与えたインパクトと、意外とシンプルな制御プログラミングが掲載されています。 (その後、更に改良され「FruitPunch(フルーツポンチ) x IchigoDyhook(いちごだいふく)」で、もっとシンプル、もっと手軽にドローンプログラミングできるようになっています。)


松田さんとの出会い、書いてありました!2016年12月、福井で開催した「第1回こどもプログラミングサミット」の会場にて、IchigoJamのはんだづけからのプログラミング体験をしてもらってからのご縁です。 (ナチュラルスタイル松田さんも登場!、学校は「社会の求め」に応えられるか?校長・教頭へのおすすめ本! – about yrm


zoomお茶会IoTと地方創生で共同プロジェクト進行中のKDDI松野さんも参加!
IoTは、ITの集大成。身近な課題から、世界的な課題まで、多方面での活躍が期待されていますが、深刻な担い手不足。小中学校でのプログラミング必修化は大きなチャンス!

今日テーマにしたのは、身近な課題、眠りの快適さをアップするIoT。 きっと、部屋の温湿度が大事!でも、快適と感じる状況は人によって異なります。 まずは計測。IoT対応IchigoJamと、手軽で高性能な温湿度計SHT31を使って、日々の変化を記録してみます。

1 @ARUN 10 POKE#700,#2C,#06:R=I2CR(#45,#700,2,#700,6) 20 IOT.OUT #700,8 30 WAIT 60*60*5 40 GOTO 10

I2Cで取得したデータを(10行)、IchigoSodaで送信し(20行)、5分待って(30行)、くりかえし(40行)。シンプルですね!

sakura.ioのモジュールの管理画面で、DataStoreV2 APIを設定します。1ヶ月分保存なら追加料金はかかりません。 管理画面からCSVでダウンロードができるので、あとは、解析し放題!

解析をプログラムで自動化したい場合、パソコンでデータをダウンロードしましょう。JavaScriptをパソコン上で動かす、Denoをインストールし、このプログラムを test.mjs として保存。 (sensorname: 保存するディレクトリ名、token: DataStoreV2のtoken、moduleid: 使用するモジュール)

import download from "https://code4sabae.github.io/sakuraio-es/download.mjs"; await download(7, "sensorname", "token", "moduleid", 1);

あとはコンソールで動かすだけ!

$ deno run -A test.mjs

これだけで過去1週間分のJSONデータを日付ごとにダウンロード完了です! 詳しく知りたい方は、オープンソースのJavaScriptプログラム(src on GitHub)をどうぞ。 JavaScriptについて学びたい場合は「JSはじめのいっぽ」をどうぞ。 ネットがあれば、わからないものを無限に追求できますね。(社会実装例、バスの走っている場所、混雑状況などのIoTによって進む見える化 by ダイヤ編成〚その筋屋〛公式 ❄ @Sujiya_Systemさん)

このように、実現したいことを叶える技術が急速に発展し、ネットというインフラによって多くはソフトウェア化している上に、その大半がオープンソースソフトウェアとして誰でも自由に利用でき、改造でき、その開発に貢献することもできます。

ものづくりには、ソフトウェア、ハードウェア・素材までさまざまなレイヤーがありますが、ソフトウェアづくりはコンピューターさえあれば誰にでも始められる最も手軽なものづくりです。


バリエーション豊富なIchigoJam、IchigoSodaは4G通信モジュール対応のソーダカラーがかわいいIchigoJamです。 中央のチップが、100円のCPU。今回の高精度温湿度計SHT31も右下、黒い四角がその本体。あとは電源つないで動かすだけ! 世界中から登場する小さくて安くてワクワクする電子パーツたち。 プログラミングでつないで何創る?夢、膨らみますね!

日本一プログラミングを小学校現場で実践した、松田さんによる熱い著書。
学校を変えた最強のプログラミング教育 | 松田孝
ワクワクする未来を、こどもたちへ!

IchigoJam BASICでプログラミングに慣れて、WindowsかMacかLinuxの本格PCを手に入れたのなら、いろんな言語にチャレンジできます!

イチオシは、JavaScript。ブラウザ上で動くので、スマホ、パソコン、ゲーム機など、動作環境の多さはナンバーワン! ECMAScript(イクマスクリプト)として国際標準化されて、Deno、Node.js、Electronなど、使える環境も広がっています。

HTML/CSSはじめのいっぽに続き、JSはじめのいっぽを公開!

JSはじめのいっぽ
VSCodeなど、お気に入りのエディタで実際にファイルを作って、ブラウザで開くだけでスタートできます。 開発環境の整備が全く不要なのもJSのいいところ!

割とかっちりしたwebアプリのイメージに近い、BMI計算機と、リアルな動きが楽しい2D物理エンジン、Matter.jsを使ったデモを用意。 自分の作りたいものに近い方から、壊して遊んでみましょう! (懐かしのなぞおもちゃ、しゅこ / src on GitHub


simple - matter.mjs」(src on GitHub)

<!DOCTYPE HTML><html lang="ja"><head><meta charset="utf-8"> <title>simple - matter.mjs</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head><body> <script type="module"> import { Matter, createWorld } from "https://js.sabae.cc/matter.mjs"; const { Bodies } = Matter; const world = createWorld(document.body); world.add(Bodies.rectangle(500, 0, 100, 200)); world.add(Bodies.circle(250, 0, 100)); world.add(Bodies.circle(750, 0, 100)); world.add(Bodies.circle(500, 1800, 1100, { isStatic: true })); </script> </body></html>

HTML内に、四角と丸をふたつを大きな丸の上に落とすシンプルなサンプル。htmlファイルとして保存して、ブラウザで開くだけ!まずは座標をいじったり、モノを増やしたりして遊んでみましょう。 Matter.jsをESモジュール化した、Matter.mjsをimportしています。

Hana道場でもはじまったJavaScript入門講座、満員御礼とのこと!

福井県で始まった混雑状況オープンデータ。合わせて行いたい定量的なデータ計測を、鯖江市役所入り口にて設置!さすが鯖江市、依頼からスタートまで何もかも速い!

IchigoCounter - 鯖江市役所 人流オープンデータ
13時すぎに1分間に13人通ったピークが見られ、18時半からは人の流れが停止する様子が記録できています。


来庁者IoTカウンター実証実験中。ケースに入っていい感じ!IoT対応のIchigoJam、IchigoSodaのアンテナ2本はソフトバンクの4G回線につながっているので、既存の無線LANと無関係に安定的に動作します。 人流は200円の超音波センサー「HC-SR04」を使用。


超音波が返ってくるまでの時間を計測し、しきい値(T)を超えていたら人が通ったと仮定。1分間ごとにカウントした数をIoT.OUTコマンドで送信するだけのシンプルなプログラム。 反応してから一定時間待ち(W=1.5秒)を入れて、ひとりを重複してカウントしないようにするなどの調整はその場で観察しながら調整しました。 IchigoSodaにミニモニターとキーボードをつなぐだけで自由自在!

機材を持っていって、設置、プログラム、テスト、調整、設置完了まで1時間! 簡単にできるので、通りがかった中学校の校長先生にぜひ中学校でもIoTづくりをと、PRもできました。


鯖江市長、牧野さんも動作確認!
オープンデータ化、IT化、やれるところからどんどん進めていきましょう!

今回の鯖江市役所での実証実験ができたのは、スピーディーにOK出してくれた、市役所の方、市長のおかげです! 学生のみなさん、このステキすぎるまち、鯖江市に「jigインターン2020」で来てみませんか?(社会人の方の視察もぜひ)

全国の高専、夏休みが短縮されたことを受けて、今回は2週間に改定します。募集期間、延長しましたので、これなら参加できそう!という方、熱い町、鯖江でのインターン、ぜひご検討を!


古民家での共同生活、ウェルカム会!(昨年の様子)


jig.jp本店所在地、めがね会館にて、2週間のチーム開発(昨年の様子)


砂時計 - Matter.mjs」(box2d版Matter.jsmjsで移植)
今回は1週間短いので、事前サポートを充実させてカバーしようと思います。アプリづくりは、Swift / Kotlin / Java / JavaScript / Dartなどといろいろ選択肢はありますが、webアプリとしても使えて汎用性高いJavaScriptを基本言語として推奨。 その入門を作っていきます。

まずはこのスマホを傾けて楽しい砂時計プログラムを改造して遊ぶところからどうぞ!

<!DOCTYPE html><html><head><meta charset="utf-8"/> <title>sandglass - matter-es</title> <meta property="og:image" content="sandglass.png"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head><body> <script type="module"> import { Matter, createWorld } from "https://js.sabae.cc/matter.mjs"; const { Bodies, Body } = Matter; const world = createWorld(); const [w, h] = [500, 1000]; world.width = w; const nballs = 400; const cx = w / 2; const cy = h / 2; const ww = h / 40; const createWall = (x, y, w, h, th) => { const base = Bodies.rectangle(x, y, w * 2, h * 2, { isStatic: true }); Body.rotate(base, th); return base; } world.add(createWall(cx - w / 2, cy, ww, h / 2 + ww, 0)); world.add(createWall(cx + w / 2, cy, ww, h / 2 + ww, 0)); world.add(createWall(cx, 0, ww, w / 2, Math.PI / 2)); world.add(createWall(cx, h, ww, w / 2, Math.PI / 2)); const hole = w / 6; const hw = ww / 2; const hgap = h / 15; const th = Math.PI / 6; world.add(createWall(cx - (w + hole) / 4, cy - hgap, w / 4, hw, th)); world.add(createWall(cx + (w + hole) / 4, cy - hgap, w / 4, hw, -th)); world.add(createWall(cx - (w + hole) / 4, cy + hgap, w / 4, hw, -th)); world.add(createWall(cx + (w + hole) / 4, cy + hgap, w / 4, hw, th)); const bw = w / 60; for (let i = 0; i < nballs; i++) { world.add(Bodies.circle(cx + (w - ww * 2) * (Math.random() - .5), ww + (h / 4) * Math.random(), bw)); } document.body.onclick = () => { world.useRealGravity(); // 傾きセンサーを重力に反映(対応していたら) world.gravity.y = -world.gravity.y; // 重力反転 }; </script> </body></html>

sandglass.html とか名前を付けて保存し、ブラウザで開くだけで動きます!(要、ネット)
まずは砂の大きさを変えたり、数を変えたり、いじって見ましょう!

HTML/CSSもはじめての方は、こちらからどうぞ!(追記、JSはじめのいっぽも!)
創ろう、楽しい夏!

links
- 全国高専生向けjig.jpインターンプログラム2020 ~募集のお知らせ~
- jigintern2019のブログ(昨年参加者によるブログ)

Code for Sabae も協力「さばえマスクポスト」プロジェクト。ポスト設置箇所を地図へプロット! 経産省のオープンソース「IMI住所変換コンポーネント」を使った、おおざっぱな位置としてひとまず公開。 Googleスプレッドシートでまとめ、CSVとしてウェブ公開、読み込んで住所から緯度経度へ変換するDenoのプログラムはこんな感じ(make.mjs on GitHub

GitHubを使ったチーム開発、フロントエンド担当、福井大学生!家でもどこでも社会に貢献できるのが、コードフォー活動のいいところ。近日、もくもく会、やりましょう!


さばえマスクポストマップ」(src on GitHub)
国土地理院の地図オープンデータを使った登録不要で簡単地図表示。参考にどうぞ!


Hana道場で修行する柔道部の高校生(写真 from Hana道場
プログラミング言語や、サーバーに関する質問。1円から使えるサーバーや、便利なライブラリを使って、作ってみたいものはバンバン作ることをオススメ! とはいえ、情報が多量にあり、移り変わりも激しく、どこから入ったらいいかは分かりづらい。

動物を積んでいく系なゲームを作ってみたいということで、2D物理エンジンを使った過去作品「砂時計」のソースを見てもらいながら解説。 意外と簡単でしょ?


sandglass - box2d-es
ただ、2012年のソースコードは書き方が古いので、現代風に書き換えて、ついでに傾きにも対応。 URLをimportするだけ簡単、ESモジュール対応の2D物理エンジン「box2d-es」公開 on GitHub


本日、地域情報化アドバイザー北陸会議。今年の活動報告はオンライン開催となりました。6/1電波の日、「情報通信月間功労」いただきました! 2015年「PCN、北陸情報通信協議会長表彰」に続く、2度目!

ハードもソフトも創りたい人を応援します!
こんなのつくりたいリクエスト、気軽にメンション、送ってください! → @taisukef

JavaScript runs anywhere! PCやスマホのブラウザだけでなく、Node.js や Deno を使ってPC上、サーバー上などコンソールでも使えて便利なプログラミング言語、JavaScript。

最近お気に入りの Deno は、mjs が ts としてコンパイルされてしまう問題あり、deno upgrade --version 1.0.3 として回避中。いっそ、TypeScriptなしのランタイムにしてweb互換性を上げるのはどうだろう?

思うだけでなく、作ってみることができるのがオープンソースのいいところ。手始めにJavaScriptエンジンChakraCoreを使って、コンソール上でサクッとJavaScriptを動かせる js-cmd を作ってみました。


100って2進数にすると何だっけ?サクッと1行、JavaScriptが動かせるコマンドバージョン。

$ js "(100).toString(2)" 1100100

組み込みコマンドは、標準出力する console.log と別名として、Rubyっぽく p だけを定義。


taisukef/js-cmd: JavaScript on command line with ChakraCore」(今はmacOS用のみ)
C++で作ったメインソース js.cpp は、264行。ChakraCoreのサンプルソースにコマンドを組み込み、エラー処理を加えただけです。

NodeやDenoが使っているJavaScriptエンジンは、GoogleのChromeでも使われているv8、ChakraCoreは旧EdgeやInternet Explorerで使われていたMicrosoft製のChakraCore。 性能比較をしてみて、用途に会うものを使うのもいいですね。

オリジナルJavaScriptランタイムづくり、ぜひ挑戦してみてください!

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