Self-Update
SkillDev toolsUpdates pkdx to the latest version. Safely updates skills and CLI tools while protecting build and training data. Use when you want to update or get the latest version.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Self-Update skill
What this skill tells your AI
The instructions your AI receives, as published by pkdxtools/pkdx in .claude/skills/self-update/SKILL.md and read by ahel’s review.
最新変更を安全に取り込むスキル。フォーク運用・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を踏んだケース
Signals
- GitHub stars
- 54
- Forks
- 113
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
self-update- Source
- github.com/pkdxtools/pkdx