継続的ドキュメンテーション関連です。
README.mdなどのドキュメントを運用していると、そのドキュメントの一部を(CIなどで)自動で差し替えたいことがあります。
例えば xxx help
コマンドの出力をもって機能一覧にしているようなREADMEだと、機能が追加されるたびに xxx help
の実行結果でREADMEを差し替える必要があります。
ちょっと前に作った dirmap も出力結果をREADMEに貼っておきたい系のツールです。
そういう「文字列の差し替え」というのはsedでもある程度可能ですが、エスケープが難しかったり複数行の置換もなかなか覚えられないので専用ツールを書きました。
repin
例えば
# Hello
```console
```
みたいなMarkdownファイルがあったとして、$ echo hello world!
という文字列を入れたいとき、GNU sedだと
$ cat README.md | sed -z 's/```console.*```/```console\n$ echo hello world!\n```/'
と書けば
# Hello
```console
$ echo hello world!
```
と出力されます。
これを repin で書くと
$ repin README.md -k '```console' -k '```' -r '$ echo hello world!'
となります。多少直感的になります。
また、置換文字列を標準入力で受け取れるので、
$ repin --help | repin README.md -k '```console' -k '```'
とすれば
# Hello
```console
repin is a tool to replace strings between keyword pair.
Usage:
repin [FILE] [flags]
Flags:
-h, --help help for repin
-i, --in-place edit file in place
-k, --keyword strings keywords to use as a delimiter. If 1 keyword is specified, it will be used as the start and end delimiters; if 2 keywords are specified, they will be used as th\
e start and end delimiters, respectively.
-N, --no-newline disable appending newlines
--raw-keywords do not convert \n or \t of the entered keywords
-r, --replace string replace file path or string
-v, --version version for repin
```
と、複数行の help コマンドの出力を差し込んだMarkdownが得られます(これをGNU sedですることが私には難しかった)。
パッケージとしての利用
repinはパッケージとしての利用もできるようにしています*1。
というわけで
小さいコマンド/パッケージの紹介でした
*1:これは、 https://github.com/k1LoW/ndiag に組み込んでドキュメンテーション生成の仕組みをもう少しシンプルにしたいという思惑があるのですがまだ取りかかれていません