サーバにだけ情報をおいている状況で、ネットワーク環境がない時に、必要な情報が見られずに困った経験を過去何度かしています。また、ちょっと前までは、ブラウザを使った文書の編集は億劫で、ローカルにファイルを持ってきて使い慣れているエディタで編集することが多かったです。
と、これも昔話となりつつあり、このご時世、ネットワーク環境がなくて困るという状況もそうそうある訳でもなく、ブラウザでの編集、そのプレビューでの確認機能などもよくなってきており、一昔前のように必要性を感じることはなくなりました。ただ、今でもテキストファイルの情報を一気に grep かけたくなることはたまにあり、サーバのブログ記事をローカルと sync できる方法はないかなぁと。
あるではないですか。しかも、最近使うことが多くなった Go 言語製。
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)をキーに username、password を指定しておきます。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. の作者さんでもあるんですね。
お世話になっております。