Skip to the content.

📜 setup-repository-scaffold-files.sh

指定 Repository に対して、開発に必要な Scaffold ファイルを一括登録するスクリプトです。 作業ブランチを作成し、Contents API でファイルを登録した後、デフォルトブランチへの PR を作成します。 JSON 定義に content フィールドが指定されたファイルはその内容で、未指定のファイルは空ファイル(改行のみ)で作成されます。 既にファイルが存在する場合はスキップします(上書き禁止)。

(ここをクリック)目次

🔧 環境変数

環境変数 説明 必須
GH_TOKEN GitHub PAT(repo Scope が必要)
TARGET_REPO 対象 Repository(owner/repo 形式)

📋 対象ファイル

以下の Scaffold ファイルを登録します。 対象ファイルは scripts/config/repo-scaffold-definitions.json で定義されており、ユーザーがスクリプトを直接編集せずにカスタマイズできます。

ファイル パス 説明 初期コンテンツ
.gitignore .agents/skills/.gitignore Claude Code カスタムスキル用 gitignore
.gitkeep .agents/skills/.gitkeep Claude Code カスタムスキルディレクトリの保持
.gitignore .claude/.gitignore Claude Code 用 gitignore
.gitkeep .claude/.gitkeep Claude Code 設定ディレクトリの保持
settings.json .claude/settings.json 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 設定ディレクトリの保持
extensions.json .vscode/extensions.json VS Code 推奨拡張機能定義 {}
launch.json .vscode/launch.json VS Code デバッグ構成 {}
settings.json .vscode/settings.json VS Code エディタ設定 {}
.gitignore .windsurf/.gitignore Windsurf 用 gitignore
.gitkeep .windsurf/.gitkeep Windsurf 設定ディレクトリの保持
.editorconfig .editorconfig エディタ横断フォーマット設定
.gitattributes .gitattributes Git 属性設定
.gitignore .gitignore プロジェクト用 gitignore
.mcp.json .mcp.json MCP サーバー設定 {}
AGENTS.md AGENTS.md AI コーディングアシスタント向けプロジェクト説明
DESIGN.md DESIGN.md 設計方針・アーキテクチャドキュメント
README.md README.md プロジェクト README

設定ファイルのカスタマイズ

scripts/config/repo-scaffold-definitions.json を編集することで、登録対象のファイルを追加・削除できます。

[
  {
    "path": ".vscode/.gitkeep",
    "description": "VS Code 設定ディレクトリの保持"
  },
  {
    "path": ".vscode/settings.json",
    "description": "VS Code エディタ設定",
    "content": "{}"
  }
]
フィールド 説明 必須
path Repository 内のファイルパス
description ファイルの説明
content ファイルの初期コンテンツ(未指定の場合は空ファイル)

📊 処理フロー

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_envGH_TOKEN, TARGET_REPO を一括検証し、validate_gh_token でトークンの有効性を確認 common.sh
設定ファイル読み込み load_config_file で Scaffold 定義 JSON を読み込み common.sh
デフォルトブランチ取得 get_default_branch_info でブランチ名と SHA を一括取得 common.shGET /repos/{owner}/{repo}, GET /repos/{owner}/{repo}/git/ref/heads/{branch}
既存ファイルチェック check_existing_repo_files で対象ファイルごとに Contents API で存在確認。存在すればスキップ common.shGET /repos/{owner}/{repo}/contents/{path}
ファイル登録 & PR 作成 create_files_via_pr で作業ブランチ作成、ファイル登録、PR 作成を一括実行。FILE_CONTENT_MAP に初期コンテンツが設定されている場合はその内容で、未設定の場合は空(改行のみ)で作成 common.shPOST /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 出力:

項目 件数
作成 3
スキップ 0
失敗 0

📚 API リファレンス

API / コマンド

API / コマンド 用途 リファレンス
GET /repos/{owner}/{repo} デフォルトブランチ名の取得 Get a repository
GET /repos/{owner}/{repo}/git/ref/heads/{branch} ブランチの SHA 取得 Get a reference
GET /repos/{owner}/{repo}/contents/{path} ファイル存在チェック Get repository content
POST /repos/{owner}/{repo}/git/refs 作業ブランチの作成 Create a reference
PUT /repos/{owner}/{repo}/contents/{path} ファイルの作成 Create or update file contents
gh pr create PR の作成 gh pr create

PAT Scope 要件

Scope 用途 備考
repo リポジトリの読み取り、ブランチ作成、ファイル作成、PR 作成 Classic PAT の場合。プライベート Repository 含む全 Repository へのアクセス

Fine-grained PAT の場合は、対象 Repository に対する ContentsPull requestsRead and write 権限が必要です。

API レート制限

リソース 上限 備考
REST API (Core) 5,000 リクエスト/時 認証済みユーザーの場合

対象ファイル 29 件に対して、既存チェック (29) + ブランチ作成 (1) + ファイル作成 (最大 29) + PR 作成 (1) = 最大 60 リクエストを消費します。 レート制限の影響はありません。

🔄 使用 Workflow