SORE, OINTOYADE.

You love money? I love money.

blogsyncではてなブログをMarkdownで書いてGithubで管理する

f:id:kenixi:20170315020135p:plain

僕は普段レンタルサーバーを借りてWordpressのブログを運営してるんですが、なんだかんだWordpressって面倒くさいじゃないですか。セキュリティのこともあるし、仮にバズった時とか安ーいレンタルサーバーじゃ捌ききれないし。

まぁ特にセキュリティですよね。Wordpressっていっつもなんか脆弱性が見つかってる気がする。知人も一回やられたって言ってたな。こえーこえー。

で、ほんと、ただ書くだけならなんかのプラットフォームに乗っかっちゃった方が全然いいなぁと常日頃思ってて。やる気に満ち溢れている時は「絶対Wordpress!!」って思うんだけど、デザイン設定もそうだけど、やれSEOだ、やれサーバーの管理だって、ぶっちゃけ「書くこと以外」のコストがすげー高い。

ということで、はてなに戻ってきた。

僕がブログに求める条件

はてなに戻ってきたのは理由がある。表題に書いたblogsyncがなければ僕ははてなでまた書こうとは思わなかった。

僕がブログに求める条件は、以下。少ないようで、意外とこの条件を全て満たせるものって、ない。

  • Markdownで記事が書けること
  • エディタとの連携がし易いこと
  • メンテンナスフリーで書けること
  • Markdownファイルで記事が管理できること ← NEW!

唯一全部満たせるのがGithubPagesかなーと思ってて、技術ブログは実際にGithubPages使って書いてるんですが、なんとですね。はてなでもですね、これが満たせると。

だから僕ははてなに戻ってきた。もちろんはてなブログがなくなった時のリスク、はてなブログからBANされるリスクもあるけど、最悪、独自ドメインとパーマリンクを設定してれば、はてなが死んだとしてもなんとかなるだろうというのが所感。

どうやるか

「はてなってWEBから投稿するのが普通じゃないの?てか他の方法ってあるの?」って思ってる人は意外と多い。でもはてなはAtomPubがあるから、外部から投稿できる。

といっても、これを生のまま使うんだったら正直全然メリットはない。でも先人がちゃんと素晴らしいツールを作ってくれてる。インターネットって素晴らしい。詳しくは以下の記事を参照。

blogsync ではてなブログのエントリをローカルと同期する - 詩と創作・思索のひろば

中の人が作ってくれた、AtomPubをラッパーしたGo実装のツールです。Go書いたことないから、ソース見てもよくわからなかったよ、ははは。

以下のコマンドがあって、ブログを書くには全く困らない感じ。

  • pull:ローカルに最新版を取り込む
  • push:記事を更新する
  • post:記事を投稿する

ただ普段使いするにはちょっと使いにくなと思うことがあって、僕はpostをいい感じにラッパーするシェルを書いて、とりあえず一時しのぎしている。

記事を作成して投稿するフロー

具体的には、以下のフローでこのブログを書いている。GithubPagesで書くような感覚で記事を書けるのはいい。

  1. シェルに引数を渡してファイルを作成する(この時点で下書き状態で投稿されている)
  2. Markdownで記事を書く
  3. pushコマンドで投稿する

以上。簡単でしょ?

書いたファイルはGit管理下に置いておけばGithubでもBitbucketでも好きなGitホスティングサービスで管理すればよい。プライベートなブログだし、僕はBitbucketに入れるつもり。

参考:記事作成シェル

改善の余地ありですが、とりあえず以下のシェルで新規記事(ファイル)を作っています。

#!/bin/bash
set -u

usage() {
  echo "Usage : $0 [title_name]" 1>&2
}

main () {
  TITLE="$1"
  blogsync post ointo.hatenablog.com --draft --custom-path=`date +%Y`/`date +%m`/`date +%d`/$1
}
main "$@" << EOF | egrep -o "\S*.md" | xargs gsed -i -e '3i Category:\n- '

Macな人はsedじゃなくてgsedを使いましょう。Windowsな人は知らないごめん。

今後改善したいところ

今後は以下のフローで運用したいと思っています。

  • 下書きから公開状態にするシェルの作成(同時に作成日も更新)
  • masterにpushしたらCircleCIでフックしてはてなブログに投稿

まぁ、Hugoライクに使えるようにしたいって感じですね。ローカルプレビューまで出来れば最高なんだけどなぁ。まぁこれも頑張れば出来なくはない気がするけど。簡易的にやるなら、単純にMarkdownのパーサを入れてデザインだけ整える感じ?うーん、若干面倒くさい…笑

非エンジニアにもオススメ

僕はエンジニアなので、お気に入りのエディタもあるし、Git、Markdownの知識に困ることはない。でも普通の人って、WEB上で書いて投稿してる。

もし、今回紹介したやり方を「知らない」だけだったら、絶対にこれを機に導入したほうがいいし、仮に「知ってるけどよくわからないしやらない」だけだったら、試しに導入してみて、その簡単さ、便利さに触れてほしい。

GitやらMarkdownやらは、書籍がゴロゴロ転がってるし、最悪ネット上の知識だけでもイケる。個人的には体系的に学ぶなら本読んだほうがいいとは思ってるけど、別に「使う」だけならネットでもいい。本質的に知りたくなったら、本を買うべきかな。

Gitならこの本がオススメ。

Markdownは正直本買うまでもないですね笑

おわりに

これまではてなブログはエディタで書いて、WEBでコピペしてって感じで書いていましたが、blogsyncを使えばMarkdownで管理、ターミナルから投稿、修正ができます。これでだいぶいい感じにブログ更新が捗りますね。やっぱファイルで管理できるってのは偉大やで。

そいぎんた!