Claude Code を使って、Substack のバックアップ(画像、動画、音声も含め)を実行する方法
コードは一行も書かず、適切に指示をしていくだけで完了します。画像、動画のダウンロードにも対応。
Substackを色々と頑張ってみたけども、やっぱり方向転換をしよう!と考え直すこともあります。あるテーマで活動してみたけど、やっぱり違う(自分の強み、楽しさと違ったなど)ということがあります。
Substack の公式ガイドでも、成功したSubstack著者は「作り直す」ことをしています。作り直すとしても、せっかく作ったものをバックアップしておきたいですよね。
そのための方法を解説します。
なお、Claude Code の恐るべく(頼もしい)一面に触れることもできました。是非、どうぞ!
(1) 記事をエクスポートする
パブリケーションのダッシュボードを開き、Settings を開き、サイドメニューをスクロールすると「Advancedセクション」があります。ここに、インポート・エクスポートがあります。
ここで「データのエクスポート」をします。
(2) 展開して作業フォルダとする
zip圧縮ファイルでダウンロードされるので、適切なフォルダで解凍して、適切な名前に変更します。私は、macOSなので、ダウンロードフォルダにダウンロードされます。ダウンロードフォルダで解凍した後、私の場合は「Workspace」フォルダに移動し、後で分かるように名前を付けておきます。
以下の例だと、「toieelab-course-partner-site」フォルダとして名付けています。
このフォルダをClaude Codeで開いて、バックアップ作業を行います。
(3) バックアップファイルを覗いてみる
Claude Codeにお願いする前に、どんな状態なのかを把握しておくと良いです。ざっと以下のようになっています。
posts フォルダ
email_list.XXXX.csv ファイル
posts.csv ファイル
重要なのは、一度で良いから中は見ておくことです。posts.csv は、投稿一覧を表しています。投稿内容は入っていません。投稿内容は、postsディレクトリの中にあるファイルです。よくみるとposts.csv の中では「xxxxxxx.URLを表す文字」と、postsディレクトリのファイル名に共通点があるのがわかります。
具体的には、posts.csv の post_id「xxxxx.cwm 」 xxxx は、postsディレクトリの xxxx というファイルと対応していること。
他のにも、postsディレクトリは、 xxxx の先頭が同じものが、 open, deliver, html がある。中を見てみるとメールアドレスが書いてあります。つまり、これは open ニュースレターを開いた人、deliver が送信先を表していることがわかります。
ざっとで良いので、フォルダ構成を理解しておくと、今後の作業で役立ちます。
(4) Claude Code を開く
最近は、Claude Desktop App が非常に優秀で、使いやすいです。Claude Desktop App でローカル環境で実行を選んでおいて、開きます。
※ なお、画像のダウンロードなどは、pythonスクリプトを書いて実行します。uv というツールで、Pythonコードを書いて、実行できる環境を作っておきます。
(5) 画像のダウンロードする
Substackのバックアップには、画像が含まれていません。まずは、画像をダウロードします。画像のURLは、バックアップのhtmlファイルの中にあるのですが、リンクとして格納されているだけです。
AIを使う時は、できるだけ具体的に、何をやったら良いかはっきり理解できるような指示をすることですが、最近のClaude は、かなり賢くなったので「具体的に、目的をはっきり伝える」だけで、どうやればいいかは、勝手に考えてくれます。
それを試すべく、以下のようなプロンプトを実行しました。実行時は、いきなり実行ではなく「プランモード」を選んで実行しました。
Substackのバックアップをしたのですが、画像ファイルがダウンロードされていません。
画像ファイルをダウンロードして、さらに、htmlファイルのURLも書き換えてください。
なお、ファイル名は、投稿IDを接頭語にしてください。実際に行うと分かるのですが、「ファイル構造」をチェックし、それぞれのファイルを読み取り、どんなルールになっているかを把握。そして、どんな順で仕事をすれば良いかを考えてくれます。
そして、 download_image.csv というプログラムを生成し、実行をしてくれました。見事、画像もダウンロードされ、URLも書き換わるという驚きの結果になりました。
(6) 動画のダウンロード
同様に「動画」もダウンロードします。動画投稿をしたものを見分ける方法がないか?と post.csv をチェックしたところ、typeという項目が「podcast」になっていることに気づきました。
しかしながら、「動画のURL」は見つけられずでした。編集画面をひらけば、ダウンロード可能だったので、「Claude in Chromeで作業をさせる」しかないと思って、以下のような指示を出しました。
ここで、驚きの結果になったので、以下、説明します。
まず、指示を書きました。ポイントは「みるべき場所」と状況説明です。
動画のバックアップをしてください。
@posts.csv の中で、type が podcast になっているものは、動画の投稿です。
投稿された動画をダウンロードしたいのですが、バックアップデータから動画のダウンロードURLは推測できません。
そこで、次のようにすることを考えています。
例えば、post_id が、167882374.202579 なら、投稿編集ページは、次のようになります。
https://toieepartner.substack.com/publish/post/167882374
このページにアクセスしたら、動画が上部に埋め込まれています。
そこに 「(...) アイコン」があり、クリックすると「Download video」をクリックすることで、ダウンロードできます。
そこで、Google Chrome MCPを操作して、ファイルをダウンロードして、
posts/videos/ に、post_id を使って保存するようにする。
この計画をテストして、可能かチェックしてください。このような指示をしたら、ClaudeがGoogle Chromeを立ち上げて「ログインしてください」と指示をしてきたので、ログインしました。そして、以下のように指示をしました。
ログインできました。テストを再開してください。ここからが、すごいことが起こりました。
何やら、いろんなことを実行し、調査をしています。私は、ぼーっと眺めていましたら、最終的には、「もっといい方法」を探し出し、提案をしてきました。
提案は、以下のとおりです。
テスト結果まとめ:計画は完全に実現可能です。
判明した内容:
┌───────────────────────┬──────┐
│ 項目 │ 結果 │
├───────────────────────┼──────┤
│ 動画あり (podcast) │ 17本 │
├───────────────────────┼──────┤
│ 動画なし (音声のみ等) │ 5本 │
├───────────────────────┼──────┤
│ レート制限で未確認 │ 4本 │
└───────────────────────┴──────┘
自動化の流れ:
1. ブラウザのJS で /api/v1/video/upload/{assetId}/src を呼び出し → 署名付きMP4 URL取得
2. URLをファイルに書き出す
3. curl でダウンロード → posts/videos/{post_id}.mp4 に保存
注意点:
- 署名付きトークンの有効期限は 約24時間
- レート制限されたURLは少し待ってから再取得が必要
- ブラウザのSubstackセッションが有効な間のみURL取得可能
全26本のpodcast投稿をダウンロードしますか?驚きました。ソースコードを解析し、もっと良い方法(ブラウザ操作ではなく、Javascriptを使ったAPIの呼び出し)を考え出してくれました。
「はい、お願いします!」と頼んだら、あっという間に動画がダウンロードされました。本当に驚きです。
さらに、以下のように指示することで、音声もバックアップできました。
音声もダウンロードしてください。本当に、驚異的ですよね。
重要なポイント
(1) 使い捨てコードで、業務効率化
今回、Claude Code のバックアップをSubstackを使って行いました。もし、この作業を手動で行っていたら、とんでもない時間がかかっていたでしょう。
Claude Code にコードを書いてもらって、プログラムを実行することで、圧倒的に素早く、画像のバックアップ、動画のバックアップができました。
ポイントは、
「プログラムを書くことで、業務効率化ができる」ことを知ること
そのプログラムは、自分で書くのではなく「Claude Codeに書いてもらう」こと
この2つです。
(3) やり方は、Claude Code に任せる
画像のダウンロードは、イージーなタスクです。どのように作業すれば良いか、ロジック自体は、私でも理解できています。Claude Code がなくても、私が多少知識がある「PHP言語」で、なんとか解決できたかもしれません。
一方で、動画・音声投稿のダウンロードは、私では思いつかなかった方法です。ブラウザ経由で、管理画面のプログラムが、どう作られているかをチェックし、API構造を読み解きました。
ログイン済みの状態で機能するプログラムを書いて、一気にダウンロードを実現しました。手動、あるいは、Claude in Chromeで、クリック動作をさせていたら、1時間か2時間以上かかっていたでしょう。
それを「プログラムで解決できる(もっといい方法)」を見つけてくれました。このような経験から、「Claude Codeにやり方を任せてみる」「人間が行うのは、結果の定義」とすると、効果的な場面があること言うことです。
もし、あなたがSubstackを運用しているなら、いつかのために「画像を含めたバックアップの経験」をしておくと良いかもしれません。また、Claude Codeを使う練習も兼ねて、経験すると良いかもしれません。
参考になれば幸いです!









