Community研究與資料分析github.com

HighBridgeDragon/jp-diet-minutes-skill

Search Japanese Diet (Kokkai) meeting minutes via the official NDL Kokkai API — an Agent Skill for Claude Code / Cursor / Copilot. 日本の国会会議録調査スキル。

相容平台Claude Code~Codex CLICursor
npx skills add HighBridgeDragon/jp-diet-minutes-skill

Ask in your favorite AI

Open a new chat with this agent skill pre-loaded.

說明文件

国会会議録検索スキル

NDL(国立国会図書館)の国会会議録検索システム API 経由で国会発足(1947 年)以降の日本の国会議事録を調査する。認証不要。bash scripts/<script>.sh wrapper を使って呼び出す。

帝国議会会議録(〜1947 年)は別 API のため対象外。

基本ルール

  • Base URL: https://kokkai.ndl.go.jp/api/
  • レスポンス形式: recordPacking=json(wrapper script が常に強制)
  • 認証: 不要
  • 呼び出し方法: bash scripts/<script>.sh を使う。WebFetch / Invoke-RestMethod 等の直接利用は、wrapper が covers しない corner case(後述「raw curl が必要なケース」参照)のみ
  • レート制限: 公式に「機械的アクセス時は多重リクエスト禁止、数秒間隔を空ける」と明記。並列化禁止、連続呼び出しは 2〜3 秒間隔目安
  • クエリ全長 2,000 バイト上限(日本語は URL エンコードで 1 文字 9 バイト換算)

エンドポイント選択

ユーザーの要求に応じて適切な wrapper script を選ぶ。情報量と消費トークンは list-meetings.sh < search-by-*.sh < fetch-meeting.sh の順で増える ため、軽い方から段階的に絞ること。

「○○議員の発言を見せて」
  → bash scripts/search-by-speaker.sh ○○ [from] [until] [limit] --sort <keys>
  ※ --sort 必須。代表値は date-desc(最新優先)

「△△に関する発言を探して」
  → bash scripts/search-by-keyword.sh △△ [from] [until] [limit] --sort <keys>
  ※ any 検索(AND)。複数キーワードは半角スペース区切り。--sort 必須

「参考人質疑(証人喚問・公述人含む)を抽出」
  → bash scripts/search-by-role.sh 参考人 [from] [until] [limit] --sort <keys>
  ※ role は 証人 / 参考人 / 公述人 のいずれか。--sort 必須

「○○委員会の会議一覧を見せて」
  → bash scripts/list-meetings.sh ○○ [from] [until] [limit] --sort <keys>
  ※ 軽量。会議メタのみ返却(発言本文は含まない)。`--sort` 必須(`date-asc` / `date-desc` のみ)

「特定の会議の全発言を見せて」「○○委員会 YYYY-MM-DD の議事録全文」
  → Step 1: bash scripts/list-meetings.sh で対象会議の issueID を特定
  → Step 2: bash scripts/fetch-meeting.sh <issueID>
  ※ 1 リクエストで会議全文が返るため大きい。必ず絞ってから呼ぶ

詳細は api-reference.md, parameters.md, response-format.md, recipes.md を参照。

各エンドポイントの使い方

1. search-by-speaker.sh — 議員名で発言検索(最頻用)

検索条件にヒットした発言のみ返す。トークン効率が最も良い。--sort 必須で、API ソート順仕様を利用者が明示的に意識する構造になっている(#41 対策)。

# 議員名で発言抽出(部分一致 OR)、日付降順
bash scripts/search-by-speaker.sh 岸田文雄 2024-01-01 2024-12-31 50 --sort date-desc

全引数仕様(取りうる sort key の詳細含む)は bash scripts/search-by-speaker.sh -h を参照。

レスポンスは speechRecord[] 配列。各要素に会議メタ(issueID, session, nameOfHouse, nameOfMeeting, date 等)がフラット展開されている。

2. search-by-keyword.sh — キーワード検索(any 検索、AND)

発言本文に対する全文検索。複数キーワードは半角スペース区切りで AND 結合。--sort 必須。

# AND 検索: マイナンバー かつ 個人情報 を含む発言、日付降順
bash scripts/search-by-keyword.sh 'マイナンバー 個人情報' 2024-01-01 2024-12-31 50 --sort date-desc

全引数仕様は bash scripts/search-by-keyword.sh -h を参照。レスポンス構造は search-by-speaker.sh と同一。

3. search-by-role.sh — 役割で発言検索(参考人質疑など)

speakerRole で発言者の役割を絞り込む。証人喚問・参考人質疑・公述人発言の抽出に使う。--sort 必須。

# 参考人質疑のみ、日付降順
bash scripts/search-by-role.sh 参考人 2024-01-01 2024-12-31 50 --sort date-desc

role証人 / 参考人 / 公述人 のいずれか。それ以外を指定すると API が HTTP 400 で弾く。

全引数仕様は bash scripts/search-by-role.sh -h を参照。

4. list-meetings.sh — 会議一覧(軽量索引)

会議メタ情報のみ返す。発言本文は含まれないため一覧生成・絞り込みに向く。issueID 特定に使う。--sort 必須(date-asc / date-desc のみ)。

# 特定日の予算委員会一覧、日付昇順
bash scripts/list-meetings.sh 予算委員会 2024-03-01 2024-03-31 50 --sort date-asc

全引数仕様は bash scripts/list-meetings.sh -h を参照。

レスポンスは meetingRecord[]。各要素配下の speechRecord[]発言メタの最小集合のみspeechID, speechOrder, speaker, speechURL)。本文取得には search-by-* または fetch-meeting.sh を呼ぶ。

5. fetch-meeting.sh — 会議全文(最終手段)

会議全文を返す。1 リクエストで全発言が返るため重い。list-meetings.shissueID を特定してから呼ぶこと。

# issueID で会議全文取得
bash scripts/fetch-meeting.sh 121405254X00220241004

引数仕様は bash scripts/fetch-meeting.sh -h を参照。maximumRecords=1 固定(issueID 一意のため)。--sort は単一会議取得のため対象外(必要時は jq で出力を後処理)。

fetch-meeting.shspeechRecord[] は全フィールド完備(speech, speakerYomi, speakerGroup, speakerPosition, speakerRole, startPage, createTime/updateTime)。

トークン節約ガイダンス

bash scripts/fetch-meeting.sh は 1 会議で数百 KB〜MB 規模になる。順守事項:

  1. search-by-*.sh を優先する: 発言単位なら必要な部分だけ取れる。bash scripts/fetch-meeting.sh はユーザーが明示的に「会議全文」を要求した場合のみ
  2. maximumRecords を明示: 既定 30 で十分な場合は省略可。多数取得時は上限(search-by-*/list-meetings: 100、fetch-meeting: 10)まで上げてリクエスト総数を減らす
  3. 2 段階検索を使う: まず list-meetings.sh または search-by-*.sh で対象を絞り込み、issueID を取得 → 必要に応じて fetch-meeting.sh で全文。最初から fetch-meeting.sh を打たない
  4. ヒット 0 件時のリトライは表記揺れを試す: 議員名は 福島 みずほ / 福島瑞穂 / ひらがなを順に試す。会派名は 必ず正式名称自民党 ❌ / 自由民主党 ✅)

結果フィルタリングの落とし穴

レスポンス取得後、以下の点に注意:

  1. speechOrder0 の行は会議録情報ヘッダ: 議事日程・付議案件などの構造情報で、実発言ではない。speaker は固定で 会議録情報。発言集計時は speechOrder0 の行を除外する
  2. imageKind の値: 既定では 会議録 のほかに 目次 / 索引 / 附録 / 追録 も混入する。発言抽出時は imageKind の値が 会議録 の行のみに絞り込む(リクエストパラメータ contentsAndIndex / supplementAndAppendix はいずれも既定 false のため通常は省略可。明示的に混入させたい場合のみ true を指定する)
  3. closingfalse ではなく null を返す: 閉会中フラグが立っていない通常会議では null。閉会中審査の判定は closing の値が true の場合のみで行う(false との比較ではなく true との比較を使うこと)
  4. nameOfHouse の不正値は silently 無視される: HTTP 200 でフィルタ未適用の結果が返る。意図が反映されているか numberOfRecords の妥当性で確認すること
  5. 発言本文の改行は CRLF (\r\n): LF のみではない。テキスト処理時は正規化が必要な場合あり
  6. search-by-*.sh のレスポンス構造はフラット: fetch-meeting.sh のような meetingRecord ラッパは持たない。共通パーサを書くなら分岐が必要
  7. API のソート順は「会議開催日の降順」で固定: 公式仕様で並び順が降順保証されており、API 側にはソート指定パラメータは存在しない(search-by-speaker / search-by-keyword / list-meetings / fetch-meeting いずれも同様)。本 skill の wrapper script の --sort は API パラメータではなく jq 経由のクライアント側ソート後処理search-by-*.sh / list-meetings.sh で必須)。便利な反面、maximumRecords で部分取得すると 新しい側 N 件のみ が返る。
    • 最新発言判定: 部分取得の先頭で OK(maximumRecords=1 で十分)
    • 最古発言判定: 部分取得結果から最古を断定しない。numberOfRecords 全件をページネーション末尾まで取得するか、from / until で年単位等に区切ってヒット件数 ≤ maximumRecords まで狭めてから判定する
    • 同日内の二次ソートは speechOrder 昇順(実測ベース、公式仕様未掲載): 期間を絞らず startRecord=<numberOfRecords>&maximumRecords=1 で末尾を直撃すると、API 降順固定により期間内最古日付の 同日最終発言 (speechOrder 最大) を取得し、真の初発言を逃す。from/until で期間を numberOfRecords ≤ 100 まで狭めて全件取得し、wrapper の --sort date-asc,speech-order-asc で 1 リクエスト確定する(詳細は recipes/oldest-speech-by-speaker.md を参照)
  8. anyspeaker の併用は積集合(件数が大幅減): 議員 A の発言を検索する目的で any=A&speaker=A のように両方指定すると、両条件を満たす発言(A 本人が自分の名前を含めて発言したもの)のみに絞られ、一方単独より大幅に件数が減る(実測: speaker=石原慎太郎 単独 2,098 件 / 両者併用 647 件)。議員 A の全発言には speaker 単独、A への言及には any 単独を使う。意図別の使い分けは parameters.md の該当節recipes/speaker-vs-any-disambiguation.md を参照
  9. (19004)startRecord 範囲外 の「検索件数」は同一クエリの numberOfRecords: エラーメッセージ (19004)startRecord には 1 から検索件数までの値を指定してください。 の「検索件数」は 同一クエリでの numberOfRecords を指す(実測ベース、公式仕様には明示なし)。別クエリ(from/until を付けない単純検索、speaker 単独 vs 併用、過去取得したキャッシュ値など)で取得した件数で startRecord を決めると 19004 を踏む。原因切り分けは 同一クエリで startRecord=1&maximumRecords=1 を 1 リクエスト発行し numberOfRecords を再確認する。項目 8 の積集合や from/until 追加で件数が縮むケースで頻発する(詳細は api-reference.md の 19004 解説 を参照)

よく使う検索パターン例

議員の特定期間の発言

bash scripts/search-by-speaker.sh 石破茂 2024-10-01 2024-10-31 100 --sort date-desc

法案審議の追跡(時系列)

bash scripts/search-by-keyword.sh マイナンバー法 2023-01-01 '' 100 --sort date-asc

内閣総理大臣演説の抽出

speakerPosition 引数は wrapper 非対応のため raw curl を使う:

# wrapper 非対応のため raw curl
curl -s 'https://kokkai.ndl.go.jp/api/speech?speakerPosition=%E5%86%85%E9%96%A3%E7%B7%8F%E7%90%86%E5%A4%A7%E8%87%A3&nameOfMeeting=%E6%9C%AC%E4%BC%9A%E8%AD%B0&from=2024-01-01&recordPacking=json'

参考人質疑

bash scripts/search-by-role.sh 参考人 2024-01-01 '' 100 --sort date-desc

特定会議の議事全文(2 段階)

# Step 1: issueID 特定(nameOfHouse フィルタは wrapper 非対応のため一覧から手動選択)
bash scripts/list-meetings.sh 予算委員会 2024-03-01 2024-03-01 50 --sort date-desc

# Step 2: 全文取得
bash scripts/fetch-meeting.sh <issueID>

ページネーション

全エンドポイント共通。

  • レスポンスの nextRecordPosition を次回リクエストの startRecord に渡す
  • 最終ページの判定:
    • JSON: nextRecordPosition の値が null
    • XML: <nextRecordPosition> 要素自体が欠落
  • 連続取得時は数秒間隔を空ける(レート制限)

出力フォーマット

ユーザーに発言を提示する際の推奨フォーマット:

【発言者】○○○○(所属会派・肩書き)
【会議】第XXX回国会 衆議院 ○○委員会 第X号(YYYY-MM-DD)
【発言】
発言本文の引用(CRLF を改行に正規化)

【出典】国会会議録検索システム https://kokkai.ndl.go.jp/txt/<issueID>/<speechOrder>

会議一覧を提示する際:

【会議一覧】N 件
- YYYY-MM-DD: 第XXX回国会 衆議院 ○○委員会 第X号
  https://kokkai.ndl.go.jp/txt/<issueID>
- ...

raw curl が必要なケース

以下のパラメータは wrapper script が covers しない。必要時は curl / Invoke-RestMethod で直接 API を叩く:

  • sessionFrom / sessionTo(回次絞り込み)
  • contentsAndIndex / supplementAndAppendix(目次・索引・附録)
  • closing=true(閉会中審査限定)
  • nameOfHouse / nameOfMeeting 等の二次フィルタ(wrapper の引数に含めていない)
  • ページネーション(startRecord + nextRecordPosition の連続呼び出し)
  • anyspeaker の同時指定(議員本人の自己言及など、両者の積集合を意図的に活用する用途。詳細は recipes/speaker-vs-any-disambiguation.md パターン 3)

例: 第 213 回国会の予算委員会のみを抽出する場合(sessionFrom/sessionTo 必要、wrapper 非対応)

curl -s 'https://kokkai.ndl.go.jp/api/meeting_list?sessionFrom=213&sessionTo=213&nameOfMeeting=%E4%BA%88%E7%AE%97%E5%A7%94%E5%93%A1%E4%BC%9A&maximumRecords=30&recordPacking=json'

WebFetch 等の内部要約モデルを介在させるツールは、レスポンスに存在しないフィールドを hallucination として混入させる事象が観測されているため、生データ取得には使わないこと(詳細は response-format.md 参照)。

詳細リファレンス

  • api-reference.md: エンドポイント仕様・ページネーション・エラーレスポンス
  • parameters.md: 検索パラメータの完全な仕様・検索方式・組み合わせ例
  • response-format.md: レスポンス構造・実 JSON サンプル・実測ベースの落とし穴
  • recipes.md: 複合パターン集(議員 × キーワード絞り込み等、scripts では covers できないケース)

相關技能

mingli30119/stock-analysis

Recently updated agent-skill-related GitHub repository: mingli30119/stock-analysis.

community

adithya-s-k/manim-composer

Trigger when: (1) User wants to create an educational/explainer video, (2) User has a vague concept they want visualized, (3) User mentions "3b1b style" or "explain like 3Blue1Brown", (4) User wants to plan a Manim video or animation sequence, (5) User asks to "compose" or "plan" a math/science visualization. Transforms vague video ideas into detailed scene-by-scene plans (scenes.md). Conducts research, asks clarifying questions about audience/scope/focus, and outputs comprehensive scene specifications ready for implementation with ManimCE or ManimGL. Use this BEFORE writing any Manim code. This skill plans the video; use manimce-best-practices or manimgl-best-practices for implementation.

community

millionco/spawn-agent

Agent skill repository discovered by 10x-chat research.

community

jalehvesical21/claude-code-decompiled

Explore research reports on Claude Code v2.1.88 covering architecture, agent behavior, permissions, prompts, MCP, and context management

community

d7rocket/PowerBI-Skill

Power BI DAX co-pilot for Claude Code — explain, format, optimise, audit, and edit DAX measures from your terminal

community

tradermonty/market-environment-analysis

Comprehensive market environment analysis and reporting tool. Analyzes global markets including US, European, Asian markets, forex, commodities, and economic indicators. Provides risk-on/risk-off assessment, sector analysis, and technical indicator interpretation. Triggers on keywords like market analysis, market environment, global markets, trading environment, market conditions, investment climate, market sentiment, forex analysis, stock market analysis, 相場環境, 市場分析, マーケット状況, 投資環境.

community