会場別のコース適性を分析する。会場を省略すると全会場の成績を表示する。「コース分析」「会場別の適性を見たい」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
有馬記念分析システムのアーキテクチャ/レイヤー境界レビュー。
docs/ARCHITECTURE.md のレイヤー構成(commands / domain / repositories / models / features / constants / database / utils / types)に対し、レイヤーディレクトリの意味と配置、参照系(queries)と更新系(aggregates)の分離、DB 接続の注入可能性とテスト容易性、リッチドメインモデルの維持(commands 肥大・ドメイン貧血症)、重み・閾値の constants 単一定義、ファイル配置と命名語彙の一致、不要な抽象化、種別分岐のポリモーフィズム化、生成引数の凝集(5個以上は分割シグナル)を検証。
純粋性・依存方向の逆流・DB 接続の生成箇所は lint が error で担保するため扱わない。Use when user says 'アーキテクチャレビュー', 'レイヤー境界チェック', 'review architecture', or '依存方向の確認'.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
설치 방법 보기설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
src/ 配下の TypeScript ソースを探索し、docs/ARCHITECTURE.md(レイヤー構成)と docs/DEVELOPMENT.md(コーディング規約・ファイル命名)の規約に基づいてレビューする。本リポジトリには規約を書いた他の正本(ルートの規約ファイル等)は無く、この 2 つのドキュメントが規約の正である。
src/ 配下のディレクトリ構成を把握する:
src/commands/ — CLI コマンド実装(動詞ベース PascalCase。表示責務を持つ)src/domain/entities/ src/domain/valueObjects/ — リッチドメインモデル(Horse / Jockey / Trainer / Race / RaceResult / Score / ScoreComponents)src/domain/services/ — ドメインサービス(ScoringOrchestrator)src/repositories/queries/ — 参照系(JOIN を伴う取得)/ src/repositories/aggregates/ — 更新系(集約単位の INSERT/UPDATE/DELETE)src/models/ — 機械学習モデル(MachineLearningModel)src/constants/ — 重み・閾値の単一定義/ src/database/ — DatabaseConnection + schema.sqlsrc/features/ — ML 特徴量の組み立て(FeatureBuilder)src/utils/ — JRAFetcher / HorseDataExtractor/ src/types/ — 型定義src/index.ts — CLI エントリポイント(commander の配線)docs/ARCHITECTURE.md と docs/DEVELOPMENT.md を Read し、規約の原文(レイヤー構成・ファイル命名)を把握するbun run lint を 1 回流し、層越え import と接続生成の error がゼロであることを確認する(層の逆流は lint が担保する。本スキルは残る配置・責務の判断を見る)docs/ARCHITECTURE.md のレイヤー構成のどれか 1 つに素直に収まっているか(CLI 表示 = commands、ドメイン判定・計算 = domain、SQL = repositories、ML = models、定数 = constants、外部取得・HTML 解析 = utils、型 = types)src/utils/ に置いていないか(utils は JRA HTML 取得・抽出という技術関心事に限る)src/types/ に置かれ、DB レコード型(DB*)とリポジトリ戻り値型(RepositoryTypes.ts)の役割分担が保たれているかsrc/repositories/queries/ の *QueryRepository.ts が SELECT のみで、INSERT / UPDATE / DELETE / db.exec を持っていないかsrc/repositories/aggregates/ の *AggregateRepository.ts に集約されているかScoreAggregateRepository.rebuildHorseStats が既存の前例)src/database/QueryRunner.ts の queryBuilder)で、実行が同ファイルのヘルパー経由になっているか。参照系・更新系のどちらもリポジトリ層に閉じているか(kysely の import 制限とビルダー実行系の禁止は lint が error で担保する。review-code 2.1)NG例: HorseQueryRepository に UPDATE horses SET ... を足す
OK例: 参照は src/repositories/queries/HorseQueryRepository.ts、スコア保存は src/repositories/aggregates/ScoreAggregateRepository.ts
Database をコンストラクタで受け取る形になっているか(ScoringOrchestrator / FeatureBuilder は db: Database を受けて QueryRepository を自前で new する。これは現状の許容構造で、新規に同型を書くことは FAIL としない)Database の任意注入を検討したか(前例: MachineLearningModel / Backtest の externalDb)new DatabaseConnection() する現状の形は既存の合成ルート。追随して増やすのは許容(WARN 以下)src/index.ts / models のフォールバック / src/database のファクトリ / テスト以外で new DatabaseConnection(...) しない)は plugin が error で機械検出する。本項は注入可能性とテスト容易性だけを見る設計原則の正は design-principles 原則2。
src/commands/ や src/models/ に、ドメインの語彙で一文で言える判定・計算(「G1 レースか」「距離適性スコア」「直近 5 戦の重み付き平均」級)が直書きされていないか。該当するものは Horse / Jockey / Trainer / RaceResult / ScoreComponents へ置くNG例: Backtest の中で「上位 3 頭の的中」を判定するドメイン計算をべた書きし、同じ計算が CalculateScore にも現れる
OK例: Horse.calculateVenueAptitudeScore のようにエンティティが計算を持ち、ScoringOrchestrator.calculateScoresForRace は組み立てと委譲だけを行う
src/constants/ にあり、SCORE_WEIGHTS(src/constants/ScoringConstants.ts の SCORE_WEIGHTS)が重みの唯一の定義であることを崩していないかsrc/commands/CalculateScore.ts が SCORE_WEIGHTS を import する形が正)src/constants/DistanceConstants.ts、ML パラメータが src/constants/MLConstants.ts に置かれているか| 配置 | 命名 |
|---|---|
src/commands/ | 動詞ベース PascalCase(CalculateScore.ts / ListHorses.ts / AnalyzeTrack.ts) |
src/domain/entities/ | 名詞 PascalCase(Horse.ts / Jockey.ts / Trainer.ts) |
src/domain/valueObjects/ | 名詞 PascalCase(Score.ts / ScoreComponents.ts) |
src/domain/services/ | 役割が読める名詞(ScoringOrchestrator.ts) |
src/repositories/queries/ | *QueryRepository.ts |
src/repositories/aggregates/ | *AggregateRepository.ts |
src/utils/ | PascalCase(JRAFetcher.ts / HorseDataExtractor.ts) |
src/types/ | PascalCase(HorseData.ts / RepositoryTypes.ts) |
*AggregateRepository を使う等の取り違えがないか)設計原則の正は design-principles 原則3。
芝 / ダート / 障害、馬場状態 良 / 稍重 / 重 / 不良、レース格)ごとに変化し今後増える処理を、巨大な if / switch に溜めていないか。2 箇所目の同じ種別分岐を書く前にポリモーフィズム(基底 + 種別実装 + 対応表)を検討したかRecord で検出できる形になっているかNG例: src/domain/entities/RaceResult.ts の isG1() — G1 判定が特定レース名(有馬記念 / ダービー / 天皇賞 …)の || 連鎖としてエンティティに直書きされている(既存債務。新規の種別分岐をこの形で増やさない)
OK例: 対象語彙を src/constants/ の定数集合として定義し、判定は名前の付いた述語 1 つに集約する
設計原則の正は design-principles 原則1。
complexity/useMaxParams(warn・max 5)が機械検出するので、該当 warning が本変更で純増していないかも併せて見る)NG例: src/commands/ImportData.ts の constructor — 接続 + リポジトリ 5 本を生成(既存債務。新規コマンドで同じ形を増やさない)
OK例: src/commands/CalculateScore.ts の constructor — 接続・オーケストレーター・更新リポジトリの 3 つに絞る
new DatabaseConnection() の持ち込みは lint が error で落とすため、review-code 2.1 側の FAIL になる)RaceResult.isG1 のレース名直書き等)は、本変更で悪化させていなければ FAIL にせず、備考に「既存債務(本変更非起因)」と明記して WARN 以下に留める。本変更で件数・範囲が増えた場合のみ計上するsrc/ 配下の TypeScript に変更が皆無の場合 Summary: SKIPPED本スキルは層構造・依存方向・配置・接尾辞の対応に絞る
domain entities / valueObjects の純粋性(DB・I/O・ネットワーク・他層 import・console の混入)と依存方向の逆流(domain → commands、repositories → commands/models/domain、constants/types の末端性、下位層 → commands)は lint(style/noRestrictedImports と suspicious/noConsole、いずれも error)が担保するため本スキルでは見ない。lint の通過確認は review-code 2.1
new DatabaseConnection(...) の生成箇所の制限は plugin no-database-connection-construction(error)が担保するため本スキルでは見ない(1.3 は注入可能性・テスト容易性だけを見る)。lint の通過確認は review-code 2.1
コード品質(非推奨 API・死にコード・マジックナンバー・制御フロー・console の粒度)は review-code、名前の語の選択は review-naming、SQL 注入・取得先 URL 制限・パス操作は review-security、時刻の注入可能性・再実行の冪等性は review-recovery、重み合計や特徴量統一などスコアリングのドメイン正しさは review-scoring、テスト品質は review-test
チェック表の行は SKILL.md のチェックリスト項目のみで構成する。チェックリストに無い独自の行を表に追加しない(チェック項目外の気づきは「他観点への申し送り」へ。自観点に関連するが項目化されていない所見は「詳細所見」に書き、Summary には数えない)
表には全チェックリスト項目(1.1〜1.9)を列挙する。該当変更が無い項目も N-A 行として残し省略しない(レビュー網羅性の担保)。Summary には OK/WARN/FAIL のみ計上し N-A は除外する
同一の行・欠陥でも、自観点のチェックリスト項目に明示的に該当する側面だけを自分の表・Summary に計上する(多面評価は可)。チェックリストの項目名から読めない拡大解釈(ドキュメントや一般原則からの引き込み)で FAIL を増やさない
自観点の項目に該当しない問題は計上せず、レポート末尾の「### 他観点への申し送り」節に「対象スキル名: 1行説明」で記載するだけにする(FAIL/WARN を付けない)
同一事象が自観点の複数チェック項目に該当する場合は、最も特異的な 1 項目だけで計上し、他項目は備考で相互参照する(Summary で重複カウントしない)。特異性の判定: 違反の根本原因を最も具体的に名指す項目を選ぶ(例: 新設した集計更新を queries/ 側に置いた事象は「参照系と更新系の分離」1.2 が根本で、「配置と命名語彙」1.6 は結果側のため 1.2 で計上し 1.6 は備考)。優劣が付けにくいときはチェックリスト番号の小さい方で計上する(決定論的に揃える)
差分内コードが依存する差分外の既存実装は、確認してよいが新たな指摘対象にはしない(当該チェック項目を OK とし、備考に「依存先は差分外・確認済み」と書く)
## アーキテクチャ / レイヤー境界 レビュー結果
| # | チェック項目 | ステータス | 該当箇所 | 備考 |
| - | ------------ | ------------ | --------- | ---- |
| 1 | ... | OK/WARN/FAIL | file:line | ... |
### 詳細所見
### 他観点への申し送り
### 推奨アクション
- HIGH / MEDIUM / LOW
Summary: OK=<n> WARN=<n> FAIL=<n>
아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
会場別のコース適性を分析する。会場を省略すると全会場の成績を表示する。「コース分析」「会場別の適性を見たい」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
抽出済みJSONファイル(馬・血統・レース出走データ)をSQLiteデータベースにインポートする。「DBインポート」「データベースに保存」「JSONをDBに登録」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
実装前に参照する設計原則。理解容易性 = 読み手の思考量の少なさを基準に、AI が作りがちな失敗4パターン(引数・依存5個以上、コマンド層肥大・ドメイン貧血症、ポリモーフィズム機会の見逃し、トリッキーな実装)と、実装後セルフチェックの7観点(名称・役割・参照・状態・面積・階層・秩序)を言語化。Use when starting any implementation task, when user says '設計原則', 'design principles', or before writing new entities/commands/repositories.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
agent 向けテキスト指示(skill / slash command / task プロンプト / コード生成プロンプト)を、バイアスを排した実行者に動かしてもらい、両面(実行者の自己申告 + 指示側メトリクス)で評価して反復改善する手法。改善が頭打ちになるまで回す。Use when user says 'プロンプトを改善して', 'スキルをチューニング', 'empirical-prompt-tuning', or after creating/heavily revising a skill or prompt.
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
JRA公式サイトから特定レースの出馬表HTMLを取得して馬データを抽出する。「データ取得」「JRAからデータを取ってきて」「出馬表を取得して」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.
有馬記念分析システムで利用可能なスキル一覧と使い方、スコア配分、基本ワークフローを表示する。「ヘルプ」「使い方を教えて」「何ができるの」といった依頼で発動する。
한국어 요약은 준비 중입니다. 원문 설명을 표시하고 있습니다.