第2の人生の構築ログ

自分の好きなことをやりつつ、インカムもしっかりと。実現していく過程での記録など。読書、IT系、旅行、お金に関係する話などの話題。

はてなブログの記事をローカル(PC/Mac)で管理、編集する

サーバにだけ情報をおいている状況で、ネットワーク環境がない時に、必要な情報が見られずに困った経験を過去何度かしています。また、ちょっと前までは、ブラウザを使った文書の編集は億劫で、ローカルにファイルを持ってきて使い慣れているエディタで編集することが多かったです。

と、これも昔話となりつつあり、このご時世、ネットワーク環境がなくて困るという状況もそうそうある訳でもなく、ブラウザでの編集、そのプレビューでの確認機能などもよくなってきており、一昔前のように必要性を感じることはなくなりました。ただ、今でもテキストファイルの情報を一気に grep かけたくなることはたまにあり、サーバのブログ記事をローカルと sync できる方法はないかなぁと。

あるではないですか。しかも、最近使うことが多くなった Go 言語製。

github.com

motemen.hatenablog.com

brew でも入れられるようですが、リポジトリから直接とってきます。

$ go get -u github.com/motemen/blogsync

README.md には

HEADを使いたい場合は go get github.com/motemne/blogsync してください。

となっていますが、これはタイポだと思います。motemne -> motemen ですね。

設定ファイルを用意します。
ホームディレクトリ配下に .config/blogsync/config.yaml というファイルを用意して、必要な情報を記入しておきます。

以下はREADME.mdからの抜粋ですが、ブログの FQDN (以下の例ではmotemen.hatenablog.com)をキーに usernamepassword を指定しておきます。password<API KEY>のことで、[設定] -> [詳細設定] -> [AtomPub] にある API キーになります。

motemen.hatenablog.com:
  username: motemen
  password: <API KEY>
default:
  local_root: /Users/motemen/Dropbox/Blog

blogsync コマンドを叩いて記事をとってきます。

$ blogsync pull drtaka.hatenablog.com

最初に叩く時はまだ同期がとられていませんので、全ての記事をとってきます。

$ blogsync pull drtaka.hatenablog.com
       GET ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry
       GET ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1549546282
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1549546282
       GET ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1499518185
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1499518185
       GET ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1465567875
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1465567875
     fresh remote=2019-02-24 17:13:00 +0900 JST > local=0001-01-01 00:00:00 +0000 UTC
     store /Users/hoge/gd/Documents/HatenaBlog/drtaka.hatenablog.com/entry/2019/02/24/171300.md
     fresh remote=2019-02-24 13:35:26 +0900 JST > local=0001-01-01 00:00:00 +0000 UTC
     store /Users/hoge/gd/Documents/HatenaBlog/drtaka.hatenablog.com/entry/2019/02/24/132718.md
     fresh remote=2019-02-23 21:21:30 +0900 JST > local=0001-01-01 00:00:00 +0000 UTC
     store /Users/hoge/gd/Documents/HatenaBlog/drtaka.hatenablog.com/entry/2019/02/23/212130.md
...
     fresh remote=2016-06-05 18:57:22 +0900 JST > local=0001-01-01 00:00:00 +0000 UTC
     store /Users/hoge/gd/Documents/HatenaBlog/drtaka.hatenablog.com/entry/2016/06/04/235808.md

2回目以降は差分だけとなりますので、連続してコマンドを叩くと特に何もアップデートはありません。

$ blogsync pull drtaka.hatenablog.com
       GET ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry
       GET ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1549546282
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1549546282
       GET ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1499518185
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1499518185
       GET ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1465567875
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry?page=1465567875

syncですので、当然ながら双方向です。ローカルで書いた記事をサーバ側に反映することもできます。

ローカルで編集を行い、サーバに反映する場合は push を使います。

$ blogsync push drtaka.hatenablog.com/entry/2019/03/03/132950.md 
       GET ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry/17680117126986829556
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry/17680117126986829556
       PUT ---> https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry/17680117126986829556
       200 <--- https://blog.hatena.ne.jp/dr_taka_n/drtaka.hatenablog.com/atom/entry/17680117126986829556
     store /Users/hoge/gd/Documents/HatenaBlog/drtaka.hatenablog.com/entry/2019/03/04/212202.md

その他使い方はヘルプで確認できます。

$ blogsync -h
NAME:
   blogsync - A new cli application

USAGE:
   blogsync [global options] command [command options] [arguments...]

VERSION:
   0.10.1 (HEAD)

COMMANDS:
     pull     Pull entries from remote
     push     Push local entries to remote
     post     Post a new entry to remote
     list     List local blogs
     help, h  Shows a list of commands or help for one command

GLOBAL OPTIONS:
   --help, -h     show help
   --version, -v  print the version

ちなみに、この作者さん(id:motemen)は、motemen/gore: Yet another Go REPL that works nicely. Featured with line editing, code completion, and more. の作者さんでもあるんですね。

github.com

お世話になっております。