mcpField
R
release-code

release-code

github.com/a-green-hand-jack開発45 回インストール
リポジトリ

release-code について

release-codeは、研究コードのリポジトリを一般公開する準備を支援するスキルです。セキュリティとリポジトリの監査、不足ファイルの作成、バージョンタグ付け、任意のGitHub Release公開を、確認手順を設けて進めます。

主な機能

  1. 01シークレットと機密ファイルの検査
  2. 02リポジトリ構成とツールチェーンの確認
  3. 03不足するREADME・ライセンス・引用ファイルの作成
  4. 04公開前チェックリストの確認
  5. 05バージョンタグ付けと任意のGitHub Release公開

活用シーン

  1. 01公開前の研究リポジトリ監査
  2. 02不足している公開文書とメタデータの追加
  3. 03匿名の学会投稿用コードパッケージの準備
  4. 04確認後のバージョンタグとGitHub Release作成

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/a-green-hand-jack/ml-research-skills --skill release-code

インストール後、Claude Code で/release-codeを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

checklist.md
templates/
CITATION.cff
README_ml_paper.md

詳細

コードをリリースする

研究用コードリポジトリを一般公開できるように準備します。セキュリティ上の問題を監査し、不足しているアセット(README、引用情報、ライセンス)を生成して、バージョンにタグを付け、GitHub リリースを作成します。

リリースでは、プロジェクトのツールチェーンのチェックを証拠として扱い、飾りとして扱わないでください。まず、変更を加えないチェックを優先します。変更を加えるフォーマットや修正のコマンドは、依頼された場合、またはプロジェクトのポリシーで必須の場合にのみ実行し、その後、差分を確認してください。

スキルのディレクトリ構成

<installed-skill-dir>/
├── SKILL.md
├── checklist.md                      # Detailed item-by-item checklist reference
└── templates/
    ├── README_ml_paper.md            # README template for ML paper repos
    └── CITATION.cff                  # Citation file template

実行手順

1. リリースの状況を把握する

ユーザーに1回のメッセージで次の情報を尋ねてください。

  1. 論文の情報:タイトル、著者、会議名/掲載年(例:「CVPR 2025」)、arXiv ID または URL(あれば)
  2. リリースの種類:コード一式のリリース/最小限の再現パッケージ/匿名の会議投稿?
  3. ライセンス:MIT/Apache-2.0/CC-BY-4.0/その他(デフォルト:コードには MIT、モデル/データには CC-BY-4.0)
  4. 含めるもの:学習コード?評価?事前学習済みの重み?データセット?デモ?
  5. バージョンタグ:例:v1.0.0(初回リリースのデフォルト:v1.0.0)
  6. GitHub リリース?:リリースノート付きで GitHub リリースを作成しますか?(はい/いいえ)
  7. モデルの重み:事前学習済みの重みはありますか?ある場合、どこでホストしますか?(HuggingFace Hub/Google Drive/プロジェクトページ)
2. リポジトリを監査する

次のチェックを実行します(出力を読み、ユーザーには要約を報告します)。

2a. セキュリティスキャン — シークレットと認証情報
# Check for common secret patterns
git -C "$(git rev-parse --show-toplevel)" log --all --oneline | head -5
grep -rI --include="*.py" --include="*.yaml" --include="*.json" --include="*.env" \
  -E "(password|secret|api_key|token|credential|private_key)\s*=\s*['\"][^'\"]{6}" \
  "$(git rev-parse --show-toplevel)" 2>/dev/null | head -20

# Prefer dedicated scanners when available
command -v gitleaks >/dev/null && gitleaks dir --no-banner --redact "$(git rev-parse --show-toplevel)"
command -v detect-secrets >/dev/null && detect-secrets scan "$(git rev-parse --show-toplevel)"
2b. 大容量ファイルのチェック
# Find large files that shouldn't be in the repo
find "$(git rev-parse --show-toplevel)" -type f -size +50M \
  ! -path "*/.git/*" ! -path "*/outputs/*" ! -path "*/wandb/*" 2>/dev/null
2c. 機密ファイルのパターン
# Check for files that should not be public
find "$(git rev-parse --show-toplevel)" -type f \( \
  -name ".env" -o -name "*.pem" -o -name "*.key" -o \
  -name "secrets.yaml" -o -name "credentials.json" \
  \) ! -path "*/.git/*" 2>/dev/null
2d. 既存ファイルの確認
ROOT="$(git rev-parse --show-toplevel)"
for f in README.md LICENSE CITATION.cff .gitignore requirements.txt pyproject.toml setup.py; do
  [ -f "$ROOT/$f" ] && echo "EXISTS: $f" || echo "MISSING: $f"
done
2e. Git の状態
git -C "$(git rev-parse --show-toplevel)" status --short
git -C "$(git rev-parse --show-toplevel)" log --oneline -5
2f. ツールチェーンとソースコードの衛生チェック

利用可能な、変更を加えないチェックを実行し、スキップしたツールを明示します。

ROOT="$(git rev-parse --show-toplevel)"
command -v pre-commit >/dev/null && pre-commit run --all-files || true
command -v shellcheck >/dev/null && find "$ROOT" -name "*.sh" -not -path "*/.git/*" -print0 | xargs -0 shellcheck || true
command -v shfmt >/dev/null && shfmt -d "$ROOT" || true
command -v actionlint >/dev/null && actionlint "$ROOT/.github/workflows"/*.yml "$ROOT/.github/workflows"/*.yaml 2>/dev/null || true
command -v nbstripout >/dev/null && find "$ROOT" -name "*.ipynb" -not -path "*/.git/*" -print0 | xargs -0 nbstripout --dry-run || true
command -v lychee >/dev/null && lychee --no-progress "$ROOT/README.md" "$ROOT/docs/**/*.md" || true
command -v taplo >/dev/null && find "$ROOT" -name "*.toml" -not -path "*/.git/*" -print0 | xargs -0 taplo fmt --check || true
command -v yamllint >/dev/null && yamllint "$ROOT" || true

必須チェックの失敗はリリースを妨げるものとして扱います。プロジェクトのポリシーで必須とされていない場合、不足している任意のツールはスキップとして扱います。

監査結果をチェックリストとしてユーザーに報告します。

  • 🔴 ブロッカー — リリース前に必ず修正(シークレット、認証情報、大容量のバイナリが見つかった場合)
  • 🟡 警告 — 対応を推奨(README がない、ライセンスがない、.gitignore がない、任意の衛生チェックをスキップした場合)
  • 🟢 OK — 問題なし

ブロッカーがあれば、続行する前に修正するようユーザーに依頼してください。

3. 不足しているファイルを生成する

2d の監査結果に基づき、不足しているファイルを生成します。既存ファイルを上書きする前に、ユーザーに希望を確認してください。

LICENSE

ファイルがない場合、適切なライセンスファイルを生成します。

  • MIT(ML コードで最も一般的):
    MIT License
    Copyright (c) {YEAR} {AUTHORS}
    [standard MIT text]
    
  • Apache-2.0:標準の Apache 2.0 ライセンステキストを使用
  • CC-BY-4.0:ユーザーが指定した場合のデータ/モデル用

{PROJECT_ROOT}/LICENSE に書き込みます。

CITATION.cff

<installed-skill-dir>/templates/CITATION.cff からテンプレートを読み込みます。

プレースホルダーに値を入力します。

プレースホルダー値
{TITLE}論文のタイトル
{AUTHORS_LIST}YAML リスト形式の著者(テンプレートの形式を参照)
{YEAR}公開年
{VENUE}会議名/ジャーナル名
{ARXIV_ID}arXiv ID(あれば)
{GITHUB_REPO}github.com/username/repo
{DATE_RELEASED}今日の日付(YYYY-MM-DD)

{PROJECT_ROOT}/CITATION.cff に書き込みます。

README.md

README がない、または簡素すぎる場合(50 行未満):

<installed-skill-dir>/templates/README_ml_paper.md からテンプレートを読み込みます。

すべてのプレースホルダーに値を入力します。ユーザーが内容を提供する必要がある箇所(正確な性能数値、データセットのダウンロードリンクなど)には、[TODO: ...] マーカーを残します。

十分な内容がある既存の README は上書きしないでください。代わりに、不足しているセクションを特定し、追記を提案してください。

.gitignore

ファイルがない場合、Python/ML 用の .gitignore を生成します。

# Python
__pycache__/
*.py[cod]
*.egg-info/
.eggs/
dist/
build/
.venv/
venv/

# ML outputs (keep jobs/ but ignore outputs/)
outputs/
wandb/
*.ckpt
*.pt
*.pth
*.pkl
runs/
lightning_logs/

# Data (large files)
data/
datasets/

# Secrets
.env
*.pem
*.key
secrets.yaml
credentials.json

# IDE
.vscode/settings.json
.idea/
*.DS_Store
4. リリース前チェックリストの確認

項目の全一覧を確認するため、<installed-skill-dir>/checklist.md を読みます。

カテゴリごとにまとめた簡潔なチェックリストをユーザーに提示します。各項目の状態を報告してください(✅ 完了/⚠️ 要対応/❌ 未対応)。

📁 Repository hygiene
  ✅ .gitignore covers outputs/, wandb/, *.ckpt
  ⚠️  outputs/ directory exists — confirm not committed

📄 Documentation
  ✅ README.md present (142 lines)
  ❌ No CITATION.cff — will generate
  ⚠️  README missing "Pre-trained Models" section

🔐 Security
  ✅ No secrets detected
  ✅ No large files in git history

🧰 Toolchain gates
  ✅ pre-commit / ruff / pytest release gates passed
  ⚠️  lychee skipped — not installed
  ❌ gitleaks found possible secret in config.yaml

📦 Reproducibility
  ✅ requirements.txt / pyproject.toml present
  ⚠️  No environment.yml for conda users
  ⚠️  No Dockerfile

⚖️  Legal
  ✅ LICENSE (MIT) present

次のように尋ねます。「タグ付けと公開に進む準備はできていますか? それとも、先に上記の項目を修正しますか?」

5. コミットとタグ付け

ユーザーが確認したら:

ROOT="$(git rev-parse --show-toplevel)"
# Stage only new/modified tracked files (not untracked outputs)
git -C "$ROOT" add LICENSE CITATION.cff README.md .gitignore 2>/dev/null || true
git -C "$ROOT" diff --staged --stat

ステージされた変更を確認するようユーザーに依頼してから、コミットします:

git -C "$ROOT" commit -m "chore: prepare code for public release ({VERSION})"

注釈付きタグを作成します:

git -C "$ROOT" tag -a "{VERSION}" -m "$(cat <<'EOF'
Release {VERSION} — {PAPER_TITLE}

Published at {VENUE}
Paper: {PAPER_URL}

Includes: {WHAT_INCLUDED}
EOF
)"

次のように尋ねます:「コミットとタグを origin にプッシュしますか?」

CURRENT_BRANCH="$(git -C "$ROOT" branch --show-current)"
git -C "$ROOT" push origin "$CURRENT_BRANCH"
git -C "$ROOT" push origin "{VERSION}"
6. GitHub リリース(任意)

ユーザーが GitHub リリースを希望した場合:

gh が利用可能か確認します:

gh --version 2>/dev/null && echo "gh available" || echo "gh not found"

利用可能な場合は、リリースノートを作成し、リリースを作成します:

gh release create "{VERSION}" \
  --title "{PAPER_TITLE} ({VERSION})" \
  --notes "$(cat <<'EOF'
## {PAPER_TITLE}

**{VENUE}** | [Paper]({PAPER_URL}) | [Project Page]({PROJECT_PAGE_URL})

### What's included
{INCLUDED_ITEMS}

### Installation
\`\`\`bash
pip install -r requirements.txt
\`\`\`

### Citation
\`\`\`bibtex
{BIBTEX}
\`\`\`
EOF
)"

gh が利用できない場合は、ユーザーが GitHub に貼り付けられるよう、リリースノートをテキストで出力します。

7. まとめと次のステップ

最終的なまとめを出力します:

✅ Release {VERSION} complete!

Files generated/updated:
  • LICENSE
  • CITATION.cff
  • README.md
  • .gitignore

Git:
  • Commit: {COMMIT_HASH}
  • Tag: {VERSION} → pushed to origin

GitHub:
  • Release: https://github.com/{REPO}/releases/tag/{VERSION}

Recommended next steps:
  □ Upload pre-trained weights to HuggingFace Hub / project page
  □ Add repo link to the paper's arXiv abstract page
  □ Tweet / post about the release
  □ Email the mailing list / post to r/MachineLearning
  □ Add a "Code" badge to the paper PDF (camera-ready only)

匿名投稿への対応

ユーザーが、これが匿名の学会投稿用だと言った場合:

  1. 公開 GitHub リリースを作成しないでください。
  2. コミットするファイルに著者名を含めないでください。
  3. 代わりに匿名化した zip パッケージを生成します:
    ROOT="$(git rev-parse --show-toplevel)"
    PROJ=$(basename "$ROOT")
    git -C "$ROOT" archive --format=zip HEAD -o "/tmp/${PROJ}-anonymous.zip"
    echo "Anonymous zip: /tmp/${PROJ}-anonymous.zip"
    
  4. 投稿前に、zip の内容に著者を特定できる情報が含まれていないか確認します。
  5. ユーザーに、git log で確認できるコミットメッセージ、設定ファイル内の個人用パス、コードコメント内のメールアドレスを匿名化するよう注意を促します。

よくあるパターン

HuggingFace Hub へのモデルのアップロード

ユーザーが HuggingFace に重みをプッシュしたい場合:

# Requires: pip install huggingface_hub
python -c "
from huggingface_hub import HfApi
api = HfApi()
api.upload_folder(
    folder_path='checkpoints/',
    repo_id='username/model-name',
    repo_type='model',
)
"
README への「Code」バッジの追加
[![GitHub](https://img.shields.io/github/stars/username/repo?style=social)](https://github.com/username/repo)
[![arXiv](https://img.shields.io/badge/arXiv-2401.00000-b31b1b.svg)](https://arxiv.org/abs/2401.00000)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
論文の Code リンク

リリース後、paperswithcode.com に投稿して、リポジトリを論文に自動でリンクします。

コメント