Skip to content
Back to skills

Guides

ASecurity

このガイドは、River Review のスキル(`skills/**/*.md`)を追加・更新するときに、迷いを減らし、品質のブレを抑えるための「書き方」をまとめたものです。

  • 4 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 2, 2026
ai-agentsgobashgit

Security analysis

A100/100

Pro scans all 21 files and shows the line behind each finding

Scanned September 2, 2026

npx -y skills add s977043/river-review --skill guides --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Guides?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Guides
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/s977043-guides-river-review/badge)](https://www.skillsdirectory.com/skills/s977043-guides-river-review)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
# スキル作成ガイド(Skill Authoring Guide / How-to)

このガイドは、River Review のスキル(`skills/**/*.md`)を追加・更新するときに、迷いを減らし、品質のブレを抑えるための「書き方」をまとめたものです。

## 目的(Goals)

- 1スキル = 1観点で、指摘の粒度と意図を揃える
- 誤検知(うるさいだけ)を減らし、レビューを読みやすくする
- 変更に強い(拡張しても運用が崩れない)スキルを書く
- 人間のレビューで「毎回言っていること」を自動化する

## 非目的(Non-goals)

- 好み・宗教論争(インデント、命名の流派など)をしない
- スキル本文で「実装方法」や「プロジェクト固有の事情」を断定しない
- “nit” を増やすためのスキルを作らない(重要度と効果が薄い指摘の濫発は避ける)
- 変更されていないコードへの網羅的な指摘をしない

## スキルの構造

スキルは YAML frontmatter(メタデータ)と Markdown 本文(指示文)で構成します。

- メタデータ: ルーティング・検証・優先度のための情報
- 本文: レビュアー(LLM/ヒューリスティック)が従うチェック観点と書き方

メタデータの定義は `schemas/skill.schema.json`、一覧は `pages/reference/metadata-fields.md` を参照してください。

スキル名の付け方(新規作成・外部からの取り込みの命名規則)は [skills/README.md の「Naming」節](https://github.com/s977043/river-review/blob/main/skills/README.md#naming) を参照してください。

最小の frontmatter(必須):

- `id`: 安定した識別子(移動・リネームしても不変)
- `name`: 人間向けの短い名前
- `description`: 何をチェックするか(1文)
- `phase`: `upstream` / `midstream` / `downstream`
- `applyTo`: 対象ファイルの glob

## 推奨テンプレ(最小)

新規作成時は `skills/_template.md` をベースにし、まずは次を揃えます。

- `applyTo` を絞る(いきなり `**/*` にしない)
- “抑制条件” を書く(誤検知ガード)
- “扱わない領域” を書く(Non-goals)
- 指摘文は短くし、次の行動へつながるようにする

## スキルの粒度(1テーマ/1観点)

スキルは「1テーマ/1観点」で分けるのが基本です。1つのスキルに異なる目的を詰め込まないことで、誤検知が減り、運用が安定します。

- 1スキル = 1種類のリスク(例: 入力検証の欠落、Accessible Name の欠落)
- フレームワーク固有の知識は1スキルに閉じる(汎用ルールと混ぜない)
- 例外や派生条件が多い場合は別スキルに分割する

## Diff を主入力にする(Diff-first)

スキルは diff を主入力として、再現可能な指摘を行うレビュー単位です。

- 可能な限り「変更行」を優先して評価する
- 変更外に言及する場合は、Confidence を下げて断定を避ける
- 「プロジェクトの文脈がなければ判断できない設計批評」は避ける

## 推奨: Signals(適用判断材料)

`signals` は frontmatter のフィールドではありませんが、本文に「このスキルを適用する判断材料」を書くとブレが減ります。

- 例: 「例外を握りつぶす `catch`(ログなし、再throwなし)が差分に含まれる場合は適用する」
- 例: 「認証情報らしき文字列(AKIA/ghp\_/sk- など)が差分に含まれる場合は適用する」

## Severity の基準(目安)

`severity` は「レビューを受けた人がどう扱うべきか」の目安です。

- `critical`: セキュリティ事故やデータ破壊につながる、即対応が必要
- `major`: バグ・運用障害のリスクが高い、原則対応したい
- `minor`: 将来の保守性・読みやすさに効く、余力があれば直したい
- `info`: 判断材料の提示(“検討ポイント”)

補足:

- しばしば `blocker` / `warning` / `nit` の3段階で語られるが、本リポジトリの enum は `info` / `minor` / `major` / `critical` である。

## Confidence(確信度)の表現(特に low の場合)

Confidence が low(推測が混じる)場合は、読み手に「断定ではない」ことが伝わる書き方にする。

- `must` / `should` / `definitely` などの断定表現を避ける
- `may` / `might` / `consider` など “可能性/提案” を示す表現を使う
- 事実(Evidence)と提案(推測)を分けて書く(例: “差分上は X が見える。Y の可能性があるため確認を検討する”)

## Evidence(根拠)の必須要件

River Review のコメントは `<file>:<line>: <message>` 形式で投稿されます。最低限、以下を満たしてください。

- **どこを見て言っているか**が分かる(ファイルと行に紐づく)
- **推測を断定しない**(不確実な場合は “可能性” として書く)
- **再現や確認の手がかり**がある(何を確認すれば良いか)
- **日本語でコメントする**(レビューコメントは日本語で返す)

## 出力フォーマット(必須)

スキルが返す `message` は長くできません。最低限、次の要素が読み取れるように書きます。

- Finding: 何が問題か(短く、断定しすぎない)
- Evidence: 根拠(どのファイル/行の、どの差分か)
- Impact: 放置した場合の影響(短く)
- Fix: 最小の修正案(次の一手)

補足:

- Evidence が書けない指摘は、原則として書かない。
- Confidence や Severity はスキーマフィールド(`confidence: high|medium|low`, `severity: critical|major|minor|info`)として JSON 出力に含まれる。LLM に出力させる場合は `Confidence:` や `Severity:` ラベルをメッセージ中に含めると自動的にパースされる。

## 推奨: 指摘文の型(短文版)

`<message>` は長くできないため、短くても読みやすい「型」を揃えます。

- Finding: 何が問題か(1文)
- Evidence: 根拠(ファイルと行、diff で見える事実)
- Impact: 何が困るか(短く)
- Fix: 最小の修正案(次の一手)

例:

- `src/foo.ts:42: 例外が握りつぶされる可能性。障害調査が困難。Fix: catch でログ+再throw(or 呼び出し元へ返す)`

## 禁止事項(アンチパターン)

- 断定口調の決め打ち(「必ず〜」「〜に違いない」)
- 状況依存の押し付け(プロジェクトの前提が不明なのに “こうすべき” を断言)
- “nit” の濫発(意味の薄い指摘を大量に出す)
- 差分と無関係な一般論の連発
- 他スキルと役割が被る実装(重複が増えてノイズになる)

## 誤検知を減らすためのルール(Guards)

スキルは「抑制条件」を持つ必要があります。誤検知は “直す価値がある不具合” として扱います。

例:

- 既に入力検証が存在する場合は指摘しない
- context 付きログがある場合はログ改善を提案しない

## PR 時の最小チェック

スキルを追加・更新したら、PR 本文に以下を残します。

- `npm run skills:validate`
- `npm test`
- 可能なら “誤検知ガード/Non-goals” の確認観点(何を言わないか)

## Fixtures と評価ワークフロー

各スキルには `fixtures/`(入力 diff サンプル)と `golden/`(期待出力)という兄弟ディレクトリを用意できます。これらは Minimum Acceptance Bar を客観的に検証するための評価セットです。

### ディレクトリ構造

```text
skills/<phase>/<skill-id>/
├── SKILL.md
├── fixtures/
│   ├── 01-true-positive-<説明>.md   # 指摘すべきケース
│   └── 02-false-positive-<説明>.md  # 指摘しないべきケース
├── golden/
│   ├── 01-true-positive-<説明>.md   # 期待される出力
│   └── 02-false-positive-<説明>.md  # 期待される出力(指摘なし)
└── eval/
    └── promptfoo.yaml               # promptfoo 設定(任意)
```

- ファイル名は `<数字プレフィックス>-<種別>-<説明>.md` の形式にします(例: `01-true-positive-undocumented-dependency.md`)。
- `fixtures/` と `golden/` のファイル名は完全一致させます(ペアで評価するため)。
- `true-positive` ケースでは、スキルが少なくとも1件の指摘を返すことを確認する。
- `false-positive` ケースでは、スキルが指摘を返さないこと(または無関係な指摘を返さないこと)を確認する。

### 評価の実行

```bash
npm run eval:fixtures
```

promptfoo を直接使う場合は `npx promptfoo eval` でも実行できます。eval の詳細なセットアップは `pages/guides/repo-wide-review.md` を参照してください。

### なぜ fixtures が重要か

fixtures がないと、スキルが「本当に指摘すべき差分を検知できるか」「誤検知ガードが機能しているか」を人手でしか確認できません。Minimum Acceptance Bar(下記)の検証は fixtures があって初めて再現可能になります。

## スキル追加・変更時のチェックリスト

- [ ] 指摘が 1 観点に絞られている
- [ ] Evidence(ファイル/行、diff の事実)が明確である
- [ ] 誤検知ガード(抑制条件)がある
- [ ] Non-goals(扱わないこと)が書かれている
- [ ] `fixtures/` と `golden/` に true-positive / false-positive ケースがある(Minimum Acceptance Bar の検証に必須)

## Minimum Acceptance Bar(最低合格ライン)

A skill is considered “acceptable” when it meets the following minimum bar:
(スキルが「合格」と見なされるのは、次の最低基準を満たしている場合です。)

- It produces at least one actionable finding when applicable (a concrete next step, not just a vague note).
- (該当する場合、少なくとも1つの具体的な次の一手につながる指摘があること。)
- It includes clear evidence that can be traced to the diff (file and line).
- (差分(ファイルと行)に追跡できる明確な根拠が含まれること。)
- It avoids noise (no “nit” spam) and stays focused on meaningful risks.
- (ノイズ(“nit”の濫発)を避け、意味のあるリスクに集中していること。)

## 良いスキルの目安

- 指摘が「当たる」確率が高い(誤検知が少ない)
- 修正案が具体的で、次の一手が明確である
- ノイズが少なく、1観点に集中している

より厳密な採用基準(優先順)は `pages/guides/governance/skill-policy.md` を参照してください。

Files in this skill

  • add-new-skill.en.md1.9 KB
  • add-new-skill.md4.2 KB
  • adopter-playbook.en.md7 KB
  • adopter-playbook.md8 KB
  • agent-skills-codex-cli.en.md3.1 KB
  • agent-skills-codex-cli.md3.8 KB
  • agent-workflow.en.md7.4 KB
  • agent-workflow.md8.9 KB
  • agents.en.md2.6 KB
  • agents.md3.5 KB
  • ai-agent-playbook.en.md14.5 KB
  • ai-agent-playbook.md16.6 KB
  • choose-skills.en.md3.3 KB
  • choose-skills.md4 KB
  • cost-estimation.en.md8.7 KB
  • cost-estimation.md10.8 KB
  • debug-skill-routing.en.md938 B
  • debug-skill-routing.md2.9 KB
  • deploy-docs-vercel.en.md1.9 KB
  • deploy-docs-vercel.md2.4 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…