Expressive Codeでコマンド出力にラベルを付ける — Gutter APIとコピーボタンの書き換え
AstroブログのExpressive Codeプラグインでコマンド出力を示す方法。ガター要素のAPI、プラグインの実行順、そしてコピーボタンの中身を書き換える手順まで。
AstroブログのExpressive Codeプラグインでコマンド出力を示す方法。ガター要素のAPI、プラグインの実行順、そしてコピーボタンの中身を書き換える手順まで。
Astro公式のsecurity.cspはService Workerの登録を静かに壊すことがある。CIと実ブラウザの両方で検証する、手書きのCSPをAstro/Vercelに実装した記録。
GIFには一時停止APIがなく、WCAG 2.2.2で不適合になった。VP9より大きいMP4を選んだのはiOSにVP9のハードウェアデコーダーがないため。エンコード手順とガード、テストの記録。
Astro の記事ページは 68ch/17px で狭く小さかった。dev.to の実測値に合わせて拡大したら、ch 単位が隠していた CJK の行長バグも直った。
タグの希少度で重み付けした重なりからビルド時に関連記事を選ぶ方法、本文への TF-IDF が 3 言語で破綻する理由、そしてスコアのしきい値を実測で決めた過程。
Astro の Service Worker がすべてのナビゲーションをキャッシュ優先で返していたため、新着記事が1回分遅れて出ていました。一覧ページはネットワークを先に見るようにしています。
計測がAstroブログのService Workerの設計を決めました。11.7MBのHTMLではなく287KBを事前キャッシュし、ページは50件で上限、有効期限は設けません。
被リンクとrel=canonicalが何をするのか、ZennとQiitaで方針が変わる理由、そして記事の転載を作業ではなく貼り付けに変えたパイプラインの話。
このAstroブログにrobots.txt・JSON-LD・Markdown版・IndexNowを入れるまで。Googleに見つからなかった原因はドメインではなく、llms.txtも解決策ではありませんでした。
このブログが人気記事にバッジを付ける仕組み。ビルド中に Vercel Web Analytics へ 1 回問い合わせ、3 つのロケールを合算して静的 HTML に焼き込みます。
完全な静的Astroサイトにサーバーレスなルートをひとつだけ足し、「いいね」を共有カウントする方法。Upstash Redisのキー設計と、動作を確かめるまでに踏んだCIのバグをまとめます。
Astroでwidth:100%が256pxのスクリーンショットをぼかしていた理由と、ネイティブダイアログでスマートフォンでも図版が読めるようになるまで。設計を正したのは7つの計測でした。
Pagefindはビルドのたびに日本語と中国語のステミング未対応を警告していました。本当の不具合は別にあり、検索語と索引のトークナイザーの不一致が誤ったページを返していました。
AstroでIntent URLから共有ボタンを組み立てる。ロケールごとに異なる共有先、広い画面での固定アイコンレール、そして途中で見つかったエンドポイントのずれ。
Astroの目次にスクロールスパイの追従、見出しの深さを問わない1本のレール、dvhによる高さ上限を実装した記録。モバイルのmax-heightを無効化していた::details-contentの生成ボックスまで。
Astro 7でExpressive Codeを導入した記録。ファイル名タブ、テーマ別のファイルアイコン、Sätteriプロセッサの落とし穴、そしてShikiが言語名として読んでいた97個のコードフェンス。
このブログにCMSがない理由。画像から決まったディレクトリ構成、MarkdownではなくMDXを選んだ判断、そして外部キーの代わりになったタグレジストリについて整理します。