プログラムdeタマゴ

nodamushiの著作物は、文章、画像、プログラムにかかわらず全てUnlicenseです

ExplorerのAuto Revealをfalseにしてる人用のVSCode拡張機能作った

marketplace.visualstudio.com

GitHub - nodamushi/Reveal-Util

なんで作ったの

私はエディタを移動するときに、Explorerの選択も移ってピロピロ変わるのが嫌な人です。特に参照で飛んだライブラリの深いディレクトリとか開かないで欲しい。

なので、設定で explorer.autoRevealfalse に設定しています。

ただ、これ、newFileとかnewFolderがExploreがフォーカスあるディレクトリに作られてしまってめっちゃ不便。

私はエディタで操作してるファイルの横にファイルを作りたいんだっ💢

ってわけで、これを解決したかったので、作りました。

f:id:nodamushi:20211024174020g:plain

いやー、楽になったっ

参考資料

公開まで辿り着くのに偉い苦労した。最初の苦労は前の記事参照

公開方法についてだけど、日本語の記事は絶対に参考にしたら絶対にダメ、絶対(大切なこと以下略)。全部古い。

だけを参考にしましょう。(ここに中々辿り着かなかったんだけど)

あと、アクセストークン作るときに「Createできない…🥶」ってなったんだけど、Name をちゃんと入力しましょうってだけでした。

これが最速!VSCodeプラグイン開発に失敗

VSCodeのプラグインを開発してみる

最近は猫も杓子もVSCodeである。嫌になる。

かくいう私もEmacsなんて最近立ち上げた記憶が無い。

補間インターフェースはEmacsの方が楽だけど、LSPとの連携の問題なのか、ユーザー数の問題なのか圧倒的にVSCodeの方が優秀である。 VSCodeはMigemoに対応してないのとか、検索置換周りが糞だけど

というわけで、VSCodeを俺色にそめてやるぜ、ということでプラグイン開発してみることにした。

公式のGET START Your First Extensionを試してみる

公式のチュートリアル があるので、試してみる。取りあえずは Node.jsが必要らしい。

  1. NVMをインストール。私はWindowsユーザーなのでNVM Windows
  2. コマンドプロンプトで nvm install lts を実行
  3. 管理者権限のコマンドプロンプトでnvm use lts (管理者権限必要ないディレクトリ指定したんだけどな)
  4. npm install -g yo generator-codeを実行
  5. yo code でテンプレートプロジェクトを作る。設定は以下。
    f:id:nodamushi:20211023074705p:plain
  6. cd hoge
  7. yarn compile
    f:id:nodamushi:20211023074831p:plain

 

node_modules/@types/node/child_process.d.ts:267:18 - error TS2304: Cannot find name 'AbortSignal'

  終
制作・著作
━━━━━
 Ⓝ●Ⓚ

ちょっと待て

最初にNVMをインストールしたが、これはNode.jsのバージョンが悪いのか?とか考えて複数のNode.jsをPCにインストールするために導入した。

NVMを使うとNode.jsのバージョンを切り替えることが出来る。

で、当初私はv16が入ってたのが悪いのかと思い、NVMでv14のLTSを導入してみたわけだ。

結果はご覧の通り。

AbortSignalはいつ追加されたんだ?

Node.jsのバージョンの問題では無いらしい。ならば型定義の問題だろう。 検索してみると、@types/nodeのglobals.d.tsに定義がある模様。

これのBlameを見ると、どうもv15で定義されている。 参考記事 を見ても、Node.jsのv15.4.0で導入されているようだ。

しかし、package.jsonを見ると@types/nodeは14.xと指定されている。なるほど、無いわけだ。

………いや、LTSはv14系なわけだし、14.xの指定であってるよね?あるぇ?

昔のバージョンだし、変なバグが入ったままになってるのかなぁ………。

yarn.lockを見ると………version 14.17.29ね。了

f:id:nodamushi:20211023084429p:plain
v14.17.29

………んんん!?5時間前っ!?

f:id:nodamushi:20211023083959p:plain

なんじゃこりゃーーーー

古いんじゃなくてか最新版過ぎてバグってた?しかも5時間とか言うタイミングで。

一度 yarn remove @types/nodeをして yarn add -D @types/node@14.17.27 としてから、 yarn compile すると………

f:id:nodamushi:20211023084855p:plain

チックショォオオオオオ

まとめ

はい

というわけで、 これが最速で@types/nodeの最新14系バージョンを使ったが為にVSCodeプラグイン開発に失敗した話でした

ちなみに、ブログ記事書きながら解決したので、原因を理解したのは10分前の午前8時45である。(元々はタイトル「これが最速!VSCodeプラグイン開発に失敗したので助けて」って書いてた)

いやー………難しい………

CLIP STUDIO PAINTのレイヤ名を親フォルダと同じにするプログラムをRustで作った

五月蠅いから結論だけ言え

「レイヤ 番号」になっているレイヤを「親フォルダ名 番号」に変更するプログラムをRustで作った。

  1. Gitをインストール
  2. Rustをインストール
  3. コマンドプロンプトなどを立ち上げる
  4. git clone https://github.com/nodamushi/clip_layer_rename.git を実行
  5. cd clip_layer_rename を実行
  6. cargo build --release を実行
  7. clip_layer_rename/target/release に実行ファイルが出来てるのでclipファイルをドラッグアンドドロップ

何か要求やバグ等があったら、GitHubにIssueを立てて

レイヤがどれだかわからん

どうも

久しぶりに絵を描いてます。残念ながらnodamushi垢ではありませんが。ソフトはCLIP STUDIO PAINT Exです。

で、私はレイヤはフォルダ分けして管理してますが、レイヤ名は付けてないことが多いです。

そうしてると、レイヤ xだらけになって、何処表示してるのか分からなくなるんですよね。

f:id:nodamushi:20211003203031p:plain

この位ならまだ見えるけど、もっと多くなると画面に表示しきれなくなって、スクロールバーが出てきて辛くなってきます。

ちゃんとレイヤ名を付ければ良いんだけど、面倒臭いです。自動的に親フォルダ名+連番にしてくれればなぁ…

clipファイルのフォーマット

何とかなんねぇかなぁーと、「clip file format」とかで調べても出てこない。情報が公開されていないっぽい。

はっきり言って、情報がオープンになってないファイルフォーマットって危険って思ってるんだけど(データ移行できないから2000年代の日本製プログラムを未だに使ってる企業のおっさん共チーーッス☺)。

まぁその辺は良いとして、どうしよう。とりあえず、バイナリエディタで覗いてみよう。

f:id:nodamushi:20211003204038p:plain

バイナリエディタで先頭に見えるマジックナンバーらしき物「CSFCHUNK」で取りあえず検索してみると、なんと解析してる人が居た。ありがたい。

github.com

氏によると、中身にSQLite3が入っているらしい。バイナリエディタで見ると、確かにSQLite3のマジックナンバーが入ってる。

f:id:nodamushi:20211003204644p:plain

その前にある CHNKSQLiはチャンクの開始マジックナンバーで、続く8byteがチャンクのサイズ(マジックナンバーとこの8byteは含まない)になってる模様。なお、サイズはビッグエンディアン。

チャンクからSQLiteのデータだけを抜き出してファイルを保存し、DB Browser for SQLiteで中身を確認してみる。データベース構造は以下の様になっていた。

f:id:nodamushi:20211003210127p:plain

たぶん、見たまんまLayerがそれっぽい。レイヤの画像としての生データはOffscreenかなぁ…(今回は名前を変えるだけなので必要ないケド)。

というわけで、Layerのテーブルを覗いてみる。

f:id:nodamushi:20211003210950p:plain

大分わかりやすい構造で助かった。LayerFolder が0だとレイヤで、0以外だとフォルダになっている。(1以外の場合もあった)

各フォルダは LayerFirstChildIndex で指定した数値と MainIdが一致したレイヤから内容がスタートする。

レイヤの次のレイヤはLayerNextIndex で決まる。0なら終了だ。

LayerTypeが256の無名フォルダは、全体のルートフォルダって意味だと思う。

これでレイヤとフォルダ構造を復元できるので、後は名前を変更するだけだ。

Rustで開発してみた

さて、道筋は出来たのでC++で実装………いや、ちょっと待てよ、私もそろそろいい年こいたおっさんだ。いい加減Rustをやってみるべきではないのだろうか。

よし、Rustの入門書すら真面目に読んでないけど、取りあえず書いてみるか!

というわけで、作ったのがこちら。初めてのRustなのでつたないのは勘弁。誰か鉞を投げて切断して下さい。

github.com

このプログラムを使うと、以下の様に「レイヤー 番号」のレイヤが「親フォルダ名 番号」に変換されます。

f:id:nodamushi:20211003212620p:plain

やったね!

バイナリは公開してないので、使いたい人は自力でビルドして下さい。単にクロスプラットフォームでビルドする方法が分からなかっただけです。

いやー、それにしても。Rust全然分かんねぇ。とくに、エラー周りが分からねぇ………。

何か調べるとみんな言ってることが違う………。お前らはJavaScriptでも書いてるのか…?

こう、C++みたいにサクッと色んな型の例外を返せるといいんだけど、そんなのなさそうだし。

メソッドを使うためにuseしなきゃならんのも、C++以上に面倒臭い。自動でuseしてくれぇ。

今回はライフタイム出てこないから、Rustを使った意味は全くなかったね。

まとめ

よい子のみんなはC++の方が圧倒的に楽で簡単で超便利なので、C++を完全に理解してからRustを始めよう!

ていうか、clipファイルのフォーマット公開して!あと、オートアクションをPythonか何かで書かけるようにして!SDKもフィルタ以外を開発できるようにして!

ノートンのショートカットが勝手に作られるから解約した

 昨今はWindowsにおいて、セキュリティソフトは要らないという話もある。時代は変わった物だ。

 思えば私とノートン先生との付き合いも長い。私が2008年に初めて自分のパソコンを手にしたときからだから、もう13年になる。実家もノートン先生だったので、実際はもっと長い。こんなにお付き合いが長いソフトなんて、メモ帳とペイントぐらいしかなかろうか?

 私がなんでノートン先生を選んだかに、特に理由はない。基本的に惰性である。

 惰性で選び、惰性で使い続けてきたが、本日解約した。

 というのも、私はデスクトップにあれこれアイコンを置くのが嫌いだからだ。「ゴミ箱」と、便利なショートカット(PowerShellを管理者権限で起動とか)を置いているぐらいで、後はすっからかんである。デスクトップのエントロピーは低く保っておきたい。

 だというのに、コレ↓

f:id:nodamushi:20210828225209p:plain

 削除をしてもPCを再起動する度に勝手にデスクトップにノートン インターネットセキュリティのショートカット アイコンが配置される。

 今までこんなことはなかったのに、新しいPCを買い換えたところ、新しいPCでは消しても消しても、再起動する度に鎮座するという「セキュリティソフトがウィルス」的動作をしやがる。

 設定項目を調べてみても、特にそのような設定項目が見当たらない。検索で「お前を消す方法」を調べても特に情報が出てこなかった。

f:id:nodamushi:20210828230656p:plain:w480

サポートに聞いてみた

 検索しても情報が得られないので、直接サポートからチャットをして質問をしてみた。得られた回答は以下である。

  • リモートデスクトップで操作させろ(当然断る)
  • 技術者に確認したところ、デスクトップに毎回ショートカットを作るのは仕様であり、止めることは出来ない
  • どうしても嫌なら「隠しファイル」に設定しろ
  • 他の解決方法はない

 ふざけてるのか💢 拡張子と隠しファイルは表示するに決まってるだろ💢

 何が仕様だ、馬鹿じゃねぇの?タスクトレイからアクセスできるんだから、デスクトップにアイコン置く必要ねぇだろ。

 だというのに、ユーザーの望まぬ意図しない動作を、停止する手段もなく行うというのだから、これはもう兵庫県警(笑)か神奈川県警(呆)に通報すべき案件である。

 どうせ勝手に裏側で動いたり、ファイルを作ったりしてるんだ。デスクトップに1つリンクを作るぐらい怒るなよって、冷静な私が突っ込んだが一瞬で棄却された。嫌なことは嫌である。これを無理矢理押し通すのが、私の根幹なのだ。ゴミがゴミであるアイデンティティに関わる。

 だいたい、私たちは全員猥褻行為の生成物なのだから、わいせつ物陳列罪なんていらない、とはならない。要するに、見えるところでやるな、である。

 2000年代の縄文時代ではノートン先生かマカフィーしか選択肢もなかったが、現代ではDefenderやヨーロッパ勢が台頭している。何も惰性でノートン野郎を使用する理由もない。

 私はサポートチャットを終了すると共に、怒りにまかせて速攻で自動更新を停止したのだった。

それでも無理矢理使う

 自動更新は停止したが、残念なことにノートン野郎のライセンスが来年4月まで残っている。

 流石にライセンスがあるのに、使わないのも勿体ない。次の更新はありえないが、ライセンスが切れるまでは使うつもりだ。その後はDefenderだけにするのか、ESETとかを入れるのかは決めてないが。

 さて、使うとは言ってもアイコンがデスクトップに表示されるのは精神衛生上非常によろしくない。何とかしよう。

 ノートン野郎は C:\Users\Public\Desktop にリンクを作成する。止める手段はない。ならば、書き込めなくしてやれば良い。どうせパブリックデスクトップなんて使わない。

前提条件

 パブリックデスクトップを使わない人

手順

  1. 先ずはC:\Users\Public\Desktopの中を空にし、ノートンのリンクを削除する
  2. C:\Users\Public\Desktopのプロパティを表示し、セキュリティタブを開く
    f:id:nodamushi:20210828225918p:plain:w320
  3. 「編集(E)...」のボタンをクリックし、アクセス許可の画面を開く
  4. SystemAdministratorsの権限から書き込み許可のチェックを外す
    f:id:nodamushi:20210828230153p:plain:w320
  5. OKを押して閉じる。プロパティ画面でもOKを押して閉じる

 SystemとAdministratorsの両方から権限を奪わないと生成されてしまったので注意。

 なお、C:\Users\Public\Desktopを消せば良いじゃないかとやってみたが、これはWindowsによって次回起動時に勝手に作られるので意味がなかった。

 しかし、これが各ユーザーのデスクトップではなく、パブリックデスクトップだったのは、最後の救いだったのだろう。ユーザーのデスクトップディレクトリに毎回出力されていたら、だいぶ困ったことになっていた。ただ、わざわざ仕様でこの様にしているのだ。ノートン野郎はユーザーの気分を害してでもこうしたい理由があるはずだ。回避をさせないために、なんらかの強硬手段に出る可能性はある。

Lenovo ThinkPad X1 Gen9でUSB-C(Thunderbolt)でモニタ出力できない

TL;DR

 起動時に「Enter→F1キー」でBIOSの設定画面に入り、ConfigにあるThunderbolt4 の PCIe Tunnelingをoffにすると、理由は知らんけど認識した

ミニドック買った

 外部モニタも欲しい、高速なLANケーブルも繋ぎたい、でもUSBポートがない。

 というわけで、Lenovo ThinkPad X1 Gen9用途にCable MattersMultiport Video Adapter with PDを購入しました。

電源もモニタも認識しないんだが

 意気揚々とやって来た商品をThunderboltのUSB-Cポート突っ込んで、PDに電源を挿して、LANケーブルを差し込みました。

 で、Google SpeedTestを実地すると、下り120Mbps、上り100Mbps。………あるぇ?遅くはないんだけど、500Mbpsぐらいはでるハズだけどな………?

 まぁいっか、とデブい腰を上げてHDMIケーブルを押し入れから取り出してくると………何故か画面が消えていました。

 おかしい。電源モードの場合はそんなすぐにスリープには落ちない設定にしているはず。何故消える?

 と確認してみると、バッテリーモードで駆動しているじゃないか。なんで?不良品掴まされた?

 持ってきたHDMIケーブルを挿してみても反応無し。よし、これは不良品だな。

j5 createを刺してみたが反応せず

 「あ、そういえば」と押し入れをひっくり返して探し出したj5 create。今や完全にKindle専用と化したSurfaceで、かつて使っていたミニドックです。

 私のは古い奴なので、LANや電源はないけど、HDMIは使えるはず、と挿してみたところ………反応しない。

 これはあれか、ThinkPadが不良なのか………と検索してみると、どうやらBiosでThunderbolt3のセキュリティをとか、USB DeviceをEnableにしろ、と言うような記事が幾つか出てきました。

 なるほど、BIOSか。

BIOSにThunderbolt3とかないんだが

 というわけで、一度シャットダウンしてから、起動時にEnter→F1キーでBIOSの設定画面に入ります。なお、Enter入力が間に合わなくて2敗しました。

 さて、Thunderbolt3………… 

f:id:nodamushi:20210819161521j:plain:w320

 ないね?Thunderbolt4だね?まぁ、Thunderbolt3も4もさして変わらないでしょ………

f:id:nodamushi:20210819163225j:plain:w320

 え?項目何もないね?なにこれ、PCIe Tunneling?これがONになってるけど、どういうこと?

PCIe Tunneling。 PICe Tunnelingの有効無効。無効化した場合、外部GPUやストレージデバイスなどの幾つかのThunderboltデバイスは動かなくなるでしょう。 Thunderbolt4認証済みであるUSB4ベースデバイスのUSB機能は機能します。

 このポートがPCIeとしても認識できるようなデバイス構成になってるのか、Thunderbolt4がそういう仕様なのか、不勉強だからよく分からん。

 参考によると、Thunderbolt3ではサポートされていたPCIeがオプション化されたらしい。オプション化されたので、選択できるようにOn/Offの選択が出来るようになっているのかな。

 こんなのがPCIeを有効にしてると使えると言うことかな

 うーん………まぁ、別にGPUを繋ぐわけでもないし、切ってみる?何が起こるのかよく分からんけど

f:id:nodamushi:20210819163902j:plain:w320

 ポティッとな

f:id:nodamushi:20210819163939j:plain:w320

 ポティッとな

よくわからんけど、認識した

 再起動すると、なんか電源を認識してました。

f:id:nodamushi:20210819165913p:plain

 ネットワーク速度も予想通り下り500Mbpsに。

f:id:nodamushi:20210819165956p:plain

 外部モニタも認識しました。

 というわけで、取りあえず、何だかよく分からんけどPCIe Tunnelingを切ると認識した、ということで。

 だれか理由を教えて………

地球平面説は人権問題じゃね?って話

 一昨年(2019年)辺り、少し世間で話題になった地球平面説をご存じだろうか?読んで字の如く、地球は平らであるとする主張だ。

 本日、面白い本を見つけてしまった。

地球平面説【フラットアース】の世界

 Kindle版がないのが残念である。

 さて、この本が届く前に、私が地球平面説を人権問題だと思っているという話をしたい。本を読んだ結果、考えは変わるかもしれないからだ。

地球の反対側の人が落ちないのが分からない

 話題になった当時、身近な人物、私の妹から実に興味深い話を聞いた。

 というのも、彼女は実は感覚的に 地球の裏側にいる人達が下に落ちないのが分からないらしい。 

 強調して言うが、感覚的にである。

 当然ながら、彼女自身、その感覚を否定している。彼女は当然に万有引力を知っているし、当然に万有引力があるから地面に立てることを知っている。地球の裏側は下ではないことを当然に知っているし、物は下に落ちるのではなく、引力のある方に落ちるだけだと知っている。

 しかし、それでもなお、彼女の精神世界においてイメージされる地球には上下があり、下にいる人が落ちないのが分からないらしいのだ。

 

馬鹿げた感覚なのか?

 実に馬鹿げた感覚だ、ありえない、頭おかしいんじゃないのか、と頭の残念な人は思うだろう。しかし、理屈で理解できても、直感的に分かっても、それでもなお、感覚的に分からない物なんていくらでもある。そもそも、私にとっては理屈すら分からない物の方が、世の中多い。特殊相対性理論とか量子論とか、感覚はおろか理屈ですら理解できない。

 例えば、実は私は0.9..... = 1が感覚的に理解できない。直感的には理解できる。何故なら特に考えなくても、以下の様な数式が頭に浮かぶからだ。

\displaystyle{
0.\dot9 = \lim_{x \to \infty} \sum_{n = 1}^x \frac{9}{10^n} = 9\lim_{x \to \infty} \frac{\frac{1}{10}(1 - \frac{1}{10^x})}{1 - \frac{1}{10}} = 1 - \lim_{x \to \infty}\frac{1}{10}^x = 1
}

 しかし、0.\dot9が1であるとイメージせよと言われると、イメージできないのだ。どう頑張っても、私は0.\dot9は 1-無限小だから1と言う風にしか理解できない。

 無限小が0と同値なのは感覚的に理解できる。それでも、0.\dot9はどう頑張っても感覚的に1にはならないのだ。1ではない、何かになるような気がしてしまう。恐らく、私の感覚が文字に強く結びついているからだろう。 1 - 無限小 という形に変換しない限りは感覚的に納得できないのだ。かといって、超準解析の世界も感覚的にわからない。

 愚か者と嗤うなら、嗤ってくれて良い。君はあらゆる真理を完全に理解し、感覚的に悟った神に等しい何かなのだろう。

 私は0.\dot9が理解できない愚か者だ。ならば、地球の裏側の人達が下に落ちないことを感覚的に理解できない妹を、何故に私が嗤うことが出来ようか。私と妹は同レベルにしか思えない。

 妹の感覚を正当化すれば、地球平面説に辿り着くのだろう。ならば、私と地球平面説を唱える人達に、実は大差ないのではないかと思うのだ。

 

科学の否定なのか、それとも科学に否定されているのか

 この話題を目にした当時、陰謀論、科学の否定、そう言った言葉を記事で読んだ。私も安易にそう思った。

 しかし、本質はそこなのだろうか?

 精神的な世界において、地球が平面としか思えない彼らを、科学は否定している。彼らの精神を否定している。つまりは、思想の否定へと繋がる。思想の自由の否定である。ならば人権問題だ。

 彼らは、自らの人権を否定されることに対する、怒りの声をあげているのではなかろうか?自らの人権が守られるコミュニティを作ろうとしてるだけなのではなかろうか?

 私も妹も、「0.\dot9は1ではない」とも「地球の裏側には立てない」とも主張するつもりはない。それは、単に怒りを感じてないから、科学に寄れるだけではなかろうか。

 私は妹の話を聞いて以来、そういう風に考えているのである。

 無論、真実かどうかなどは知らない。人の数だけ、答えも違うだろう。本が届くのが実に楽しみである。

 あ、なお、本は購入しましたが、私は地球平面説は理解できません。地球が曲面だなんて、海見てりゃ分かる。

jbangがJavaの初学者にめっちゃ便利な件について

 jbangという、Java をスクリプト言語のように実行できるツールを知りました。

 これ、プログラミング初心者が Java を学び始めるのにとても有用だと思います。

  • JDKのインストールが不要
    • 準備が大体コピペだけですむ
  • コンパイルせずに、.javaファイルを直接実行可能
  • Gradle (ANT, Maven) が無くても外部依存関係を解決できる

 とても良い感じです。

 初心者にいきなりコンパイル→実行をさせたり、もしくはIDEを使わせるというのは、結構ハードルが高いと思います。 たださえ、意味の分からないことをやらされているのに、いきなり意味不明なコンパイルを挟まないと実行できないとか、大量のボタンと画面が殴りかかってくる恐怖のIDEとか、乗り越えるのも嫌になるでしょう。

 我々からすれば「その程度のこと」ですが、割と「その程度のこと」で躓く物です。

 JShellは初心者にとても良いと思いますが、 外部依存関係は解決できません。 jbangはその点が非常に優れていると思います。

 

何も準備せずに Hello World を動かしてみた

 Javaの入っていない Windows 10 環境を用意しました。java も javac も入っていません。

f:id:nodamushi:20201012214910p:plain:w320

 作業ディレクトリとして、デスクトップに jbang を配置。

f:id:nodamushi:20201012220113p:plain:w320

 次に PowerShellを起動します。

 なお、PowerShellを開く/触るという行為は、初心者には拒絶されるレベルで、ハードルが高いです。みなさん、頑張って下さい。

 「Shift + 右クリック」をすると 「PowerShell ウィンドウをここで開く」が出るのでこれをクリックします。

  f:id:nodamushi:20201012220243p:plain:w320

 

 PowerShellが開いたら、以下をおもむろにコピーして、PowerShellに貼り付けます。

 なお、Scoopがすでに入ってる場合は、3行目からでOK。gitがすでに入っている場合は、3行目はスキップ可能。

Set-ExecutionPolicy RemoteSigned -scope CurrentUser
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://get.scoop.sh')
scoop install git
scoop bucket add jbangdev https://github.com/jbangdev/scoop-bucket
scoop install jbang

Note: 現在は以下のコマンドでインストールできるみたいです。

iex "& { $(iwr -useb https://ps.jbang.dev) } app setup"

 PowerShell はGUIじゃないので、かなりハードルが高いですが、コピペだけでインストールがすむので、まだ何とかなるのではないでしょうか。

 

 次に、メモ帳(もしくはさくらエディタ)を開いてもらいます。初心者でも、何故か、さくらエディタを使ってる確率が高い気がします。

 そして、次の内容をエディタで入力してもらい、「Hello.java」として保存します。

 なお、jbang init Hello.java を使えばメモ帳不要ですが、個人的には手を動かしてみる体験は重要だと思うので、ここはメモ帳を起動した方が良いと思います。

public class Hello {
  public static void main(String[] args) {
    System.out.println("Hello World");
  }
}

1行目の「///usr/bin/env jbang "$0" "$@" ; exit $?」は Windowsでは不要  

f:id:nodamushi:20201012221108p:plain:w320

 

 富士山の頂上から、麓まで飛び降りるレベルの崖っぷちとして、「Hello.java.txt」として保存してしまうことがあげられます(上記画像)。何とか上手く突破させてあげてください。

 後はおもむろに jbang Hello.java と PowerShell で実行するだけで、勝手に JDK のダウロードをしてから、実行してくれます。(環境変数 JAVA_HOME がある場合は、そちらを使います)

f:id:nodamushi:20201012221535p:plain

 無事、Java を何も入れていない環境で、あっさりハロワが完了しました!

 なお、jbangがコンパイルした結果や、ダウンロードしたJDKは、ユーザーホームディレクトリの .jbang/cache にあります。  

 次に、jbang のサンプルにもあるように、jfiglet ライブラリを使ったプログラムを実行してみましょう。

//DEPS com.github.lalyos:jfiglet:0.0.8

import com.github.lalyos.jfiglet.FigletFont;

public class Hello {
  public static void main(String[] args) throws Exception{
    System.out.println(FigletFont.convertOneLine("Hello World"));
  }
}

  f:id:nodamushi:20201012225254p:plain

 //DEPS com.github.lalyos:jfiglet:0.0.8 を読み取り、勝手に依存を解決して実行してくれます。

 外部の依存するライブラリを使う為にビルドスクリプトや、ダウンロードを手動ですること無しに簡単にできました。

 今後Gradleなどを教える際の、敷居が少し下がるのでは無いでしょうか。

 

まとめ

 jbangを使えばJDKをインストールしなくて良いというのは、非常に初学者に優しいと思います。

 JShellとならんで、初学者の助けになるツールになるポテンシャルを感じました。

 jbangからJShellが起動できるともっと良いかな。※追記

追記: jbangからJShellを操作する

 どうやら、 jshファイルを --interactive を付けて実行すると、JShellを操作できるようです。

f:id:nodamushi:20201013003207p:plain