シングルファイルのHTMLダッシュボードや軽量なオフラインツールを構築したことがあるなら、外部アセットの管理がいかに面倒かご存知でしょう。すべてを1つのファイルに綺麗にまとめたいのに、ブラウザはアイコンが見つからないと404エラーを吐き出し、タブには真っ白な四角が表示されてしまいます。この特有のシナリオに対する最もスマートな解決策が、favicon base64 inline(Base64インライン化)です。
サーバー上の外部画像ファイルにリンクする代わりに、画像データを直接HTML文字列としてエンコードします。MercariやLINEなどの開発チームでも、社内用の単一ファイル診断ツールでこの手法が使われているのを見かけます。これにより、オフライン環境でもアイコンが瞬時に読み込まれ、プロジェクトを完全に独立させることができます。
Favicon Base64 Inlineの実装方法
アイコンのインライン化は簡単ですが、HTMLを肥大化させないためには少しの工夫が必要です。具体的な手順は以下の通りです。
ステップ1:元画像を最小限にする
Base64エンコードを行うと、元のファイルサイズから約33%増加します。512x512の巨大なPNGをエンコードすると、HTMLのhead部分が悲惨なことになります。最適化された16x16または32x32のPNGに留めるか、さらに言えば、文字列が短くなりやすいモダンなSVGアイコンを使用するのがベストです。
ステップ2:Base64文字列を生成する
ターミナルで base64 -i icon.png(macOS/Linux)のようなコマンドを実行して生成できます。視覚的なツールが好みなら、画像をMzu favicondlにドロップするだけで、最適化されたコピペ用の文字列が取得できます。
ステップ3:HTMLコードを追加する
文字列を取得したら、linkタグの href 属性に直接配置します。data:image/png;base64, というプレフィックスに注目してください。これが、ブラウザに巨大なテキストブロックの解析方法を指示します。
<link rel='icon' type='image/png' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA...' />いつ使うべきか(そして使うべきでないか)
このテクニックを乱用する開発者をよく見かけます。これは特殊なツールであり、デフォルトの戦略ではありません。適切な使いどころを知る必要があります。
- 使うべき場面: シングルファイルWebアプリ、ローカル開発ツール、オフラインドキュメント、そして外部依存をゼロにしてfaviconの404エラーを防ぎたいカスタムエラーページ。
- 使ってはいけない場面: 一般的なコンテンツサイトや大規模なWebアプリ。ブラウザは外部画像を完璧にキャッシュします。インライン化すると、ユーザーはページを読み込むたびに同じ画像データを再ダウンロードすることになり、パフォーマンスが低下します。
Base64文字列を短く保ち、スタンドアロンのHTMLファイルでのみ使用して、すっきりとしたブラウザタブの体験を楽しんでください。