aklaswad.hatenablog.com

さて何を書こうか

aclii 0.0.10

休日にちょこちょこといじってる。

 

致命的なバグをいくつか直した。Synopsisに書いてる手順で動かないのは駄目だよね。

ヘルプのフォーマットを整えた。

Bash3.2(Macに入ってるバージョン)で動かないテストを直したけど、全部動くかは不明。GitHub ActionsでMacOSでのテストもするようにした。

このまま3.2をサポートするべきなのか、すべてのコードがzshでも動くようにするべきか(いまは補完のみ対応)悩ましい。

 

aclii というソフトを書き始めた

取っ散らばったシェルスクリプトと細々したPerlスクリプトと、ときどきnodeと、とにかくどこから手を付けていいかわからんが何とかしないとなんともならない。おしゃれなサブコマンドが実装されているスクリプトの中では [ $1 = "何かしらのサブコマンド" ] || [ $2 = "同じサブコマンド" ] のような地獄が待っている。なんだ今から getoptとか勉強しなきゃいかんのか?別言語にポートするか?Getopt::Longだってまっぴらごめんだぞ?yargsはクール?cobraが強い?彼らは俺を救ってはくれない。今すぐ全人類に叡智を授けてみせろ。

 

そもそも、なにかコマンドラインから作業する時に動いているものは70%くらいはシェルスクリプトだ。

まず入力と実行で50%ずつなのだ。我々はシェルなしでは何もできない。我々の打ち込むコマンドは入力の時点で100%シェルを通過する。そのうえ呼び出し先のかなりの割合で、向こう側もシェルスクリプトだ。

なのに、なんで、実行される言語側の一つずつにクールなパーサーとクールでないパーサーが用意されていていちいちそれらを検証して学習して取捨選択しなくてはいけないのだろうか。

 

俺はそう考え、シェル側にこの問題を寄せて解決してから実行ファイルを呼び出すのが正解だと考えた。

 

aclii は、

  1. 環境に(ほとんど)依存しないPure Bashコマンドライン引数のパーサーを生成するパーサージェネレータです。シンプルな定義をYAMLで書くだけでパーサーとコマンド入力補完スクリプトが生成できます。
  2. 併せて、高機能・・・いや中機能くらいのシェルランチャーを生成します。設定ファイルに書いておけば、好きなサブコマンドで任意のプログラムを実行できるようになります。
    2-1. ランチャーから起動されるプログラムに対して、パース済みの引数をJSONで渡す事ができます。新規ツールを書く際にgetoptなどと対峙する必要がなくなります。
    2-2. 単にexecするだけなので、各サブコマンドの実装は自由に選ぶことができます。
    2-3. YAMLの定義ファイルにインラインで処理を書くこともできます。
    2-4. ヘルプ、マニュアル生成をランチャー側で吸収し、定義ファイルから自動生成します。

というような構想で作り始めた。

 

github.com

aclii - npm

グンマ2100

2100年代。汎用ナノマシン(generic nano machine: GNM、通称グンマ)が量産され、悪の多国籍IT結社Gの手によって世界中に散布された。ナノメートル以下に詰め込まれた有機バッテリーと非金属回路による、数種のセンサーを含むシンプルなノイマンマシンは、あらゆる場所の空気中あるいは真空中に浮遊し、環境にも優しく、相互に通信することでネットワークを構築し、世界のすべてを知覚するに至った。グンマはあらゆる有線コンピュータのロジックボードにまで侵入しすべてをクラックする。ディストピアまで後少しだ!負けるな人類!

 

レジスタンスの新人編

新人の仕事は隠れ家へのグンマの侵入を防ぐことだ。ルンバはグンマのコントロール下に陥りがちで信用出来ないぞ。相棒は箒とハタキだ。頑張れ新入り!

 

ハッカー編

レジスタンスのエリートハッカーは半径100メートル以内のグンマを逆ハッキングしコントロールすることで、近づく敵を発見して「そこだっ!」と叫んだり、半球状に光を発したりと、色々なすごいことが出来るのだ。戦えハッカー!

 

宇宙編

グンマ戦闘濃度散布急げ!左舷弾幕薄いよ!