Skip to content

searchByName の仕様 ​

INFO

houki-abbreviations v0.7.1 の specs/current/search_by_name/spec.md から自動生成しました(仕様 ID 20 件・2026-10-11)。手で編集しないでください。再生成は node scripts/generate-reference.mjs specs です。

辞書のエントリを名前の部分一致で探す

使いどころ・引数・実測の呼び出し例は、関数のページにあります。

最後に仕様が変わったのは v0.7.0 の「引数の検査を「丸めない」に揃える(limit・取得時刻・law_id の形)」(2026-09-30 承認)です。それまでの経緯は承認の履歴にあります。

利用者と得られる結果 ​

この機能の利用者と、利用者が渡すもの・得られる結果を示します。

  • houki-abbreviations を import する利用者(houki-nta-mcp・houki-egov-mcp などの MCP サーバー、または独自のコード)。労働 のような名前の一部を渡して、略称・正式名称・別名のどれかにその文字列を含む辞書のエントリを受け取る

入力 ​

呼び出すときに渡す値です。

引数必須内容
query必須探す文字列。例: 労働 / 施行令 / インボイス。前後の空白は無視する
options.mode任意一致の仕方。contains(既定。どこかに含む)/ prefix(先頭が一致)/ suffix(末尾が一致)。型は SearchMode
options.filter任意絞り込み。型は SearchFilter。キーは domain / category / source_mcp_hint で、それぞれ単一の値か配列を取る
options.limit任意返す件数の上限。1 以上 500 以下の整数。省くと 50。それ以外の値(1 未満、小数、500 超、NaN、Infinity)は RangeError、数でない値は TypeError を投げる。丸めない
options.normalize任意全角英数字・ダッシュ類・全角チルダ・全角スペースを半角にしてから比べるか。既定 true

辞書は関数が持っている(v0.6.1 で 174 件)。エントリの配列を渡す引数は無い。limit の規則は findSimilar / suggestCorrection と同じ。

戻り値 ​

呼び出しが返す値です。

辞書のエントリ(AbbreviationEntry)の配列。1 件も一致しなければ空配列。フィールドは辞書のエントリと同じで、abbr(略称)・formal(正式名称)・aliases(別名の一覧)・law_id・domain・category・source_mcp_hint などを持つ。

扱わないこと ​

この機能が意図して扱わないことです。

  • 綴りの誤りを許して探すこと(findSimilar)
  • 完全一致で 1 件に決めること(resolveAbbreviation)
  • 英字の大文字・小文字の違いを同じとみなすこと(searchByName('pl法') は PL法 を別名に持つ 製造物責任法 を返さず [])
  • 一致の近さで並べ替えること(返す順は辞書の並び。未決 1)
  • 法令 ID や法令番号から探すこと(lookupByLawId / lookupByLawNum)

処理の流れ ​

呼び出しを受けてから配列を返すまでに、何をどの順で確かめるかを示します。図の中の番号は「できること」の仕様 ID の末尾 3 桁です。

仕様項目 ​

この機能の仕様項目を、仕様 ID ごとに並べています。見出しは仕様項目を 1 文で表したもので、条件・応答の細部・例は「詳細」を開くと読めます。仕様 ID はそれぞれ受入テストと対応していて、テストの無い ID があると各リポジトリの CI が止まります。

SPEC-ABBR-SEARCH-BY-NAME-001 既定の contains で、query を含むエントリを返す ​

詳細

mode を省くと contains として扱い、略称・正式名称・別名のどこかに query を含むエントリを返す。

例: searchByName('労働') は 12 件を返す。先頭から 労基法・労基則・労契法・労組法・労調法・安衛法・安衛則・派遣法 の順で、formal が 労働基準法 のエントリを含む。

SPEC-ABBR-SEARCH-BY-NAME-002 別名(aliases)に一致したエントリも返す ​

詳細

略称と正式名称に query が無くても、別名のどれかに一致すればそのエントリを返す。

例: searchByName('インボイス') は abbr: "消法"(formal: "消費税法")の 1 件を返す。searchByName('ふるさと納税') は 所法(所得税法)、searchByName('マイナ') は マイナンバー法 を返す。

SPEC-ABBR-SEARCH-BY-NAME-003 prefix は query で始まる名前を持つエントリを返す ​

詳細

mode: 'prefix' のときは、略称・正式名称・別名のどれかが query で始まるエントリだけを返す。

例: searchByName('労働', { mode: 'prefix' }) は 10 件を返し、どのエントリも 労働 で始まる名前を持つ。

SPEC-ABBR-SEARCH-BY-NAME-004 suffix は query で終わる名前を持つエントリを返す ​

詳細

mode: 'suffix' のときは、略称・正式名称・別名のどれかが query で終わるエントリだけを返す。

例: searchByName('施行令', { mode: 'suffix' }) は 8 件を返し、どのエントリも 施行令 で終わる名前を持つ。

SPEC-ABBR-SEARCH-BY-NAME-005 filter.domain で分野を絞る ​

詳細

filter.domain を渡すと、domain がその値のエントリだけを返す。配列を渡すと、配列のどれかに当たる domain のエントリを返す。

例: searchByName('税', { filter: { domain: 'tax' } }) は 35 件を返し、すべて domain: "tax"。searchByName('法', { filter: { domain: ['tax', 'labor'] }, limit: 100 }) の結果は、すべて domain が tax か labor。

SPEC-ABBR-SEARCH-BY-NAME-006 filter.source_mcp_hint で本文を持つ MCP を絞る ​

詳細

filter.source_mcp_hint を渡すと、source_mcp_hint がその値のエントリだけを返す。

例: searchByName('税', { filter: { source_mcp_hint: 'houki-egov' }, limit: 100 }) は 28 件を返し、すべて source_mcp_hint: "houki-egov"。

SPEC-ABBR-SEARCH-BY-NAME-007 limit の件数で打ち切る ​

詳細

一致したエントリが limit を超えるときは、limit 件で打ち切って返す。

例: searchByName('法', { limit: 3 }) は 3 件を返す(limit を付けなければ 50 件、limit: 500 なら 167 件)。

SPEC-ABBR-SEARCH-BY-NAME-008 空の query には空配列を返す ​

詳細

query が空文字か、前後の空白を除くと空になるときは、辞書を調べずに空配列を返す。エラーにはしない。

例: searchByName('') と searchByName(' ') はどちらも []。

SPEC-ABBR-SEARCH-BY-NAME-009 一致したエントリを辞書の並びのまま返す ​

詳細

一致したエントリは abbreviationEntries での並びのまま返す。一致の近さや名前の長さでは並べ替えない。

例: searchByName('労働') は 労基法・労基則・労契法・労組法・労調法・安衛法・安衛則・派遣法・労災法・徴収法・育介法・パート法 の 12 件で、この順は v0.6.0 の abbreviationEntries での順と同じ。

SPEC-ABBR-SEARCH-BY-NAME-010 複数の名前が一致しても 1 つのエントリは 1 回だけ返す ​

詳細

1 つのエントリの略称・正式名称・別名のうち 2 つ以上が query に一致しても、そのエントリは結果に 1 回だけ入る。

例: searchByName('消費税') は 消法(formal: "消費税法"、別名 消費税 も一致)・消令・消規・消基通 の 4 件で、消法 は 1 回だけ。

SPEC-ABBR-SEARCH-BY-NAME-011 既定では全角英数字を半角にしてから比べる ​

詳細

normalize を省くか true にすると、query と辞書の名前の両方の全角英数字を半角にしてから比べる。

例: searchByName('PL法') は、別名 PL法 を持つ 製造物責任法 のエントリを返す(searchByName('PL法') と同じ結果)。

SPEC-ABBR-SEARCH-BY-NAME-012 normalize が false のときは全角英数字をそのまま比べる ​

詳細

normalize: false のときは、全角英数字を半角にせずに比べる。

例: searchByName('PL法', { normalize: false }) は []。

SPEC-ABBR-SEARCH-BY-NAME-013 filter.category で文書の種類を絞る ​

詳細

filter.category を渡すと、category がその値のエントリだけを返す。単一の値でも配列でもよい。

例: searchByName('通達', { filter: { category: ['kihon-tsutatsu'] } }) は 消基通・所基通・法基通・相基通・通基通・徴基通・措通・印基通 の 8 件で、すべて category: "kihon-tsutatsu"。{ category: 'kihon-tsutatsu' } と単一の値で渡しても同じ 8 件。

SPEC-ABBR-SEARCH-BY-NAME-014 filter に複数のキーを渡すと、すべてを満たすエントリだけを返す ​

詳細

filter に domain・category・source_mcp_hint のうち 2 つ以上を渡すと、渡したキーのすべての条件に当たるエントリだけを返す。

例: searchByName('税', { filter: { domain: 'tax', source_mcp_hint: 'houki-nta' } }) は 9 件で、すべて domain: "tax" かつ source_mcp_hint: "houki-nta"(domain: 'tax' だけなら 35 件)。

SPEC-ABBR-SEARCH-BY-NAME-015 filter のキーに空の配列を渡すと、そのキーでは絞らない ​

詳細

filter のキーに空の配列を渡したときは、そのキーの条件を付けなかったときと同じに扱う。

例: searchByName('税', { filter: { domain: [] } }) は、searchByName('税') と同じ 37 件。

SPEC-ABBR-SEARCH-BY-NAME-016 limit を省くと 50 件で打ち切る ​

詳細

limit を省くと、一致したエントリが 50 件を超えるときに 50 件で打ち切る。

例: searchByName('法') は 50 件を返す(limit: 500 なら 167 件)。

SPEC-ABBR-SEARCH-BY-NAME-017 1 未満の limit には RangeError を投げる ​

詳細

limit が 1 未満のとき(0・負の値・0.5 など)は、1 として扱わずに RangeError を投げる。辞書は調べない。

例: searchByName('法', { limit: 0 })、{ limit: -3 }、{ limit: 0.5 } は、どれも RangeError を投げる(v0.6.1 では 所法 の 1 件を返していた)。

SPEC-ABBR-SEARCH-BY-NAME-018 小数の limit には RangeError を投げる ​

詳細

limit が整数でないときは、切り上げずに RangeError を投げる。

例: searchByName('法', { limit: 1.2 })、{ limit: 2.5 }、{ limit: 2.9 } は、どれも RangeError を投げる(v0.6.1 では 2 件・3 件・3 件を返していた)。{ limit: 3 } と { limit: 3.0 } は同じ数なので 3 件を返す。

SPEC-ABBR-SEARCH-BY-NAME-019 NaN・Infinity・数でない limit には例外を投げる ​

詳細

limit が NaN か Infinity か -Infinity のときは RangeError、数でない値(文字列・null・オブジェクトなど)のときは TypeError を投げる。undefined は省いたときと同じく 50 として扱う。既定値に置き換えたり、打ち切らずに返したりはしない。

例: searchByName('法', { limit: NaN }) と searchByName('法', { limit: Infinity }) は RangeError(v0.6.1 では NaN のとき 167 件をすべて返していた)。searchByName('法', { limit: '3' }) と searchByName('法', { limit: null }) は TypeError。searchByName('法', { limit: undefined }) は searchByName('法') と同じ 50 件。

SPEC-ABBR-SEARCH-BY-NAME-020 500 を超える limit には RangeError を投げる ​

詳細

limit が 500 を超えるときは、500 に丸めずに RangeError を投げる。500 は受け付ける。

例: searchByName('法', { limit: 501 }) と searchByName('法', { limit: 10000 }) は RangeError(v0.6.1 では 500 として扱っていた)。searchByName('法', { limit: 500 }) は 167 件を返す。

実装する人に向けた情報 ​

ここから下は、この機能を実装する人と、仕様の変更を追う人に向けた節です。使い方を知りたいだけなら、読まなくて構いません。

検討中のこと ​

仕様を書き起こしたときに見つかった項目のうち、扱いを Issue で検討しているものです。ここに挙げたことは、今後の版で変わることがあります。開くと、元の仕様書の記述をそのまま読めます。

仕様書の「未決」の節

初版起こしで見つけた、意図か不具合かを人が決める項目です。決まったら「できること」に ID を振るか、specs/changes/ の差分にします。

意図か不具合かの判断が要る項目は houki-abbreviations の Issue に移し、ここには題と Issue の番号だけを残します。今の振る舞いのままでよくテストが無いだけの項目は、受入テストを書いてから「できること」に ID を振ります。

  1. 返す順は辞書の並び。 → SPEC-ABBR-SEARCH-BY-NAME-009、SPEC-ABBR-SEARCH-BY-NAME-010
  2. 全角・半角の吸収(normalize)。 → SPEC-ABBR-SEARCH-BY-NAME-011、SPEC-ABBR-SEARCH-BY-NAME-012
  3. filter.category と、filter の複数のキーの組み合わせ。 → SPEC-ABBR-SEARCH-BY-NAME-013、SPEC-ABBR-SEARCH-BY-NAME-014、SPEC-ABBR-SEARCH-BY-NAME-015
  4. limit の既定値と 1 未満の値。 → SPEC-ABBR-SEARCH-BY-NAME-016、SPEC-ABBR-SEARCH-BY-NAME-017、SPEC-ABBR-SEARCH-BY-NAME-018
  5. limit に NaN を渡したときの扱いと上限。 → SPEC-ABBR-SEARCH-BY-NAME-017、SPEC-ABBR-SEARCH-BY-NAME-018、SPEC-ABBR-SEARCH-BY-NAME-019、SPEC-ABBR-SEARCH-BY-NAME-020

承認の履歴 ​

この機能の仕様が、いつ、どの変更で承認されたかを新しい順に並べています。各リポジトリの npx spec-ids history search_by_name と同じ内容です。変更の名前から、変更の理由と前後の振る舞いを書いた文書(GitHub)を開けます。

承認の履歴(4 件)
承認日版変更仕様 PR
2026-09-30v0.7.0引数の検査を「丸めない」に揃える(limit・取得時刻・law_id の形)#31
2026-09-27v0.6.1テストが無いだけの振る舞いに仕様 ID を振る#27
2026-09-27v0.6.1「未決」のうち判断が要る 52 件を Issue に移す#26
2026-09-27—初版#10

関連ページ ​

このページの元になった文書と、あわせて読むページです。

本サイトの内容は調査の出発点であり、法的助言ではありません。個別の事案は資格を持つ専門家に相談してください。免責事項と利用範囲