05
🚀 創業編 Chapter 05

世界に公開

海風テラスのサイトをインターネットに公開する

約50分
デプロイ · intro DNS · intro HTTPS · intro Git · intermediate
目次(35セクション)
🎬 Story — Introduction

海風テラスのサイトが完成した。HTMLの構造、CSSのデザイン、JavaScriptのインタラクション。すべてがローカル環境で完璧に動いている。

あとは——世界に公開するだけだ。


あなた: 「Mikaさんから”いつ公開できますか?“ってまた連絡来てる。友人にも宣伝したいって。」

あなた: 「公開って、具体的には何をすればいいんですか?ファイルをどこかに送る?」

Yuki: 「ざっくり言うと3ステップ。まず、Gitのブランチ運用を整えて安全にコードを管理できるようにする。次にデプロイサービスにファイルをアップロードする。最後にドメインとHTTPSを設定する。」

あなた: 「ドメインって、うちのサイトのアドレスだよね。“umikaze-terrace.com” みたいな。」

Yuki: 「そう。ドメインを買って、DNSで設定して、HTTPSで暗号化する。Chapter 1で学んだDNSの話、覚えてる?」

あなた: 「インターネットの電話帳…ですよね。ドメイン名をIPアドレスに変換する。」

Yuki: 「よく覚えてるね!今日はそれを実際に設定していくよ。あと、Gitのブランチも重要。今まで1本の線で開発してきたけど、これからは”安全に並行作業する”方法を覚えよう。」


あなたが嬉しそうにスマホを取り出す。

あなた: 「サイトが公開されたら、ShimaLinkの公式サイトにも”実績”として載せよう。最初のクライアントのサイトを公開したんだぜ!」

Yuki: 「その前に、本番公開で失敗しないための手順をしっかり学ぼう。ローンチはエキサイティングだけど、準備が全てだよ。」

Gitブランチ — 安全な並行開発

Chapter 1でGitの基本(add, commit)を学んだ。でもこれまではずっと1本の線(mainブランチ)で開発してきた。チームで開発するとき、全員が同じブランチを触ると大事故が起きる。

Yuki: 「ブランチは”平行世界”みたいなもの。新機能を試す世界と、安定版の世界を分けておける。失敗しても本番に影響しないんだ。」

ブランチとは

main:      A --- B --- C --- F (安定版)
                  \         /
feature:           D --- E   (新機能開発)
  • main: 本番環境にデプロイされる安定版
  • feature: 新機能や修正を開発するブランチ

ブランチの基本操作

# 現在のブランチを確認
git branch
# * main

# 新しいブランチを作成して切り替え
git checkout -b feature/reservation-form
# または(新しい書き方)
git switch -c feature/reservation-form

# ブランチの一覧
git branch
#   main
# * feature/reservation-form

# mainに戻る
git checkout main
# または
git switch main

ブランチ命名規則

チームで統一した命名規則を使うと管理しやすい:

種類接頭辞
新機能feature/feature/reservation-form
バグ修正fix/fix/menu-filter-bug
ホットフィックスhotfix/hotfix/security-patch
リファクタリングrefactor/refactor/css-cleanup

マージ — ブランチを統合する

開発が完了したら、featureブランチをmainに統合(マージ)する:

# mainブランチに切り替え
git switch main

# featureブランチをマージ
git merge feature/reservation-form

# マージ後、不要なブランチを削除
git branch -d feature/reservation-form

コンフリクトの解消

同じファイルの同じ箇所を別々のブランチで編集すると、コンフリクト(衝突)が起きる:

<<<<<<< HEAD
<h1>海風テラス — Ocean Breeze Cafe</h1>
=======
<h1>海風テラス — Umikaze Terrace</h1>
>>>>>>> feature/update-title
  • <<<<<<< HEAD から ======= まで: 現在のブランチの内容
  • ======= から >>>>>>> feature/... まで: マージしようとしたブランチの内容

解消手順:

  1. どちらの内容を採用するか決める
  2. マーカー(<<<<, ====, >>>>)を削除する
  3. git addgit commit で解決を記録
<!-- 解消後 -->
<h1>海風テラス — Umikaze Terrace</h1>

GitHubとの連携

ローカルのGitリポジトリをGitHubに接続する:

# GitHubにリポジトリを作成後
git remote add origin https://github.com/shimalink/umikaze-terrace.git

# mainブランチをプッシュ
git push -u origin main

# featureブランチをプッシュ
git push origin feature/reservation-form

プルリクエスト(PR)

GitHubでは、直接mainにマージするのではなく、プルリクエストを使ってレビューしてからマージするのが一般的:

  1. featureブランチをGitHubにプッシュ
  2. GitHub上でプルリクエストを作成
  3. チームメンバーがコードをレビュー
  4. 承認後にマージ

Yuki: 「PRは”このコード、mainに入れていい?“とチームに確認する仕組み。コードレビューはバグを防ぐだけじゃなく、チーム全体の技術力を底上げするんだ。」

海風テラスのブランチ戦略

# 予約フォーム機能の開発
git switch -c feature/reservation-form
# ... 開発 ...
git add .
git commit -m "予約フォームのバリデーション追加"
git push origin feature/reservation-form
# → GitHubでPRを作成 → レビュー → マージ

# mainを最新に
git switch main
git pull origin main

ポイント

  • main ブランチは常に安定版を保つ
  • 新機能は feature/ ブランチで開発する
  • マージ前にコンフリクトがないか確認する
  • GitHubのプルリクエストでコードレビューを行う
  • ブランチ名は feature/, fix/ などの接頭辞で統一する

デプロイ — サイトを世界に公開する

ローカル環境(localhost)でしか見られなかったサイトを、世界中の誰でもアクセスできるようにする。これが「デプロイ(deploy)」だ。

Yuki: 「デプロイは”引っ越し”みたいなもの。自分の部屋(ローカル)で作ったものを、みんなが来れるお店(サーバー)に移すんだ。」

デプロイの選択肢

静的サイト(HTML/CSS/JS)のデプロイ方法は複数ある:

サービス特徴費用
GitHub PagesGitHubリポジトリから直接公開無料
VercelGit連携で自動デプロイ無料プランあり
Netlifyドラッグ&ドロップでもデプロイ可無料プランあり
Cloudflare Pages高速CDNで配信無料プランあり

Yuki: 「最初はGitHub PagesかVercelがおすすめ。どちらもGitにプッシュするだけで自動的にデプロイされるよ。」

GitHub Pages でデプロイ

Step 1: GitHubにリポジトリを作成

# GitHubでリポジトリ作成後
git remote add origin https://github.com/shimalink/umikaze-terrace.git
git push -u origin main

Step 2: GitHub Pages を有効にする

  1. GitHubのリポジトリページを開く
  2. Settings → Pages
  3. Source: 「Deploy from a branch」を選択
  4. Branch: 「main」、フォルダ: 「/ (root)」を選択
  5. Save をクリック

数分後、サイトが https://shimalink.github.io/umikaze-terrace/ で公開される。

Vercel でデプロイ

Vercelはより高機能なデプロイプラットフォーム:

Step 1: Vercelにサインアップ

GitHubアカウントでログインする。

Step 2: プロジェクトをインポート

  1. 「New Project」をクリック
  2. GitHubリポジトリを選択
  3. 「Deploy」をクリック

これだけで完了。以降、GitHubにプッシュするたびに自動デプロイされる。

自動デプロイの仕組み

[ローカルで編集] → [git push] → [Vercelが検知] → [自動ビルド&デプロイ]

この流れを**CI/CD(継続的インテグレーション/継続的デプロイ)**と呼ぶ。手動でファイルをアップロードする必要がない。

本番環境と開発環境

環境URL用途
開発環境localhost:3000開発中の動作確認
ステージングstaging.umikaze-terrace.com公開前の最終チェック
本番環境umikaze-terrace.com実際のユーザーが見るサイト

Yuki: 「本番環境に直接デプロイするのは危険。ステージング環境で確認してから本番に出すのがプロの流れだよ。」

デプロイ前のチェックリスト

本番公開前に確認すべきこと:

- [ ] すべてのリンクが正しく動作するか
- [ ] 画像が表示されるか(パスは正しいか)
- [ ] スマホ・タブレット・PCで表示を確認
- [ ] フォームが正しく動作するか
- [ ] ページの読み込み速度は許容範囲か
- [ ] metaタグ(title, description)が設定されているか
- [ ] favicon が設定されているか
- [ ] console.log() のデバッグコードを削除したか
- [ ] 404エラーページが用意されているか

ポイント

  • 静的サイトのデプロイは GitHub Pages や Vercel で無料でできる
  • GitにプッシュするだけでCI/CDで自動デプロイが走る
  • 本番デプロイ前にチェックリストで最終確認する
  • ステージング環境で検証してから本番に出すのがベストプラクティス
  • デプロイ後もブラウザの開発者ツールでエラーがないか確認する

ドメインとDNS — サイトの「住所」を設定する

Chapter 1でDNSの仕組みを学んだ。ドメイン名をIPアドレスに変換する「インターネットの電話帳」だ。今回はそれを実際に設定する。

Yuki: 「GitHub PagesやVercelにデプロイすると、shimalink.github.io みたいなURLになる。でもクライアントに渡すなら、独自ドメイン umikaze-terrace.com の方がプロフェッショナルだよね。」

ドメインの仕組み

umikaze-terrace.com
├── umikaze-terrace → ドメイン名(自分で選ぶ)
└── .com            → トップレベルドメイン(TLD)
TLD用途年間費用の目安
.com商用(最も一般的)¥1,500〜2,000
.jp日本のサイト¥3,000〜4,000
.co.jp日本の法人¥4,000〜6,000
.dev開発者向け¥1,500〜2,500
.okinawa沖縄関連¥2,000〜3,000

ドメインの購入

ドメインは「レジストラ」と呼ばれるサービスで購入する:

サービス特徴
Google Domainsシンプル、Google連携
Cloudflare Registrar原価で購入可能
お名前.com日本語サポート充実
ムームードメイン日本語、初心者向け

DNSレコードの設定

ドメインを購入したら、「どのサーバーに接続するか」をDNSレコードで設定する:

レコード用途
AドメインをIPアドレスに紐づけumikaze-terrace.com → 185.199.108.153
CNAMEドメインを別のドメインに紐づけwww → shimalink.github.io
TXTテキスト情報(所有権証明など)ドメイン認証用
MXメール用サーバーの指定メール運用時

GitHub Pages にカスタムドメインを設定

Step 1: DNSレコードを追加

ドメインのDNS設定画面で以下を追加:

タイプ: A
名前: @
値:
  185.199.108.153
  185.199.109.153
  185.199.110.153
  185.199.111.153

タイプ: CNAME
名前: www
値: shimalink.github.io

Step 2: GitHubの設定

  1. リポジトリの Settings → Pages
  2. Custom domain に umikaze-terrace.com を入力
  3. Save をクリック
  4. 「Enforce HTTPS」にチェック

Step 3: 反映を待つ

DNS設定の反映には最大48時間かかることがある(通常は数分〜数時間)。

# DNSの反映を確認
nslookup umikaze-terrace.com
# または
dig umikaze-terrace.com

Vercelにカスタムドメインを設定

Vercelの場合はもっと簡単:

  1. プロジェクトの Settings → Domains
  2. ドメイン名を入力して Add
  3. 表示されたDNSレコードをレジストラに設定
  4. Vercelが自動的にSSL証明書を発行

DNS伝播(浸透)とは

DNSレコードを変更すると、世界中のDNSサーバーに変更が行き渡るまで時間がかかる。これを「DNS伝播」と呼ぶ。

[レジストラで変更]
    ↓ 数分〜数時間
[ルートDNSサーバー]

[各国のDNSサーバー]

[ISPのDNSサーバー]

[ユーザーのブラウザ]

Yuki: 「“サイトが見られない!“と焦る前に、DNSの伝播を待とう。確認には nslookup コマンドが便利だよ。」

サブドメイン

メインのドメインの前に文字を追加したもの:

umikaze-terrace.com       → メインサイト
www.umikaze-terrace.com   → wwwサブドメイン
blog.umikaze-terrace.com  → ブログ用
staging.umikaze-terrace.com → ステージング環境

サブドメインは追加購入不要。DNSレコードで設定するだけだ。

ポイント

  • ドメインはレジストラで購入し、年間で更新する
  • AレコードでIPアドレスに、CNAMEで別のドメインに紐づけ
  • DNS設定の反映には数分〜最大48時間かかる
  • GitHub PagesもVercelもカスタムドメインに対応
  • サブドメインは追加費用なしで自由に作れる

HTTPS — 安全な通信を実現する

Chapter 1で「HTTPはハガキ、HTTPSは封筒」と学んだ。HTTPSは通信を暗号化して、ユーザーのデータを守る仕組みだ。予約フォームで個人情報を扱う海風テラスのサイトには必須だ。

Yuki: 「2026年の今、HTTPSは”オプション”じゃなくて”標準”。Google ChromeはHTTPのサイトに”保護されていない通信”って警告を出すし、SEOにも影響するよ。」

HTTPSの仕組み

HTTPS = HTTP + TLS(Transport Layer Security)

1. ブラウザがサーバーに接続を要求
2. サーバーがSSL証明書を提示
3. ブラウザが証明書の正当性を確認
4. 暗号化された通信路(トンネル)を確立
5. データが暗号化されて送受信される
項目HTTPHTTPS
暗号化なしあり
データの盗聴可能不可能
改ざん検知なしあり
アドレスバー「保護されていない」警告鍵マーク表示
SEO不利有利

SSL証明書とは

SSL証明書は「このサイトは本物ですよ」という証明書。認証局(CA)が発行する。

種類認証レベル用途
DV(ドメイン認証)ドメインの所有者確認個人サイト、小規模ビジネス
OV(組織認証)組織の実在確認企業サイト
EV(拡張認証)厳格な審査銀行、EC大手

海風テラスのようなサイトにはDV証明書で十分だ。

Let’s Encrypt — 無料のSSL証明書

Let’s Encrypt は無料でSSL証明書を発行してくれるサービス。GitHub Pages、Vercel、Netlifyなどの主要プラットフォームは自動的にLet’s Encryptの証明書を設定してくれる。

GitHub Pagesの場合

Settings → Pages → 「Enforce HTTPS」にチェックを入れるだけ。

Vercelの場合

カスタムドメインを設定すると自動的にSSL証明書が発行される。設定不要。

HTTPからHTTPSへのリダイレクト

ユーザーが http://umikaze-terrace.com にアクセスした場合、自動的に https:// に転送する設定:

http://umikaze-terrace.com
    ↓ 301リダイレクト
https://umikaze-terrace.com

GitHub PagesやVercelでは「Enforce HTTPS」を有効にすると自動的にリダイレクトされる。

Mixed Content に注意

HTTPSのページからHTTPのリソースを読み込むと「Mixed Content」エラーになる:

<!-- HTTPSのページで... -->

<!-- NG: HTTPの画像を読み込んでいる -->
<img src="http://example.com/photo.jpg">

<!-- OK: HTTPSの画像 -->
<img src="https://example.com/photo.jpg">

<!-- OK: プロトコル相対URL -->
<img src="//example.com/photo.jpg">

<!-- OK: 相対パス(同じサーバー内) -->
<img src="/images/photo.jpg">

Yuki: 「HTTPS化したら、サイト内のすべてのリソースもHTTPSで読み込むようにしよう。CSSファイル内のフォントURLなんかも見落としやすいから注意だよ。」

HTTPSの確認方法

サイトをデプロイしたら、以下を確認:

  1. ブラウザのアドレスバー: 鍵マークが表示されているか
  2. HTTPでアクセス: 自動的にHTTPSにリダイレクトされるか
  3. 開発者ツール: Console に Mixed Content 警告が出ていないか
# ターミナルで確認
curl -I https://umikaze-terrace.com
# HTTP/2 200 が返ればOK

curl -I http://umikaze-terrace.com
# HTTP/1.1 301 Moved Permanently が返ればリダイレクト設定OK

セキュリティヘッダー

より安全にするためのHTTPヘッダー設定(Vercelの場合 vercel.json で設定可能):

{
  "headers": [
    {
      "source": "/(.*)",
      "headers": [
        { "key": "X-Content-Type-Options", "value": "nosniff" },
        { "key": "X-Frame-Options", "value": "DENY" },
        { "key": "Referrer-Policy", "value": "strict-origin-when-cross-origin" }
      ]
    }
  ]
}

これらのヘッダーは、クリックジャッキングやMIMEタイプ偽装などの攻撃を防ぐ。

ポイント

  • HTTPSは現代のWebサイトの必須要件
  • Let’s Encrypt で無料のSSL証明書が取得できる
  • GitHub Pages / Vercel は自動でHTTPSを設定してくれる
  • HTTPからHTTPSへのリダイレクトを設定する
  • Mixed Content(HTTP/HTTPSの混在)に注意する
  • デプロイ後は鍵マークの表示を確認する
📖 Story — Conclusion

ブラウザのアドレスバーに「umikaze-terrace.com」と入力する。鍵マークが表示され、海風テラスのサイトが世界中からアクセス可能になった。


あなた: 「見ろよ、スマホからもアクセスできる!しかもアドレスバーに鍵マーク付いてる!」

Mika: 「わぁ…!本当にインターネットに公開されてる。友人に早速URLを送ります!」

Mikaが笑顔でスマホにURLを打ち込んでいる。その横で、あなたはGitのログを眺めていた。

$ git log --oneline
f8a2e1d HTTPS設定とリダイレクトの追加
b3c7d9a メニューフィルター機能の実装
9e1f4b6 予約フォームのバリデーション追加
7d2a8c3 レスポンシブデザインの調整
4b6e0f2 CSSレイアウトのリファクタリング
a1b2c3d ShimaLinkの最初のランディングページを作成

6つのコミット。最初の1行から始まり、ここまで来た。

あなた: 「最初はpwdコマンドすら知らなかったのに…いつの間にかWebサイトを作って公開できるようになったんですね。」

Yuki: 「すごい成長だよ。でもね、これはまだ始まりの始まり。」

あなた: 「実はさ、Mikaさんの友人からも問い合わせが来てるんだ。“ダイビングショップのサイトを作って欲しい”って。あと、“予約システムをもっと本格的にしたい”って声も出てきてる。」

Yuki: 「複数のクライアントを抱えるなら、もっと効率的な開発手法が必要になるね。フレームワーク、データベース、API…ShimaLinkとしてスケールするための次のステージだ。」

あなた: 「次のステージ…」

遠くに見える沖縄の海。潮風が窓から吹き込む。ShimaLinkの「創業編」はここで一区切り。でも、物語はまだまだ続く——。


創業編 完結! ShimaLinkの物語は「成長編」へ続く。フレームワーク、API開発、データベース…スタートアップの本格的な技術基盤を構築していく。

🧠 理解度チェック

Q1.Gitで新しいブランチを作成して切り替えるコマンドはどれ?

💡 予約フォーム機能を開発するときに、feature ブランチを作ったよね。

Q2.Gitでコンフリクトが発生するのはどんなとき?

💡 Kentaがサイトのタイトルを変更して、同じ場所を編集してしまったときの話を思い出そう。

Q3.GitHub Pagesの特徴として正しいのはどれ?

💡 海風テラスのサイトを公開するために使ったデプロイ先だ。

Q4.DNSのAレコードの役割はどれ?

💡 umikaze-terrace.com をGitHub PagesのIPアドレスに紐づけた設定だね。

Q5.HTTPSで通信が暗号化される仕組みを何と呼ぶ?

💡 海風テラスで予約者の個人情報を安全に送受信するために必要な技術だ。

Q6.HTTPSのページでHTTPのリソースを読み込むとどうなる?

💡 HTTPS化した後、画像のURLがhttpのままだったときに起きた問題だね。

Q7.DNS設定を変更した後、反映に時間がかかる理由は?

💡 ドメインを設定した直後にサイトが見られなくて焦った、あの場面を思い出そう。

Q8.プルリクエスト(PR)の主な目的は?

💡 Yukiが「チームに確認する仕組み」と説明してくれたGitHubの機能だ。

よくある質問

git push で rejected エラーが出る

リモートに自分のローカルにない変更がある場合に発生します: ```bash # まずリモートの変更を取り込む git pull origin main # コンフリクトがあれば解決してから git add . git commit -m "マージコンフリクトを解決" # その後にプッシュ git push origin main ``` **注意**: `git push --force` は他の人の変更を上書きしてしまうので、チーム開発では絶対に避けましょう。 `--force` が必要な場面は非常に限られています。迷ったら `git pull` で解決してください。

Gitのコンフリクトの解消方法がわからない

コンフリクトが発生すると、ファイルにマーカーが挿入されます: ``` <<<<<<< HEAD 自分の変更内容 ======= 相手の変更内容 >>>>>>> feature/branch-name ``` **解消手順**: 1. マーカー(`<<<<`, `====`, `>>>>`)を含む箇所を見つける 2. どちらの内容を採用するか決める(または両方を組み合わせる) 3. マーカーを削除する 4. ファイルを保存 5. `git add [ファイル名]` 6. `git commit -m "コンフリクトを解消"` **VS Codeの場合**: コンフリクト箇所に「Accept Current」「Accept Incoming」「Accept Both」のボタンが表示されます。

GitHub Pages にデプロイしたのにサイトが表示されない

以下を順番にチェック: **1. Pages の設定を確認** - Settings → Pages → Source が正しいか - Branch が `main`、フォルダが `/ (root)` になっているか **2. index.html が存在するか** - リポジトリのルートに `index.html` があるか - ファイル名が完全に `index.html`(大文字小文字注意) **3. URLを確認** - `https://[ユーザー名].github.io/[リポジトリ名]/` - リポジトリ名がURLに含まれる点に注意 **4. デプロイ完了を待つ** - Actions タブで緑のチェックマークが付いているか確認 - 初回は数分かかることがある **5. キャッシュをクリア** - `Cmd + Shift + R` で強制リロード

カスタムドメインを設定したのにサイトにアクセスできない

**DNS伝播に時間がかかっている可能性が高いです。** **確認手順**: 1. **DNSレコードの確認** ```bash nslookup umikaze-terrace.com # IPアドレスが表示されるか確認 ``` 2. **伝播状況の確認** - [dnschecker.org](https://dnschecker.org) でグローバルに確認できます 3. **よくある原因**: - DNSレコードの設定値が間違っている - A レコードのIPアドレスが正しいか - CNAME の値に末尾のドット(.)が必要な場合がある - レジストラの設定画面で「保存」を押し忘れている 4. **待機時間の目安**: - 通常: 数分〜1時間 - 最大: 48時間 焦らず待ちましょう。24時間経っても反映されない場合はレコード設定を再確認してください。

HTTPSの鍵マークが表示されない

HTTPS設定後に鍵マークが出ない原因: **1. Mixed Content の問題** HTTPSページ内にHTTPのリソースがある: ```html <!-- NG: httpの画像 --> <img src="http://example.com/photo.jpg"> <!-- OK: httpsに変更 --> <img src="https://example.com/photo.jpg"> <!-- OK: 相対パス --> <img src="/images/photo.jpg"> ``` **確認方法**: F12 → Console タブで「Mixed Content」警告を探す **2. SSL証明書がまだ発行されていない** - GitHub Pages: 「Enforce HTTPS」を有効にして数分待つ - Vercel: ドメイン追加後、自動発行を待つ(最大数分) **3. CSSやJS内のURLもチェック** ```css /* NG */ @import url('http://fonts.googleapis.com/...'); /* OK */ @import url('https://fonts.googleapis.com/...'); ```

git pull と git fetch の違いは?

| コマンド | 動作 | |---------|------| | `git fetch` | リモートの変更を**取得するだけ**(マージしない) | | `git pull` | リモートの変更を**取得してマージ**(fetch + merge) | ```bash # fetch: 安全に確認してからマージ git fetch origin main git log origin/main # リモートの変更を確認 git merge origin/main # 納得したらマージ # pull: 一気にやる(通常はこちらでOK) git pull origin main ``` **使い分け**: - 通常は `git pull` でOK - リモートの変更を確認してからマージしたいなら `git fetch` → `git merge`

Vercelでデプロイが失敗する

Vercelのデプロイ失敗の主な原因: **1. ビルドエラー** - Deployments タブでエラーログを確認 - ローカルでビルドが通るか確認 **2. ファイルパスの大文字小文字** ``` <!-- ローカル(Mac)では動くがVercelでは失敗 --> <img src="Images/Photo.jpg"> <!-- ファイル名: images/photo.jpg --> ``` Macはデフォルトで大文字小文字を区別しないが、Vercelのサーバー(Linux)は区別する。 **3. 環境変数の未設定** - ローカルの `.env` ファイルの変数がVercelに設定されているか - Settings → Environment Variables で確認 **4. ルートディレクトリの指定** - `index.html` がプロジェクトのルートにあるか - サブディレクトリにある場合は Root Directory を設定

ブランチを間違えてコミットしてしまった

まだプッシュしていない場合の対処法: **直前のコミットを取り消す(変更は残す)** ```bash # コミットを取り消し、変更をステージングに戻す git reset --soft HEAD~1 # 正しいブランチに切り替え git switch feature/correct-branch # 改めてコミット git commit -m "正しいメッセージ" ``` **すでにプッシュしてしまった場合**: ```bash # cherry-pick で正しいブランチにコミットをコピー git switch feature/correct-branch git cherry-pick [コミットハッシュ] # 間違ったブランチからコミットを削除 git switch main git reset --soft HEAD~1 git stash # 変更を一時退避 ``` **迷ったらまず**: `git log --oneline` で現状を確認してから行動しましょう。

デプロイ後にローカルと表示が違う

ローカルと本番環境で表示が違う原因: **1. ファイルパスの問題** ```html <!-- ローカルでは動くが本番では動かない --> <link rel="stylesheet" href="/style.css"> <!-- GitHub Pages: /repository-name/style.css が正しいパスかも --> <!-- 安全な相対パス --> <link rel="stylesheet" href="style.css"> ``` **2. ブラウザキャッシュ** - `Cmd + Shift + R` で強制リロード - シークレットウィンドウで確認 **3. ビルド対象の漏れ** - 新しく作ったファイルが `git add` されていない - `.gitignore` で除外されていないか確認 **4. 大文字小文字の違い**(前述) **確認手順**: 本番環境の開発者ツール → Network タブで、404エラーのファイルがないか確認

Let's Encrypt の証明書って本当に安全?

**はい、安全です。** Let's Encrypt は世界で最も広く使われているSSL証明書発行機関です。 | 項目 | Let's Encrypt | 有料証明書 | |------|--------------|----------| | 暗号化の強度 | 同じ | 同じ | | ブラウザ対応 | ほぼ全て | ほぼ全て | | 有効期間 | 90日(自動更新) | 1年 | | サポート | コミュニティ | ベンダーサポート | | 費用 | 無料 | 年間数千〜数万円 | **有料証明書が必要な場合**: - OV/EV証明書が求められるとき(組織の実在証明) - 特定の業界規制に準拠する必要があるとき **海風テラスのような一般的なWebサイト**では、Let's Encrypt のDV証明書で十分です。GitHub Pages や Vercel は自動で更新してくれるので、証明書の期限切れの心配もありません。