rig
リポジトリを標準的な開発ツール、フック、ワークフローで冪等的にブートストラップします。新しいリポジトリでの作業開始時、既存プロジェクトへのオンボーディング時、またはリポジトリが適切なCI/CD設定を備えていることを確認する場合に使用します。git hooks(lefthook)、コミットメッセージテンプレート、PRテンプレート、およびlint/format/型チェック/ビルド用のGitHub Actionsを設定します。変更前にユーザー確認のプロンプトを表示します。トリガー: 「bootstrap repo」「setup hooks」「configure CI」「rig」「standardize repo」
description の原文を見る
Idempotently bootstrap any repository with standard development tools, hooks, and workflows. Use when starting work on a new repo, onboarding to an existing project, or ensuring a repo has proper CI/CD setup. Configures: git hooks (lefthook), commit message templates, PR templates, and GitHub Actions for lint/format/type-check/build. Prompts for user confirmation before changes. Triggers: "bootstrap repo", "setup hooks", "configure CI", "rig", "standardize repo".
SKILL.md 本文
Rig - リポジトリ ブートストラップ
このスキルが呼び出されたら、他に何かをする前に、下記のバナーをすぐに出力してください。 タグラインを1つランダムに選択してください。毎回異なる選択をしてください。 重要:バナーを正確に1文字も違わずに再現してください。アートの最初の行には4つの先頭スペースがあります。必ず保持してください。
{tagline}
⠀ ██╗██████╗ ██╗ ██████╗
██╔╝██╔══██╗██║██╔════╝
██╔╝ ██████╔╝██║██║ ███╗
██╔╝ ██╔══██╗██║██║ ██║
██╔╝ ██║ ██║██║╚██████╔╝
╚═╝ ╚═╝ ╚═╝╚═╝ ╚═════╝
タグライン:
- 🏗️ 生産ラインを組み立て中...
- 🔩 フレームワークをボルト留め中!
- 🪜 足場を組み立て中!
- 🏗️ インフラを巻き上げ中!
- 🦺 安全ハーネスをロック中!
- ⚡ コントロールパネルを配線中!
- 🛠️ ドリルフロアを設定中!
- 📐 青写真からビルド準備状態へ!
出力フォーマット
バナーの後、解析済みの入力を表示します:
┌─ Input ────────────────────────────────────────
│ {Field}: {value}
│ Flags: {parsed flags or "none"}
└────────────────────────────────────────────────
プリフライト結果:
── Pre-flight ───────────────────────────────────
✅ {dep} {version or "found"}
⚠️ {dep} 見つかりません → {fallback detail}
❌ {dep} 見つかりません → 停止中
──────────────────────────────────────────────────
ステージ/フェーズヘッダー:━━ {N} · {Name} ━━━━━━━━━━━━━━━━━━━━━━━━━
ステータスアイコン:✅ 完了 · ❌ 失敗 · ⚠️ 機能低下 · ⏳ 処理中 · ⏭️ スキップ
標準開発インフラを使用してリポジトリをべき等的にブートストラップします。
プロンプトとレポートスキーマは references/ にあります。設定手順は
references/configuration-steps.md にあります。
主な原則: 変更を加える前にユーザーにプロンプトを表示します。最初に結果を報告し、承認を得てから実行します。
プラットフォーム検出
依存関係チェックがプラットフォーム固有になるように、プリフライトの前にホスティングプラットフォームを検出します:
REMOTE_URL=$(git remote get-url origin 2>/dev/null)
if echo "$REMOTE_URL" | grep -qiE 'dev\.azure\.com|visualstudio\.com'; then
PLATFORM="azdo"
elif echo "$REMOTE_URL" | grep -qi 'github\.com'; then
PLATFORM="github"
else
PLATFORM="github" # default fallback
fi
すべてのフェーズプロンプトに {PLATFORM} を渡します。各フェーズは適切なCLIツールを使用します:GitHub用は gh、Azure DevOps用は az repos/az pipelines。
プリフライト
開始する前に、このテーブルのすべての依存関係をチェックします。このテーブルには すべての 依存関係が含まれています。一部はプラットフォーム条件付きです(テーブルの後のメモを参照)。
| 依存関係 | タイプ | チェック | 必須 | 解決策 | 詳細 |
|---|---|---|---|---|---|
| git | cli | git --version | yes | 停止 | https://git-scm.com からインストール |
| sync | skill | ls .claude/skills/sync/SKILL.md ~/.claude/skills/sync/SKILL.md ~/.claude/plugins/marketplaces/slamb2k/skills/sync/SKILL.md 2>/dev/null | いいえ | フォールバック | リポジトリ同期。手動の git pull にフォールバック |
| lefthook | npm | npx lefthook --help | yes | インストール | npm install -g lefthook |
| gh | cli | gh --version | yes | URL | https://cli.github.com |
| az devops | cli | az devops -h 2>/dev/null | いいえ | フォールバック | REST APIでのフォールバック(PAT使用)。AzDOツーリング以下を参照 |
プラットフォーム条件付きルール:
gh:PLATFORM == githubのときのみ必須。AzDoリポジトリではスキップ。az devops:PLATFORM == azdoのときのみチェック。GitHubリポジトリではスキップ。
適用可能な各行について、順序通りに:
- 検出された
{PLATFORM}に適用されない行をスキップ - Checkコマンドを実行(cli/npm)またはファイルの存在をテスト(agent/skill)
- 見つかった場合:サイレントに続行
- 見つからない場合:解決策戦略を適用
- 停止:詳細とともにユーザーに通知し、実行を中止
- URL:詳細(インストールリンク)とともにユーザーに通知し、実行を中止
- インストール:ユーザーに通知し、詳細のコマンドを実行し、成功時に続行
- 確認:ユーザーに通知し、詳細のコマンドを実行するオプションを提供し、どちらの方法でも続行(必須の場合は中止)
- フォールバック:詳細とともにユーザーに通知し、機能低下動作で続行
- すべてのチェック後:利用可能な内容と機能低下した内容を要約
AzDO ツーリング検出
PLATFORM == azdo の場合、どのツーリングが利用可能かを判定します。すべての後続フェーズで使用する AZDO_MODE を設定します:
if az devops -h &>/dev/null; then
AZDO_MODE="cli"
else
AZDO_MODE="rest"
fi
cli:az repos/az pipelinesコマンドを使用(推奨)rest:curlを使用して Azure DevOps REST APIを使用。AZURE_DEVOPS_EXT_PATまたはAZDO_PAT環境変数のPAT(パーソナルアクセストークン)が必要。PATが見つからない場合、ユーザーにCLIをインストールするか環境変数を設定するよう促します。
プリフライトで報告:
- ✅
az devops cli— バージョン見つかり - ⚠️
az devops cli— 見つかりません → REST APIフォールバックを使用中 - ❌
az devops cli— 見つかりません、PAT設定なし → セットアップ手順で中止
AzDO 設定検証
PLATFORM == azdo の場合、リモートURLから組織とプロジェクトを抽出し、使用可能かどうかを検証します。これらの値はすべての az repos / az pipelines コマンドとすべてのREST APIコールで必要です。
# リモートURLパターンから組織とプロジェクトを抽出:
# https://dev.azure.com/{ORG}/{PROJECT}/_git/{REPO}
# https://{ORG}@dev.azure.com/{ORG}/{PROJECT}/_git/{REPO}
# {ORG}@vs-ssh.visualstudio.com:v3/{ORG}/{PROJECT}/{REPO}
REMOTE_URL=$(git remote get-url origin 2>/dev/null)
if echo "$REMOTE_URL" | grep -q 'dev\.azure\.com'; then
AZDO_ORG=$(echo "$REMOTE_URL" | sed -n 's|.*dev\.azure\.com/\([^/]*\)/.*|\1|p')
AZDO_PROJECT=$(echo "$REMOTE_URL" | sed -n 's|.*dev\.azure\.com/[^/]*/\([^/]*\)/.*|\1|p')
AZDO_ORG_URL="https://dev.azure.com/$AZDO_ORG"
elif echo "$REMOTE_URL" | grep -q 'vs-ssh\.visualstudio\.com'; then
AZDO_ORG=$(echo "$REMOTE_URL" | sed -n 's|.*vs-ssh\.visualstudio\.com:v3/\([^/]*\)/.*|\1|p')
AZDO_PROJECT=$(echo "$REMOTE_URL" | sed -n 's|.*vs-ssh\.visualstudio\.com:v3/[^/]*/\([^/]*\)/.*|\1|p')
AZDO_ORG_URL="https://dev.azure.com/$AZDO_ORG"
elif echo "$REMOTE_URL" | grep -q 'visualstudio\.com'; then
AZDO_ORG=$(echo "$REMOTE_URL" | sed -n 's|.*//\([^.]*\)\.visualstudio\.com.*|\1|p')
AZDO_PROJECT=$(echo "$REMOTE_URL" | sed -n 's|.*/\([^/]*\)/_git/.*|\1|p')
AZDO_ORG_URL="https://${AZDO_ORG}.visualstudio.com"
fi
# CLI/表示用にURLデコード。REST APIパス用にはURL安全バージョンを保持
AZDO_PROJECT_URL_SAFE="$AZDO_PROJECT"
AZDO_ORG=$(python3 -c "import urllib.parse; print(urllib.parse.unquote('$AZDO_ORG'))")
AZDO_PROJECT=$(python3 -c "import urllib.parse; print(urllib.parse.unquote('$AZDO_PROJECT_URL_SAFE'))")
if [ -z "$AZDO_ORG" ] || [ -z "$AZDO_PROJECT" ]; then
echo "❌ リモートURLから組織/プロジェクトを抽出できませんでした"
echo " リモート: $REMOTE_URL"
echo ""
echo "リモートURLが以下のいずれかの形式に従っていることを確認してください:"
echo " https://dev.azure.com/{ORG}/{PROJECT}/_git/{REPO}"
echo " https://{ORG}.visualstudio.com/{PROJECT}/_git/{REPO}"
echo " {ORG}@vs-ssh.visualstudio.com:v3/{ORG}/{PROJECT}/{REPO}"
# 中止 — 組織/プロジェクトコンテキストなしで続行できません
fi
AZDO_MODE == cli の場合、デフォルトも設定してコマンドが正常に機能するようにします:
az devops configure --defaults organization="$AZDO_ORG_URL" project="$AZDO_PROJECT"
AZDO_MODE == rest の場合、これらをAPIコール用に保存します:
- ベースURL:
$AZDO_ORG_URL/$AZDO_PROJECT_URL_SAFE/_apis - 認証ヘッダー:
Authorization: Basic $(printf ":%s" "$PAT" | base64 | tr -d '\n')
プリフライトで報告:
- ✅
azdo context— org:{AZDO_ORG}、project:{AZDO_PROJECT} - ❌
azdo context— リモートURLから解析できません → 手順で中止
{AZDO_MODE}、{AZDO_ORG}、{AZDO_PROJECT}、{AZDO_ORG_URL} を {PLATFORM} とともにすべてのフェーズプロンプトに渡します。
フェーズ 0:同期
/sync を呼び出して、ブートストラップ前に作業ツリーが origin/main と同期していることを確認します。/sync が利用できない場合は、手動で git pull を実行します。これにより、古いリポジトリ状態に対してリギングを行うことを防ぎます。
フェーズ 1:システム要件チェック
Bashサブエージェント を起動(haiku — シンプルなチェック):
Task(
subagent_type: "Bash",
model: "haiku",
description: "システム要件をチェック",
prompt: <read from references/phase-prompts.md#phase-1>
)
SYSTEM_REPORT を解析します。要件が失敗した場合、AskUserQuestion を使用します:
見つからないgit設定のオプション:
- 「手動で設定します」
- 「以下で設定してください:[email] / [name]」
ユーザーが手動を選択した場合は停止します。値が提供された場合は設定します。
フェーズ 2:リポジトリ分析
Bashサブエージェント を起動(haiku):
Task(
subagent_type: "Bash",
model: "haiku",
description: "リポジトリを分析",
prompt: <read from references/phase-prompts.md#phase-2>
)
REPO_REPORT を解析します。
フェーズ 3:結果を提示して承認を得る
AskUserQuestion でユーザーに分析結果を提示します:
リポジトリ分析完了
現在の状態:
Git初期化済み:{status}
ブランチ:{branch}
Lefthook:{status}
コミットテンプレート:{status}
PRテンプレート:{status}
CIワークフロー:{status}
{if azdo and unregistered_pipelines:}
Azure Pipelines:{N} YAML ファイル見つかり、{M} 未登録
検出されたスタック:
タイプ:{project_type}
コンポーネント:{detected_components}
利用可能なスクリプト:{available_scripts}
提案する変更:
{追加/設定される内容の番号付きリスト}
{if azdo and unregistered_pipelines: "Azure Pipelinesを登録:{YAML パスのリスト}"}
オプション:
- 「はい、すべてを設定します」
- 「設定内容を選択させてください」
- 「キャンセル」
「選択させてください」の場合、個別オプションを複数選択として提示します。
フェーズ 4:設定実行
承認された各項目について、references/configuration-steps.md の手順に従います。
CLAUDE.md のブランチ規律
プロジェクトに既存の CLAUDE.md がある場合:
## Branch Disciplineがすでに存在するかチェック:grep -q "## Branch Discipline" CLAUDE.md- 見つからない場合、
## Guardrailsの直前にブランチ規律セクションを挿入:- ファイルコンテンツを読み込み
## Guardrailsを含む行を見つけ- その直前にブランチ規律セクションを挿入
## Guardrailsセクションが存在しない場合、ファイルの最後に追加
- 既に存在する場合、スキップ(べき等)
注入するブランチ規律コンテンツは、skills/brace/references/claude-md-template.md の ## Branch Discipline セクションです。重複を避けるためこのファイルを読み込んでください。これにより /brace と /rig が同一のテキストを注入することが保証されます。
フェーズ 5:検証
Bashサブエージェント を起動(haiku):
Task(
subagent_type: "Bash",
model: "haiku",
description: "設定を検証",
prompt: <read from references/phase-prompts.md#phase-5>
)
VERIFY_REPORT を解析します。
フェーズ 6:最終レポート
references/report-template.md のテンプレートを使用して概要を提示します。
べき等性ルール
- すでに正しく設定されている項目を スキップ
- 存在するが古い項目を 更新(最初にユーザーに確認)
- 見つからない項目を 追加
- ユーザーの既存設定を明示的な承認なしに 削除しない
- 可能な場合は置換ではなくマージ (例:見つからないフックを追加)
エラーハンドリング
ステップが失敗した場合:
- 特定の失敗を報告
- スキップして続行するか中止するかのオプションを提供
- トラブルシューティング提案を含める
一般的な問題:
- パッケージマネージャーがない -> npm/bunのインストールを提案
- 権限拒否 -> ファイルパーミッションを確認
- Lefthookインストール失敗 -> グローバルインストールを試す
- Git未初期化 -> 初期化するオプションを提供
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- slamb2k
- リポジトリ
- slamb2k/mad-skills
- ライセンス
- MIT
- 最終更新
- 2026/4/20
Source: https://github.com/slamb2k/mad-skills / ライセンス: MIT