本日も乙

ただの自己満足な備忘録。

はてなBlogの記事をCLIで操作できるblogsyncを使ってみた

先日、ブログ執筆環境に関する記事を書いたところ、blogsyncというツールがあることを教えていただきました。

twitter.com

これをつかって早速この記事を上げてみました。

実行環境

Ubuntu Server 20.04 LTS(WSL2)

インストール

リリースページからダウンロードして適当なパスにバイナリファイルを置くだけです。

$ wget https://github.com/x-motemen/blogsync/releases/download/v0.12.0/blogsync_v0.12.0_linux_amd64.tar.gz
$ tar zxvf blogsync_v0.12.0_linux_amd64.tar.gz && rm blogsync_v0.12.0_linux_amd64.tar.gz
$ sudo mv blogsync /usr/local/bin
$ blogsync --version
blogsync version 0.12.0 (1f73dd9)

設定ファイルを ~/.config/blogsync/config.yaml に書きます。各項目の内容はREADMEを参照してください。

ohsawa0515.hatenablog.com:
  username: <ユーザー名>
  password: <APIキー>
default:
  local_root: /home/ohsawa/dev/src/github.com/ohsawa0515/blog

blogsync pullを実行すると、はてなブログに上がっているすべての記事がダウンロードされます。

$ blogsync pull ohsawa0515.hatenablog.com

URLパスに従ってファイルパスもいい感じに切ってくれますが、私のブログ記事の場合サフィックスに/がついているため、<記事名>/.md という構造になってしまいました・・・。

$ tree -a ohsawa0515.hatenablog.com
ohsawa0515.hatenablog.com
├── 2012
│   ├── 05
│   │   ├── root_passwd
│   │   │   └── .md
│   │   ├── root_ssh
│   │   │   └── .md
│   │   ├── ssh_port
│   │   │   └── .md
│   │   ├── user_ad
│   │   │   └── .md
│   │   ├── user_sudo
│   │   │   └── .md
│   │   └── yum-update
│   │       └── .md
│   ├── 06
│   │   └── path
│   │       └── .md
...

記事の投稿

ファイルフォーマットにしたがって編集すれば良いのですが、DateEditURL といったパラメータははてなブログにエントリしないと指定できないので、blogsync postコマンドで一旦下書きとして投稿することにします*1

以下のようなブログ記事となるmarkdownファイルを用意します。

---
Title: タイトルだよ
Category:
- カテゴリだよ
---

本文だよ

素直にblogsync postコマンドを実行してもいいのですが、以下のようなMakefileを用意することで少しだけ楽にしました。

DOMAIN = "ohsawa0515.hatenablog.com"

post:
    $(eval BLOG_PATH := $(basename $(shell echo $(FILE_PATH) | sed -e "s#.*$(DOMAIN)/##")))
    blogsync post --draft --custom-path $(BLOG_PATH) $(DOMAIN) < $(FILE_PATH)
$ make post FILE_PATH=ohsawa0515.hatenablog.com/2022/07/sample-title.md

実行後、はてなブログに下書きとして保存され、この記事ファイルが以下のように編集されます。

---
Title: タイトルだよ
Category:
- カテゴリだよ
Date: 2006-01-02T15:04:05-07:00
URL: https://blog.jicoman.info/2022/07/sample-title
EditURL: https://blog.hatena.ne.jp/ohsawa0515/ohsawa0515.hatenablog.com/atom/entry/xxxxxxxxxxxxxxxxx
Draft: true
CustomPath: 2022/07/sample-title
---

記事が完成したら、Draft: true部分を削除してblogsync pushすれば投稿されます。私の場合、以下のようなMakefileを用意することでmake pushするだけで変更したファイルだけがはてなブログに反映されるようにしました。

DOMAIN = "ohsawa0515.hatenablog.com"

push:
    git diff origin/master --name-only   \
    | grep "$(DOMAIN)"                   \
    | xargs -t -n1 blogsync push

最後に

コマンド一つではてなブログに反映できるようになったのは便利ですね。今後はGitHub Actionsを使ってGitHubにgit pushしたときに自動で反映されるようにしてみます。

*1:ひょっとしたら別の方法があるかもしれないのでコメントいただけると嬉しいです