🤖

🤖

:gijutsu_burogu:

Qiitaからはてなブログへ記事を移行する方法(qiitaexporter, blogsync)

tl;dr

$ go get -u github.com/tenntenn/qiitaexporter
$ go get -u github.com/x-motemen/blogsync

# ~/Documents など任意の場所で
$ QIITA={your-qiita-access-token} qiitaexporter -template blogsync.template # https://qiita.com/settings/applications からトークン取得
$ find posts -name "*.md" | xargs -I $ sh -c "blogsync post {your-blog-domain} < $" # domain ex: kotaroooo0-dev.hatenablog.com
// blogsync.template
---
Title: {{.Title}}
Date: {{.Date}}T00:00:00+09:00
---

**この記事は[Qiita]({{.URL}})の記事をエクスポートしたものです。内容が古くなっている可能性があります。**

{{.Body}}
# ~/.config/blogsync/config.yml
{your-blog-domain}: # ex: kotaroooo0-dev.hatenablog.com
  username: {your-username} # ex: kotaroooo0
  password: {your-api-key} # そのブログに投稿するための API キー。はてなユーザのパスワードではありません。ブログの詳細設定画面 の「APIキー」で確認できます。
default:
  local_root: {your-blogsync-root}  # ex: /Users/kotaroooo0/Documents 

以下は上のテンプレートを使った場合の移行後の記事の例。

f:id:kotaroooo0:20200601204829p:plain
移行後の記事

はじめに

Qiitaからはてなブログへ移行しました。 Qiitaとはてなブログで記事が分散するのがいやだったため、記事も移行しました。 簡単なホスティングサービスで自分のブログを立ち上げることも考えましたが、大学生の時に1年半ほどはてなでアルバイトもしていたこともあってはてなブログを選択しました。 この記事以前の記事は全てQiitaから移行してきたものです。

やりかた

1.Qiitaから記事をMarkdown形式でexport(qiitaexporter)

github.com

CLIツールを使えるようにします。 goをインストールしてない人は事前にhomebrewなどでインストールしてください。

$ go get -u github.com/tenntenn/qiitaexporter

そうすると、qiitaexporter コマンドが使えるようになります。 https://qiita.com/settings/applications からトークン取得を取得し環境変数にセットすれば自分のQiitaにアクセスできるようになります。

どのような形式でQiitaの記事をMarkdownにするかテンプレートを作成します。

// blogsync.template
---
Title: {{.Title}}
Date: {{.Date}}T00:00:00+09:00
---

**この記事は[Qiita]({{.URL}})の記事をエクスポートしたものです。内容が古くなっている可能性があります。**

{{.Body}}

テンプレートを指定してexportします。 画像はMarkdown上でURLから取得しているためexportする必要はないため、-imgignoreオプションをつけます。 ただし、export後も画像のURLはQiitaのS3上のままです。

$ QIITA={your-qiita-access-token} qiitaexporter -imgignore -template blogsync.template

すると、カレントディレクトリ以下に/postsができます。ここに記事がずらっとMarkdownとして並んでいます。 exportは完了しました。

2.Markdown形式の記事をはてなブログへimport(blogsync)

github.com

CLIツールを使えるようにします。 はてなCTOのmotemenさんのツールですね。 ghqいつもお世話になってます。

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

~/.config/blogsync/config.yaml に設定を書く。

$ vi ~/.config/blogsync/config.yaml
# ~/.config/blogsync/config.yml
{your-blog-domain}: # ex: kotaroooo0-dev.hatenablog.com
  username: {your-username} # ex: kotaroooo0
  password: {your-api-key} # そのブログに投稿するための API キー。はてなユーザのパスワードではありません。ブログの詳細設定画面 の「APIキー」で確認できます。
default:
  local_root: {your-blogsync-root}  # ex: /Users/kotaroooo0/Documents 

以下のコマンドでQiitaからexportしたMarkdownはてなブログへポストしていきます。 事前にはてなブログの設定で記事のフォーマットをMarkdownにしておく必要があります。

$ find posts -name "*.md" | xargs -I $ sh -c "blogsync post {your-blog-domain} < $" # domain ex: kotaroooo0-dev.hatenablog.com

xargs はファイル名の一覧を標準入力から受け取って、そのファイル一覧を任意のコマンドに引数として渡すコマンドです。 hydrocul.github.io ここでは、Markdownファイルのファイル名を一つ一つforループのように渡しています。 これで移行は完了です。

blogsync.templateで指定したこの記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。 の文言と共にブログ記事がポストされていると思います。 投稿日時もQiitaの投稿日時を引き継いでいます。 画像もQiitaのS3のURLを引き継いでいますが表示されます。 QiitaのMarkdownはてなブログMarkdownで若干の差異があるのでレイアウトが崩れることがあります。

追記(Dockerを使った移行の仕方)

kotaroooo0-dev.hatenablog.com

事前に行うこと

  • 対象のはてなブログの記事入力モードを Markdown に変更
  • Qiita の記事のタイトルが[Docker]Qiitaからはてなブログへ記事を移行のように[]から始まるものをだと yaml のパースの関係で上手くいかないので【】等に置換
  • 環境変数が必要であるためカレントディレクトリに.envを作成
# .env
HATENA_BLOG_DOMAIN= # ex: kotaroooo0-dev.hatenablog.com
HATENA_USER_NAME= # ex: kotaroooo0
HATENA_API_KEY= # そのブログに投稿するための API キー。はてなユーザのパスワードではありません。ブログの詳細設定画面 の「APIキー」で確認できます。
QIITA_API_KEY= # https://qiita.com/settings/applications からトークン取得

入力コマンド

$ docker run --env-file .env adachikun/qiitatohatena