From a6347468cc793011d13a2f05f4d4b0dd0f43ecd7 Mon Sep 17 00:00:00 2001 From: Tivo0921 Date: Sat, 22 Aug 2026 21:48:45 +0900 Subject: [PATCH] Fix docs claiming main is protected MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Organization が GitHub Free プラン かつ Private Repository のため、 Branch Protection / Rulesets を有効化できないことが判明した(API は 403)。 しかし README・02-rules・実習1 は「mainは保護されている」「直接Pushは拒否される」 と断言しており、実態と食い違っていた。特に実習1 Step 11.5 は直接Pushを 試させる手順だったため、そのままでは main に空Commitが入り研修環境が壊れる。 - README: 保護されていない旨と、ルールとして守る必要があることを明記 - docs/02-rules.md: Rule 2 を「実務ではこうなる」+「ここでは保護されていない」に分離 - exercises/01-clone-to-pr.md: Step 11.5 を実演からスキップ指示に変更 - .github/ISSUE_TEMPLATE/training.yml: 対応するチェック項目を修正 - docs/admin-setup.md: 制約の詳細と、有効化するための2つの選択肢を記録 Co-Authored-By: Claude Opus 5 (1M context) --- .github/ISSUE_TEMPLATE/training.yml | 2 +- README.md | 9 ++++++-- docs/02-rules.md | 19 +++++++++++------ docs/admin-setup.md | 33 +++++++++++++++++++++++++++-- exercises/01-clone-to-pr.md | 28 ++++++++++++------------ 5 files changed, 67 insertions(+), 24 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/training.yml b/.github/ISSUE_TEMPLATE/training.yml index 2ba4e00..f09f866 100644 --- a/.github/ISSUE_TEMPLATE/training.yml +++ b/.github/ISSUE_TEMPLATE/training.yml @@ -78,7 +78,7 @@ body: - [ ] `git commit` した - [ ] `git log --oneline` で履歴を確認した - [ ] `git push -u origin training/` した - - [ ] (任意)`main` への直接Pushが拒否されることを確認し、後片付けした + - [ ] `main` へ直接Pushしてはいけない理由を理解した(このRepositoryでは実演しません) - [ ] Pull Requestを作成した(テンプレートを埋めた) - [ ] CI(Training Check)が緑になった diff --git a/README.md b/README.md index dc97f8d..c17d0e8 100644 --- a/README.md +++ b/README.md @@ -24,8 +24,13 @@ Gitコマンドを暗記することではなく、 > Branchを間違える・Commitを間違える・Conflictを起こす・Commitを取り消す。 > 壊し方と直し方の両方を、実際の開発Repositoryに入る前に経験してください。 -このリポジトリでは `main` がBranch Protectionで保護されています。 -`main` への直接Pushは**GitHubに拒否されます**。必ずPull Request経由で変更してください。 +`main` への直接Pushは禁止です。必ずPull Request経由で変更してください。 + +> ⚠️ **このリポジトリは現在、技術的には `main` への直接Pushができてしまいます。** +> Branch Protectionを設定したいのですが、Private RepositoryかつGitHub Freeプランのため +> 現時点では有効化できません([docs/admin-setup.md](docs/admin-setup.md) に詳細)。 +> **GitHubが止めてくれないので、ルールとして各自が守ってください。** +> 誤ってPushしてしまった場合は、隠さずに管理者へ報告してください。 --- diff --git a/docs/02-rules.md b/docs/02-rules.md index 7477b6e..e622d05 100644 --- a/docs/02-rules.md +++ b/docs/02-rules.md @@ -55,14 +55,21 @@ git switch -c feature/example という流れで変更します。 -> このTraining Repositoryでは、`main` にBranch Protectionが設定されています。 -> `main` への直接Pushを試すと、GitHubが以下のように拒否します。 +実務のRepositoryでは、多くの場合 **Branch Protection** が設定されており、 +`main` への直接Pushを試すとGitHubが以下のように拒否します。 + +```text +! [remote rejected] main -> main (protected branch hook declined) +``` + +> ⚠️ **このTraining Repositoryでは、Branch Protectionが有効になっていません。** +> Private RepositoryかつGitHub Freeプランのため、現時点では設定できないためです。 +> つまり `main` へ直接Pushすると **成功してしまいます。** > -> ```text -> ! [remote rejected] main -> main (protected branch hook declined) -> ``` +> **絶対に試さないでください。** ここはGitHubが守ってくれない状態です。 +> 誤ってPushしてしまった場合は、自分で `reset` や `revert` を試す前に管理者へ報告してください。 > -> 一度わざと試してみてください。これが実務での「守られている状態」です。 +> 管理者向けの有効化手順は [admin-setup.md](admin-setup.md) にあります。 --- diff --git a/docs/admin-setup.md b/docs/admin-setup.md index d206e34..ed284c5 100644 --- a/docs/admin-setup.md +++ b/docs/admin-setup.md @@ -66,7 +66,35 @@ Settings → Actions → General → 「Allow all actions and reusable workflows Pull Requestを1件作って、**Training Check** が走ることを確認してください。 -### 4. Branch Protection を設定する +### 4. Branch Protection を設定する ⛔ 現在は設定できません + +> **状況(2026-08-22 時点)** +> +> Organization `Lumos-Programming` は **GitHub Free プラン**、このRepositoryは **Private** です。 +> この組み合わせでは Branch Protection も Rulesets も利用できません。 +> API から設定を試みると、以下が返ります。 +> +> ```json +> {"message": "Upgrade to GitHub Pro or make this repository public to enable this feature.", "status": "403"} +> ``` +> +> **有効化するには、次のどちらかが必要です。** +> +> | 方法 | 影響 | +> |---|---| +> | **A. Repositoryを Public にする** | 費用なしで即座に有効化できる。ただし `members/` の内容と全Commit履歴が世界に公開される。個人情報を書かせない運用が前提 | +> | **B. GitHub Team プランへアップグレード** | Privateのまま有効化できる。Organization単位の課金が発生する | +> +> **有効化するまでの間の運用** +> +> - Rule 1・2(mainで直接開発しない / 直接Pushしない)は **文書上のルール** として運用します +> - README・`docs/02-rules.md`・`exercises/01-clone-to-pr.md` には、 +> 「保護されていないので直接Pushしないこと」を明記済みです +> - 実習1の Step 11.5(直接Pushが拒否されることの確認)は **スキップする**手順に変更済みです。 +> 有効化した際は、これらの記述を元に戻してください +> - `main` に誤ってPushされた場合に備え、定期的にバックアップを取っておくと安全です + +有効化できるようになったら、以下の手順で設定します。 Settings → Branches → Add branch protection rule @@ -107,8 +135,9 @@ gh api -X PUT repos/Lumos-Programming/github-practice/branches/main/protection \ JSON ``` -> ⚠️ **Private Repositoryの場合、プランによってBranch Protection / Rulesets が使えないことがあります。** +> ⚠️ **Private Repositoryの場合、プランによってBranch Protection / Rulesets が使えません。** > 設定画面に項目が出ない場合は、Repositoryの可視性かOrganizationのプランを確認してください。 +> (現在このRepositoryが該当します。上の「⛔ 現在は設定できません」を参照) > どうしても使えない場合、Rule 1・2は「文書上のルール」として運用し、 > 実習1のStep 11.5(直接Pushが拒否されることの確認)はスキップしてください。 diff --git a/exercises/01-clone-to-pr.md b/exercises/01-clone-to-pr.md index a3b8a53..8398a5e 100644 --- a/exercises/01-clone-to-pr.md +++ b/exercises/01-clone-to-pr.md @@ -176,29 +176,31 @@ git push -u origin training/taro --- -## Step 11.5: (任意)mainへ直接Pushを試してみる +## Step 11.5: mainへ直接Pushしてはいけない(実演はしません) -ルールが「お願い」ではなく「仕組み」で守られていることを体験しておきます。 - -```bash -git switch main -git commit --allow-empty -m "Test protected branch" -git push -``` - -次のように拒否されれば成功です。 +実務のRepositoryでは通常 **Branch Protection** が設定されていて、`main` へ直接Pushすると +GitHubがこう拒否します。 ```text ! [remote rejected] main -> main (protected branch hook declined) ``` -**必ず後片付けをしてください。** +ルールが「お願い」ではなく「仕組み」で守られている状態です。 + +> ⚠️ **このRepositoryではBranch Protectionが有効になっていません。** +> Private RepositoryかつGitHub Freeプランのため、現時点では設定できないためです。 +> つまりここで直接Pushを試すと **本当に成功してしまい、研修環境が壊れます。** +> +> **この確認はスキップしてください。** 管理者が有効化したら、改めて試して構いません。 + +代わりに、`git status` で自分が `main` にいないことを確認する癖をつけてください。 ```bash -git reset --hard origin/main -git switch training/ +git branch ``` +`* training/` に `*` が付いていればOKです。 + --- ## Step 12: GitHubでPull Requestを作成