Favicon Tools検証作成
DevEx
ガバナンス

環境別の favicon

· 6 min read

16x16 の小さな正方形が、数百万ドル規模のインシデントを防ぐことがあります。タブバーをデプロイの安全網として読むよう、チームを訓練しましょう。

本番のリスクを減らす

インシデントレポートでは「間違ったタブでスクリプトを実行した」が根本原因として頻繁に挙げられます。視覚的な手がかりは、誰かが本番データを消してしまう前に一呼吸置かせます。

色分けした favicon があれば、タブが混み合ったブラウザウィンドウでも、どのタブなら安全に実験できるかがひと目で伝わります。

コンテキストの切り替えを速く

デザイナー、QA、PM は何十ものプレビューリンクを扱います。ウィンドウのタイトルは(同じ機能名なので)そっくりに見えがちです。

環境別の favicon は当て推量をなくします。とりわけ、Slack のリマインダーや Zoom の通話でテストの途中に注意がそれるようなときに効きます。

各ティアのための視覚言語

色はデザイントークンから借りつつ、ベースのグリフは同一に保って、ブランド認知が定着するようにしましょう。

環境アイコンの扱い
本番(Production)オーバーレイを一切載せない、最高基準のブランドアイコン。顧客向けのタブがひと目で分かるよう、これを神聖なものとして守ります。
ステージング(Staging)対角線のストライプやバッジを加えて、ここが QA やデモに使える安全なサンドボックスであることを示します。
開発(Development)遊び心のある色合いを使い、ログの間をタブ切り替えしていても開発者がローカル環境を見分けられるようにします。
プレビュー / レビューアプリPR 番号やチャンネルの頭文字をオーバーレイして、プロダクトやマーケティングが正しいビルドをクリックできるようにします。

オーバーレイはタブバーで生き残らねばならない

Example favicon at 16 by 16 pixels
16px
Example favicon at 32 by 32 pixels
32px
Example favicon at 48 by 48 pixels
48px
実際のピクセル寸法でレンダリングしています。このしくみが仕事をするのはタブの中なので、決定する前にバッジを 16px でテストしましょう。ストライプはそのサイズでも読めますが、PR 番号はたいてい読めません。

設定のブループリント

アイコンの参照を、API の URL や feature flag ですでに使っているのと同じデプロイ変数にひも付けます。

レイヤー設定する内容ヒント
Next.js Metadataprocess.env.ICON_URL を使って metadata.icons を更新します。app/layout.tsx に集約して、各ルートが正しいアイコンセットを継承するようにします。
Manifest JSON対応する PNG を伴う、環境別の manifest を配信します。Android のスプラッシュスクリーン用に purpose: "any maskable" を含めます。
HTML のフォールバックレガシーな <link rel="shortcut icon"> タグも、正しい資産を指すようにします。デプロイ時にキャッシュを無効化するため、?v={{ buildId }} クエリパラメータを追加します。

ロールアウトチェックリスト

新しいしくみは、他のコンプライアンス統制と同じようにリリースしましょう。文書化し、ピアレビューを通し、自動化します。

  1. 1

    資産を環境ごとに命名する

    環境のサフィックス(favicon-prod.png)と、キャッシュバスティング用のハッシュを使います。

  2. 2

    環境変数からタグを注入する

    必要なインデックス用タグ(rel="shortcut icon" と rel="apple-touch-icon")を、layout.tsx または document.tsx 内で環境変数から注入します。可能な限り絶対 https:// URL を使いましょう。

  3. 3

    アイコンが現れるあらゆる場所に反映する

    apple-touch icon と manifest.json のアイコン配列にも、同じ更新を反映します。

  4. 4

    カラーシステムを書き残す

    将来のリブランディングでも一貫性が保たれるよう、カラーシステムをデザイントークンの中に文書化します。

  5. 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 のアーティファクトに解決されるよう、プラットフォームチームと連携しましょう。

Generate your icon set

Keep reading