ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
Firebase Hosting とは
Firebase Hosting は Google が提供する静的・動的サイトホスティングサービスです。CDN 配信、SSL 証明書自動発行(Let's Encrypt)、独自ドメイン対応、グローバル配信が無料枠で揃っており、個人サイトから商用 SaaS まで広く使われています。
セットアップ
# 1. firebase-tools インストール
npm install -g firebase-tools
# または
curl -sL https://firebase.tools | bash
# 2. ログイン
firebase login
# 3. プロジェクトディレクトリで初期化
mkdir my-site && cd my-site
firebase init hosting
# 対話形式:
# - Use an existing project / Create new project
# - Public directory: dist (or build / public)
# - Configure as SPA: y/n
# - GitHub Actions: y/n
# - Overwrite index.html: n
# 4. デプロイ
firebase deploy --only hosting
# 5. アクセス
# https://<project-id>.web.app
# https://<project-id>.firebaseapp.com
firebase.json の構成
{
"hosting": {
"public": "dist",
"ignore": ["firebase.json", "**/.*", "**/node_modules/**"],
"rewrites": [
{ "source": "/api/**", "function": "api" },
{ "source": "**", "destination": "/index.html" }
],
"redirects": [
{ "source": "/old", "destination": "/new", "type": 301 }
],
"headers": [
{
"source": "**/*.@(js|css)",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
]
},
{
"source": "**/*.html",
"headers": [
{ "key": "Cache-Control", "value": "public, max-age=300, must-revalidate" }
]
}
],
"cleanUrls": true,
"trailingSlash": false,
"i18n": { "root": "/localized-files" }
}
}
独自ドメイン
- Firebase Console → Hosting → 「カスタムドメインを追加」
- ドメイン入力(例:
example.com) - DNS の所有者確認用 TXT レコードを追加
- A レコード 2 つを指定値に設定
- 数時間で SSL 証明書が自動発行(Let's Encrypt)
- HTTPS 強制リダイレクトも自動
プレビューチャンネル
PR ごとに一意の URL を生成できる強力機能:
# 機能ブランチをプレビュー URL に
firebase hosting:channel:deploy pr-123
# → https://<project>--pr-123-xxxx.web.app
# 有効期限 7 日(変更可)
# 期限延長
firebase hosting:channel:deploy pr-123 --expires 30d
# チャンネル一覧
firebase hosting:channel:list
# 削除
firebase hosting:channel:delete pr-123
Cloud Functions と統合
静的ファイルに加えて、サーバサイドレンダリング (SSR) や API エンドポイント も同じドメインで提供可能:
// functions/index.js
const functions = require('firebase-functions');
exports.api = functions.https.onRequest((req, res) => {
if (req.path === '/api/hello') {
res.json({ message: 'Hello from Cloud Functions' });
} else {
res.status(404).send('Not Found');
}
});// firebase.json の rewrites で関数にルーティング
{
"hosting": {
"rewrites": [
{ "source": "/api/**", "function": "api" },
{ "source": "**", "destination": "/index.html" }
]
}
}
Cloud Run 統合
Docker コンテナベースの動的バックエンドを Firebase Hosting 経由で配信:
{
"hosting": {
"rewrites": [
{
"source": "/api/**",
"run": {
"serviceId": "my-api",
"region": "asia-northeast1"
}
}
]
}
}
Next.js / Nuxt / Astro 公式サポート
# Web Frameworks サポート(β → GA)
firebase experiments:enable webframeworks
# Next.js プロジェクト内で
firebase init hosting
# → Detect Next.js → 自動設定
# → 静的書出 / SSR / ISR を自動振り分け
firebase deploy
# → SSR ページは Cloud Functions / Cloud Run へ自動デプロイ
料金体系
| 項目 | Spark (無料) | Blaze (従量) |
|---|---|---|
| ストレージ | 10 GB | $0.026 / GB / 月 |
| 転送量 | 360 MB / 日 | $0.15 / GB |
| カスタムドメイン | 無料 | 無料 |
| SSL 証明書 | 無料 (自動) | 無料 (自動) |
| カスタムドメイン数 | 制限 | 無制限 |
| Cloud Functions 連携 | 不可 | 可 |
Vercel / Netlify との比較
| 項目 | Firebase Hosting | Vercel | Netlify |
|---|---|---|---|
| 無料転送量 | 360 MB/日 ≒ 10.5 GB/月 | 100 GB/月 | 100 GB/月 |
| Next.js 公式 | ○ | ◎ (本拠地) | ○ |
| Auth / DB 連携 | ◎ (Firebase Auth / Firestore) | △ (有料) | △ (有料) |
| エッジランタイム | Cloud Run / Functions | Edge Functions | Edge Functions |
| ビルド時間 | 制限なし (Spark で月制限) | 6000 分/月 | 300 分/月 |
| CLI 中心 | ◎ | ○ | ○ |
運用 Tips
- キャッシュ制御は
Cache-Controlを HTML 短く / JS・CSS 長く(fingerprint 付)に - 大量静的ファイルは gzip / brotli 自動圧縮済
- サブパス(
/blog)に別プロジェクトをホストするには Hosting Rewrites +site - GitHub Actions と統合でPR ごと自動プレビュー
- サイトを複数登録するには
firebase target:apply hosting prod my-site-prod
FAQ
Q: 無料枠の 360 MB/日は実用的?
A: 小規模なブログ・ポートフォリオなら十分。月 100 万 PV 等になると Blaze 必須。
Q: 既存 Web サーバから移行する手順は?
A: 静的ファイルを public/ にコピー → firebase deploy → DNS 切替(A レコード変更)→ 完了。
Q: WordPress を Firebase Hosting で動かせる?
A: 不可(PHP 非対応)。ヘッドレス WP API + 静的サイトジェネレータ(Next/Astro)構成なら可。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページ
子ページはありません
同階層のページ
- プロジェクトの作成とアプリ連携
- Firebaseアプリの導入(初期設定)と開発用ローカルサーバの起動方法
- Firebase Hosting(執筆途中)
- エラー一覧
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- 【django】ログイン 認証機能 2026-09-08 03:22:09
- MySQL ERROR 1063 Incorrect column specifier for column|原因と直し方 2026-09-08 03:11:09
- 【PHPエラー】Object of class stdClass could not be converted to string 2026-09-07 07:46:04
- Julia Genie ローカル開発サーバ起動完全ガイド 2026-09-07 07:46:04
- Wi-Fi とは|規格と世代(Wi-Fi 4〜7)・周波数帯・CSMA/CA・WPA3 NEW 2026-09-07 07:45:13
- set コマンドでシェルオプションと位置パラメータを操作 | bash 2026-09-07 07:45:13
- JPEG(.jpg/.jpeg)画像形式の完全ガイド — 仕様・マジックナンバー・他形式との比較・EXIF 2026-09-07 07:45:13
- UE5 Get Overlapping Actorsで特定クラスだけ処理|Class Filter・Cast To 2026-09-07 07:45:13
- Linuxで特定拡張子のファイルを再帰削除|find -deleteの安全手順 2026-09-07 07:45:13
- Django CBVでテンプレートに値を渡す|get_context_data・extra_context 2026-09-07 07:45:13
- Linuxで複数ファイルの文字列を一括置換|find・sed・xargsの安全手順 2026-09-07 07:45:13
- Laravelルートグループ|prefix・middleware・nameで一括管理 2026-09-07 07:45:13
- Linux whichコマンドの使い方|絶対パス取得とtype・command -vの違い 2026-09-07 07:45:13
- Linux catコマンドの使い方|行番号表示・複数ファイル連結 2026-09-07 07:45:13
- unable to execute 'gcc': No such file or directory 2026-09-07 07:45:13
コメントを削除してもよろしいでしょうか?