ブログ
Web 制作・システム開発に関する記事を公開しています。
BudouX を Cloudflare Workers で使うと window is not defined
日本語の改行位置制御ライブラリ BudouX を Cloudflare Workers など DOM のないサーバー環境で import すると、エントリポイントが読み込む win.js がトップレベルで window を参照しているため、import した時点でエラーになります。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)方法をまとめます。
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レコードの指定が求められるようになりました。これらの変更に対応するための具体的な手順をご説明します。
WordPressデータ(投稿記事や画像)をCSV形式で出力する
投稿記事や固定ページ、アイキャッチ画像やタグ、さらにはカスタム投稿タイプまで、WordPressデータをCSVで出力するには、WordPressプラグイン「Import All Pages, Post types, Products, Orders, and Users as XML & CSV」を使うのが便利です。
AstroでGoogleアドセンスの広告を表示する
AstroでGoogleアドセンスの広告を表示するには、元の広告コードのインラインで実行しているscriptタグにis:inlineを付けます。その他のコードはそのまま読み込んでOKです。