📜 setup-repository-scaffold-files.sh
指定 Repository に対して、開発に必要な Scaffold ファイルを空ファイルとして一括登録するスクリプトです。
作業ブランチを作成し、Contents API でファイルを登録した後、デフォルトブランチへの PR を作成します。
既にファイルが存在する場合はスキップします(上書き禁止)。
(ここをクリック)目次
🔧 環境変数
| 環境変数 |
説明 |
必須 |
GH_TOKEN |
GitHub PAT(repo Scope が必要) |
✅ |
TARGET_REPO |
対象 Repository(owner/repo 形式) |
✅ |
📋 対象ファイル
以下の Scaffold ファイルを空ファイルとして登録します。
対象ファイルは scripts/config/repo-scaffold-definitions.json で定義されており、ユーザーがスクリプトを直接編集せずにカスタマイズできます。
| ファイル |
パス |
説明 |
.gitignore |
.claude/.gitignore |
Claude Code 用 gitignore |
.gitkeep |
.claude/.gitkeep |
Claude Code 設定ディレクトリの保持 |
.gitignore |
.cline/.gitignore |
Cline 用 gitignore |
.gitkeep |
.cline/.gitkeep |
Cline 設定ディレクトリの保持 |
.gitignore |
.codex/.gitignore |
OpenAI Codex CLI 用 gitignore |
.gitkeep |
.codex/.gitkeep |
OpenAI Codex CLI 設定ディレクトリの保持 |
.gitignore |
.cursor/.gitignore |
Cursor 用 gitignore |
.gitkeep |
.cursor/.gitkeep |
Cursor 設定ディレクトリの保持 |
.gitignore |
.gemini/.gitignore |
Gemini 用 gitignore |
.gitkeep |
.gemini/.gitkeep |
Gemini 設定ディレクトリの保持 |
copilot-instructions.md |
.github/copilot-instructions.md |
GitHub Copilot カスタム指示ファイル |
release.yml |
.github/release.yml |
リリースノート自動生成設定 |
.gitkeep |
.idea/.gitkeep |
JetBrains IDE 設定ディレクトリの保持 |
.gitkeep |
.vscode/.gitkeep |
VS Code 設定ディレクトリの保持 |
.gitignore |
.windsurf/.gitignore |
Windsurf 用 gitignore |
.gitkeep |
.windsurf/.gitkeep |
Windsurf 設定ディレクトリの保持 |
.gitignore |
.gitignore |
プロジェクト用 gitignore |
README.md |
README.md |
プロジェクト README |
設定ファイルのカスタマイズ
scripts/config/repo-scaffold-definitions.json を編集することで、登録対象のファイルを追加・削除できます。
[
{
"path": ".vscode/.gitkeep",
"description": "VS Code 設定ディレクトリの保持"
}
]
| フィールド |
説明 |
必須 |
path |
Repository 内のファイルパス |
✅ |
description |
ファイルの説明 |
— |
📊 処理フロー
flowchart TD
A["開始"] --> B["環境変数バリデーション"]
B --> C["gh / jq コマンド存在チェック"]
C --> D["デフォルトブランチ取得\n(repos API)"]
D --> E["デフォルトブランチの SHA 取得\n(git/ref API)"]
E --> F["対象ファイルの既存チェック\n(Contents API)"]
F --> G{"登録対象\nあり?"}
G -- "No" --> H["スキップサマリー出力\n(PR 未作成)"]
H --> I["完了"]
G -- "Yes" --> J["作業ブランチ作成\n(git/refs API)"]
J --> K["ファイルをループ処理"]
K --> L["Contents API で\n空ファイル作成"]
L --> M["結果を記録\n(作成 / 失敗)"]
M --> N{"次のファイル\nあり?"}
N -- "Yes" --> K
N -- "No" --> O{"作成ファイル\nあり?"}
O -- "Yes" --> P["gh pr create で\nPR 作成"]
O -- "No" --> Q["実行結果サマリー出力"]
P --> Q
Q --> I
📝 処理詳細
| ステップ |
処理内容 |
使用コマンド / API |
| 環境変数バリデーション |
validate_target_repo_env で GH_TOKEN, TARGET_REPO を一括検証 |
common.sh |
| 設定ファイル読み込み |
load_config_file で Scaffold 定義 JSON を読み込み |
common.sh |
| デフォルトブランチ取得 |
get_default_branch_info でブランチ名と SHA を一括取得 |
common.sh → GET /repos/{owner}/{repo}, GET /repos/{owner}/{repo}/git/ref/heads/{branch} |
| 既存ファイルチェック |
check_existing_repo_files で対象ファイルごとに Contents API で存在確認。存在すればスキップ |
common.sh → GET /repos/{owner}/{repo}/contents/{path} |
| ファイル登録 & PR 作成 |
create_files_via_pr で作業ブランチ作成、空ファイル登録、PR 作成を一括実行 |
common.sh → POST /repos/{owner}/{repo}/git/refs, PUT /repos/{owner}/{repo}/contents/{path}, gh pr create |
| サマリー出力 |
output_repo_files_summary で作成/スキップ/失敗の件数をコンソールと GITHUB_STEP_SUMMARY に出力 |
common.sh |
実行結果サマリーの出力形式
コンソール出力:
=========================================
完了サマリー
=========================================
Repository: owner/repo
作成: 3 件
スキップ: 0 件
失敗: 0 件
=========================================
GITHUB_STEP_SUMMARY 出力:
📚 API リファレンス
API / コマンド
PAT Scope 要件
| Scope |
用途 |
備考 |
repo |
リポジトリの読み取り、ブランチ作成、ファイル作成、PR 作成 |
Classic PAT の場合。プライベート Repository 含む全 Repository へのアクセス |
Fine-grained PAT の場合は、対象 Repository に対する Contents と Pull requests の Read and write 権限が必要です。
API レート制限
| リソース |
上限 |
備考 |
| REST API (Core) |
5,000 リクエスト/時 |
認証済みユーザーの場合 |
対象ファイル 18 件に対して、既存チェック (18) + ブランチ作成 (1) + ファイル作成 (最大 18) + PR 作成 (1) = 最大 38 リクエストを消費します。
レート制限の影響はありません。
🔄 使用 Workflow