はてなで Blog を書くようにしてから随分になるんですが、ようやく重い腰をあげ、Blogsync と textlint で基本的な文書構成ができる仕組みを立ち上げてみました。
$ make draft
するとエントリが下書きできるようになり、
$ make lint
すると文書構成が行われて、
$ make release
すると、Blog が投稿されるようになっています。
Blogsync
文書校正するためには、エントリの内容をローカルに配置する必要がありますが、このためにはやっぱり blogsync を使っています。
v0.9.1 で omit_domain
の対応がはいってから、特にディレクトリがすっきりしました。
草稿を書く
草稿を書くのは、blogsync post --draft
を使っています。
このコマンドは標準入力からブログエントリの内容を受け取り、それをはてなブログに「下書き」状態で保存するとともにローカルにも配置する、ということをしてくれます。 ぼくはエントリをすぐに書き出す方なので、Makefile に以下のターゲットを指定しています。
draft: echo | blogsync post --draft kiririmode.hatenablog.jp 2>&1 \ | grep store \ | awk '{print $$3}' \ | xargs -L1 emacsclient
最初の行で空の下書きエントリをはてなブログにアップロードし、2・3 行目でそのローカル上のファイルパスを特定し、
それを emacsclient
に送り込むということをしています。
これにより、make draft
を叩くと以下の内容の Emacs バッファが開き、エントリ作成を開始できます。
--- Title: ■ Date: 2018-08-20T10:16:54+09:00 URL: https://kiririmode.hatenablog.jp/entry/20180820/1534727814 EditURL: (snip) Draft: true ---
文書を校正する
文書校正には、textlint を使っています。
textlint の何が良いかというと、ぼくがはてな Blog を書くフォーマットである Markdown を直接校正できるってことにあります。 どうも AST にして解析してくれるっぽくて、
[textlint-rule-preset-japanese](https://github.com/textlint-ja/textlint-rule-preset-japanese)
というような Markdown 特有の記述に特段文句を言わないのも良いです。
細かくルールを取捨選択するのがちょっと大変かなと思ったので、
の 2 つをプリセットとして使っています。
これらを以下のような .textlintrc
で指定し、プロジェクトのディレクトリに配置して textlint
すれば、文書校正してくれるかんじになります。
{ "rules": { "preset-japanese": true, "preset-jtf-style": { "3.1.1.全角文字と半角文字の間": false, "4.3.1.丸かっこ()": false } } }
make lint
を打つと、以下のように文書校正がはじまります。
$ make lint find entry -newer blogged-time -name \*.md -print0 \ | xargs --no-run-if-empty -0 grep -L ignore-lint \ | xargs --no-run-if-empty npm run lint > hatenablog@1.0.0 lint /Users/kiririmode/hatenablog > textlint -f pretty-error "entry/20180819/1534634594.md" "entry/20180820/1534727814.md" preset-japanese/max-ten: 一つの文で"、"を3つ以上使用しています /Users/kiririmode/hatenablog/entry/20180820/1534727814.md:58:57 v 57. 58. 最初の行で、空の下書きエントリをはてなブログにアップロードし、2、3 行目でそのローカル上のファイルパスを特定し、 59. それを `emacsclient` に送り込む、ということをしています。
Makefile のターゲットは、こんなかんじになっています。
lint: find entry -newer blogged-time -name \*.md -print0 \ | xargs --no-run-if-empty -0 egrep -L '<[[:space:]]*ignore-lint[[:space:]]*>' \ | xargs --no-run-if-empty npm run lint
まず、blogged-time
というファイルの mtime は最新の Blog 投稿日時になっています。
find
でそれ以降に変更 or 新規作成されたエントリを抽出し、そのなかで ignore-lint
というメッセージを含まないエントリを対象に lint をかけます。
このあたりは、以前エントリに書きました。
あとは、文句言われた内容に合わせて修正っていったかんじ。
エントリ投稿
release: lint find entry -newer blogged-time -name \*.md -print0 \ | xargs --no-run-if-empty -0 -L 1 blogsync push touch -t $(shell date +%Y%m%d%H%M.%S) blogged-time
エントリ投稿はこんなかんじで、lint かけたあとで、投稿する形になっています。
成功したら、touch
で blogged-time
の mtime を変更します。
文書校正を運用しはじめての感想
自分の文書の癖に明示的に気付けるのがすごく大きかったです。 ぼくはどうも一文が長くなりがちで、句点も多用しがちだったので、そのあたりを修正しないとエントリ投稿ができなくなりました。 あとは、同じ助詞が 1 文に複数あるとか、ケアレスミスに気付けるのも良い。 機械に任せることができると楽で良いです。