便利な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にはサイドバーに表示されるような目次を作れます。
Image

ビルド作業をシェルスクリプトで自動化し更新履歴も作る

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 srcpwd結果に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 "8adate" ./update.mdで8行目にこのスクリプトが走ったときのログとして残る。
ぶっちゃけちゃんとやるならgit commitの戻り値からコミットあったときにだけ更新履歴に残すように判定したときだけとかした方が明らかに親切なんだが即席スクリプトだったのでご了承いただきたい・・・。

Github Actions使えばいいんちゃうの?

このビルド作業はActionsでも実際使える。
ただし、usesで他のyml資産を使えない環境だとどうだろう?

もしGithub Actionsのみで使うなら良いかもしれないが、GitLabGitサーバーとして使っている場合github.comの資産を使おうとするとちょっとややこしくなってくるみたいなので(まあそりゃそうである・・・。)今回のようにした。
実際Githubのエンタープライズ版は結構ここらへん結構厄介なんだ・・・。
Enterprise でのアクションの使用について

という訳であんま頼りにしちゃらんないなあ・・・。と思ったのでもっと頼りにならないような自分がシェルスクリプトに記述したのであった・・・。