AIスキルは入れた瞬間から腐る|バージョン1.1.0のまま、中身だけ書き換わっていた

Claude Codeのスキル(特定の作業のやり方をまとめて渡す仕組み)は、入れると分かりやすく効きます。実際、デザイン審査用のスキルを1本入れただけで、自分では気づいていなかったアクセシビリティ違反が7種類出てきました。

ただ、運用してみて一番効いた学びは選び方ではありませんでした。入れた後に何をするかです。スキルは配置した時点のファイルのコピーで、上流が更新されても手元は変わりません。 しかも、変わったことを教えてくれる印がありませんでした。

仕様や配布物は変わるため、個々のスキルの中身は必ず自分で確認してください。

結論:スキルは「入れて終わり」にならない

📌 先に結論 ① スキルの価値は自分では見えない違反を検出することにある ② ただし権威ではなく第2レビュアーとして扱う。全部従うと没個性になる ③ versionは上がらないまま中身が変わる。見出しの比較では検出できない

1本入れたら、実際のA11y違反が7種類出た

導入したのは、AIが作りがちな没個性なデザインを検出するタイプの審査スキル(Hallmark)です。当時のこのサイトは「まあ見られる状態」だと思っていました。実際に指摘されたのは次の7つです。

指摘何が起きるか
:focus-visible の定義がゼロキーボード操作時に、いま自分がどこにいるか見えない
prefers-reduced-motion 未対応アニメーションを減らす設定が無視される
overflow-x 未設定横スクロールが発生する可能性が残る
グリッドが 1.15fr 1fr の bare frスマホ幅で中身が枠から溢れる
ホバー効果を4つ同時がけ(浮き+影+枠色+画像ズーム)効果が競合して安っぽく見える
カードのアイコンに絵文字を使用AIが作った見た目である最も分かりやすい印
:root の外に生のhex(色コード)が50個色を1か所で変えられない

上の3つは目で見ても分かりません。キーボードだけでサイトを操作してみるまで、:focus-visible が無いことに気づけませんでした。

4番目の 1.15fr 1fr は、数字を微調整したくなって書いた自分のコードです。frminmax(0, ...) を添えないと、中身の最小幅がグリッドを押し広げます。これも実機で細い幅にするまで見えませんでした。

いちばん効いたのは「AIが直前に自分で足したもの」を撤回させたこと

導入して最初の審査で、こういう検出がありました。

見出しにグラデーションを掛けている箇所がある。装飾の必然性が説明できない。

これは、同じセッションでAI自身が「見栄えが良くなるので」と足したばかりの装飾でした。足した本人に「これは要りますか」と聞いても、たいてい「効果的です」と返ってきます。

📌 独立した審査を挟む意味 書いた本人に自己採点させても、直前の判断は肯定されます。別の基準を持った審査を後から通すと、直前の判断が撤回されます。

ただし、スキルを「決定権者」にしてはいけない

ここは実際に間違えかけたところです。指摘が的確だったので、全部従いたくなりました。

しかし導入したスキルは、汎用のWebランディングページ向けの評価基準を持っています。このサイト固有の意図的な判断——たとえば読者が最後まで読まない前提で中盤にCTAを置く設計——と衝突する指摘も混ざります。

⚠ 全部従うと何が起きるか 自分のサイトではなく、そのスキルが想定するテンプレートの一種になります。「AIっぽさ」を消すために入れたのに、別の均質化が起きます。

そこで運用ルールをこう決めました。

ルール理由
スキルは第2レビュアー。採否は自分が決める汎用の基準は、個別の意図を知らない
同じ領域にスコアラーを2つ入れない点数が食い違ったとき、どちらに従うか決められない
採用しなかった指摘は、なぜ採用しないかを書いて残す次の審査で同じ指摘が出たときに毎回悩まない

2番目は具体的に効きました。デザイン審査を追加する候補として897スターの別スキルを検討しましたが、見送っています。理由は2つです。

  • 既に入れているスキルと評価の権威が二重になる(どちらの点数を信じるのか決められない)
  • 既定の配色がインディゴ系で、このサイトのブランドカラー(暖色系)の決定と衝突する

代わりにやったのは、そのスキルにしか書かれていない言い回しだけを、既存スキルの基準に文章として取り込むことでした。丸ごと入れずに差分だけ借りる形です。現在はデザインはスキル1本、文章もスキル1本に固定しています。

本題:バージョンは1.1.0のまま、中身が変わっていた

ここが一番の落とし穴でした。

導入から時間が経ったので更新確認をしたところ、上流の配布物は version 1.1.0 のままでした。手元も 1.1.0 です。普通ならここで「最新です」と判断します。

実際には中身が変わっていました。

変わっていた箇所手元上流
収録テーマ数2021(1つ追加されていた)
レイアウト指針記載なしGrid(グリッドレイアウト)の項目が追加
ナビゲーションの表記旧表記変更後の表記

⚠ バージョン番号は更新の証拠にならない 配布側がバージョンを上げずに中身を差し替えることがあります。番号が同じ=中身が同じ、ではありません。

さらに厄介なのは、見出しの一覧を比べても検出できなかったことです。テーマが1つ増えたことは目次を見れば分かりますが、レイアウト指針の追記や表記変更は本文の中にあります。

検出方法:tarballを落として全ファイルを実際に差分にとる

結局、確実だったのはこれだけでした。

上流の main ブランチを丸ごと取得します。

curl -L "https://codeload.github.com/<owner>/<repo>/tar.gz/refs/heads/main" -o upstream.tar.gz
tar xzf upstream.tar.gz

そのうえで、手元のスキルフォルダと全ファイルを1つずつ差分にかけます。「代表的なファイルだけ見る」では、上の3件のうち2件を見落とします。

Windowsで必ず引っかかる改行コードの罠

手元のファイルはCRLF(Windowsの改行)、配布物はLFです。そのまま比較すると全行が差分になって使い物になりません。

比較するときは、手元側の改行を落としてから渡します。

diff <(tr -d '\r' < local/SKILL.md) upstream/SKILL.md

逆に、更新内容を手元へ書き戻すときはCRLFに戻します。

sed 's/$/\r/' upstream/SKILL.md > local/SKILL.md

これを飛ばすと、中身は正しいのに全ファイルが変更扱いになるか、手元だけ改行が混ざった状態になります。

更新後は「差分0」を実測して閉じる

更新したら、同じ手順をもう一度回して差分が0であることを確認します。実際にやった結果がこれです。

  • 更新後の再比較で、全107ファイルの差分が0
  • 別に入れていた2本のスキル(テスト駆動開発用・デバッグ手順用)は、上流とバイト単位で一致していた=作業不要

2つ目が地味に重要でした。**「更新確認をした」の中身が「全部更新した」ではなく「変わっていないことを確認した」**であるほうが、次回の判断が速くなります。何も変わっていないという結果も、実測した記録として残します。

選ぶときに見るもの(スター数は当てにならなかった)

紹介記事を頼りに候補を絞っていたとき、実際に起きた食い違いです。

ある紹介記事が、公式のスキル集を 「157k スター」 と書いていた。同日に実際のリポジトリを開いて数えたら 169.6k だった。

紹介記事は書かれた時点の数字で止まります。しかもどの時点かが書かれていないことがほとんどでした。数字を判断材料にするなら、必ず本体を開いて自分で見るしかありません。

そのうえで、実際に候補を落とした基準がこれです。

見るもの落ちた例
ライセンスプロジェクト管理系のスキルは非商用(NC)ライセンスが多い。収益化するサイトの作業に使えない
既存スキルとの役割の重複同じ領域のスコアラーが2つになる(前述の897スターの件)
自分の決定と衝突する既定値既定の配色がブランドの決定と衝突する

📌 スター数より先にライセンスを見る 人気があっても、非商用ライセンスなら収益化する作業には使えません。 落とす理由になるものから先に確認したほうが、検討の時間が短くなります。

そして、入れる前にもう1つやることがあります。スキルは他人の書いたコードを自分の環境で動かすことなので、配置前に中身を検査しています。その手順はAIスキルを入れる前の検査にまとめました。

現在固定している運用

  1. 新規スキルは配置前に検査(静的解析+本文の全文レビュー)
  2. 同一領域にスコアラーは1本まで(デザイン1本・文章1本)
  3. 指摘は採否を自分が決める。不採用の理由は書いて残す
  4. 更新確認は tarball の全ファイル差分。バージョン番号は見ない
  5. 差分0だったことも記録に残す(次回の判断が速くなる)

4番目は隔週の作業として日付を決めています。「気づいたときにやる」では、気づく手がかりがそもそも無いからです。

まとめ

スキルで得たものと、失いかけたものを並べます。

  • 得たもの:自分では見えない違反7種:focus-visible ゼロ、絵文字アイコン、生hex50個ほか)と、直前に自分で足した装飾を撤回できる独立審査
  • 失いかけたもの:全部従った結果の没個性。スキルは第2レビュアーであって決定権者ではない
  • 一番の落とし穴:version 1.1.0 のまま中身が変わっていた。見出し比較では検出できず、全ファイル差分で初めて分かった

なお、この「書いてある内容が古くなる」問題は、スキルに限りません。プロジェクトの指示ファイルでも同じことが起きます → CLAUDE.mdは書いた瞬間から劣化する

Claude Code自体の位置づけはClaude Codeとは何か、実務での回し方はClaude Codeの実務での使い方にまとめています。