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
以下は上のテンプレートを使った場合の移行後の記事の例。
はじめに
Qiitaからはてなブログへ移行しました。 Qiitaとはてなブログで記事が分散するのがいやだったため、記事も移行しました。 簡単なホスティングサービスで自分のブログを立ち上げることも考えましたが、大学生の時に1年半ほどはてなでアルバイトもしていたこともあってはてなブログを選択しました。 この記事以前の記事は全てQiitaから移行してきたものです。
やりかた
1.Qiitaから記事をMarkdown形式でexport(qiitaexporter)
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)
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を使った移行の仕方)
事前に行うこと
- 対象のはてなブログの記事入力モードを 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