Xの「伏線回収が美しい漫画」スレッドを集計して公開ページにした日:返信298件と引用99件から183作品のランキングへ

開発mdx-playground

Xの「伏線回収が美しい漫画」スレッドを集計して公開ページにした日:返信298件と引用99件から183作品のランキングへ

朝7時すぎ、Xで見かけたポストのURLを Claude Code に貼った。 伏線回収が美しすぎて鳥肌が立った漫画を教えて、という趣旨の問いかけで、返信と引用に作品名が次々と挙がっていた。 頼んだのは、スレッドと返信と引用を全部調べて一覧にし、公開記事にまとめることだ。 音声入力の依頼文では「鳥肌が立った漫画」が「取りはたったバッグ」に化けていたが、それでも意図は通じた。

→ 元ポスト

最初の返事は「全巻の冊数も一覧表の列に入れます」だった。 続けて届いたのが「返信を集めているところです(271件取得済み)」という報告である。 この271件は途中の数で、一覧の中身が固まったのは、コミットの段階でもう一度直してからだった。

返信と引用を集めて、作品名ごとに数える

返信を集め終えると、次は引用ポストに移った。 引用は「引用」タブと検索の両方から集め、重複を除いた。 最終的に集まったのは、返信298件と引用99件である。

作品名を文字で書いた返信ばかりではない。 表紙やコマの画像だけを貼った返信もあり、それは画像を1枚ずつ見てもらい、作品名を特定してもらった。

整理の途中で、191件目の『サマータイムレンダ』が漏れていて、そこから後ろが1行ずつずれていたことが分かった。 ずれを直してから票を数え直すと、183作品になった。

全巻数を記憶で書かせない

183作品すべての全巻数は、4つのサブエージェントに分けてWebで裏を取らせた。 記憶で書くと数字を誤る、というのが Claude Code の説明だった。

1つ目の担当は45作品で、全作品の巻数が取れた。 2つ目では、『山姥』だけが単独の漫画作品として特定できなかった。 記事では「特定できなかった回答」として別枠で扱った。 3つ目の報告で、ジョジョ第4部はWikipediaで18冊(29〜46巻)と確認できた。 サブエージェントへの指示文に例として書いた「19冊」は、Claude Code 自身の誤りだった。 記憶で書くと誤る、という心配どおりの誤りが、裏取りを頼む指示文の中に紛れ込んでいた。

4つの報告がそろってから、183作品ぶんの表を生成し、Markdown記事を組み立ててもらった。 スマホ幅で見ると、巻数の列で「全34 / 巻」のように1つの巻数が2行に割れていた。 巻数と状態は改行させないようにした。 横に長い表は横スクロールの枠に入れ、右端の見どころ欄まで読めることを確かめた。

Vueページに作り直す

Markdown版がdev環境で表示できたところで、この記事をVueページに作り直してもらうことにした。 元データを移し、ページが読み込むTypeScriptのデータは生成スクリプトで作る。 集計の計算は純粋関数に切り出し、テストは23件すべて通った。

ページには、巻数×票数の4象限マップを置いた。 グラフの計算は帯方式に書き換え、ラベルの位置は実測しながら詰めた。 最初の実測では、ラベル同士の重なりが3件、点との重なりが4件、はみ出しが1件残っていた。 どのラベルかを特定して直し、52件のラベルすべてで、重なりと点との衝突とはみ出しがゼロになった。

スマホでの見え方は、画面のスクリーンショットを貼って確かめた。 上部の数字カードが縦に3つ並び、場所を取りすぎていた。 スマホでも3列のまま小さく並べるように直してもらった。

パンくずとAmazonカード

Vueページが記事一覧(/blog)に載ったところで、「パンクズリスト、ちょっとちゃんと整えてね」と頼んだ。 パンくずは、画面の左端にくっついていた。 本文の列の中へ移して見出しと左端をそろえ、構造化データの BreadcrumbList もあわせて整えてもらった。

次は、表に置いていたAmazonのリンクである。 カードで出せる形にして、カードの中に漫画の概要も入れてほしかった。 長さは「200文字」と言いつつ、「旧Twitterの投稿の文字数で」とも添えた。 仕上がった概要は140字以内で、旧Twitterの上限(140字)のほうに合わせた形になった。

概要文は、5つのサブエージェントに並列で書かせた。 カードの画像をどうするか確認され、国会図書館の書影を使う方針で進めた。 届いた概要文は、183件すべてを1件ずつ読んで確かめてもらった。 そのうえで、『山姥』を除く182件をデータに入れた。

カード部品を組んでみると、表紙の枠が余白の分だけ列からはみ出し、本文にくっついていた。 原因は box-sizing の指定漏れだった。 直したあと、スマホ幅で1票の作品のカードを見て、崩れもはみ出しもないことを確かめた。

1枚のカードには、作品名、作者、巻数、完結か連載中か、票数、ジャンル、140字以内の概要、Amazonボタンが入る。 182作品ぶんのカードが、すべてこの形にそろった。

「普段いらないはずなのに」

「コミットデプロイしといてください」と頼むと、すぐにはコミットに進まなかった。 作業ツリーには、別セッションの作業中のファイルや、非公開にするか決めていないMarkdown記事が残っていたからだ。 そこで、コミット済みの状態だけを別フォルダ(git worktree)に取り出し、そこでビルドしてデプロイする段取りになった。 worktree は、このリポジトリの運用どおり .claude/worktrees/ に作った。

依存パッケージのインストールを裏で回している途中で、.env の複製を頼まれた。 デプロイには apps/web/.env と .env.local が要る。 worktree へのコピーは、許可設定で拒否されていた。 中身を読まない決まりのファイルなので、Claude Code の側から別の方法で回り込むことはしないという。

ここで引っかかった。 「あれ、でもこれ普段いらないはずなんですけど、なんで今回いるんでしたっけ?」

答えは、デプロイする場所をいつもと変えたから、だった。 いつもの /deploy は、手元の作業フォルダでそのままビルドする。 そこには apps/web/.env が最初から置いてあるので、何もしなくて済む。 今回は別フォルダでビルドしようとしたので、コピーが必要になっていた。

「全部コミットしていいっすよ」と返した。 worktree を片付け、いつもの作業フォルダの変更を、中身ごとのまとまりに分けてコミットしてもらった。 .env のコピーも要らなくなった。

コミットの途中で直った作品の状態

コミットのたびに、Codex のレビューが走る。 この日は、別件の連結エンジンの差分と、9月22日の記事2本の数字の誤りで止まり、それぞれその場で直した。

伏線回収漫画のページでも、コミットレビューが作品の状態の誤りを拾った。 作者の逝去で未完の『火の鳥』『超人ロック』と、第一部完のあと休載している『ハコヅメ』を「完結」としていた。 休載中の『BASTARD!!』は「連載中」になっていた。 状態に「未完」と「休載中」を足し、休載中は連載中と同じく既刊数で数えるようにした。 Markdown版の差分は、4作品の状態と、ハコヅメの「既刊23巻」の6行だけだった。 4象限マップでは、休載中のハコヅメが既刊の白抜きの点に変わった。

最後にプッシュした時点で、10コミットになっていた。 コミットしなかったのは、Python のキャッシュ(__pycache__/)だけである。

Markdown版は非公開の置き場へ

本番デプロイの前に、Markdown版の扱いを決めた。 「じゃあマークダウン版は非公開の置き場でいいっすよ」と返し、Markdown版は _local-unpublished/ に移して、frontmatter に unpublished: true を付けた。 既存の非公開記事と同じ置き方である。 コミットメッセージには、Vue版を正とし、同じデータの2ページが検索順位を食い合うのを避けるため、と理由を残した。

事前チェックを3つ通してから、本番デプロイを始めた。 プリレンダーは7,045ルートで約5分51秒かかり、書き出し後の検証は9工程すべて通った。 非公開へ移したMarkdown版が書き出し結果に含まれていないことも、この検証で確かめられた。 R2には2,242件の画像をコピーし、全件そろっていることを確認した。 Cloudflareへのアップロード中は、進捗行が1秒ごとに通知されてうるさかったので、監視の条件を張り直してもらった。 本番のヘルスチェックも通り、デプロイは合計12分53秒で終わった。

公開したのは次のページである。 伏線回収が美しい漫画ランキング183作品|巻数×票数マップと全巻数一覧

残りの2つは明日のタスクへ

デプロイのあと、残っていた2つの作業(拍子シミュレーターの再生予約の不具合4件と、__pycache__ を .gitignore に足す作業)を「2つともやっといてください」と頼みかけて、すぐに思い直した。 セッションを引き継ぎたかったので、引き継ぎプロンプトをダウンロードディレクトリにテキストファイルで書き出すよう頼み直した。 さらに「ちょっと待ってよ」と言って、Googleタスクの明日のタスクに加える形に変えた。

最後の指示はGoogleタスクへの追加と受け取ってもらい、直前に頼んだ引き継ぎファイルもあわせて作ってもらった。 登録したタスクは「拍子シミュレーターの再生予約の不具合4件を直し、pycache を .gitignore に足す(mdx-playground)」の1件で、期日は9月28日(月)である。 登録後に読み直して、期日が入っていることと、説明欄にディレクトリ、計画書、プロンプト、参考の4区分がそろっていることを確かめた。

振り返り

  • 巻数のように記憶で書けそうな数字ほど、裏を取らせる工程が要る。誤りは、裏取りを頼む側の指示文にも入り込む(ジョジョ第4部の「19冊」)
  • 完結と連載中の2値では足りなかった。作者の逝去で止まった作品と休載中の作品は、どちらにも入らない
  • .env が「今回だけ要る」と言われたら、デプロイする場所が変わっていないかを見る。worktree でビルドしようとした分だけ、「手元に置いてある」という前提が外れていた

271件の途中経過から始まった数字は、返信298件と引用99件、183作品になった。 公開ページに載ったのは、4作品の状態を直したあとの一覧である。

#Claude Code#X#漫画#集計#サブエージェント#Vueページ#デプロイ