筆者は、雑多な情報をScrapboxというクラウドサービスに記録している。Scrapboxに関しては、以前の記事を参照していただきたい。雑多な情報の中には、プログラムやワンライナーなどのソフトウェアも含まれている。

利用頻度が常に高い情報であれば、ずっと覚えていられるのだが、そうでない場合は、その存在さえ忘れてしまう。筆者は、記憶力には多少自信のあるほうだが、しばらく使わないと完全に記憶が「抜ける」ことがある。いくらファイルに保存しても、存在を忘れたらアウトである。しかし、同じものをまた作るのもムダである。そういうわけで、記録する価値のあるものはScrapboxに記録している。

Scrapboxでは、プログラムなどのコードを入れるための専用のブロックがあり、名前を指定して、それを取り出すことができる。このため、プログラムの説明や、関連情報へのリンク、その他、必要な情報ページへのリンクなどを全部、Scrapboxのページに入れても、コードとその他の情報を分離することが簡単にできる。

秘密はURLにある。すべてのScrapboxのページは「プロジェクト名」と「ページタイトル」を入れたURLでアクセスが可能で、さらにその中にあるコードブロックは、

https://scrapbox.io/api/code/<プロジェクト名>/<ページタイトル>/<コードブロック名>

というURLで取り出すことができる。

ページを作って、コードブロックのようにプログラムやワンライナーを記述しておく(写真01)。“code:”で始まる部分がコードブロックでコロンの後ろがブロックの名前である。URLが簡単になるようにコードブロックの名前を“exec.ps1”としている。ワンライナーもそのままコードブロック中にかけばよい。もし関数を定義する場合、関数定義には、“Global:”を付けグローバルスコープにしておかないと、PowerShellのPROFILE(起動時に実行されるスクリプト)の中などで読み込ませることができない。

写真01: こうしたページをScrapbox上で作成しておけば、PowerShellからコードブロックを読み出して実行させることができる。地が赤いところにある“code:”以下がコードブロックになる。コロンの後ろがコードブロックの名前(exec.ps1)である。ワンライナーの場合コードブロック内にそのままコマンドを書き、関数なら普通にPowerShellの関数定義を書く

最後にPowerShellのプログラムが記録されていることを示すタグ“#PowerShellCode”を付けておくことで、検索が簡単に行えるようになる。

PowerShellのコマンドラインから、以下のコマンドを実行すると、指定したページのコードブロックを表示できる。

(Invoke-WebRequest https://scrapbox.io/api/code/<プロジェクト名>/<ページタイトル>/exec.ps1).content

この後ろに“ | Invoke-Expression”を置けば、コードを直接実行できる。ページタイトルを引数にして実行する関数“Exec-SbCode”として定義しておくと便利だ。

なお、他のサービスでもURLでコードを取得できるなら、同じ手法が使える。たとえば、GitHubのGistでも

invoke-WebRequest <GistのRawページURL> | select -ExpandProperty content

のようにすればコードを取得できる。Gistは検索が面倒だが、コードの履歴が残り、フォークも可能だ。

Scrapboxからプログラムを探すなら“#PowerShellCode”をキーワードにして、

((Invoke-WebRequest https://scrapbox.io/api/pages/<プロジェクト名>/search/query?q=%23PowerShellcode).content | ConvertFrom-Json).pages | select title

とすればよい。登録したプログラムやワンライナーなどをすべてリストにできれば、ここから何かを探すのは簡単である。これも、必要なら、これも“List-SbCode”などという名前で関数定義しておく。

“Exec-SbCode”さえローカルで定義されていたら「Exec-SbCode "List-SbCode"」で関数を組み込むことができる。そのほか、コードの表示や該当のScrapboxページの表示など、便利そうなコマンドを作ってページに記録しておけば、どのマシンでも取り出すことができる。1つのコマンドを起点に、自分のプログラムにすぐにアクセスでき、再帰的にコマンド、プログラムを読み込んで環境を整備できる。相手はクラウドなので、どのマシンでも、どこからでもアクセスが可能である。

最後に、この仕組みは増井俊之氏のアイディアが元で、筆者は、PowerShellで使う方法を考えただけということをお断りしておく。

今回のタイトルネタは、ブラッドベリの「何かが道をやってくる」(創元SF文庫)である。妙に「大人」について考えさせられるのは筆者の成長が止まっているせいか。