対戦中の高速応答モード。calc skillを事前ロードし、ダメ計とメモのラベル付き入力のみを最短で処理する。対戦中・バトル中・実戦中・対戦が始まる等の発話時に使用。
self-update
pkdxを最新版に更新する。構築・育成データを保護しながらスキルやCLIツールを安全にアップデートする。更新したい・アップデート・最新にしたい時に使用。
インストール方法を見る含まれるファイル(1)
- SKILL.md13.5 KB
SKILL.md(原文)
インストールする前に、エージェントに与えられる指示の中身を確認できます。
Self-Update
最新変更を安全に取り込むスキル。フォーク運用・clone運用どちらにも対応する。ユーザーは非技術者を想定し、git関連の技術用語はコミュニケーションではできる限り使わない。
パス定義
SKILL_DIR=(このSKILL.mdが置かれたディレクトリ)
REPO_ROOT=$SKILL_DIR/../../..
Phase 0: 前提確認
0-1: 運用モデル判定
cd $REPO_ROOT && git remote -v
以下のパターンで判定:
A. フォーク運用 — origin がユーザーのフォーク、upstream が本家
upstreamが存在する → そのまま続行originが canonicalpkdxtools/pkdxでない +upstreamがない →setup.shを実行して自動設定:
(cd $REPO_ROOT && ./setup.shsetup.shが upstream remote を自動追加する)
B. clone運用 — origin が canonical pkdxtools/pkdx 本体で、upstream が存在しない
originから直接 pull する(upstreamの代わりにoriginを使う)- 以降のフェーズで
upstreamと記載された箇所をoriginに読み替える
判定後、使用するリモート名を $UPDATE_REMOTE に設定:
# フォーク運用
UPDATE_REMOTE="upstream"
# clone運用
UPDATE_REMOTE="origin"
判定ロジックの参考スニペット (origin URL → 運用モデル):
ORIGIN_URL="$(git -C $REPO_ROOT remote get-url origin 2>/dev/null || true)"
if echo "$ORIGIN_URL" | grep -qE "[:/]pkdxtools/pkdx(\.git)?/?$"; then
MODE="clone" # canonical upstream を直接 clone している
else
MODE="fork" # ユーザーの fork
fi
clone運用の場合、以下のメッセージを表示:
ℹ GitHubアカウントを作成してフォークに移行すると、構築・育成データの
バージョン管理(変更履歴の保存・復元・クラウドバックアップ)が利用できます。
詳しくは README.md の「セットアップ方法」を参照してください。
0-2: default branch 検出
UPSTREAM_BRANCH=$(git symbolic-ref refs/remotes/$UPDATE_REMOTE/HEAD 2>/dev/null | sed "s|refs/remotes/${UPDATE_REMOTE}/||")
if [ -z "$UPSTREAM_BRANCH" ]; then
UPSTREAM_BRANCH="main"
fi
0-3: ワーキングツリーの状態確認
cd $REPO_ROOT && git status --porcelain
未コミットの変更がある場合(tracked + untracked):
AskUserQuestion(1問):
| # | 質問 | header | オプション |
|---|---|---|---|
| 1 | 未保存の変更があります。バックアップして続行しますか? | 確認 | はい(desc: 変更をバックアップして続行), いいえ(desc: 中断) |
「いいえ」→ スキル終了。 「はい」→:
cd $REPO_ROOT && git branch backup/pre-update-$(date +%Y%m%d-%H%M%S)
cd $REPO_ROOT && git stash push -u -m "self-update: auto-stash $(date +%Y%m%d-%H%M%S)"
メモ: Phase 1 はソース更新とバイナリ更新の双方を含む。差分の有無に関係なく Phase 1-4(バイナリ更新)まで必ず到達する設計。
Phase 1: Fetch & Merge
cd $REPO_ROOT && git fetch $UPDATE_REMOTE
git fetch が失敗した場合、以下のフォールバック判定を行う:
1-F: Web環境フォールバック(フォーク運用 + fetch失敗時)
条件(いずれか満たせば発火):
$UPDATE_REMOTEがupstream(フォーク運用)かつgit fetch upstreamが失敗(exit code ≠ 0)- フォーク運用判定だが
upstreamremote 自体が存在せず、./setup.shを流しても web 環境ではgit remote add upstream直後の fetch が proxy にブロックされる - Clone 判定として
git fetch originを試したが、origin側がすでに最新まで 進んでいるはずなのに Phase 1-5 でversion_drift=trueが残る場合(origin が canonicalpkdxtools/pkdxでなく legacy fork に向いている疑いがあるため、 Sync fork 経由で取り込むほうが確実)
この状況は主に Claude Code on the web 環境で発生する。web環境では git proxy がセッション対象リポジトリ(origin)のみにアクセスを制限するため、upstream への fetch がブロックされる。
手順:
- ユーザーに状況を説明し、GitHub Web UIでの操作を案内する:
⚠ この環境では upstream リポジトリへの直接アクセスが制限されています。
GitHub の Web UI から最新版を取り込む必要があります。
AskUserQuestion(1問):
| # | 質問 | header | オプション |
|---|---|---|---|
| 1 | GitHub Web UIでフォークを同期してください。\n\n手順:\n1. ブラウザで自分のフォークリポジトリページを開く\n2. 「Sync fork」ボタンをクリック\n3. 「Update branch」をクリック\n4. 完了したら「完了」を選択してください | フォーク同期 | 完了(desc: Sync forkを実行しました), 中断(desc: 更新を中断します) |
「中断」→ Phase 2(Stash復元)へスキップしてスキル終了。
「完了」→ origin から pull して最新を取り込む:
cd $REPO_ROOT && git pull origin $UPSTREAM_BRANCH
pull 成功後、Phase 1-1(差分確認)をスキップし Phase 1-4(バイナリ更新) へ進む。 pull 失敗時は通常のコンフリクト処理(Phase 1-3)と同様に処理する。
git fetch が成功した場合、以下の通常フローを続行する:
1-1: 差分確認
cd $REPO_ROOT && git log --oneline HEAD..$UPDATE_REMOTE/$UPSTREAM_BRANCH | head -20
差分がない場合は「すでに最新です」と表示し、Phase 1-4(バイナリ更新) へ進む。バイナリ更新はソース差分の有無に関係なく必ず実行する(GitHub Releases のアセット差し替え、ローカルバイナリ欠損、version drift 残留などをカバーするため)。
1-2: マージ実行
cd $REPO_ROOT && git merge $UPDATE_REMOTE/$UPSTREAM_BRANCH --no-edit
1-3: コンフリクト処理
マージが失敗した場合:
cd $REPO_ROOT && git diff --name-only --diff-filter=U
コンフリクトファイルを一覧表示し:
-
box/内のコンフリクト → ユーザー側(ours)を優先 (構築・育成・ブログ記事・サイト設定はユーザー所有):git checkout --ours box/<path> && git add box/<path>対象例:
box/teams/**,box/pokemons/**,box/blog/**,box/site.config.json -
.claude/skills/内のコンフリクト → 更新元(theirs)を優先:git checkout --theirs .claude/skills/<path> && git add .claude/skills/<path> -
site/**のコンフリクト → 更新元(theirs)を優先 (Astro サイト本体は upstream 管理):git checkout --theirs site/<path> && git add site/<path>例外:
site/public/CNAMEはユーザーがカスタムドメイン用に追加する想定なので、存在すれば ours を保持する。 -
.github/workflows/**のコンフリクト → 更新元(theirs)を優先 (CI/CD は upstream 管理):git checkout --theirs .github/workflows/<path> && git add .github/workflows/<path> -
box/blog/TEMPLATE.md.exampleのコンフリクト → 更新元(theirs)を優先 (ひな形は upstream が更新):git checkout --theirs box/blog/TEMPLATE.md.example && git add box/blog/TEMPLATE.md.example -
その他のコンフリクト → ユーザーに判断を求める:
AskUserQuestion(コンフリクトファイルごと):
| # | 質問 | header | オプション |
|---|---|---|---|
| 1 | <ファイルパス> の変更が衝突しています。どちらを残しますか? | 衝突解決 | ours(desc: 自分の変更を残す), theirs(desc: 更新元の変更を採用) |
全コンフリクト解決後:
cd $REPO_ROOT && git commit --no-edit
1-4: バイナリ更新(GitHub Releases ダウンロード固定)
ソース差分の有無に関係なく必ず実行する。GitHub Releases のアセット差し替え、ローカルバイナリ欠損、moon.mod.json との version drift 残留などをまとめてカバーするため、ユーザーへの選択肢提示は行わない。./setup.sh が以下を一括で行う:
- 古いバイナリキャッシュのクリア
- GitHub Releases から最新 pkdx バイナリをダウンロード
- pokedex / champout submodule の同期
pkdx_patch/{009..012}/data.json再生成 →champions.db再構築 →pkdx migrate実行box/**/*.meta.jsonの schema マイグレーション(<path>.bakを 1 回だけ作成、既存.bakは上書きしない)
CACHE_DIR="${XDG_CACHE_HOME:-$HOME/.cache}/pkdx"
rm -f "$CACHE_DIR"/pkdx-*
cd $REPO_ROOT && ./setup.sh
pkdx migrate は bookkeeping を持たない seed-script モデルで、全マイグレーションが冪等(UPDATE / INSERT OR REPLACE / existence-check / 自己所有テーブルの DELETE→再投入)として実装されているため、再適用しても DB は data.json の状態へ収束する。
ローカル開発でビルド済みバイナリを使いたい場合は、./setup.sh を流した後に手動で moon build --target native --release src/main を打つ。
1-5: 動作確認
$REPO_ROOT/bin/pkdx version
$REPO_ROOT/bin/pkdx context --json | grep -o '"version_drift":[^,]*'
"version_drift":false が出ればバイナリと repo の version が一致している。
true の場合は、バイナリ側だけが新しい version を持ち、repo の moon.mod.json が
古い状態で取り残されている。これを放置すると SessionStart hook が毎セッション
version_drift_message を注入し続けるため、以下の drift 復旧フロー を順に試す。
1-5-R: drift 復旧フロー
-
upstream 不在ならまず追加 —
setup.shが再分類してupstreamを追加 する。すでに追加済みでも冪等:cd $REPO_ROOT && ./setup.sh※
setup.shの Step 0 がoriginを判定し、canonicalpkdxtools/pkdx以外ならupstreamをpkdxtools/pkdxに向けて自動追加する。 -
未取り込みコミットを fetch + merge —
moon.mod.jsonの version bump コミットが upstream/origin に存在するのに HEAD に取り込まれていないケース:# $UPDATE_REMOTE は Phase 0-1 で設定済み (fork=upstream, clone=origin) cd $REPO_ROOT && git fetch $UPDATE_REMOTE cd $REPO_ROOT && git log --oneline HEAD..$UPDATE_REMOTE/$UPSTREAM_BRANCH -- moon.mod.json | head -5 cd $REPO_ROOT && git merge $UPDATE_REMOTE/$UPSTREAM_BRANCH --no-editコンフリクトが出たら Phase 1-3 の手順に従って解決する。
git fetchが失敗する web 環境では Phase 1-F に戻り、GitHub Web UI の Sync fork →git pull origin $UPSTREAM_BRANCHの経路で取り込む。 -
再度 drift を確認 — 取り込みに成功したら再判定:
$REPO_ROOT/bin/pkdx context --json | grep -o '"version_drift":[^,]*'falseになれば復旧完了。 -
まだ
trueのとき — 以下の可能性をユーザーに報告し、状況に応じた 選択肢を提示する:- GitHub Releases にまだ最新版が反映されていない(upstream
moon.mod.jsonの 値より古いバイナリしか配布されていない)→ 数分待って./setup.shを再実行 ./setup.shの DL が失敗した(CDN/network 不調)→./setup.shを再実行- ローカルにビルド済みバイナリがあり、それが古い →
moon build --target native --release src/mainでリビルド、または_build/native/{release,debug}/build/src/main/main.exeを削除して./setup.shを再実行(リリースバイナリへフォールバックされる)
- GitHub Releases にまだ最新版が反映されていない(upstream
SessionStart hook が同じ判定を毎回エージェントに注入するので、復旧できないまま
スキルを終了するときは、Phase 3 の完了レポートで version_drift: true (要対処)
と明示し、上記のどのケースに該当しそうかを併記する。
Phase 2: Stash復元
Phase 0でstashした場合:
cd $REPO_ROOT && git stash pop
stash popでコンフリクトが発生した場合:
box/内 → stash側を優先(ユーザーの作業中データ)- その他 → AskUserQuestionでユーザーに判断を求める
Phase 3: 完了レポート
=== pkdxバージョンアップ完了 ===
マージ元: $UPDATE_REMOTE/$UPSTREAM_BRANCH
取り込み方法: <fetch & merge / fetch (差分なし) / Sync fork経由>
新規コミット数: <N>
コンフリクト解決: <あり/なし>
pkdx tools: 更新済み (GitHub Releases)
version_drift: <false / true (要対処)>
バックアップ: <復元済み/なし>
「取り込み方法」のラベル選択指針:
fetch & merge: ソース差分がありgit mergeを実行したケースfetch (差分なし): 差分ゼロでバイナリ更新のみを行ったケースSync fork経由: Phase 1-F で GitHub Web UI の Sync fork →git pullを踏んだケース
レビュー
まだレビューはありません。使ってみた感想をお寄せください。
同じリポジトリのスキル
概要と使いどころ
サイト記事・設定のメンテナンス。新規ブログ記事の作成、公開/非公開切替、frontmatter (タイトル・説明文・タグ) 編集、記事削除、記事一覧表示、メンバー画像追加・差し替え、構築記事の本文編集 (構築コンセプト / ダメージ計算 / ポケモンメモ / 選出やりなおし)、サイト設定 (サイト名 / author / enabled) 変更を対話的に行う。最後にユーザー確認のうえ git push でサイトに反映。記事管理・ブログ管理・本文編集・構築コンセプト編集・ダメ計追加削除・ポケモンメモ・選出変更・メンバー画像差し替え・サイト名変更・公開切替・記事削除・記事一覧などの際に使用。
ポケモン育成シミュレーション。性格・特性・持ち物・技・努力値を対話的に設定し、Lv50実数値を算出する。育成したい・実数値計算・努力値配分等の質問時に使用。
ダメージ計算。攻撃側・防御側・技名を指定し、特性・持ち物・天候込みのダメージ乱数表を出力する。ダメージ計算・ダメ計・何発で落ちる等の質問時に使用。
ナッシュ均衡ソルバー。零和対戦 (ポケモン選出、構築マッチアップ、じゃんけん型メタ) の最適混合戦略、選出最適化 (pkdx select)、メタ乖離分析 (pkdx meta-divergence) を提供。「最適選出」「選出分布」「構築メタ」「対面ジャンケン」「使用率 vs 最適」等の質問時に使用。
対戦用ポケモン構築支援(シングル/ダブル対応)。軸ポケモンからタイプ補完・メタ分析・選出パターンまでガイドする。構築したい・パーティを組みたい・チーム作成時に使用。