MCP HubMCP Hub
스킬 목록으로 돌아가기

add-puzzle-type

pjt222
업데이트됨 2 days ago
7 조회
17
2
17
GitHub에서 보기
기타general

정보

이 스킬은 새로운 퍼즐 유형을 jigsawR의 10개 이상의 파이프라인 통합 지점에 걸쳐 구성합니다. 핵심 모듈을 생성하고, 이를 생성, 배치, 렌더링, 인접성 파이프라인에 연결하며, 관련 구성 요소를 업데이트합니다. 완전히 새로운 퍼즐 유형을 추가할 때 통합 지점을 누락 없이 종단 간 커버리지를 확보하려면 이 스킬을 사용하세요.

빠른 설치

Claude Code

추천
기본
npx skills add pjt222/agent-almanac -a claude-code
플러그인 명령대체
/plugin add https://github.com/pjt222/agent-almanac
Git 클론대체
git clone https://github.com/pjt222/agent-almanac.git ~/.claude/skills/add-puzzle-type

Claude Code에서 이 명령을 복사하여 붙여넣어 스킬을 설치하세요

문서


name: add-puzzle-type description: > jigsawRの10以上のパイプライン統合ポイントにまたがる新しいパズルタイプを スキャフォールドする。コアパズルモジュールを作成し、統合パイプライン (生成、配置、レンダリング、隣接)に接続し、ggpuzzleのgeom/statレイヤーを 追加し、DESCRIPTIONとconfig.ymlを更新し、Shinyアプリを拡張し、包括的な テストスイートを作成する。パッケージに完全に新しいパズルタイプを追加する場合や、 10ポイント統合チェックリストに従ってエンドツーエンドで漏れがないようにする場合に使用する。 license: MIT allowed-tools: Read Write Edit Bash Grep Glob metadata: author: Philipp Thoss version: "1.0" domain: jigsawr complexity: advanced language: R tags: jigsawr, puzzle-type, pipeline, integration, scaffold locale: ja source_locale: en source_commit: 6f65f316 translator: claude-sonnet-4-6 translation_date: 2026-03-16

パズルタイプの追加

jigsawRのすべてのパイプライン統合ポイントにまたがる新しいパズルタイプをスキャフォールドする。

使用タイミング

  • パッケージに完全に新しいパズルタイプを追加する場合
  • 確立された統合チェックリスト(CLAUDE.md 10ポイントパイプライン)に従う場合
  • 新しいタイプをエンドツーエンドで接続する際に漏れがないようにする場合

入力

  • 必須: 新しいタイプ名(小文字、例:"triangular"
  • 必須: ジオメトリの説明(ピースの形状/配置方法)
  • 必須: 外部パッケージが必要かどうか(Suggestsに追加)
  • 任意: 標準パラメータ(grid、size、seed、tabsize、offset)以外のパラメータリスト
  • 任意: 参照実装またはアルゴリズムソース

手順

ステップ1: コアパズルモジュールの作成

内部生成関数を持つR/<type>_puzzle.Rを作成する:

#' Generate <type> puzzle pieces (internal)
#' @noRd
generate_<type>_pieces_internal <- function(params, seed) {
  # 1. RNG状態の初期化
  # 2. ピースジオメトリの生成
  # 3. エッジパスの構築(SVGパスデータ)
  # 4. 隣接関係の計算
  # 5. リストを返す: pieces, edges, adjacency, metadata
}

構造についてはR/voronoi_puzzle.RまたはR/snic_puzzle.Rのパターンに従う。

期待結果: 関数が$pieces$edges$adjacency$metadataを含むリストを返す。

失敗時: generate_voronoi_pieces_internal()の返却構造と比較して、不足しているリスト要素や不正な型を特定する。

ステップ2: jigsawR_clean.Rへの接続

R/jigsawR_clean.Rを編集する:

  1. valid_typesベクトルに"<type>"を追加
  2. paramsセクションにタイプ固有のパラメータ抽出を追加
  3. タイプ固有の制約のバリデーションロジックを追加
  4. ファイル名プレフィックスマッピングを追加(例:"<type>" -> "<type>_"
# valid_typesに追加
valid_types <- c("rectangular", "hexagonal", "concentric", "voronoi", "snic", "<type>")

期待結果: generate_puzzle(type = "<type>")が「unknown type」エラーなく受け入れられる。

失敗時: タイプ文字列が正確なスペルでvalid_typesに追加されているか、パラメータ抽出が必要なタイプ固有引数をすべてカバーしているか確認する。

ステップ3: unified_piece_generation.Rへの接続

R/unified_piece_generation.Rを編集する:

  1. generate_pieces_internal()にディスパッチケースを追加
  2. タイプがPILES記法をサポートする場合、フュージョン処理を追加
# switch/dispatchに追加
"<type>" = generate_<type>_pieces_internal(params, seed)

期待結果: タイプがディスパッチされるとピースが生成される。

失敗時: ディスパッチケース文字列がタイプ名と正確に一致し、generate_<type>_pieces_internalがパズルモジュールから定義・エクスポートされているか確認する。

ステップ4: piece_positioning.Rへの接続

R/piece_positioning.Rを編集する:

新しいタイプの配置ディスパッチを追加する。ほとんどのタイプは共有配置ロジックを使用するが、カスタム処理が必要なものもある。

期待結果: apply_piece_positioning()が新しいタイプをエラーなく処理し、ピースが正しい座標に配置される。

失敗時: 新しいタイプにカスタム配置ロジックが必要か、共有配置パスを再利用できるか確認する。デフォルトパスが適用されない場合はディスパッチケースを追加する。

ステップ5: unified_renderer.Rへの接続

R/unified_renderer.Rを編集する:

  1. render_puzzle_svg()にレンダリングケースを追加
  2. エッジパス関数を追加:get_<type>_edge_paths()
  3. ピース名関数を追加:get_<type>_piece_name()

期待結果: 正しいピース輪郭とエッジパスを持つ新しいタイプのSVG出力が生成される。

失敗時: get_<type>_edge_paths()が有効なSVGパスデータを返し、get_<type>_piece_name()が各ピースに一意の識別子を生成しているか確認する。

ステップ6: adjacency_api.Rへの接続

R/adjacency_api.Rを編集する:

get_neighbors()get_adjacency()が新しいタイプで動作するようにネイバーディスパッチを追加する。

期待結果: get_neighbors(result, piece_id)がパズル内の任意のピースに対して正しいネイバーを返す。

失敗時: 隣接ディスパッチが正しいデータ構造を返しているか確認する。小さなグリッドでテストし、ジオメトリに対してネイバー関係を手動で検証する。

ステップ7: ggpuzzle Geomレイヤーの追加

R/geom_puzzle.Rを編集する:

make_puzzle_layer()ファクトリーを使用してgeom_puzzle_<type>()を作成する:

#' @export
geom_puzzle_<type> <- function(mapping = NULL, data = NULL, ...) {
  make_puzzle_layer(type = "<type>", mapping = mapping, data = data, ...)
}

期待結果: ggplot() + geom_puzzle_<type>(aes(...))がエラーなくレンダリングされる。

失敗時: make_puzzle_layer()が正しいタイプ文字列を受け取り、geom関数が@export経由でNAMESPACEにエクスポートされているか確認する。

ステップ8: Statディスパッチの追加

R/stat_puzzle.Rを編集する:

  1. タイプ固有のデフォルトパラメータを追加
  2. compute_panel()にディスパッチケースを追加

期待結果: statレイヤーがパズルジオメトリを正しく計算し、期待される数のポリゴンを生成する。

失敗時: compute_panel()ディスパッチケースが必要なカラム(xygrouppiece_id)を含むデータフレームを返し、デフォルトパラメータが新しいタイプに適切か確認する。

ステップ9: DESCRIPTIONの更新

DESCRIPTIONを編集する:

  1. Descriptionフィールドのテキストに新しいタイプを追加
  2. 新しいパッケージをSuggests:に追加(外部依存がある場合)
  3. Collate:を更新して新しいRファイルを含める(アルファベット順)

期待結果: devtools::document()が成功する。リストされていないファイルに関するNOTEがない。

失敗時: 新しいRファイルがCollate:フィールドにアルファベット順でリストされており、新しいSuggestsパッケージがバージョン制約とともに正しくスペルされているか確認する。

ステップ10: config.ymlの更新

inst/config.ymlを編集する:

新しいタイプのデフォルトと制約を追加する:

<type>:
  grid:
    default: [3, 3]
    min: [2, 2]
    max: [20, 20]
  size:
    default: [300, 300]
    min: [100, 100]
    max: [2000, 2000]
  tabsize:
    default: 20
    min: 5
    max: 50
  # タイプ固有のパラメータをここに追加

期待結果: 設定が有効なYAMLである。デフォルト値がgenerate_puzzle()で使用されたとき動作するパズルを生成する。

失敗時: yaml::yaml.load_file("inst/config.yml")でYAMLを検証する。デフォルトのgridとsize値が適切なパズルを生成するか確認する(小さすぎず大きすぎず)。

ステップ11: Shinyアプリの拡張

inst/shiny-app/app.Rを編集する:

  1. UIタイプセレクターに新しいタイプを追加
  2. タイプ固有パラメータの条件付きUIパネルを追加
  3. サーバーサイドの生成ロジックを追加

期待結果: Shinyアプリのドロップダウンに新しいタイプが表示され、選択するとパズルが生成される。

失敗時: UIセレクターのchoices引数にタイプが追加されており、タイプ固有パラメータの条件付きパネルがconditionalPanel(condition = "input.type == '<type>'")を使用し、サーバーサイドハンドラーが正しいパラメータを渡しているか確認する。

ステップ12: テストスイートの作成

tests/testthat/test-<type>-puzzles.Rを作成する:

test_that("<type> puzzle generates correct piece count", { ... })
test_that("<type> puzzle respects seed reproducibility", { ... })
test_that("<type> adjacency returns valid neighbors", { ... })
test_that("<type> fusion merges pieces correctly", { ... })
test_that("<type> geom layer renders without error", { ... })
test_that("<type> SVG output is well-formed", { ... })
test_that("<type> config constraints are enforced", { ... })

タイプが外部パッケージを必要とする場合、テストをskip_if_not_installed()でラップする。

期待結果: すべてのテストがパスする。外部依存が欠落していない限りスキップはない。

失敗時: 各統合ポイントを個別にチェックする。最も一般的な問題はディスパッチケースの欠落である — grep -rn "switch\|valid_types" R/を実行してすべてのディスパッチ場所を見つける。

バリデーション

  • generate_puzzle(type = "<type>")が有効な出力を生成する
  • 10のすべての統合ポイントが正しく接続されている
  • devtools::test()が新しいテストでパスする
  • devtools::check()が0エラー、0警告を返す
  • Shinyアプリが新しいタイプをレンダリングする
  • 設定制約が強制される(最小/最大バリデーション)
  • 隣接関係とフュージョンが正しく動作する
  • ggpuzzle geomレイヤーがエラーなくレンダリングされる
  • devtools::document()が成功する(NAMESPACEが更新される)

よくある落とし穴

  • ディスパッチケースの欠落: 10以上のファイルのうち1つを忘れるとサイレントな失敗や「unknown type」エラーが発生する
  • 負の数でのstrsplit: paste(a, b, sep = "-")で隣接キーを作成する際、負のピースラベルが"1--1"のようなキーを生成する。代わりに"|"セパレータを使用し、"\\|"で分割する
  • 出力にcat()を使用: 常にcliパッケージのロギングラッパー(log_infolog_warnなど)を使用する
  • Collate順: DESCRIPTIONのCollateフィールドはアルファベット順または依存関係順でなければならない
  • Config.yml形式: YAMLが有効か確認する。yaml::yaml.load_file("inst/config.yml")でテストする

関連スキル

  • generate-puzzle — スキャフォールド後に新しいタイプをテストする
  • run-puzzle-tests — 統合を検証するための完全なテストスイートを実行する
  • validate-piles-notation — 新しいタイプでフュージョンをテストする
  • write-testthat-tests — テスト記述の一般的なパターン
  • write-roxygen-docs — 新しいgeom関数のドキュメントを作成する

GitHub 저장소

pjt222/agent-almanac
경로: i18n/ja/skills/add-puzzle-type
0
agentsagentskillsai-assisted-developmentclaude-codeskillsteams

연관 스킬

llamaguard

기타

LlamaGuard는 폭력 및 혐오 발언 등 6가지 안전 범주에서 LLM 입력과 출력을 조정하기 위한 Meta의 70-80억 파라미터 모델입니다. 94-95% 정확도를 제공하며 vLLM, Hugging Face 또는 Amazon SageMaker를 사용해 배포할 수 있습니다. 이 기술을 사용하여 AI 애플리케이션에 콘텐츠 필터링 및 안전 가드레일을 손쉽게 통합하세요.

스킬 보기

cost-optimization

기타

이 Claude Skill은 리소스 적정화, 태깅 전략, 지출 분석을 통해 개발자들이 클라우드 비용을 최적화할 수 있도록 지원합니다. AWS, Azure, GCP에서 클라우드 비용을 절감하고 비용 거버넌스를 구현하기 위한 프레임워크를 제공합니다. 인프라 비용을 분석하거나, 리소스를 적정화하거나, 예산 제약을 충족해야 할 때 사용하세요.

스킬 보기

quantizing-models-bitsandbytes

기타

이 스킬은 bitsandbytes를 사용하여 LLM을 8비트 또는 4비트 정밀도로 양자화하며, 최소한의 정확도 손실로 50-75%의 메모리 감소를 달성합니다. 제한된 GPU 메모리에서 더 큰 모델을 실행하거나 추론을 가속화하는 데 이상적이며, INT8, NF4, FP4와 같은 형식을 지원합니다. 이 스킬은 HuggingFace Transformers와 통합되어 QLoRA 학습 및 8비트 옵티마이저를 가능하게 합니다.

스킬 보기

dispatching-parallel-agents

기타

이 Claude Skill은 3개 이상의 독립적인 문제를 동시에 조사하고 해결하기 위해 다중 에이전트를 배치합니다. 공유 상태나 의존성 없이 해결 가능한 무관련 장애 시나리오에 맞게 설계되었습니다. 핵심 기능은 병렬 문제 해결로, 각 독립 문제 영역마다 하나의 에이전트를 할당하여 효율성을 극대화합니다.

스킬 보기