カテゴリー
Web開発者向け
Web開発者向けに関する記事を公開しています。
D1 の無駄なクエリを削ったらクエリ数が増えた原因
エッジ SSR(Cloudflare Workers + D1)ではレイテンシの支配項は CPU ではなく DB への往復回数です。明らかに無駄なクエリを削ったら本数が 19→22 に増えた——その裏にあるリクエスト内キャッシュの重複排除という機構と、推測で書き換えず「表示が変わっていないこと」を HTML のバイト一致で証明しながら最適化するウォーム A/B 計測の手順をまとめます。
Claude Code のサブエージェント並列でサイト群を保守する
AI コーディングエージェントを「1 人のアシスタント」ではなく「司令塔 + 並列の実働班」として編成し、本番の複数サイトを日々保守している運用の設計を書きます。git worktree での物理分離、指示書に埋め込む計測プロトコル、権限の非対称、司令塔による二重検証、人間の介入点の切り分け。実際に出荷を止めたガードレールや、報告と実体の乖離といった実例と、この方式の限界まで含めてまとめます。
Google Analytics を入れずに Cloudflare でブログを監視する
ブログ運用の一次監視に欲しいのは「配信が壊れていないか」で、それは GA4(gtag.js)を入れなくても取れます。GA4 のクライアント計測とは別レイヤーの Cloudflare エッジ計測(GraphQL Analytics API の httpRequestsAdaptiveGroups)を GitHub Actions で回し、死活チェック・週次レポート・Issue 自動起票までを組む監視設計を、GA との役割分担つきでまとめます。
AI エージェントを自走させるのはプロンプトではなくハーネス
AI コーディングエージェントの自律性を支えるのは長い指示書ではなく、成果物を機械的・決定的に合否判定する検証系(ハーネス)です。LLM は確率的、ハーネスは決定的というこの非対称を、決定的パイプライン・Claude Code の Hooks・ドメイン固有の検証プロトコル・観測とフィードバック・権限という5つの層に整理し、人間の介入点をどう絞るかを実運用の事実に沿ってまとめます。
Claude Code のチーム機能とサブエージェントの使い分け
「チーム機能はエージェント同士が P2P で連携できる。サブエージェントは親に報告するだけ。なら常にチームが上位互換では?」という直感に、両者の機構の違いから答えます。サブエージェント並列を実務で回している立場から、指示書が書けるか否かという一本の判断基準まで整理しました。
DNS が古い環境からドメイン切り替え直後のサイトを確認する
ドメイン切り替え直後、手元の DNS キャッシュやプロキシが古い IP を返して検証にならないとき、DoH(dns.google/resolve)で権威側の現在値を引き、curl --connect-to で名前解決だけ上書きして SNI・証明書検証込みの本番同様の確認をする手順をまとめます。
Tailwind v3 で node_modules の CSS が @layer エラーになる原因
Tailwind v3 を PostCSS 経由で入れると、node_modules のビルド済み CSS まで処理対象になり、ネイティブの @layer を使う標準準拠の第三者 CSS がエラーになります。管理画面が 500 になった実例から、@tailwindcss/vite(v4)移行による解決と、実際に必要だったクラス名の書き換えをまとめます。
BudouX を Cloudflare Workers で使うと window is not defined
日本語の改行位置制御ライブラリ BudouX を Cloudflare Workers など DOM のないサーバー環境で import すると、エントリポイントが巻き込む win.js のトップレベル window 参照で即死します。budoux/module/parser.js の Parser とモデルを直接 import する回避策と、wbr + word-break: keep-all の実装例をまとめます。
日本語 URL の 301 リダイレクトだけが効かない原因
WordPress 移行のリダイレクトで、英語スラッグは動くのに日本語スラッグだけ 404 になる原因は percent-encoding の大文字・小文字でした。ブラウザは大文字(RFC 3986 の正規形)で送り、WordPress は小文字で保存する。URL API が既エンコード文字列を正規化しない仕様と、decode→encode による正規化をまとめます。
Search Console にサービスアカウントを追加できない(email not found)
2026年4月下旬以降、新規作成したサービスアカウントを Search Console / GA4 に追加すると「email not found」で失敗する Google 側のバグが発生しています。ユーザー認証の ADC(gcloud auth application-default login)で回避する手順と、scope・quota project まわりの4つの罠をまとめます。
astro dev がエラー表示なしで終了する原因(Astro 7)
Astro 7 は AI エージェントからの起動を検出すると自動でバックグラウンド + JSON モードに切り替わり、起動失敗の本当の原因が「exited before becoming ready」の一行に丸められます。ASTRO_DEV_BACKGROUND=1 での調査方法と、隠れていた Node.js 22.15 未満の registerHooks エラー、dev server 管理の正道をまとめます。
独自ドメイン移行でパスキーのログインができなくなる原因
workers.dev などのステージング URL で登録したパスキーは、独自ドメインへ切り替えた瞬間に使えなくなります。WebAuthn の RP ID 束縛という仕様の話と、締め出されたときの復旧経路(メール配送の Slack すげ替え)、切り替え前にやるべき手順をまとめます。
Slack のリンクプレビューがワンタイムのログインリンクを消費する
マジックリンクを Slack Incoming Webhook に流すと、プレビュー生成クローラーが人間より先にリンクを GET してワンタイムトークンを消費し、invalid link になります。unfurl_links / unfurl_media の無効化による対策と、「GET でトークンを消費する」設計自体の問題点をまとめます。
EmDash の definePlugin を外すとビルドは通るのに機能が止まる
Vite の defineConfig のような define* ヘルパーを「型のための identity 関数」と思い込んでインライン化すると、実行時の capability 正規化がスキップされ、ビルド・型チェック・デプロイが全部成功したまま通知機能だけが静かに死ぬ——その機構と、静的チェックで検出できない理由、対策をまとめます。
pnpm の injected dependencies で peer の複数バージョンに対応する
pnpm monorepo で共有パッケージ(内製プラグイン等)が peer のフレームワークを単一バージョンに解決してしまい、異なるメジャーを使うアプリのビルドが壊れる問題を、dependenciesMeta の injected: true で解決する方法と落とし穴をまとめます。
Astro で Webhook の署名検証に生ボディを渡す方法
Slack や Stripe の Webhook 署名検証は「生のリクエストボディ」に対する HMAC のため、フレームワークが body を先にパースすると検証が壊れます。原因と、Astro / Cloudflare Workers での生ボディ取得(request.text / clone)方法をまとめます。
3年前の下書き記事「ChatGPTを使ったWeb開発の未来」を見て時代の変化を感じた
WordPressに限界を感じたエンジニアが、EmDashにベットする理由
PHPベースの技術スタック、億劫な管理画面、サーバー保守のコスト。WordPressへの不満を抱えるエンジニアに向けて、CloudflareがAIエージェント中心に設計した新CMS「EmDash」への移行理由と、移行で同時に回収できる4つの価値を解説する。
地方在住フリーランスがオンライン完結で戦うための戦略
地方在住・フルリモート・SES契約という条件は、東京中心の王道キャリア戦略とは噛み合わない。しかし制約を直視すれば、取るべき道はむしろ明確になる。オンライン完結で戦うための3つの戦略軸を整理する。
人月ビジネスの行方 — 市場は残るが実装層は縮む
AIによって人月ビジネスは消えるのか。市場全体は残るが、設計に関与しない「実装だけ」の層は確実に縮む。挟み撃ちに遭う中間単価帯の構造と、4〜7年スパンで訪れる再編に向けて、残された時間をどう使うかを整理する。