便利なmdbookの私の使い方 - doctocを添えて -
3 min read
こんにちは、無能です。
仕事でもドキュメント作成にRust公式で使われているMarkdown
形式で書けるmdbook
の使い心地がとても良いので私の場合の使い方を紹介します。
インストール
cargo install
でインストール
cargo install mdbook
あとから使う目次生成にdoctoc
をインストールします。
sudo npm -g install doctoc
ぶっちゃけ他にMarkdownで目次自動生成できるコマンド他にもありそうですがリサーチ不足です。
初期設定
mdbook init
を実行するだけ
~/git/lets-mdbook$ mdbook init
Do you want a .gitignore to be created? (y/n)
y
What title would you like to give the book?
test
2024-11-23 22:19:57 [INFO] (mdbook::book::init): Creating a new book with stub content
All done, no errors...](alleycat:[haturatu]:~/git/lets-mdbook$ mdbook init
Do you want a .gitignore to be created? (y/n)
y
What title would you like to give the book?
test
2024-11-23 22:19:57 [INFO] (mdbook::book::init): Creating a new book with stub content
All done, no errors...
alleycat:[haturatu]:~/git/lets-mdbook$ ls
book book.toml src
ここでsrc
に記事となる.md
ファイルをぶっこんで、ビルドするとbook
ディレクトリにデフォルトでは出力されます。
alleycat:[haturatu]:~/git/lets-mdbook/src$ ls
SUMMARY.md chapter_1.md](alleycat:[haturatu]:~/git/lets-mdbook$ cat src/
SUMMARY.md chapter_1.md
alleycat:[haturatu]:~/git/lets-mdbook$ cat src/SUMMARY.md
# Summary
- [Chapter 1](./chapter_1.md)
このsrc/SUMMARY.md
にはサイドバーに表示されるような目次を作れます。
ビルド作業をシェルスクリプトで自動化し更新履歴も作る
src
ディレクトリに更新するたびにdoctoc
コマンドを実行してmdbook build
して・・・みたいなアホみたいなことしているのがアホみてえだな・・・。と我ながら思って耐えきれなくなったのでvim
開きながらでも一連作業を実行出来るようにシェルスクリプトを作成。
#!/bin/bash
pwd | grep "src$" || cd src
doctoc .
sed -i "3d" ./*.md
sed -i "/](\#/d" ./SUMMARY.md
sed -i "8a`date`" ./update.md
cd ..
mdbook build
git add .
git commit -m "wip"
git push
これはpwd | grep "src$" || cd src
でpwd
結果にsrc
が含まれていれば何もしない。なかったらcd src
に移動する。
なんでこんなことしてるかっていうと、src/*.md
を編集しながら:!../build.sh
でこのスクリプトを実行するとsrc
ディレクトリ内でcd
してしまうのでちょっと気持ちが悪いからこうしてる。まあしなくても動作上なんの問題も無いんだけど・・・。 なお、git remote-url
を設定し一度git push
している前提だったり、update.md
はこんな感じになっている。
<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
- [Update Log](#update-log)
<!-- END doctoc generated TOC please keep comment here to allow auto update -->
# Update Log
2024年 11月 23日 土曜日 22:39:24 JST
sed -i "8a
date" ./update.md
で8行目にこのスクリプトが走ったときのログとして残る。
ぶっちゃけちゃんとやるならgit commit
の戻り値からコミットあったときにだけ更新履歴に残すように判定したときだけとかした方が明らかに親切なんだが即席スクリプトだったのでご了承いただきたい・・・。
Github Actions使えばいいんちゃうの?
このビルド作業はActions
でも実際使える。
ただし、uses
で他のyml
資産を使えない環境だとどうだろう?
もしGithub Actions
のみで使うなら良いかもしれないが、GitLab
をGit
サーバーとして使っている場合github.com
の資産を使おうとするとちょっとややこしくなってくるみたいなので(まあそりゃそうである・・・。)今回のようにした。
実際Githubのエンタープライズ版は結構ここらへん結構厄介なんだ・・・。
Enterprise でのアクションの使用について
という訳であんま頼りにしちゃらんないなあ・・・。と思ったのでもっと頼りにならないような自分がシェルスクリプトに記述したのであった・・・。