ng new を実行してすぐにデプロイしたことがあるなら、あなたは小さな罪を犯しています。それは、デフォルトの Angular 「A」アイコンをそのままにしていることです。ブラウザのタブにあの赤い三角形が表示されていることほど、「未完成のプロジェクト」を強調するものはありません。2026年、ユーザーは洗練された体験を求めており、それは Angular アプリのための鮮明で高解像度なファビコンから始まります。

Angular は、標準的な静的 HTML サイトとは異なる方法でアセットを処理します。Angular CLI が Esbuild や Webpack を使用してアプリケーションをバンドルするため、単にフォルダにファイルを置くだけでは不十分です。フレームワークに対して、ブランドアセットをどのように扱うべきか正確に伝える必要があります。たとえ一人で開発していても、大企業が作ったようなプロフェッショナルな設定方法を解説します。

ステップ 1: アセットの準備

コードを一行も書く前に、高品質なソース画像が必要です。私は常に SVG から始めることをお勧めします。なぜなら、無限にスケーリングでき、ダークモードをネイティブにサポートしているからです。未だに 16x16 の ICO ファイル一つで済ませているなら、それは 2012 年のやり方です。高 DPI ディスプレイでは、その小さなアイコンはぼやけて見えてしまいます。

ロゴを Mzu favicondl のようなツールに通して、必要なサイズを生成しましょう。最低限、32x32 の PNG、Android 用の 192x192 PNG、そして 180x180 の Apple Touch Icon が必要です。これらのサイズがなぜ重要なのか詳細は SVG ファビコンガイド をご覧ください。生成したファイルは src/assets/favicons/ ディレクトリに配置します。

ステップ 2: angular.json の設定

ここが多くの開発者が躓くポイントです。angular.json ファイルに新しいアイコンを登録しないと、ビルドプロセスで無視されてしまいます。angular.json を開き、build ターゲットの下にある assets 配列を探します。

'assets': [
  'src/favicon.ico',
  'src/assets',
  {
    'glob': '**/*',
    'input': 'src/assets/favicons',
    'output': '/'
  }
]

このオブジェクト構文を使用することで、favicons フォルダ内のすべてのファイルを最終的なビルドのルートに配置するよう Angular に指示できます。これにより、index.html から /favicon-32x32.png のようにシンプルなパスで参照できるようになります。これは Stripe のような洗練されたサービスが採用している手法と同じです。

ステップ 3: index.html の更新

ビルドシステムがファイルの場所を把握したら、次はブラウザに伝えます。src/index.html を開き、デフォルトの favicon.ico の行を削除して、以下のモダンなセットに置き換えます。

<link rel='icon' type='image/svg+xml' href='/favicon.svg'>
<link rel='alternate icon' type='image/png' href='/favicon-32x32.png'>
<link rel='apple-touch-icon' href='/apple-touch-icon.png'>
<link rel='manifest' href='/manifest.webmanifest'>

rel='alternate icon' を使うのは、SVG を理解できない古いブラウザのための賢いフォールバックです。変更が反映されない場合は、キャッシュが原因かもしれません。その際は ファビコンキャッシュの削除方法 を確認してください。

Angular における注意点

よくある間違いは base href の設定を忘れることです。サブフォルダでアプリをホストする場合、絶対パスを使うとアイコンが壊れることがあります。また、PWA を構築している場合は、manifest.webmanifest 内のアイコンパスが HTML の設定と一致していることを確認してください。細部へのこだわりが、ユーザーの信頼に繋がります。