ブログ
Web 制作・システム開発に関する記事を公開しています。
DNS が古い環境からドメイン切り替え直後のサイトを検証する — DoH と curl --connect-to
ドメイン切り替え直後、手元の DNS キャッシュやプロキシが古い IP を返して検証にならないとき、DoH(dns.google/resolve)で権威側の現在値を引き、curl --connect-to で名前解決だけ上書きして SNI・証明書検証込みの本番同様の確認をする手順をまとめます。
Tailwind v3 の PostCSS が第三者のビルド済み CSS を壊す — @layer の解釈衝突と v4(@tailwindcss/vite)移行
Tailwind v3 を PostCSS 経由で入れると、node_modules のビルド済み CSS まで処理対象になり、ネイティブの @layer を使う標準準拠の第三者 CSS がエラーになります。管理画面が 500 になった実例から、@tailwindcss/vite(v4)移行による解決と、実際に必要だったクラス名の書き換えをまとめます。
BudouX をサーバー環境で使うと window is not defined になる — DOM 非依存の Parser を直接 import する
日本語の改行位置制御ライブラリ BudouX を Cloudflare Workers など DOM のないサーバー環境で import すると、エントリポイントが巻き込む win.js のトップレベル window 参照で即死します。budoux/module/parser.js の Parser とモデルを直接 import する回避策と、wbr + word-break: keep-all の実装例をまとめます。
日本語 URL の 301 リダイレクトだけが効かない — percent-encoding の大文字・小文字問題
WordPress 移行のリダイレクトで、英語スラッグは動くのに日本語スラッグだけ 404 になる原因は percent-encoding の大文字・小文字でした。ブラウザは大文字(RFC 3986 の正規形)で送り、WordPress は小文字で保存する。URL API が既エンコード文字列を正規化しない仕様と、decode→encode による正規化をまとめます。
サービスアカウントが Search Console に追加できない(email not found)— Google 側バグと gcloud ADC での回避
2026年4月下旬以降、新規作成したサービスアカウントを Search Console / GA4 に追加すると「email not found」で失敗する Google 側のバグが発生しています。ユーザー認証の ADC(gcloud auth application-default login)で回避する手順と、scope・quota project まわりの4つの罠をまとめます。
astro dev がエラーも出さず死ぬ — Astro 7 の AI エージェント検出と ASTRO_DEV_BACKGROUND
Astro 7 は AI エージェントからの起動を検出すると自動でバックグラウンド + JSON モードに切り替わり、起動失敗の本当の原因が「exited before becoming ready」の一行に丸められます。ASTRO_DEV_BACKGROUND=1 での調査方法と、隠れていた Node.js 22.15 未満の registerHooks エラー、dev server 管理の正道をまとめます。
パスキーはドメインに縛られる — 独自ドメイン移行で管理者ログインできなくなる理由と対策(WebAuthn RP ID)
workers.dev などのステージング URL で登録したパスキーは、独自ドメインへ切り替えた瞬間に使えなくなります。WebAuthn の RP ID 束縛という仕様の話と、締め出されたときの復旧経路(メール配送の Slack すげ替え)、切り替え前にやるべき手順をまとめます。
Slack に送ったログインリンクが、人間が踏む前に無効化される — リンクプレビューがワンタイムトークンを消費する問題
マジックリンクを Slack Incoming Webhook に流すと、プレビュー生成クローラーが人間より先にリンクを GET してワンタイムトークンを消費し、invalid link になります。unfurl_links / unfurl_media の無効化による対策と、「GET でトークンを消費する」設計自体の問題点をまとめます。
defineConfig 系ヘルパーは identity とは限らない — 剥がすとビルドは通るのに機能が静かに死ぬ
Vite の defineConfig のような define* ヘルパーを「型のための identity 関数」と思い込んでインライン化すると、実行時の capability 正規化がスキップされ、ビルド・型チェック・デプロイが全部成功したまま通知機能だけが静かに死ぬ——その機構と、静的チェックで検出できない理由、対策をまとめます。
pnpm monorepo で共有パッケージを複数バージョンの peer に対応させる(injected dependencies)
pnpm monorepo で共有パッケージ(内製プラグイン等)が peer のフレームワークを単一バージョンに解決してしまい、異なるメジャーを使うアプリのビルドが壊れる問題を、dependenciesMeta の injected: true で解決する方法と落とし穴をまとめます。
Webhook 署名検証が body パースで壊れる問題と、生リクエストボディの取得(Astro / Cloudflare Workers)
Slack や Stripe の Webhook 署名検証は「生のリクエストボディ」に対する HMAC のため、フレームワークが body を先にパースすると検証が壊れます。原因と、Astro / Cloudflare Workers での生ボディ取得(request.text / clone)方法をまとめます。
Web サイト・システム開発の発注で、「何から始めればいいか」で止まる
「やりたいイメージはあるけれど、何から始めればいいかが浮かばない」。Web サイトやシステムを作りたい、と思った段階のつまずきについて、考えていることを書きました。
Web サイトの運用で、お知らせ一つ追加するのに毎回見積もりが要る
「お知らせを1つ追加したいだけなのに、依頼先と連絡が途絶えがち」。公開した後の Web サイトの運用について、考えていることを書きました。
Web 制作・システム開発の外注で、返事を待つ時間がいちばんしんどい
「金曜の夕方に出した質問の返事が、翌週水曜まで来ない」。Webやシステムを外注したときに本当にしんどいのは、コミュニケーションそのものより、話が止まっている時間だと思います。
3年前の下書き記事「ChatGPTを使ったWeb開発の未来」を見て時代の変化を感じた
WordPressに限界を感じたエンジニアが、EmDashにベットする理由
PHPベースの技術スタック、億劫な管理画面、サーバー保守のコスト。WordPressへの不満を抱えるエンジニアに向けて、CloudflareがAIエージェント中心に設計した新CMS「EmDash」への移行理由と、移行で同時に回収できる4つの価値を解説する。
地方在住フリーランスがオンライン完結で戦うための戦略
地方在住・フルリモート・SES契約という条件は、東京中心の王道キャリア戦略とは噛み合わない。しかし制約を直視すれば、取るべき道はむしろ明確になる。オンライン完結で戦うための3つの戦略軸を整理する。
人月ビジネスの行方 — 市場は残るが実装層は縮む
AIによって人月ビジネスは消えるのか。市場全体は残るが、設計に関与しない「実装だけ」の層は確実に縮む。挟み撃ちに遭う中間単価帯の構造と、4〜7年スパンで訪れる再編に向けて、残された時間をどう使うかを整理する。
AI時代に直面しているエンジニアの構造変化
「スキルが消えたんじゃなくて、単価が下がった」——AI時代に実装の中間層が溶け、上下が残る構造変化。自分のポジションをどう診断するか。
Cloudflare Pages Functionsでメールが送信できない場合の対処法
Cloudflare Pagesの利用者に向けて、メール送信機能のセキュリティ対策が強化されました。これにより、SPF認証とDomain Lockdownの設定が必要となり、正確なTXTレコードの指定が求められるようになりました。これらの変更に対応するための具体的な手順をご説明します。