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