Skip to the content.

📜 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_envGH_TOKEN, TARGET_REPO を一括検証 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 作成を一括実行 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 リクエスト/時 認証済みユーザーの場合

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

🔄 使用 Workflow