環境別の favicon
16x16 の小さな正方形が、数百万ドル規模のインシデントを防ぐことがあります。タブバーをデプロイの安全網として読むよう、チームを訓練しましょう。
本番のリスクを減らす
インシデントレポートでは「間違ったタブでスクリプトを実行した」が根本原因として頻繁に挙げられます。視覚的な手がかりは、誰かが本番データを消してしまう前に一呼吸置かせます。
色分けした favicon があれば、タブが混み合ったブラウザウィンドウでも、どのタブなら安全に実験できるかがひと目で伝わります。
コンテキストの切り替えを速く
デザイナー、QA、PM は何十ものプレビューリンクを扱います。ウィンドウのタイトルは(同じ機能名なので)そっくりに見えがちです。
環境別の favicon は当て推量をなくします。とりわけ、Slack のリマインダーや Zoom の通話でテストの途中に注意がそれるようなときに効きます。
各ティアのための視覚言語
色はデザイントークンから借りつつ、ベースのグリフは同一に保って、ブランド認知が定着するようにしましょう。
| 環境 | アイコンの扱い |
|---|---|
| 本番(Production) | オーバーレイを一切載せない、最高基準のブランドアイコン。顧客向けのタブがひと目で分かるよう、これを神聖なものとして守ります。 |
| ステージング(Staging) | 対角線のストライプやバッジを加えて、ここが QA やデモに使える安全なサンドボックスであることを示します。 |
| 開発(Development) | 遊び心のある色合いを使い、ログの間をタブ切り替えしていても開発者がローカル環境を見分けられるようにします。 |
| プレビュー / レビューアプリ | PR 番号やチャンネルの頭文字をオーバーレイして、プロダクトやマーケティングが正しいビルドをクリックできるようにします。 |
オーバーレイはタブバーで生き残らねばならない



設定のブループリント
アイコンの参照を、API の URL や feature flag ですでに使っているのと同じデプロイ変数にひも付けます。
| レイヤー | 設定する内容 | ヒント |
|---|---|---|
| Next.js Metadata | process.env.ICON_URL を使って metadata.icons を更新します。 | app/layout.tsx に集約して、各ルートが正しいアイコンセットを継承するようにします。 |
| Manifest JSON | 対応する PNG を伴う、環境別の manifest を配信します。 | Android のスプラッシュスクリーン用に purpose: "any maskable" を含めます。 |
| HTML のフォールバック | レガシーな <link rel="shortcut icon"> タグも、正しい資産を指すようにします。 | デプロイ時にキャッシュを無効化するため、?v={{ buildId }} クエリパラメータを追加します。 |
ロールアウトチェックリスト
新しいしくみは、他のコンプライアンス統制と同じようにリリースしましょう。文書化し、ピアレビューを通し、自動化します。
- 1
資産を環境ごとに命名する
環境のサフィックス(favicon-prod.png)と、キャッシュバスティング用のハッシュを使います。
- 2
環境変数からタグを注入する
必要なインデックス用タグ(rel="shortcut icon" と rel="apple-touch-icon")を、layout.tsx または document.tsx 内で環境変数から注入します。可能な限り絶対 https:// URL を使いましょう。
- 3
アイコンが現れるあらゆる場所に反映する
apple-touch icon と manifest.json のアイコン配列にも、同じ更新を反映します。
- 4
カラーシステムを書き残す
将来のリブランディングでも一貫性が保たれるよう、カラーシステムをデザイントークンの中に文書化します。
- 5
デプロイされたバイトを検証する
ダウンロードしたアイコンのバイトを検査する自動検証ステップ(Playwright または /verify)で、すべてを裏打ちします。
実装スニペット
// app/layout.tsx
const iconBase = process.env.NEXT_PUBLIC_ICON_BASE_URL;
export const metadata = {
icons: {
icon: [
{ url: `${iconBase}/favicon.ico` },
{ url: `${iconBase}/favicon.png`, sizes: "32x32" },
{ url: `${iconBase}/favicon-16x16.png`, sizes: "16x16" },
],
shortcut: [`${iconBase}/favicon.ico?v=${process.env.NEXT_BUILD_ID}`],
},
};iconBase が各環境固有の S3 バケット、CDN パス、GitHub Pages のアーティファクトに解決されるよう、プラットフォームチームと連携しましょう。