冒頭:Playwrightで詰まった全ての人へ

「競合のこの記事、Claude Codeに読ませて要約してもらいたいだけなのに」——そう思ってスクレイピング(= Webページから情報を自動で取ってくる作業)に手を出した瞬間、多くの人はこう気づく。

  • Playwright / Puppeteer(= ブラウザを裏で動かす自動化ツール)の環境構築が重い
  • サイトごとにHTMLの構造が違うのでセレクタ(= 取りたい部分の住所指定)が壊れる
  • JavaScriptで後から描画されるページは単純なfetchでは取れない

あるニッチメディアをひとりで運営している方は、この全てを捨てて 「1行のcurl」 に置き換えた。使ったのは Jina Reader API というサービスと、Claude Code。結果、競合リサーチにかけていた週10時間が週1時間になったという。

本記事では、そのパイプライン(= 処理の流れ)を6つのレイヤーに分けて解説する。非エンジニアの方でも、最後まで読めば「自分のメディアにも組み込めそう」と思えるはずだ。

FIGURE:concept: 6レイヤー全体像

Jina Reader × Claude Code パイプラインの6レイヤー

図: Jina Reader × Claude Code パイプラインの6レイヤー

全体像はこうなっている。

  1. 取得層: Jina Reader API が任意のURLをMarkdown化
  2. 呼び出し層: Claude Code が curl または fetch で叩く
  3. 並列層: 複数URLを同時に処理する小さなシェルスクリプト
  4. 分析層: 返ってきたMarkdownをClaudeが読んで要約・分類
  5. 保存層: 結果をローカルのファイル or SQLite(= 軽量なデータベース。Excelに近い感覚)に保存
  6. 運用層: cron(= 定時実行の仕組み。目覚まし時計のようなもの)で毎朝自動実行

ひとつずつ見ていこう。


レイヤー1: 取得層 — Jina Reader というズルい発明

Jina Reader API は、以下のURLにGETリクエスト(= Webページを見に行く動作)を送るだけで動く。

https://r.jina.ai/https://example.com/article

たったこれだけで、JavaScriptで描画された後の綺麗なMarkdownが返ってくる。ヘッドレスブラウザ(= 画面を表示しない裏方ブラウザ)は一切不要。

読めなくても大丈夫。要点はこうです:「取りたいページのURLの前に https://r.jina.ai/ を付けるだけで、そのページがAIの読みやすい形で返ってくる」。それだけ。

料金は無料枠があり、本格運用でも 月$9(約1,350円)から。ひとりメディアなら有料プランでも十分元が取れる。


レイヤー2: 呼び出し層 — Claude Codeから1行で叩く

Claude Code(= ターミナルで動くAIアシスタント)に、こうお願いするだけで済む。

curl https://r.jina.ai/https://example.com/article > article.md

読めなくても大丈夫。要点はこうです:「Claude Codeに『このURLをJina Reader経由で取って、article.md に保存して』と日本語で頼めば、上のコマンドを自動生成して実行してくれる」。

PythonもNode.jsも不要。Macに最初から入っている curl(= ファイルを取ってくる標準ツール)だけで完結する。


レイヤー3: 並列層 — 100記事を3分で取る

1記事ずつ取っていては遅い。そこで並列実行(= 複数を同時に走らせる)する。xargs というツール(= 並べたリストを順に処理する係)を使えば、10行未満のスクリプトで数十URLを同時に取得できる。

比喩で言うと:レジが1台しかないスーパーから、レジ10台のスーパーに変わるイメージ。待ち行列が一気に消える。

実際の運営者は「朝の6時に競合30サイトのRSS(= 更新通知の仕組み)から新着URLを集め、Jina Readerで並列取得、Claudeで要約、業務日報のようにMarkdownにまとめる」ところまでを自動化している。所要時間は5分以内。


FIGURE:flow: 毎朝の自動実行フロー

cronによる毎朝6時の自動実行パイプライン

図: cronによる毎朝6時の自動実行パイプライン

時系列にするとこうなる。

  • 06:00 cron が起動(目覚まし時計が鳴る)
  • 06:01 RSSから新着URL一覧を取得
  • 06:02 Jina Readerに並列リクエスト
  • 06:04 Claude Codeが各記事を要約・分類・スコアリング
  • 06:05 結果を digest/YYYY-MM-DD.md に保存
  • 06:06 完了通知をSlackへ

この流れは一度組んでしまえば、あとは勝手に動き続ける。「ひとり編集部」に最も足りないのは時間であり、Jina Readerはその時間を取り戻す道具だ。


レイヤー4: 分析層 — Claudeが読めば終わり

Markdownになったコンテンツは、Claude Codeにとって「最も得意な入力形式」だ。HTMLタグのノイズがなく、見出し・本文・リストが整理されているので、要約・分類・競合比較の精度が跳ね上がる。

運営者はこう使っている:

  • 「この30記事のうち、自分のメディアでまだ扱っていないテーマを3つ挙げて」
  • 「各記事のフックの書き出し方だけ抽出して一覧にして」
  • 「競合が強調しているキーワード上位20個を出して」

Playwrightで消耗していた時間が、全て「問いを立てる時間」に変わる。


レイヤー5: 保存層 — 軽くていいならSQLiteで十分

取得したMarkdownと要約結果は、SQLite(= ファイル1個で完結するミニDB)に入れておけば検索・再利用が楽になる。MySQLやPostgreSQLのような本格DBは不要。

比喩で言うと:Excelファイル1個をデータベースとして使う感覚。バックアップも「そのファイルをコピーするだけ」。


レイヤー6: 運用層 — エラーハンドリングとキャッシュ

本番運用で必ずぶつかる2つの壁がある。

  1. 失敗するURLがある: タイムアウトや403エラー
  2. 同じページを何度も取ってしまう: 料金と時間の無駄

解決策はシンプルで、失敗URLは failed.txt に退避して翌日再試行、成功したURLはハッシュをキーにローカルキャッシュ(= 一度取ったものを覚えておく仕組み)に保存する。このパターン一式は特典zipに入れてある。


FIGURE:comparison: Playwright運用 vs Jina Reader運用

Playwright運用 vs Jina Reader運用

図: Playwright運用 vs Jina Reader運用

観点 Playwright Jina Reader
環境構築 Node + ブラウザバイナリ curl だけ
セレクタ保守 サイトごとに必要 不要(Markdownで返る)
JS描画 対応(重い) 対応(軽い)
並列実行 メモリを食う HTTPなので軽い
料金 サーバー代 月$9〜
学習コスト ほぼゼロ

個人運営者にとって、この差は決定的だ。


エンジニアじゃない方へのメッセージ

ここまで読んで「やっぱり難しそう」と感じた方へ。

実は、この仕組みで一番大事なのは 「Claude Codeに日本語で頼むこと」 だけだ。コードを書く必要はない。

「Jina Reader を使って、このURLリストの記事を全部取ってきて、要約してMarkdownにまとめて」——この一文をClaude Codeに投げれば、本記事で紹介した仕組みをその場で組み立ててくれる。あなたがやるのは、結果を読んで「いいね」「ここ直して」と会話することだけ。

技術的ハードルに怯んで個人メディアを諦めていた方にとって、Jina ReaderとClaude Codeの組み合わせは 「最も低い階段」 という選択肢になる。


🎁 特典: 設定ファイル一式ダウンロード

本記事で解説したパイプラインを、そのまま動かせる設定ファイル一式をzipにまとめた。

zipの中身

  • fetch.sh — Jina Reader呼び出しテンプレート(curl 1行版 + 解説コメント付き)
  • parallel_fetch.sh — xargsによる並列リクエストスクリプト
  • error_handler.sh — 失敗URLの退避と再試行ロジック
  • cache_strategy.md — ハッシュキャッシュ戦略メモ
  • claude_prompt_examples.md — 要約・分類・競合比較の依頼文サンプル
  • cron_setup.md — 毎朝自動実行の設定手順

解凍して、あなたのメディアテーマに合わせてURLリストを書き換えるだけで動き出す。

👉 ダウンロードはこちら


📚 参考リファレンス