Rocky Linux 9 一覧へ戻る トップRocky Linux 9 / サイトのコンテンツ管理(Git/GitHub)
Rocky Linux 9 ・ コンテンツ管理

🔀 サイトのコンテンツ管理(Git/GitHub)

このサイト自体をGit+GitHubでバージョン管理し、複数端末からの同時編集事故を防いでいる仕組みと、実際の運用フローの紹介

Git + GitHub 非公開リポジトリ 複数端末での同時編集事故を防止 図解つき

1. はじめに:なぜサイトをGit管理することにしたのか

このサイトは複数の端末・複数の作業セッションから並行して更新することがあります。ある時、片方の端末で直したばかりの内容が、もう片方の端末が「少し前の古い状態」のファイルをそのままアップロードしてしまったことで、静かに消えてしまう事故が実際に起きました。

実際に起きた事故

A端末で修正 → 保存直後に、B端末が(A端末の修正を知らないまま)自分の手元にあった古いコピーをアップロード → A端末の修正が跡形もなく上書きされて消える。単純にファイルをアップロードするだけの運用では、「今、他の誰か(何か)が新しく直したばかりかどうか」を知る手段がありませんでした。

これを防ぐために導入したのが、プログラマーの世界で標準的に使われているバージョン管理システム「Git」と、そのクラウド版である「GitHub」です。

2. Git/GitHubとは?(基礎知識の整理)

まず言葉の意味から整理します。

用語身近な例え役割
Gitゲームの「セーブデータ」を記録する仕組みそのものファイルの変更履歴を、手元のPC(サーバー)の中に記録するソフトウェア。いつでも過去のセーブポイントに戻せる。
GitHubそのセーブデータを預けておく「オンライン倉庫」Gitの履歴をインターネット上に保管・共有できるサービス。複数の場所からアクセスできる「共通の正本」を置いておける。
リポジトリ(Repository)1つのセーブデータの入れ物(フォルダ全体)このサイトの場合、/var/www/htmlフォルダ全体が1つのリポジトリに対応する。
コミット(Commit)「ここまで進んだのでセーブ」の操作変更内容に短いメモ(コミットメッセージ)を添えて記録する行為。
push/pullセーブデータの「アップロード/ダウンロード」push=手元の記録をGitHubへ送る。pull=GitHub上の最新を手元に取り込む。

■ 全体像(役割分担)

[ 端末A(PCまたは作業セッション) ]        [ 端末B(別のPCまたは作業セッション) ]
        │  git push / pull                          │  git push / pull
        ▼                                            ▼
              ┌─────────────────────────────┐
              │   GitHub(非公開リポジトリ)    │  ← 「共通の正本」を1箇所に集約
              │   変更履歴をすべて記録         │
              └─────────────────────────────┘
                              │ git pull
                              ▼
              ┌─────────────────────────────┐
              │  自宅サーバー(Rocky Linux 9)  │
              │  /var/www/html(Webサイト実体)│
              └─────────────────────────────┘

ポイントは、「誰か1人が最後にpushした内容」がGitHub上の"正本"として一元管理されることです。他の端末は作業を始める前に必ずGitHubから最新版を取り込む(pull)ので、「知らないうちに古い内容で上書きしてしまう」ことが構造的に起こらなくなります。

3. 導入手順(登録〜設定)

STEP 1・GitHubのアカウント登録とリポジトリ作成

github.comでアカウントを作成し(無料)、ログイン後に「New repository」からリポジトリを新規作成します。このサイトのソースコード自体を公開する意図はないため、公開範囲は必ず「Private(非公開)」を選択します。

Public(公開)とPrivate(非公開)の違い

Publicは誰でも中身を閲覧できるリポジトリ、Privateは招待された本人(+許可した相手)しか中身を見られないリポジトリです。自宅サーバーの構成が推測できる情報を含むため、必ずPrivateで作成します。

STEP 2・サーバー側でGitリポジトリを初期化

Webサイトの実体があるディレクトリで、既存のファイルをそのまま取り込む形でGit管理を開始します。

既存ディレクトリをGit管理下に置く
cd /var/www/html
git init
git add -A
git commit -m "初回コミット:既存サイトを取り込み"
STEP 3・サーバー専用の「デプロイキー」を作成

サーバーからGitHubへパスワード無しで安全に接続するため、このリポジトリ専用のSSH鍵(デプロイキー)を作成します。自分のGitHubアカウント本体のログイン鍵とは別に、「このリポジトリだけにアクセスできる専用の鍵」を用意するのがポイントです。

サーバー上でリポジトリ専用の鍵を生成
ssh-keygen -t ed25519 -f ~/.ssh/<デプロイ鍵のファイル名> -N ""

生成された公開鍵(.pubの方)の中身を、GitHubリポジトリの「Settings → Deploy keys → Add deploy key」から登録します。サイトの更新にはpush(書き込み)も行うため、「Allow write access」にチェックを入れて登録します。

STEP 4・リモート(GitHub側の接続先)を設定

サーバー上のGitリポジトリに、GitHub側の接続先(originという名前で管理するのが慣習)を登録し、SSH接続時にSTEP 3の専用鍵を使うよう設定します。

接続先の登録
git remote add origin git@github.com:<あなたのGitHubアカウント>/<リポジトリ名>.git
初回アップロード
git push -u origin master

ここまでできれば導入完了

GitHub側のリポジトリを開き、サイトのファイル一覧が表示されていれば成功です。以降は「編集のたびにpushする」だけで、変更履歴がすべてGitHub上に記録され続けます。

4. 日常の運用フロー(毎回この順番を守る)

実際にファイルを編集するたびに、必ず次の4ステップを守るようにしています。

① git pull          ← 作業を始める前に、必ず最新版を取り込む
        │
        ▼
② ファイルを編集       ← 実際の作業
        │
        ▼
③ git add -A
   git commit -m "..." ← 変更内容に短いメモを添えて記録
        │
        ▼
④ git push           ← GitHubへアップロードして「正本」を更新

5. 競合(コンフリクト)が起きたときの対処

複数の端末がほぼ同時に作業していると、まれにgit pushが失敗(reject)することがあります。これは事故ではなく、「他の誰かが自分より先にpushした」ことをGitが正しく検知して、上書き事故を未然に防いでくれているサインです。

対処の流れ
  1. まず慌てず git pull を実行し、先にpushされた最新内容を取り込む
  2. 同じ箇所を両方が編集していた場合のみ、Gitが競合箇所を教えてくれるので、どちらの内容を残すか(または両方活かすか)を手動で確認・修正する
  3. 解決したら、通常通り git add -A && git commit -m "..."git push

以前の運用との決定的な違い

Git導入前は「後からアップロードした方が黙って勝つ」上書き運用でした。Git導入後は「先にpushされていたら、必ず一度立ち止まって確認を挟む」運用に変わったのが、今回の事故防止の本質です。

6. 導入して良かったこと・気をつけていること

■ 良かったこと

■ 気をつけていること

複数端末での安全なサイト更新体制、これで整理完了 🎉

Git/GitHubの基礎知識から、実際の導入手順・日常運用・競合対処までをまとめました。同じように個人サイトを複数端末で更新している方の参考になれば幸いです。

Rocky Linux 9 一覧へ戻る