mcpField
T
trip-planner

trip-planner

github.com/foogunlana生産性138 回インストール23 週間前に更新
リポジトリ

trip-planner について

自然言語で旅行内容を伝えてフライト候補を探したい人向けのスキルです。不足情報を仮定として明示し、修正を受け付けながら検索し、複数都市の旅程にも予約リンクを提示します。

主な機能

  1. 01自然言語による旅行条件の解析
  2. 02仮定の表示と修正ループ
  3. 03フライト検索と候補提示
  4. 04価値重視・最安・最速の分類
  5. 05複数都市の旅程への対応

活用シーン

  1. 01目的地だけの指定でフライトを検索
  2. 02日程や予算に応じた候補の比較
  3. 03複数都市の区間別プラン作成
  4. 04設定ファイルへの好みの保存

インストール

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

$npx skills add https://github.com/foogunlana/skills --skill trip-planner

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

同梱ファイル

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

assets/templates/
trip-recommendation.md
references/
branding.md
config-guide.md
future.md

詳細

旅行プランナー

自然言語をフライトのおすすめに変換するスキルです。質問するよりも、仮定を優先します。

まず仮定します。根拠を示します。フライトを予約します。

基本設計原則

すべてを仮定し、すべてを示します。 ユーザーは不足している情報を埋めるのではなく、間違っている点を修正します。必須なのは目的地だけです。それ以外はすべて、妥当なデフォルト値を使用します。

2 つのフロー

条件フロー
.claude/trip-planner.md が存在しないオンボーディングフロー — すぐに検索してから、簡単に設定
.claude/trip-planner.md が存在する通常フロー — 高速:解析、仮定、検索、おすすめ

オンボーディングフロー(初回のみ)

検出: .claude/trip-planner.md が存在するか確認します。設定ファイルがなければ、このフローを実行します。存在する場合は通常フローに進みます。

目標: すぐにフライトのおすすめを提示し、その後で設定を調整します。

ステップ 1:ようこそ(ユーザーがすでに旅行について説明している場合は省略)

references/branding.md を読み込み、次の内容をそのまま表示します。

  1. ロゴ
  2. 出発地の引用文
  3. ワークフロー図
  4. 主なコンセプト

次に、ユーザーのメッセージに旅行についての説明がすでに含まれていたか確認します。

  • はい → 入力内容を使って、ステップ 2 に直接進みます
  • いいえ → 次を表示します。
Where are you headed? Just describe your trip naturally:

"I need to fly to Tokyo next month for a week"
"London to Paris, March 15-18, 2 adults"
"Cheapest flights to Barcelona in April"

ユーザーの入力を待ちます。

ステップ 2:解析と仮定

ユーザーの発言内容を抽出し、それ以外の項目はすべてデフォルト値で補います。

ユーザーの入力に対して、オンボーディング用の次のフォールバックデフォルト(設定ファイルはまだありません)を使い、仮定エンジン(以下を参照)を実行します。

  • 出発地:LHR
  • クラス:エコノミー
  • 乗客:大人 1 名
  • 予算:柔軟
  • 経由地:問わない
  • 通貨:GBP

仮定カードを表示します。

## Assumptions

| Field | Value | Source |
|-------|-------|--------|
| Destination | Tokyo (NRT/HND) | You said |
| Origin | London (LHR) | Default |
| Dates | Mar 10 - Mar 17, 2026 | "next month" + 7 days |
| Passengers | 1 adult | Default |
| Class | Economy | Default |
| Budget | Flexible | Default |
| Stops | Any | Default |

Anything wrong? Say so and I'll re-search. Otherwise I'll find flights.

修正または確認を待ちます。

ユーザーが修正した場合 → 仮定を更新 → カードを再表示 → 再度待機します。

ユーザーが確認した場合(または問題ないと伝えた場合)→ ステップ 3 に進みます。

ステップ 3:検索と提示

確認済みの仮定を使い、検索戦略(以下を参照)を実行します。

assets/templates/trip-recommendation.md の出力形式を使って、おすすめを提示します。

次に、修正を提案します。

Want to adjust anything? Change dates, class, budget — I'll re-search.

修正ループ: ユーザーが調整 → 再検索 → 再提示。満足するまで繰り返します。

ステップ 4:簡単な設定

ユーザーが結果に満足したら:

Nice — that's your first search done.

Want to save your preferences so next time is faster? Quick 5 questions:

1. What's your home airport? (e.g. LHR, JFK, LAX)

2. Any preferred airlines? (comma-separated, or "none")

3. Default budget range per person? (e.g. "under 500", "flexible", "100-300")

4. Preferred class? (economy / premium economy / business / first)

5. Preferred booking platform? (skyscanner / google-flights / kayak)

回答を解析し、省略された項目には妥当なデフォルト値を使用します。

  • home_airport: "LHR"
  • preferred_airlines: []
  • budget: "flexible"
  • class: "economy"
  • platform: "skyscanner"

.claude/trip-planner.md の設定ファイルを書き込みます(以下の設定構造を参照)。

Saved to .claude/trip-planner.md

Run /trip-planner anytime — just describe where you want to go.

オンボーディング終了後、処理を終了します。


通常フロー(2 回目以降の実行)

高速な進め方 — 質問せず、おすすめを提示します。

  1. 自然言語から意図を解析します
  2. デフォルト値として設定ファイルを読み込みます
  3. 仮定エンジンを実行します(不足情報をすべて補います)
  4. フライトを検索します
  5. 予約リンクとともにおすすめを提示します
ステップ 1:意図を解析する

ユーザーのメッセージから次の情報を抽出します。

  • 目的地 — 都市名、空港コード、または国
  • 日付 — 明示された日付、相対的な日付(「来月」など)、または曖昧な日付(「4 月」など)
  • 予算 — 明示された金額または条件(「安く」「300 未満」など)
  • クラス — エコノミー、プレミアムエコノミー、ビジネス、ファースト
  • 乗客 — 人数と区分(大人、子ども、幼児)
  • 希望条件 — 直行便、特定の航空会社、時間帯、乗り継ぎの希望
  • 複数都市 — 「A → B → C → A」や「その後」のパターンを検出します

ユーザーが他の詳細を示さず目的地だけを指定した場合も問題ありません。残りは仮定エンジンが処理します。

ステップ 2:設定を読み込む

ユーザーのデフォルト値として .claude/trip-planner.md を読み込みます。

設定オプションについては references/config-guide.md を参照してください。

フォールバックデフォルト(設定ファイルがない、または不完全な場合):

  • name: ""
  • home_airport: "LHR"
  • class: "economy"
  • budget: "flexible"
  • currency: "GBP"
  • stops: "any"
  • preferred_airlines: []
  • platform: "skyscanner"
ステップ 3:仮定エンジン

以下の優先順位に従って、不足している項目を補います。

  1. ユーザーからの明示的な入力 — このメッセージでの発言
  2. 設定ファイルのデフォルト値 — .claude/trip-planner.md から取得
  3. 文脈からの推測 — 旅行の種類に基づく適切な推測:
    • シティブレイク(ヨーロッパ域内の短距離旅行)→ 3〜4日
    • 大陸間旅行 → 7〜10日
    • 週末旅行 → 金曜日〜日曜日
    • 「ホリデー」/「バケーション」→ 7日
    • 月のみ指定され日付がない場合 → 月の中旬、日程は柔軟に設定
  4. 適切なデフォルト値 — 最終的なフォールバック:
    • 大人1名
    • エコノミークラス
    • 予算は柔軟に設定
    • 経由地は問わない
    • 設定ファイルに記載された出発空港(または LHR)
    • 日程:今日から4週間後、期間は7日間

現在の日付を取得: date コマンドを実行します。システムの日付には依存しないでください。

仮定カードを表示します(常に表示し、すべての仮定を明示します)。

## Assumptions

| Field | Value | Source |
|-------|-------|--------|
| Destination | {dest} | You said |
| Origin | {origin} | Config / Default |
| Dates | {dates} | {source} |
| Passengers | {pax} | {source} |
| Class | {class} | {source} |
| Budget | {budget} | {source} |
| Stops | {stops} | {source} |

Anything wrong? Otherwise I'll search.

検索を始める前に、修正または確認を待ちます。

ユーザーから修正があった場合 → 更新 → カードを再表示 → 待機します。

ステップ 4:検索

確認済みの仮定を使用して、検索戦略(以下を参照)を実行します。

ステップ 5:提示

assets/templates/trip-recommendation.md の出力形式を使用します。

以下の3つのカテゴリで、3〜5件のフライト候補を提示します。

  • お得な候補 — 価格、所要時間、利便性のバランスが最良の候補
  • 最安値 — 利便性にかかわらず、最も安い候補
  • 最速 — 総移動時間が最も短い候補

各候補に、直接予約できるリンクを含めます。

続けて、修正を受け付けます。

Want to adjust anything? I can re-search with different dates, budget, or preferences.

修正ループ: ユーザーが調整 → 更新内容を反映してステップ3から再実行 → 再提示します。


仮定エンジン — 詳細

このエンジンは検索のたびに実行されます。不完全な入力から、フライト条件一式を作成します。

優先順位
User Input > Config > Context Inference > Smart Defaults
文脈推測ルール
手がかり推測
ヨーロッパの都市+日程の指定なしシティブレイク:3〜4日
大陸間旅行+日程の指定なし7〜10日
「週末」の指定あり金曜日の夕方 → 日曜日の夕方
「ホリデー」/「バケーション」7日
月のみ指定され、具体的な日付がない月の中旬とし、日程は柔軟であることを明記
「クリスマス」/「イースター」/「ニューイヤー」一般的な祝日の期間
「夏」/「冬」その季節の旅行需要が最も高い月
複数都市の旅行で出発地に戻る往復旅行とし、各都市の滞在日数を比例配分
「安い」/「予算」の指定あり価格順に並べ、格安航空会社を明記
「直行」/「ノンストップ」の指定あり直行便のみを対象にする
クラスの指定なし+出張先エコノミークラスを想定(上位クラスを勧めない)
目的地の特定

ユーザーが都市名を指定した場合:

  • 主要空港コードに対応付けます
  • 空港が複数ある都市では、すべて含めます(例:ロンドン → LHR/LGW/STN、東京 → NRT/HND、ニューヨーク → JFK/EWR/LGA)
  • 国や地域の場合は、首都または最も一般的な観光地の空港に対応付けます
日程の処理
  • 現在の日付の取得には、必ず date コマンドを使用します
  • 「来月」→ 来月の1日+滞在期間
  • 「3月中」→ 3月15日(月の中旬)+滞在期間。日程は柔軟であることを明記
  • 「3月15日」→ 指定日+滞在期間
  • 「3月15〜18日」→ 指定された期間
  • 「次の週末」→ 直近の金曜日から日曜日
  • 日程の指定がない場合 → 今日から4週間後+旅行の種類に応じた滞在期間

検索戦略

ステップ A:予約URLを作成

パラメーターを使って、Skyscanner(または設定ファイルで指定されたプラットフォーム)のURLを作成します。

https://www.skyscanner.net/transport/flights/{origin}/{dest}/{depart_date}/{return_date}/?adults={n}&cabinclass={class}&currency={currency}

Skyscanner のURL形式:

  • 日付:YYMMDD(例:2026年3月15日の場合は 260315)
  • 出発地/目的地:空港コードを小文字で指定(例:lhr、nrt)
  • 客室クラス:economy、premiumeconomy、business、first

複数都市の場合は、各区間のURLを作成します。

Google Flights のURL(設定されている場合):

https://www.google.com/travel/flights?q=flights+from+{origin}+to+{dest}+on+{date}
ステップ B:WebSearch で料金を検索

各区間について、現在の料金情報を収集するために、WebSearch クエリを2〜3件実行します。

クエリのテンプレート:

  • "{origin} {dest} {month} {year} 航空券 価格"
  • "{origin} {dest} {month} {year} 格安航空券"
  • "{airline} {origin} {dest} {month} {year} 運賃"(希望する航空会社が設定されている場合)

検索結果から以下の情報を抽出します。

  • 該当路線を運航する航空会社
  • おおよその価格帯
  • フライトの所要時間と経由地に関する情報
  • 記載されているセールや特別価格
Step C:予約ページの WebFetch(任意)

作成した Skyscanner URL に対して WebFetch を試し、最新の価格を取得します。

  • 成功した場合: 具体的なフライト候補と価格を抽出します
  • ブロックされた場合/失敗した場合: WebSearch のデータにフォールバックします。再試行やエラー表示はせず、価格は概算であることだけを記載します
Step D:結果をまとめる

WebSearch と(利用できる場合は)WebFetch のデータを統合します。

  • 航空会社、ルート、概算時刻で重複を除外します
  • 「お得な選択肢」「最安」「最速」の3カテゴリに分類します
  • 各候補の直接予約 URL を含めます
  • WebSearch のみを使用したデータと最新の価格を区別し、該当するデータには「概算」と明記します
複数都市の検索

複数都市を巡る旅行(例:「ロンドン → パリ → ローマ → ロンドン」)の場合:

  1. 個々の区間に分解します
  2. 各区間を個別に検索します(WebSearch のクエリは並行して実行できます)
  3. 全体の旅程概要と、区間ごとの候補を提示します
  4. 全区間の合計費用を計算します
  5. 区間ごとの予約リンクと、複数都市をまとめて検索できるリンクを提示します

設定の構成

ユーザーの作業ディレクトリに .claude/trip-planner.md として保存されます。

name: "Jane"
home_airport: "LHR"

preferences:
  class: "economy"
  budget: "flexible"
  currency: "GBP"
  stops: "any"
  preferred_airlines: []
  time_preference: "any"    # morning / afternoon / evening / any

platform:
  primary: "skyscanner"     # skyscanner / google-flights / kayak

各フィールドの詳細については、references/config-guide.md を参照してください。


重要な原則

  • すべてを仮定し、すべてを示します。 妥当な仮定ができる場合は、質問をしないでください。ユーザーが修正できるよう、仮定した内容は必ず示します。
  • 必須条件は目的地だけです。 それ以外にはすべてデフォルト値があります。「東京行きのフライト」と伝えるだけで、完全なおすすめを提示できます。
  • 価値を先に、設定は後で。 設定について尋ねる前に検索します。オンボーディングによって、すぐに価値を提供します。
  • 質問するより修正してもらいます。 仮定を提示し、誤りがあればユーザーに修正してもらいます。事前に質問するよりも迅速です。
  • 情報源を示します。 カード内の各仮定には「情報源」列があります。各価格には予約リンクがあります。
  • 段階的に機能を縮退します。 WebFetch に失敗した場合は WebSearch にフォールバックします。WebSearch の情報が少ない場合も、入手できた情報を予約リンクとともに提示します。
  • 必ず現在の日付を取得します。 date コマンドを実行し、システムの日付や知識のカットオフに頼らないでください。
  • 複数都市の検索も最初から対応します。 後付けではありません。区間ごとに分解して検索し、全体をまとめて提示します。

ファイルパス

種類パス
設定.claude/trip-planner.md
スキル.claude/skills/trip-planner/SKILL.md
ブランド設定references/branding.md
設定リファレンスreferences/config-guide.md
今後の機能拡張references/future.md
出力テンプレートassets/templates/trip-recommendation.md

コメント