Qiitaには公式の Qiita API v2 があり、アクセストークンを使って「自分の投稿記事すべて」を取得できます。
Qiitaの投稿記事のバックアップのため Markdownをひとつひとつ取得するのま手間がかかるので、Claude Code に「私のQitaのBlogをMarkdownで全て取得する方法を教えてください。」とお願いして一括取得スクリプトを作成してもらいました。

Claude CodeとClaudeは別々のプロダクトです。
Claudeは、claude.aiやAPIを通じて使える汎用AIアシスタントです。会話、文章作成、分析、コーディングなど幅広いタスクに対応しています。
Claude Codeは、コーディング作業に特化したコマンドラインツール(CLI)です。ターミナルから直接使えるエージェント型のツールで、コードベース全体の理解・編集・デバッグ・テスト実行などを自律的に行うことができます。
ということで、今回いま流行りの VS Codeをベースにした次世代のコードエディタ Cursor上で Claude Codeを実行しています。
■ 一括取得スクリプト内容
このスクリプトでは GET /api/v2/authenticated_user/items を呼び出し、レスポンスJSONに含まれる body(Markdown本文)を1記事=1ファイルで保存しています。
#!/bin/bash
# Qiita 公開記事 Markdown 一括取得スクリプト
# 使い方: QIITA_TOKEN=your_token ./fetch_qiita_articles.sh
set -euo pipefail
TOKEN="${QIITA_TOKEN:-}"
OUTPUT_DIR="${OUTPUT_DIR:-qiita_articles}"
PER_PAGE=100
if [ -z "$TOKEN" ]; then
echo "エラー: QIITA_TOKEN 環境変数を設定してください"
echo "例: QIITA_TOKEN=xxxxxxxx ./fetch_qiita_articles.sh"
exit 1
fi
mkdir -p "$OUTPUT_DIR"
echo "記事を取得中..."
page=1
total=0
while true; do
tmp_file=$(mktemp)
http_code=$(curl -s -o "$tmp_file" -w "%{http_code}" \
-H "Authorization: Bearer $TOKEN" \
"https://qiita.com/api/v2/authenticated_user/items?page=${page}&per_page=${PER_PAGE}")
body=$(cat "$tmp_file")
rm -f "$tmp_file"
if [ "$http_code" != "200" ]; then
echo "APIエラー: HTTP $http_code"
echo "$body"
exit 1
fi
count=$(echo "$body" | python3 -c "import sys,json; data=json.load(sys.stdin); print(len(data))")
if [ "$count" -eq 0 ]; then
break
fi
# 各記事をファイルに保存
echo "$body" | python3 -c "
import sys, json, re, os
data = json.load(sys.stdin)
output_dir = os.environ.get('OUTPUT_DIR', 'qiita_articles')
for item in data:
item_id = item['id']
title = item['title']
body_md = item['body']
created = item['created_at'][:10]
tags = ', '.join(t['name'] for t in item['tags'])
likes = item['likes_count']
url = item['url']
# ファイル名に使えない文字を除去
safe_title = re.sub(r'[\\\\/:*?\"<>|]', '_', title)
filename = f'{created}_{safe_title}.md'
filepath = os.path.join(output_dir, filename)
# フロントマターを付けて保存
content = f'''---
id: {item_id}
title: {title}
tags: {tags}
created: {created}
likes: {likes}
url: {url}
---
{body_md}
'''
with open(filepath, 'w', encoding='utf-8') as f:
f.write(content)
print(f' 保存: {filename}')
"
total=$((total + count))
echo "ページ $page: $count 件取得 (合計: $total 件)"
if [ "$count" -lt "$PER_PAGE" ]; then
break
fi
page=$((page + 1))
sleep 0.5 # レートリミット対策
done
echo ""
echo "完了! $total 件の記事を '$OUTPUT_DIR/' に保存しました。"
この fetch_qiita_articles.sh は、Qiita API v2 にアクセストークンで認証しつつ、自分の投稿一覧をページングで取得してローカルへ保存するバックアップ用スクリプトです。
- `QIITA_TOKEN` を環境変数から受け取り、未設定ならエラー終了します(安全に早期失敗)。
- `GET /api/v2/authenticated_user/items?page=...&per_page=...` を `curl` で呼び出し、`Authorization: Bearer <token>` ヘッダで認証します。
- レスポンス(JSON配列)の件数を数え、0件になったら「全ページ取得完了」としてループを終了します。
- 各記事について、JSONから `title` / `body(Markdown)` / `created_at` / `tags` / `likes_count` / `url` などを取り出し、ファイル名を作って `qiita_articles/` に1記事=1ファイルで保存します。
- 取得負荷を下げるため、ページごとに短い sleep を入れています(レートリミット対策)。
・ 使い方
- アクセストークンを取得
- 実行: QIITA_TOKEN=あなたのトークン ./fetch_qiita_articles.sh
- 出力先を変えたい場合: QIITA_TOKEN=xxx OUTPUT_DIR=my_posts ./fetch_qiita_articles.sh
・ 出力形式
各記事は qiita_articles/ フォルダに以下の形式で保存されます:
qiita_articles/
2024-01-15_記事タイトル.md
2024-03-20_別の記事.md
...
各ファイルの先頭にはメタ情報(ID、タグ、いいね数、URL)がフロントマターとして付きます。
Python3 が必要です
■ 実行方法
● アクセストークン取得
1) Qiita 設定画面
Qiita → 設定 → アプリケーション → 「新しいトークンを発行する」をクリック
2) アクセストークンの発行画面
スコープは、[read_qiita 権限]へチェックし、[発行する]をクリック

3) アクセストークン確認
発行した個人用アクセストークンを保存してください。この文字列は再表示できません
● 一括取得スクリプト実行
QIITA_TOKEN=あなたのトークン ./fetch_qiita_articles.sh
・ 実行例
1) 実行ディレクトリ確認
(venv) shirok@~ % ls -l
-rwxr-xr-x@ 1 shirok staff 2256 Feb 22 21:17 fetch_qiita_articles.sh
2) スクリプト実行
(venv) shirok@~ % QIITA_TOKEN=<あなたのアクセストークン> ./fetch_qiita_articles.sh
記事を取得中...
保存: 2026-02-20_Oracle Database@AWS で Multiple ODB Peerings してみてみた.md
保存: 2026-02-16_Windows の WSLで netperf をインストールして TCP, UDP レイテンシ(遅延)をマイクロ秒(μs)単位で測定してみてみた.md
保存: 2026-02-04_iPhone に iPerf3 を入れて Oracle Cloud 仮想マシンへインターネット帯域測定してみてみた.md
・・・
ページ 3: 39 件取得 (合計: 239 件)
完了! 239 件の記事を 'qiita_articles/' に保存しました。
3) 出力ディレクトリ確認
(venv) shiro@kurama Claude % ls -l
-rwxr-xr-x@ 1 shirok staff 2256 Feb 22 21:17 fetch_qiita_articles.sh
drwxr-xr-x@ 2 shirok staff 64 Feb 22 21:15 qiita_articles
4) 出力ファイル確認
(venv) shiro@kurama Claude % ls -l ./qiita_articles
total 13992
-rw-r--r--@ 1 shirok staff 5195 Feb 22 21:18 2018-07-08_unixODBCをインストールしてみた.md
-rw-r--r--@ 1 shirok staff 10295 Feb 22 21:18 2018-07-09_Oracle Cloud で DPDKをインストールしてみた.md
-rw-r--r--@ 1 shirok staff 19789 Feb 22 21:18 2018-07-09_Oracle Cloud:Oracle Cloud と AWS を IPSec VPN(Libreswan)でマルチクラウド接続してみてみた.md
・・・
これで、自分のQiita記事を Markdown としてローカルに一括バックアップできました。
あとはこのフォルダを Git 管理したり、別サービス(ブログ/Notion/Obsidian等)に移植したりすると「資産化」できます。
※トークンは秘密情報なので、公開・ログ・スクショ・コマンド履歴への残りに注意してください(本記事中のトークン文字列はダミーです)。
■ 参考
・ Qiita API・スクレイピングについて
・ Qiita APIのドキュメント
・ アクセストークン
・ Cursor
・ Claude Code の概要とインストール

