Runme runs Markdown: runme.dev を始めてみた

## tl;dr

- [stateful/runme: Execute your runbooks, docs, and READMEs.](https://github.com/stateful/runme)
- 先日 jupyter notebook をいじってたら [自己紹介](https://twitter.com/raki/status/1749946244926181408) されたｗ
- 雑に言えば jupyter notebook の bash kernel 代替みたいなツール
- GO で書かれていて markdown ファイル（.mdなど）のコードブロックを実行可能なランブックにできる
- 各種コマンドやツールの使い方や記述方法の記録に使い始めた
- python に依存しないでいい分だいぶ楽？

## runme.dev is 何

先に書いたように jupyter notebook の bash kernel 代替って理解で特に問題なさそう。

https://runme.dev/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/08956ea3-2962-5dbb-3f9e-9b682109ad00.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/66a4b586-9350-9c96-7422-fe049bb8a031.png)

こんな感じの普通のマークダウンファイルのコードブロックを

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/23bc21ba-038c-6e91-b4d1-09e4a1026bb2.png)

こんな感じで jupyter notebook みたいに実行して結果を表示してくれる感じのツール。

## jupyter notebook is 何

jupyter notebook は python で動いていて、大体 python を動かすツール。

https://jupyter.org/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/1626eff5-ca07-b402-bbd6-28d6ff165660.png)

google だと Colaboratory も裏は jupyter （のはず？）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/555b71f5-0c1d-8f2f-b093-7a763e22fb75.png)

DataDog だと Notebook も裏は jupyter （だよね？）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/0431e884-d40f-9a5c-a81b-ee721766f30b.png)

AWS SageMaker notebooks も jupyter notebook ね。

いずれもテンプレート等が違うだけで python に jupyter 用の bash kernel をインストールしてあげれば python だけじゃなくて bash が動かせる、みたいな建付け。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/d2509f0c-688e-1ad7-e893-a36c7edc3fa6.png)

## vs

### jupyter notebook

- jupyter notebook は python に依存していて、実行環境のバージョンに左右される（複数のバージョンの python を使っているとちょっと面倒）
- つまり自分だけが使うなら問題ないし、共通環境下でチームで使うなら問題ないけど、各自のローカル環境で共有して使う時はバージョンの統一とかコードの書き方の注意とか、細かいところで注意が必要（実際のところ機械学習の文脈ではそう気にすることもないはず）
- ファイル自体は json っぽい形式のファイルになっているので、git でのコード管理はできる
- 拡張子は .ipynb なので jupyter だと（１回覚えれば）わかる
- 初見の人にはなんだこれ？になりがち。テキストとして開くと json だし jupyter のインストールや環境整備が必要になる（前述の python のバージョン等の問題になる）
- 誤解を恐れず雑に言うなら機械学習のためのpythonコードを共有するには最適だけど、それ以外では使い方に迷う

### runme.dev

- runme は Go で書かれていて、バイナリを１つインストールするだけなので、環境にはあまり左右されない
- 既存の markdown ファイルと 100% の互換性を謳っているので、実行バイナリ以外に必要なものもなく、markdown の知識だけでだいたいいける
- front matter が勝手についてくるのと、コードブロック（```三点バッククォート）にちょっと書き足しが要る
- 初見の人にもファイルとしてはただの markdown として見てもらうことができ、コードブロックの実行の恩恵を受けたいなら runme をインストールすればいいだけという手軽さ
- runbookとして使いたい人にはだいたい何にでも使えて、使わない人の邪魔にもならない

### other

- 世の中には他にもたくさんの類似ツールがあって、それぞれ特色があったりするので調べたら教えてくださいｗ

## 個人の感想

- jupyter notebook の管理でちとハマった。WSL2 に python が 2.7,2.8,3.8,3.10,3.11,3.12 とやたら入っていて、自分でもどれやねんってなっている（brewでインストールしていてanacondaやpyenvを使っていないのが悪い）
- やりたいことは aws cli や jq 等のツールのコード例の管理やその実行結果の確認、再利用のための記録を残すこと、だったので、jupyter notebook の bash kernel で一旦問題なかった
- jupyter は前述のとおり各自の環境に依存しやすいし、ランブックやコードの共有という文脈では、チームで使うツールとしてはいまいちかなって思った
- そんな時にタイミングよく runme.dev から X 上で自己紹介を受けたのでちょこっと触ってみたところ、見た目のダメっぽさ（jupyter準拠？）は jupyter notebook とほとんど変わらず、機能的には bash kernel と同じようにトンネルしてるのと変わらない、コード的にはマークダウンとして扱うだけ、インストールすれば使えるし、使いたくなければ使わなくてもそんなに困らない（コピペで自分で実行するなら要らない訳だ）
- まだドキュメント全部を試していないけど、マークダウンファイルを runbook として扱うワークフローも作れるし、github actions を呼び出す等もできるので、業務用のリポジトリに配置してサービス向けのドキュメントとして扱うこともできそう
- よくある◯◯百本ノックみたいな記事のコード部分を乗っけておいてボタンポチで実行結果が確認できるのに使えるかもとか（だいたいそんな感じに使うつもりで使っている）

## 終わりに

まだリポジトリのスターも少ないし日本語の記事が全然見当たらなかったので、とりあえず始めてみた記事を用意してみようかなと。
個人利用で知見を集めつつ、SREやインフラの文脈で runbook としてチームに採用できたらいいな、とか。

## おまけ（追記）

こんな感じで VS Code でマークダウンファイルを開いておいてボタン１つで実行できる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/21623539-07a8-f289-2cd6-4b6787052df9.png)

runme で開いて左端の実行ボタンで実行するとエディタ内に出力される（この出力結果を保存できたりするらしい）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44420/c5425993-4ab1-f9fb-f482-21af4f8743aa.png)