😎
QiitaからZennに雑に移行した
VSCodeで記事を書いてそのまま反映させる体験がよさそうだったので、QiitaからZennにお引越ししました。
自動でやってくれるツールとかありそうですが、量的にえいっとやっちゃえるので自前でえいっとやりました。
環境
macOS Ventura 13.0.1
Node.js 18.x
前提
このへんはやってある体です。
手順(概要)
- Qiita APIで自分の記事一覧をとってくる
- とれたJSONをスクリプトで
.md
ファイルに落とし込む - 不足部分を調整する
- push
手順(詳細)
1. Qiita APIで自分の記事一覧をとってくる
https://qiita.com/api/v2/users/:userid/items
を叩きます。
:userid
を自分のQiita IDに置き換えてください。
Qiita API において、 GET は認証は不要です。ブラウザのアドレスバーに入れるだけでもとってこれます。まぁ curl なり postman なりご自由にどうぞ。
レスポンスを qiita.json
というファイルに保存し、Zenn 用のリポジトリのルートに置いておきます。
(よみづらい)
.md
ファイルに落とし込む
2. とれたJSONをスクリプトで 以下のようなスクリプトを書いて Zenn 用のリポジトリのルートに置き、 node ./move.mjs
で実行します。
Node.js のバージョンは18系でした。
レスポンスから対応する情報をとってまとめ、 /articles 以下に 1記事ずつ放り込むスクリプトです。
move.mjs
import json from "./qiita.json" assert { type: "json" };
import fs from "node:fs/promises";
for (const item of json) {
const header = `---
title: "${item.title}"
emoji: ""
type: "tech"
topics: [${item.tags.map((t) => `\"${t.name}\"`)}]
published: false
published_at: ${item.created_at.replace("T", " ").slice(0,16)}
---
`;
const body = item.body;
fs.writeFile(`./articles/${item.id}.md`, header + "\n" + body);
}
3. 不足部分を調整する
だいたいできればいいやと思っていたので、先のスクリプトは以下に対応していないです。
- 絵文字が入らない
- タグ/トピックの仕様の違いを吸収してない
- Qiitaはタグに記号(.とか)を含められるのですが、Zennは使えません。
- 名寄せを考えるといい仕様ですね。
- なので、
Node.js
とかはnodejs
にしなきゃいかんのですが、そんなのは実装してませんよ、という。
- Qiitaはタグに記号(.とか)を含められるのですが、Zennは使えません。
- 画像とってきてない
- 独自のmarkdown拡張を置き換えてない
-
s/note/message
とか。
-
これくらい手動でやればいっかなーと思ってました。
4. push
ぷっしゅぷっしゅ
おわり
以上です。
普段遣いのエディタから直接記事が書けるのは快適ですね。
Discussion