mcpField
R
regex-chess

regex-chess

github.com/letta-ai開発15238 回インストール4 週間前に更新
リポジトリ

regex-chess について

FENなどの盤面表現に正規表現を適用し、チェスの指し手生成器を実装するためのスキルです。パターンを段階的に追加し、一致結果と変換後の盤面を検証する方法を扱います。

主な機能

  1. 01FEN盤面表現の位置対応
  2. 02正規表現による指し手パターン設計
  3. 03指し手種別の段階的な実装
  4. 04盤面変換の検証
  5. 05キャプチャグループを使ったデバッグ

活用シーン

  1. 01正規表現のみの指し手生成器の作成
  2. 02駒の指し手を段階的に追加
  3. 03誤った盤面変換の調査

インストール

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

$npx skills add https://github.com/letta-ai/skills --skill regex-chess

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

詳細

正規表現チェス

概要

このスキルでは、正規表現のみを使用してチェスの指し手生成器を実装するための戦略的なガイダンスを提供します。こうしたタスクでは、従来のプログラミング構文ではなく、パターンマッチングと置換によって盤面の状態(通常は FEN 表記)を変換する必要があります。

基本的なアプローチ

フェーズ 1:文字列の表現を理解する

パターンを書く前に、盤面の表現を十分に理解してください。

  1. FEN の構造を解析する:FEN 表記では、ランク 8 からランク 1(上から下)の順に記述し、各ランク内ではファイル a-h(左から右)の順に記述します
  2. 座標を文字列の位置に対応付ける:数字のプレースホルダーを展開した後(例:「8」は「........」になります)、各マスの正確な文字インデックスを特定します
  3. 順序を記録する:展開後の文字列内でマスがどのように並ぶかを明確に対応付けます
フェーズ 2:最小限から始める ― まず 1 種類の指し手を実装する

重要:複雑さを加える前に、1 種類の指し手を完全に動作させてください。

推奨する順序:

  1. ポーンの 1 回の前進(例:e2-e4)から始めます
  2. パターンが正しく一致することを確認します
  3. 置換によって正しい出力が生成されることを確認します
  4. その後で初めて、ほかのポーンの指し手を追加します
  5. すべてのポーンの指し手が動作してから、ナイトを追加します(スライドしない駒の中では最も単純です)
  6. 残りの駒を段階的に追加します
フェーズ 3:座標ラベル付けの戦略

パターンマッチングを簡単にするため、展開した盤面に座標ラベルを追加することを検討してください。

Original: rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR
Expanded with labels: R8:a8r.R8:b8n.R8:c8b...R1:h1R.

こうすることで、パターンの内容が分かりやすくなり、座標の混同も減らせます。

フェーズ 4:パターンの構造

各指し手のパターンでは、次のようにします。

  1. 周辺情報を捕捉するグループ:盤面の周囲の状態を保持するためにグループを使います
  2. 移動元のマスのパターン:移動元の駒に一致させます
  3. 移動先のマスのパターン:移動先(空きマスまたは相手の駒)に一致させます
  4. 置換文字列:駒を移動し、ほかの状態はすべて保持した形で再構成します

検証方法

各変換ステップをテストする
  1. パターンマッチングの検証:パターンが想定どおりの入力に一致することを確認します
  2. 置換出力の検証:置換によって正しい出力が生成されることを確認します
  3. 往復検証:出力 FEN が有効で、意図した指し手を表していることを確認します
段階的なテスト手順
For each new move pattern:
1. Test on known position with expected outcome
2. Verify exactly ONE move is generated
3. Verify the move is the CORRECT move
4. Only then add to the full pattern set
デバッグ出力の形式

デバッグ時は、次の中間状態を出力します。

  • マッチング前の展開済み盤面文字列
  • 一致したパターン
  • 捕捉されたグループとその値
  • 圧縮前の置換文字列
  • 最終的な FEN 出力

よくある落とし穴

座標の順序の誤り

問題:マスは FEN 文字列内で特定の順序(ランク 8 が先で、次にランク 7 など)に並びます。2 つのマスに一致させるとき、文字列内で「先にある」マスは、指し手での役割ではなく、座標によって決まります。

解決策:パターンで移動元と移動先のマスに一致させる必要がある場合、どちらが移動元かではなく、座標に基づいて文字列内でどちらが先に現れるかを判断します。

グループ番号の混同

問題:各グループが盤面のどの領域に対応するのかを追跡せずに、置換で \1、\2 などを使用することです。

解決策:各パターンに、グループの割り当てを明記したコメントを付けます。

# Group 1: everything before source square
# Group 2: source square piece
# Group 3: everything between source and dest
# Group 4: destination square
# Group 5: everything after destination
パターンの早すぎる大量生成

問題:基本的な仕組みが動作することを確認する前に、何千ものパターンを生成してしまうことです。

解決策:パターンは段階的に生成します。まず 1 つ、次に 10 個、その次に 100 個というように、それぞれが動作することを確認します。

部分的な解決策を捨てる

問題:一部が動作したときに、すべてを壊してしまう「よりよい」方法で最初からやり直すことです。

解決策:部分的に成功した場合(例:テスト局面で 3 手中 3 手が正しい)、動作しているコードを残します。置き換えるのではなく、それに追加していきます。

フォーマットの問題とロジックの問題

問題:基本ロジックが動作する前に、出力フォーマット(末尾の空白、手数カウンターなど)に時間をかけすぎることです。

解決策:まず盤面の変換を正しくします。フォーマットの調整は最後に行います。

置換を確認せずにパターンマッチングをテストする

問題:「マッチする」ことは確認しても、置換後の出力が正しいかを確認していません。

解決策:常に両方を確認します:(1)マッチするか?(2)置換結果は正しいか?

実装チェックリスト

テストを一通り実行する前に:

  • 簡単な指し手を1つ(例:e2-e4)最初から最後まで実行できる
  • ポーンの1マス前進がすべて機能する
  • ポーンの駒取りが機能する
  • ナイトの指し手が機能する(スライド移動の複雑さがない)
  • ビショップ/ルーク/クイーンのスライド移動が機能する
  • キングの指し手が機能する
  • エッジケース:盤の端付近での指し手

後回しにされることが多い機能(要件を確認してください):

  • 指し手の合法性(指し手の後にキングがチェックされていない)
  • 適切な権利の追跡を伴うキャスリング
  • アンパッサン
  • ポーンのプロモーション
  • アンパッサンのマスを更新するポーンの2マス前進

デバッグのワークフロー

指し手が正しくない場合:

  1. 失敗するケースを切り分ける:そのパターン1つだけでテストします
  2. 展開した盤面を出力する:入力が想定どおりか確認します
  3. キャプチャしたグループを出力する:各グループに想定した内容が含まれているか確認します
  4. 置換後の生データを出力する:圧縮や書式設定を行う前に確認します
  5. 期待値と比較する:必要であれば文字単位で比較します

避けること:

  • 問題を切り分けずに、テストスイート全体を何度も実行する
  • 既存のパターンを修正する前に、パターンを追加する
  • デバッグで十分な場合に、最初から書き直す

コメント