mcpField
R
resolve-recipe-ingredient-link

resolve-recipe-ingredient-link

github.com/gkwa生産性072 回インストール2 日前に更新
リポジトリ

resolve-recipe-ingredient-link について

Obsidian の未解決な食材 wikilink を product ノートに対応付けるスキルです。意味に基づく照合に加え、曖昧な場合や新規ノート作成時の規則を定めています。

主な機能

  1. 01product タグ付きノートの検索
  2. 02意味に基づく候補の順位付け
  3. 03元の行を使った曖昧さの解消
  4. 04不明確な場合のユーザー確認
  5. 05必要に応じた product ノート作成
  6. 06エイリアスなしのリンク記述

活用シーン

  1. 01レシピ内の食材リンクの解決
  2. 02名前が似た食材の判別
  3. 03未登録の食材ノートの作成
  4. 04エイリアスを使わない解決リンクの適用

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/gkwa/volcanicviper --skill resolve-recipe-ingredient-link

インストール後、Claude Code で/resolve-recipe-ingredient-linkを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

tile.json
tests/
build_prompt.py
linkform.promptfooconfig.yaml
products.txt
promptfooconfig.yaml
README.md

詳細

未解決の Obsidian ウィキリンクを解決する

未解決のウィキリンク(例:[[leeks]])がある場合、それに最もよく一致する既存のノートを見つけます。

バイナリ:/Users/mtm/go/bin/islandiguana

Vault のパス:/Users/mtm/Documents/Obsidian Vault

方法

リンクテキストは、括弧内にある名前のみです(例:[[leeks]] の leeks)。

パイプ付きウィキリンク([[leek|leeks]])の場合、リンクテキストは | より前の部分です。

ステップ 1 — 候補を列挙します。

解決候補は、product タグが付いたノートから探します。

islandiguana "/Users/mtm/Documents/Obsidian Vault" '.tags[] == "product"'

ステップ 2 — 候補リスト全体を読み、意味的に順位付けします。

islandiguana が返したファイル名をすべて読み、リンクテキストとの一致度でリスト全体に順位を付けます。

キーワード検索でリストを事前に絞り込まないでください。

一致は語彙ではなく意味に基づきます。キーワードで絞り込むと、キーワードから想定できなかった有力な候補が除外される可能性があります(wild ramps.md というノートは、「leek」と文字が一つも共通していなくても [[leeks]] の解決先になります)。

現在、product の候補は約 1,300 件あり、一度にすべて読んでも十分対応できます。

ステップ 3 — 3 段階のルールで解決します。

第 1 段階 — ほぼ完全一致する名前。

候補がリンクテキストと完全に一致するか、単数形/複数形だけが異なる場合は、その候補に解決します。

例:leeks は leek.md に解決されます。

第 2 段階 — 元の行を使って判別します。

ほぼ完全に一致する候補がない場合は、括弧内のテキストだけでなく、元のノートでウィキリンクを含む行全体を読みます。

リンクされた名詞の左側にある説明語を、判別の手がかりにします。

例:2 teaspoons whole black [[peppercorns]] という行には「black」と「whole」が含まれるため、対象は「whole black peppercorns」です。この場合、文字列がそのまま一致する sichuan peppercorns.md ではなく、black peppercorn.md に解決されます。

第 3 段階 — ユーザーに確認します。

元の行を読んでも選択肢を絞れない場合(例:[[peppercorns]] to taste では種類が特定されない場合)は、候補を提示してユーザーに選んでもらいます。

第 4 段階 — 新しい product ノートを作成します。

既存の候補に妥当な解決先がまったくない場合は、無理に誤った候補へ解決したり、リンク切れのままにしたりしないでください。

下記の product ノートのパターンに従って、リンクテキストと同じ名前の新しい product ノートを作成し、ウィキリンクが解決されるようにします。

近似した別製品への置き換えは解決とはみなしません。feta cheese は cotija cheese ではなく、どちらも崩れやすいチーズだからといって、一方をもう一方に解決するのは誤りです。

原材料が別の製品である場合は、別の製品へ置き換えるより、新しいノートを作成してください。

新しいノートのファイル名は、リンクテキストのみを使い、Vault 内の他のノートと同じ大文字・小文字のルールに従います(すべて小文字、単語間にはスペースを入れます)。例:[[cotija cheese]] は cotija cheese.md になります。

以下のテンプレートを使用してください。新しいノートが Vault の構造に正確に一致するよう、既存の product ノート(例:habanero peppers.md)から店舗の真偽値を含むフロントマターと店舗セクションをそのままコピーします。

tags には product と、原材料のカテゴリを示すタグを 1 つ設定します(例:dairy、vegetable、spice)。

新しいノートにはまだ購入ページがないため、製品の参照先として Google 画像検索リンクを含めます。

確認済みの画像 URL がない場合は、リンク切れを避けるため、pic フロントマターフィールドとヒーロー画像を省略します。

---
albertsons: false
amazon_com: false
amazon_fresh: false
central_co_op: false
chef_s_store: false
costco: false
dong_hing_market: false
east_african_imports_restaurant: false
franz_bakery: false
fred_meyer: false
grocery_outlet: false
h_mart: false
hau_hau_market: false
home_depot: false
india_depot_indian_grocery_kitchen_bakery: false
lam_s_seafood_asian_market: false
lowe_s: false
m2m: false
pacific_supply: false
pcc: false
public_storage: false
qfc: false
safeway: false
tags:
- product
- <category>
target: false
than_son_tofu_and_bakery: false
trader_joes: false
uwajimaya: false
walgreens: false
walmart: false
whole_foods: false
---

<Product Name>


Google image search: https://www.google.com/search?q=<product+name>&tbm=isch

## [[Amazon.com]]
- [x] shopping

## [[Central Co-op]]
- [x] shopping

## [[Grocery Outlet]]
- [x] shopping

## [[Chef's Store]]
- [x] shopping

## [[Hau Hau Market]]
- [x] shopping

## [[Lam's Seafood Asian Market]]
- [x] shopping

## [[M2M]]
- [x] shopping

## [[Pacific Supply]]
- [x] shopping

## [[PCC]]
- [x] shopping

## [[QFC]]
- [x] shopping

## [[Safeway]]
- [x] shopping

## [[Target]]
- [x] shopping

## [[Trader Joes]]
- [x] shopping

## [[Uwajimaya]]
- [x] shopping

## [[Walgreens]]
- [x] shopping

## [[Walmart]]
- [x] shopping

## [[Whole Foods]]
- [x] shopping

## [[Costco]]
- [x] shopping

## [[Fred Meyer]]
- [x] shopping

## [[H Mart]]
- [x] shopping

## [[Dong Hing Market]]
- [x] shopping

## [[Amazon Fresh]]
- [x] shopping

## [[Home Depot]]
- [x] shopping

## [[Franz Bakery]]
- [x] shopping

## [[Lowe's]]
- [x] shopping

## [[Than Son Tofu and Bakery]]
- [x] shopping

## [[India Depot Indian Grocery, Kitchen & Bakery]]
- [x] shopping

## [[Albertsons]]
- [x] shopping

## [[East African Imports & Restaurant]]
- [x] shopping

## [[Public Storage]]
- [x] shopping

ステップ 4 — 報告します。

検討した候補数と解決結果、ユーザーに確認する場合は順位付きの候補一覧、または候補が一致しなかった場合は作成した新しい product ノートを報告します。

明示的に依頼されない限り、ウィキリンクは編集しないでください。まず解決結果を提示します。

解決済みリンクの記述

解決結果を適用するよう求められた場合は、表示語(元のリンクテキスト。例:leeks)と解決されたノート名(例:leek)を比較して、リンク形式を選びます。

食材リンクでは、エイリアス形式([[note|displayed]])を決して使用しないでください。

表示語とノート名が異なる場合は、エイリアスで不一致を取り繕うのではなく、レシピのテキストをノート名に合わせて書き換え、通常のリンクを使います。

語尾変化を角括弧の外に置くのは問題ありません。エイリアスは使わないでください。

これは食材リンクだけでなく、見出しへのリンクにも適用されます。

同じノート内の見出しにリンクする場合は、エイリアスなしの相対形式 [[#Heading]] を使い、[[note#Heading|Display]] は使わないでください。

このルールは厳守してください。AskUserQuestion の選択肢テキストでエイリアスが提案されていても、決してエイリアスを追加しないでください。

次の順に判断します。

Case 0 — まず、隣接する識別語を取り込みます。

解決時に Tier 2(リンク元の行にある角括弧の外の説明語によってノートを選んだ場合)を使い、その語がウィキリンクに直接隣接しているなら、比較する前に角括弧の中に取り込みます。

その後、角括弧内の語だけではなく、拡張した語句を使って以下の比較を行います。

例:行が 2 teaspoons whole black [[peppercorns]]、ノート名が black peppercorn の場合。

Tier 2 の識別語「black」はリンクのすぐ左にあるため、表示語句は peppercorns から black peppercorns に拡張されます。

これでノート名が語句の先頭部分と一致するため、リンクは [[black peppercorn]]s と記述され、隣接する black はリンクに取り込まれます。行は 2 teaspoons whole [[black peppercorn]]s になります。

これは black [[black peppercorn|peppercorns]] のように、識別語をリンクの外に取り残す方法より優先されます。この方法では「black」が外に残り、ノート名にすでに含まれている語が重複するためです。

原則:Tier 2 で識別に使った語はリンクテキストに含め、エイリアスの横に取り残さないでください。

Case 1 — 表示語とノート名が一致する場合。

エイリアスも語尾も付けず、通常のリンクを記述します。

例:表示語 leek、ノート名 leek の場合は [[leek]] となります。

Case 2 — ノート名が表示語の先頭部分と一致する場合。

ノート名を角括弧内に残し、残りの語尾を外に置きます。

例:表示語 leeks、ノート名 leek の場合は [[leek]]s となります。

例:表示語 boxes、ノート名 box の場合は [[box]]es となります。

Case 3 — ノート名が表示語の先頭部分と一致しない場合。

語幹が変わるため、語尾だけを切り離すことはできません。エイリアスは使わないでください。

代わりに、レシピのテキストをノートの語に書き換えて通常のリンクを使い、その行が自然に読めるよう周囲の語句を調整します。

例:表示語 leaves、ノート名 leaf の場合は [[leaf]] となります。[[leaf|leaves]] を取り残すのではなく、「leaf」を使うように行を書き換えてください。

行をノートの語に書き換えると不自然になる場合は、エイリアスを使うのではなく、記載されている食材名と一致する名前のノートを新たに作成するか、既存のノートを選んでください。

Notes

ボルトのパスにはスペースが含まれているため、必ず引用符で囲んでください。

コメント