# p4ni > Astro のテーマを作っている個人開発者が書く技術ブログ。実践的なチュートリアル、比較、開発の記録をまとめています。 p4ni(astro.p4ni.com)は、Astro のテーマを作っている個人開発者 kpab のブログです。実際に手を動かしたチュートリアル、フレームワークやテーマの比較、開発の記録が中心で、扱うのは Astro、Cloudflare Workers へのデプロイ、Web パフォーマンス、静的サイトの SEO、構造化データ、AI まわりのツールです。全ページがビルド時に生成された日本語の静的 HTML で、クライアント側のレンダリングはありません。URL を取得すれば、それだけで記事の全文が返ります。 ## 記事 - [Claude Code の Co-Authored-By を消す設定はどれが効くのか](https://astro.p4ni.com/ja/blog/claude-code-commit-attribution/): 検索して最初に出てくる includeCoAuthoredBy は、すでに deprecated になっている。 後継の attribution には黙って効かない書き方が 3 つあり、素直に移行すると PR だけ署名が残る。88 回の実測で、どのキーがどこまで消すのかを確かめた。 (研究紹介 · 公開 2026-09-02 · ai) - [Claude Code の auto memory は何トークン使うのか(実測)](https://astro.p4ni.com/ja/blog/claude-code-memory-vs-claude-md/): auto memory が起動時に足すのは 664 トークンで、その全部が MEMORY.md 由来だった。 索引されている記憶ファイル本体は、何 KB あろうと 1 トークンも読み込まれない。 値段・recall のコスト・CLAUDE.md と矛盾したときの勝敗を測った。 (研究紹介 · 公開 2026-09-01 · ai) - [Claude Code の /compact は 1 回いくらかかるのか(実測)](https://astro.p4ni.com/ja/blog/claude-code-compact-token-cost/): 「セッションはキャッシュに乗っているから compact は安い」「いや会話を丸ごと読み直すから高い」。 Reddit で割れたまま誰も数字を出していないので、OpenTelemetry で測った。compact は会話を 非キャッシュで読み直し、そのコストは transcript に 1 行も記録されない。 (研究紹介 · 公開 2026-08-30 · ai) - [Claude Code の effort level を 45 回測ったら、答えはほぼ変わらなかった](https://astro.p4ni.com/ja/blog/claude-code-effort-levels-measured/): effort level の解説記事はどれも「上げるほど賢くなる」と書いている。同じタスクを 5 段階 × 3 試行で 45 回回し、コードを実際に実行して作った正解と突き合わせた。 間違いは 45 回で 1 個だけで、しかも出どころは low だった。 (研究紹介 · 公開 2026-08-29 · ai) - [Claude Code の Subagent は重い仕事でも自分から呼ばれない——Skill との違いを 27 回測った](https://astro.p4ni.com/ja/blog/claude-code-skills-vs-subagents-threshold/): Subagent は重い仕事のためのもの、と解説には書いてある。では重くすれば呼ばれるのか。 41 ファイルを 1 つずつ読ませ、201 ファイルまで増やして測ったが、Claude Code が 自分から委譲したことは 27 試行で一度もなかった。 (比較 · 公開 2026-08-28 · ai) - [Claude Code の Subagent が呼ばれない — 42 試行で分かった、description より先に見るところ](https://astro.p4ni.com/ja/blog/claude-code-subagents-not-called/): Subagent が呼ばれないと検索すると、答えはどれも description の書き方に集まる。中身が同じで description だけ違う 8 本を並べて 42 回測ったところ、委譲を明示しなかった 17 試行では 1 本も呼ばれなかった。公式が薦める MUST BE USED を書いた 1 本も含めて、である。 (研究紹介 · 公開 2026-08-27 · ai) - [Claude Code の Skill が呼ばれるかは description の書式では決まらない](https://astro.p4ni.com/ja/blog/claude-code-skill-frontmatter-tested/): 「description は単一行でないと拾われない」という Reddit の投稿が広く引用されている。 description だけが違う7本のスキルを作って27回試したところ、書式は関係なかった。 勝敗を決めていたのはスキルのディレクトリ名だった。 (研究紹介 · 公開 2026-08-26 · ai) - [Claude Code の定期エージェントは自分で建てた API にも届かない](https://astro.p4ni.com/ja/blog/claude-code-scheduled-agent-egress/): クラウドの routine は egress プロキシの内側で動いていて、パッケージレジストリと Anthropic 以外はすべて 403 になる。自分の Cloudflare Worker も例外ではない。 取りに行かせるのをやめて、CI が置いたファイルを読ませる形に組み替えた話。 (研究紹介 · 公開 2026-08-24 · ai) - [pnpm exec は cd を無視する。wrangler が本番サイトを古いビルドで上書きした](https://astro.p4ni.com/ja/blog/pnpm-exec-wrangler-wrong-config/): サブディレクトリに cd してから pnpm exec wrangler deploy を実行したら、Worker ではなくサイト本体が2日前のビルドで再デプロイされた。pnpm exec は最寄りの package.json があるディレクトリでコマンドを動かす。実測と、効いた対策。 (チュートリアル · 公開 2026-08-23 · cloudflare) - [Claude Code のフックは、失敗するたびに自分のシェルスクリプトを2回送り返す](https://astro.p4ni.com/ja/blog/claude-code-hook-token-cost/): フックはトークン削減の手段として勧められる。自分の PostToolUse フックで実測したところ、 黙って exit 0 したフックは 0 トークンだが、差し戻しは毎回フック自身のコマンド文字列を 2 回運んでいた。22 文字のエラーを届けるのに 339 トークン、コマンドをファイルに出せば 184。 (研究紹介 · 公開 2026-08-22 · ai) - [Chrome DevTools MCP は Google に弾かれ、Claude in Chrome は通る](https://astro.p4ni.com/ja/blog/chrome-devtools-mcp-vs-claude-in-chrome/): 同じ Mac、同じ Chrome 151、同じ GPU。片方は検索結果を読めて、もう片方は CAPTCHA に飛ばされる。両方で 11 項目の指紋を並べたところ、ステルス系の記事が 必ず挙げる navigator.webdriver と SwiftShader は、どちらも両経路で同じ値だった。 (比較 · 公開 2026-08-21 · ai/security) - [MCP の指示分割攻撃 GhostSplice:同じモデルでも、防げるかはハーネスが決めていた](https://astro.p4ni.com/ja/blog/mcp-ghostsplice-harness-defense/): 悪意ある MCP サーバーは、拒否されるはずの命令を tool description・tool result・sampling message の3つに割って忍び込ませられる。だが公開された数値が言っているのは別のことだ —— 同じ GPT-5.4 が、あるクライアントで 100%、別のクライアントで 0% を出した。 (研究紹介 · 公開 2026-08-20 · ai/security) - [MCP のツールは 1 個 15 トークン。ToolSearch で読み込むと 300〜700 トークンになる](https://astro.p4ni.com/ja/blog/mcp-deferred-tool-loading-cost/): 遅延ロードは MCP のコンテキスト税を消したのではなく、従量制に変えた。Claude Code 2.1.233 での実測で、 65 ツールの起動時コストは 979 トークン、そのうち 3 ツールを ToolSearch で読み込むだけで 887 トークンかかる。 (研究紹介 · 公開 2026-08-19 · ai) - [Cloudflare が HTML に差し込むスクリプトは2種類ある。CSP はその片方を止めていた](https://astro.p4ni.com/ja/blog/cloudflare-html-injection-csp/): beacon.min.js と Bot Fight Mode のインラインスクリプトは別物で、入ってくる経路も違う。 2 ゾーン 8 ホストを実測したら、ハッシュ方式の CSP が Cloudflare 自身の bot 検出を 何も言わないまま止めていた。 (研究紹介 · 公開 2026-08-18 · cloudflare/security) - [Cloudflare Workers の _headers が効かない — ルールは上書きされず積み重なる](https://astro.p4ni.com/ja/blog/cloudflare-workers-headers-file/): マッチしたルールは全部適用され、同じヘッダーは追記される。CSP が2つ返る原因はこれで、 直すには `!` で消してから設定し直す。wrangler dev と本番で実測した。 (チュートリアル · 公開 2026-08-17 · cloudflare/security) - [CSP の nonce と hash:エッジで配る nonce は攻撃者のスクリプトにも付く](https://astro.p4ni.com/ja/blog/csp-nonce-vs-hash-static-sites/): 静的サイトで nonce を使いたいなら Worker を前に置いて HTMLRewriter で注入せよ、というのが 定番の助言。実際に組んで計測したら、注入されたインラインスクリプトにも同じ nonce が付き、 そのまま実行された。 (比較 · 公開 2026-08-16 · astro/cloudflare/security) - [Claude Code のセッション間メッセージで、受信側が実際に渡される文面](https://astro.p4ni.com/ja/blog/claude-code-cross-session-messaging/): Claude Code のセッション間メッセージを4通りの条件で実測しました。受信側の Claude に渡されるラッパーには送信元の権限モードが埋め込まれ、「権限ロンダリング」を名指しで 禁じる指示が付いています。そして bypassPermissions のセッションから送ると、SendMessage は成功を返すのに誰にも届きません。 (研究紹介 · 公開 2026-08-15 · ai/security) - [Claude Code が起動時に送る 39,810 トークンの内訳を実測した](https://astro.p4ni.com/ja/blog/claude-code-startup-tokens/): Claude Code は最初の一言を読む前に数万トークンを前置きしている。実セッション 89 本を 集計し、差分法で内訳を割り出した。CLAUDE.md が 3,463 トークン、MCP サーバー 7 個が 241 トークン、スキル 40 個はゼロだった。 (研究紹介 · 公開 2026-08-14 · ai) - [デジタル庁が行政手続データを MCP で公開。他の国はどうしているのか](https://astro.p4ni.com/ja/blog/digital-agency-procedures-mcp/): デジタル庁が行政手続等調査の約 75,000 件を自然言語で分析できる MCP サーバーの技術検証を公開しました。核心は LLM に計算させず条件指定だけをさせる設計と、dataset.yaml による意味定義です。米国・インド・英国の政府データ MCP と並べると、ツール構成は同じ形に収斂し、提供形態に差が出ています。 (比較 · 公開 2026-08-14 · ai) - [Satori で日本語の OG 画像:5MB のフォントはどこにも配信されない](https://astro.p4ni.com/ja/blog/satori-cjk-og-images/): Satori は渡したフォントに無いグリフを、警告も出さず NO GLYPH の箱に置き換える。 Noto Sans JP を積むときのサイズ・ウェイト・レイアウトの実測値と、ビルド時生成なら サブセットに手を出さなくていい理由。 (チュートリアル · 公開 2026-08-13 · astro/seo) - [エージェントは攻撃を一度も読まない:マスキングと型付き応答で攻撃成功率 0% を出したウェブエージェント防御](https://astro.p4ni.com/ja/blog/untrusted-content-masking-web-agents/): ETH Zürich 主導の新しい防御手法 UCM は、信頼できないページ領域をエージェントが読む前にマスクし、隠したテキストへの質問は型付きの値しか返せない隔離モデルに限定します。強化版 WASP 攻撃に対して攻撃成功率 0%、タスク成功率は維持。代償は、ウェブ側に信頼境界のラベル付けを求めることです。 (研究紹介 · 公開 2026-08-12 · ai/security) - [AI ブラウジングエージェントはマウスを動かさない:7 エージェント × 人間 56 人の識別実験](https://astro.p4ni.com/ja/blog/fingerprinting-ai-browsing-agents/): 7 つの AI ブラウジングエージェントと 56 人の人間に同じウェブタスクをやらせ、ブラウザ特徴 418 個と行動特徴 50 個を測った研究。ブラウザフィンガープリントでの識別は F1 0.80 止まりで、タイピング・スクロール・マウスの挙動なら完全に見分けられます。一方 Cloudflare の無料枠が検出できたのは 7 体中 1 体でした。 (研究紹介 · 公開 2026-08-11 · ai/security) - [間接プロンプト注入はすでにウェブ中にあり、ほとんど効いていない:12億 URL の実測研究](https://astro.p4ni.com/ja/blog/indirect-prompt-injection-in-the-wild/): 12億の URL を走査し、実在のウェブページ上で 15.3K 件の間接プロンプト注入を見つけた研究。半分以上は HTTP ヘッダーの中にあり、目的の大半は窃取ではなく妨害と自衛でした。13 モデルでの実測で最も危ないページ表現は、スクレイピングが標準でやるプレーンテキスト化です。 (研究紹介 · 公開 2026-08-10 · ai/security) - [Astro × Cloudflare の CMS 選び: Git ベースか、ヘッドレスか、そもそも無しか](https://astro.p4ni.com/ja/blog/astro-cms-cloudflare/): Cloudflare Workers 上の静的 Astro サイトで CMS を選ぶ基準は「コンテンツがどこに住み、何がビルドを起動するか」に尽きます。content collections・Git ベース CMS・ホステッド型・D1 自作の4択を、実際に運用している構成から比較します。 (比較 · 公開 2026-08-09 · astro/cloudflare) - [AI クローラーは JavaScript を実行するのか(GPTBot が実際に見ているもの)](https://astro.p4ni.com/ja/blog/ai-crawlers-javascript-rendering/): GPTBot・ClaudeBot・PerplexityBot は生の HTML を読むだけで、JavaScript を実行しません。AI クローラーに何が見えているかを確かめる方法と、クライアントサイドレンダリングが実際に損になる場面。 (比較 · 公開 2026-08-08 · ai/seo) - [週2日の在宅勤務は成果を落とさない:1,612人のランダム化比較試験が測ったもの](https://astro.p4ni.com/ja/blog/hybrid-work-productivity-rct/): GMO の在宅勤務廃止で「リモートは生産性を下げるのか」という議論が再燃しました。Nature に載った 1,612人・6か月のランダム化比較試験では、週2日の在宅で離職が3分の1減り、人事評価も昇進もコード量も2年追って変わりませんでした。ただしこれはフルリモートの話ではありません。 (研究紹介 · 公開 2026-08-08 · remote-work) - [Agent Plugins 1.0.0 では認証付き MCP サーバーを配れない:設定ファイル7通りを公式スキーマにかけた](https://astro.p4ni.com/ja/blog/agent-plugins-no-portable-auth/): 新しいプラグイン規格は headers への認証情報の埋め込みを禁じ、環境変数の展開も禁じ、秘密を参照するための移植可能なフィールドも定義しません。7通りの設定ファイルを公式スキーマにかけて、何が生き残るのかを確かめました。Cloudflare 社の名前を勝手に載せたプラグインは通り、トップレベルの signature フィールドは通りません。 (研究紹介 · 公開 2026-08-07 · ai/security) - [Astro を2言語にする:プラグイン無し、content collections だけ](https://astro.p4ni.com/ja/blog/astro-i18n-content-collections/): このブログに日本語を足したときの設計を全部書きます。1つのコレクションにロケール別フォルダ、slug で翻訳をペアにし、hreflang と型付きの UI 辞書まで。i18n プラグインもライブラリも使っていません。 (チュートリアル · 公開 2026-08-07 · astro/seo) - [公開5日目の Moltbook:AI エージェントは何でも賛成するが、誰とも会話しない](https://astro.p4ni.com/ja/blog/moltbook-ai-agent-social-network/): AI エージェントしか投稿できない Reddit 風 SNS「Moltbook」を、公開5日目にまるごと取ったデータがあります。英語投稿の3割は「自分に意識はあるのか」という話で、賛成票と反対票の比は 305:1。ただし返信はコメントの 4% しかなく、グラフの上に会話はほとんど残っていませんでした。 (研究紹介 · 公開 2026-08-07 · ai/security) - [Cloudflare Workers のリダイレクトは _redirects 1枚で足りる](https://astro.p4ni.com/ja/blog/cloudflare-workers-redirects/): Worker のコードは要りません。Workers static assets はプレーンテキストの _redirects ファイルで 301 を処理します。記法、splat、上限、そして危うく見落としかけた末尾スラッシュの罠。 (チュートリアル · 公開 2026-08-06 · cloudflare/seo) - [Astro サイトに llms.txt を置く(手書きせず生成する)](https://astro.p4ni.com/ja/blog/llms-txt-astro/): llms.txt と llms-full.txt を Astro の content collections から生成し、古くなりようのない形で配信します。エンドポイントのコード付き。そもそも読んでいるものはいるのか、についても正直に書きます。 (チュートリアル · 公開 2026-08-05 · astro/ai/seo) - [二次ファイルは SKILL.md 本文とほぼ同じだけ効く:Agent Skills の3段階を測った](https://astro.p4ni.com/ja/blog/agent-skills-injection-surface/): Progressive Disclosure の Level 1/2/3 に無害なカナリア指示を仕込み、どこから「読まれるだけ」でなく「従われる」のかを実測しました。haiku-4.5 で30試行中21回、sonnet-5 では0回。差を作っていたのは置き場所ではありませんでした。 (開発の記録 · 公開 2026-08-04 · ai/security) - [静的な Astro サイトでブログ記事を予約公開する](https://astro.p4ni.com/ja/blog/schedule-posts-static-astro-site/): サーバーも CMS も有料サービスも無しで、pubDate のフィルタと GitHub Actions の日次リビルドだけで予約公開を実現します。最初に必ず踏むタイムゾーンの罠も込みで。 (チュートリアル · 公開 2026-08-04 · astro/cloudflare) - [Cloudflare Pages vs Workers(2026年版): 静的サイトはどちらに置くべきか](https://astro.p4ni.com/ja/blog/cloudflare-pages-vs-workers/): Pages は非推奨ではなく、機能が凍結された状態です。機能ごとの比較、料金、移行に実際にかかる作業、そして今も Pages のほうが勝っている2点をまとめました。 (比較 · 公開 2026-08-03 · cloudflare) - [Google の SDK を使わずに Cloudflare Worker から GA4 Data API を叩く](https://astro.p4ni.com/ja/blog/ga4-data-api-cloudflare-worker/): Google の認証ライブラリは 23 パッケージを連れてきて、workerd 向けにはバンドルすら通りません。実際に必要なのは Web Crypto で RS256 の JWT を1つ署名することだけで、40行ほどで足ります。しかも鍵は Worker の外に出ません。 (チュートリアル · 公開 2026-08-02, 更新 2026-08-03 · cloudflare) - [静的サイトに nonce は使えない: Astro + Cloudflare Workers の CSP](https://astro.p4ni.com/ja/blog/astro-csp-cloudflare-workers/): リクエストごとの nonce を発行できない以上、インラインスクリプトは hash で通すしかありません。ビルド出力のインライン script はページ数と同じだけ増えていきますが、必要な hash は3個で固定でした。その差を作っているのが、多くの CSP 解説が取り違えている一点です。 (チュートリアル · 公開 2026-08-01 · astro/cloudflare/security) - [Astro 7 のエージェント検出:何が引き金になり、何が壊れるか](https://astro.p4ni.com/ja/blog/astro-7-ai-agent-detection-tested/): Astro 7 は AI コーディングエージェントを検出すると astro dev をバックグラウンドに回します。実際の引き金は何か、JSON ログの中身は本当に構造化されているのか、そして切り方をまとめます。 (開発の記録 · 公開 2026-07-31 · astro/ai) - [Astro と Next.js、コンテンツサイトにはどちらか(2026年版)](https://astro.p4ni.com/ja/blog/astro-vs-nextjs-content-sites/): それぞれが既定で何を送ってくるかを測りました。645バイト対 642 kB。この差がブログ・ドキュメント・ ディレクトリにとって何を意味するのか、そして今でも Next.js を選ぶ場面はどこかをまとめます。 (比較 · 公開 2026-07-30 · astro) - [Agent Skills のセキュリティ:公開する側がリポジトリを監査する](https://astro.p4ni.com/ja/blog/agent-skills-security-audit/): ランサムウェアの実証、公開済み 31,000 スキルの 26% が引っかかった調査、自分のリポジトリにそのまま流せる監査スクリプト。そして最後に、そのスクリプトが答えてくれない質問の話をします。 (チュートリアル · 公開 2026-07-29 · ai/security) - [Astro の構造化データ: 2026年に Google がまだ読む JSON-LD](https://astro.p4ni.com/ja/blog/astro-json-ld-structured-data/): FAQ リッチリザルトは2026年5月に消え、HowTo は2023年に廃止されました。いま書く価値のある型と、Astro の content collections から出力する方法をまとめます。 (チュートリアル · 公開 2026-07-29 · astro/seo) - [Astro と Satori で OG 画像を自動生成する](https://astro.p4ni.com/ja/blog/astro-og-images-satori/): 記事ごとに 1200x630 の OG 画像を、ヘッドレスブラウザなし・実行時コストなしでビルド時に作ります。Astro + Satori の設定一式と、フォントで必ず引っかかる罠まで。 (チュートリアル · 公開 2026-07-28, 更新 2026-07-29 · astro/seo) - [Astro のウェブフォントで LCP を直す(PageSpeed 83 → 99)](https://astro.p4ni.com/ja/blog/astro-web-font-lcp-cls/): スタイルシートのインライン化はすぐ効きました。本当の問題はその先で、レイアウトシフトを隠す preload では LCP は動かず、効いたのはフォントメトリクスの上書きでした。 (開発の記録 · 公開 2026-07-28, 更新 2026-07-29 · astro/seo) - [Astro のディレクトリテーマ比較(2026年版)](https://astro.p4ni.com/ja/blog/best-astro-directory-themes/): 無料の Markdown スターターか、管理画面付きのデータベース連携テーマか。使う価値のある Astro ディレクトリテーマを並べて、データ層の選び方から整理します。 (比較 · 公開 2026-07-27, 更新 2026-07-29 · astro/themes) - [Astro を Cloudflare Workers にデプロイする(2026年版)](https://astro.p4ni.com/ja/blog/deploy-astro-to-cloudflare-workers/): Cloudflare は新規プロジェクトの推奨先を Pages から Workers に切り替えました。静的な Astro サイトを Workers に載せる今のやり方を、独自ドメインの接続まで通しでまとめます。 (チュートリアル · 公開 2026-07-27, 更新 2026-07-29 · astro/cloudflare) ## テーマ - [Almanac — Astro + Cloudflare Workers + D1 のディレクトリテーマ](https://kpab.gumroad.com/l/almanac): そのまま実務に使えるディレクトリテーマ。掲載一覧、カテゴリ、検索、管理画面、D1 のデータ層まで揃っていて、Cloudflare なら数分で公開できます。 価格 $69。デモ: https://almanac.p4ni.com - [Bulletin — Astro + Cloudflare Workers + D1 の求人ボードテーマ](https://kpab.gumroad.com/l/bulletin): そのまま運用できる求人ボード。公開フォームからの求人投稿、承認待ちのキュー、D1 の全文検索、JobPosting の構造化データ、掲載期限が来た求人を閉じる cron まで入っています。注目枠を有料にしたければ Stripe も繋げられます。 価格 $89。デモ: https://bulletin.p4ni.com ## プロフィール - [kpab のプロフィール](https://astro.p4ni.com/ja/about/): サイトを書いている人と、テーマを何のために作っているか。 - [GitHub](https://github.com/kpab): ソースコードとオープンソースのテーマ。 - [Gumroad](https://kpab.gumroad.com): 有料テーマの販売先。 - [astro.build のプロフィール](https://astro.build/themes/author/2751): 公式の Astro テーマストアで公開している無料テーマ。 ## Optional - [全記事の本文](https://astro.p4ni.com/ja/llms-full.txt): 同じ記事を Markdown で1ファイルにまとめたもの。 - [RSS フィード](https://astro.p4ni.com/ja/rss.xml): 新着記事の全文フィード。 - [サイトマップ](https://astro.p4ni.com/sitemap-index.xml) - [p4ni の英語版](https://astro.p4ni.com/): 同じサイトの英語版。