progrhyme's tech blog

主にIT関連の技術メモ

はてなブログのHTTPS化とblogsyncによる一括編集

このブログでHTTPS配信を設定したのは3月のことでした。

このブログは開設から日が浅く、記事数も少ないので特に記事内容のリンクを修正するといった手間はほとんど発生しませんでした。

…が、つい先日、軽い気持ちで管理者権限を持っている別のはてなブログHTTPS化したところ、mixed contentsが大量に発生し、スライドなどの埋込みコンテンツが真っ白になるという事態になってしまいました。
最近の記事は手作業でちまちまとリンクを修正したのですが、合計で300以上の記事数が有り、さすがにやってられんということで自動化できる手段がないかな…と調べました。

そこで思い出したのが、 @kiririmode さんが書いていた下の記事です。

blogsync というツールを使うと、はてなブログの記事を一括で編集操作できるようです。
というわけで、やってみました。

blogsyncのインストール

以下、動作環境はUnix系OSの前提で書きます。

blogsyncはGo言語で書かれたCLIツールです。
下のコマンドでインストールできます。

go get github.com/motemen/blogsync

設定ファイルの用意

READMEの通りですが、 $HOME/.config/blogsync/config.yaml という設定ファイルを用意します。
このブログをサンプルとすると、下のような内容になります:

tech-progrhyme.hatenablog.com:
  username: progrhyme
  password: <APIキー>
default:
  local_root: /home/progrhyme/my/blog

ここで、 <APIキー> は、はてなブログの詳細設定画面から取得することができます。

全エントリをはてなブログからダウンロード

blogsync pull tech-progrhyme.hatenablog.com

これにより、設定ファイルの local_root で指定したディレクトリ配下に記事のテキストがダウンロードされます。
下のように tech-progrhyme.hatenablog.com/entry/${日付}/${記事名 or タイムスタンプ}.md というファイル名で格納されます。*1

/home/progrhyme/my/blog
└── tech-progrhyme.hatenablog.com
    └── entry
        ├── 20170314
        │   └── 1489417212.md
        ├── 20170331
        │   └── 1490886079.md
        ├── 20170521
        │   └── 1495292715.md
        :

記事のリンクを一括置換

ここではシェルのワンライナーを使って一括置換しました。*2

git grep -l http://tech-progrhyme | xargs perl -pi -e 's|http://tech-progrhyme|https://tech-progrhyme|g'

他に、いくつかのドメインについても、以下の条件を満たすものは同様に一括置換しました:

  • http://https://機械的に置換して問題ないもの
  • はてなブログのembedリンクを使って埋め込んでいたもの(読み込めずに真っ白になってしまうので)

ワンライナーとしては下のようになりました:

for domain in www.slideshare.net qiita.com togetter.com connpass.com; do
  echo $domain
  git grep -l http://$domain | xargs perl -pi -e "s|http://${domain}|https://${domain}|g"
done

更新したコンテンツをアップロード

これらの記事テキストはGitで管理することにしたので、以下のようにして差分のあるファイルをblogsyncコマンドでpushしました:

git diff origin/master --name-only | xargs -t -n1 blogsync push

以上で、作業は完了です。
ブログのページにアクセスすると、ちゃんと各リンクのURLが更新されていました。

終わりに

調べてみて「これなら簡単にできそうだな」と思ったのですが、やってみると実際に簡単でした。
こういったツールやAPIが整っていて良かったです。

もし、はてなブログHTTPS化をまだやっていなくて、このような記事内容の一括編集が必要な方がいたら、blogsyncが活用できそうです。
ご参考まで。

参考

脚注

*1:ファイル名が*.mdなのはMarkdownで編集しているので

*2:実際は別のドメインですが、説明の流れで http://tech-progrhyme.hatenablog.com を対象としています。