mcpField
R
route-researcher

route-researcher

github.com/dreamiurg生産性3538 回インストール16 週間前に更新
リポジトリ

route-researcher について

route-researcherは、北米の山を調査してルート情報レポートを作成するスキルです。登山者向けに、登山サイトや山行記録、天候などの情報をまとめます。

主な機能

  1. 01山の特定と詳細情報の取得
  2. 02天候と雪崩状況の確認
  3. 03登山情報ソースの調査
  4. 04山行記録と危険要因の整理
  5. 05ルート情報レポートの作成

活用シーン

  1. 01登山前に対象の山を調査
  2. 02ルート、危険要因、最近の状況を確認
  3. 03登山の時間や行程を計画

インストール

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

$npx skills add https://github.com/dreamiurg/claude-mountaineering-skills --skill route-researcher

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

同梱ファイル

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

assets/
report-template.md
trip-report-template.md
docs/
architecture.md
examples/
2025-10-23-mount-si.md
2025-11-06-mount-adams.md
2025-11-06-wolf-peak.md
2026-01-29-mount-shuksan.md
2026-01-29-tinkham-peak.md
tools/
.python-version
cloudscrape.py
fetch_conditions.py
pyproject.toml
README.md
test_cloudscrape.py
test_fetch_conditions_unit.py
test_fetch_conditions.py
test_geodata_fetchers.py
test_phase4.py
test_phase5.py
uv.lock

詳細

ルートリサーチャー

北米の山頂を調査し、PeakBagger、SummitPost、WTA、AllTrails、天気予報、雪崩情報、登山レポートなど、複数の情報源のデータを組み合わせた包括的なルートベータレポートを作成します。

データソース: このスキルは、登山に特化したウェブサイト(PeakBagger、SummitPost、Washington Trails Association、AllTrails、The Mountaineers、地域の雪崩センター)の情報を集約します。生成されるレポートの品質は、これらの情報源で情報を入手できるかどうかによって異なります。目的の山頂がこれらのウェブサイトで取り上げられていない場合、レポートに含まれる詳細は限られることがあります。このスキルは、北米の情報が充実した山頂で最も効果を発揮します。

このスキルを使用するタイミング

ユーザーが以下を依頼した場合に、このスキルを使用します。

  • 特定の山頂についての調査
  • ルートのベータ情報や登攀情報
  • 山頂への登山計画情報
  • 登山目標に関する最新の状況

例:

  • 「Mt Bakerについて調べて」
  • 「来月Sahale Peakに登る予定です。ルートを調べてもらえますか?」
  • 「Forbidden Peakのルートベータを作成して」

進捗チェックリスト

調査の進捗:

  • フェーズ1:山頂の特定(山頂を検証し、IDを取得)
  • フェーズ2:山頂情報の取得(座標と詳細情報を取得)
  • フェーズ3:データ収集(並行して実行)
    • フェーズ3a:Pythonによる状況データの取得(天気、大気質、日照時間、雪崩、PeakBaggerの統計・登頂記録)
    • フェーズ3b:リサーチエージェント(3つを並行して実行。ウェブ情報源と登山レポート)
    • フェーズ3c:結果の集約
    • フェーズ3d:アクセス・許可(WebSearchをインラインで実行)
  • フェーズ4:ルート分析(ルート、核心箇所、危険要因を統合)
  • フェーズ5:レポート作成(レポート作成エージェント)
  • フェーズ6:レポートのレビューと検証(レポートレビュアーエージェント)
  • フェーズ7:完了(ユーザーへの通知、次の手順の提示)

オーケストレーションのワークフロー

フェーズ 1:ピークの特定

目標: 調査対象のピークを特定し、確認します。

  1. ユーザーメッセージからピーク名を抽出します

    • ピーク名、山名、登山目標を探します
    • 一般的なパターン:「Mt Baker」「Mount Rainier」「Sahale Peak」など
  2. peakbagger-cli を使用して PeakBagger を検索します:

    uvx --with patchright --from "git+https://github.com/dreamiurg/[email protected]" peakbagger peak search "{peak_name}" --format json
    
    • JSON 出力を解析して、ピークの候補を抽出します
    • 各結果には、peak_id、名前、標高(フィート/メートル)、場所、URL が含まれます
  3. 複数の候補への対応:

    • 複数のピークが見つかった場合:AskUserQuestion を使って候補を提示します

      • 各候補に、ピーク名、標高、場所、PeakBagger の URL を表示します
      • 各候補の説明は、「[ピーク名]([標高]、[場所])- [PeakBagger の URL]」の形式にします
      • これにより、ユーザーはリンク先を開いて正しいピークか確認できます
      • ユーザーに正しいピークを選択してもらいます
      • 該当する候補がない場合に備えて、「その他」の選択肢を用意します
    • 候補が 1 件見つかった場合:ユーザーに確認します

      • ピークの詳細と PeakBagger のリンクを含む確認メッセージを提示します
      • 「見つかりました:[ピーク名]([標高]、[場所])」と表示します
      • ユーザーが確認できるよう、メッセージに PeakBagger の URL「[PeakBagger の URL]」を含めます
      • AskUserQuestion を使って、「このピークで正しいですか?[PeakBagger の URL] で確認できます」と尋ねます
    • 候補が見つからない場合:

      • 「ピーク名のバリエーション」セクションを参照し、体系的にピーク名の表記を変えて試します:
        • 語順の入れ替え:「Mountain Pratt」→「Pratt Mountain」
        • 称号のバリエーション:Mt/Mount、St/Saint
        • **場所を追加:**州名や山脈名を含めます
        • **称号を削除:**名前の中核部分だけで試します
      • 異なる表記で複数の検索を並行して実行します
      • 結果をまとめ、最適な候補をユーザーに提示します
      • それでも結果がない場合は、AskUserQuestion を使って次の情報を尋ねます:
        • 別のピーク名の表記
        • PeakBagger のピーク ID または URL
        • PeakBagger での一般的な検索
  4. ピーク ID を抽出:

    • 検索結果の JSON から peak_id フィールドを抽出します
    • 以降の peakbagger-cli コマンドで使用するために保存します
    • 参照リンク用に PeakBagger の URL も保存します
フェーズ 2:ピーク情報の取得

目標: 場所に基づくデータ収集に必要な詳細なピーク情報と座標を取得します。

天候、日照時間、雪崩データの取得には座標が必要なため、フェーズ 3 の前にこのフェーズを完了する必要があります。

フェーズ 1 のピーク ID を使って、詳細なピーク情報を取得します:

uvx --with patchright --from "git+https://github.com/dreamiurg/[email protected]" peakbagger peak show {peak_id} --format json

次の情報を含む、構造化された JSON が返されます:

  • ピーク名と別名
  • 標高(フィートおよびメートル)
  • プロミネンス(フィートおよびメートル)
  • 孤立距離(マイルおよびキロメートル)
  • 座標(10 進度で表した緯度と経度)
  • 場所(郡、州、国)
  • ルート(利用可能な場合):登山口、距離、累積標高差
  • 所属するピークリストと順位
  • 標準ルートの説明(ルートデータに含まれている場合)

エラー処理:

  • peakbagger-cli が失敗した場合:WebSearch/WebFetch に切り替え、「情報の不足」セクションにその旨を記載します
  • JSON に特定のフィールドがない場合:「情報の不足」セクションで「利用できません」と記載します
  • レート制限:peakbagger-cli に組み込まれています(デフォルトの遅延は 2 秒)

この手順で座標を取得したら、直ちにフェーズ 3 に進みます。

フェーズ 3:データ収集

目標: 利用可能なすべての情報源から、ルートに関する包括的な情報を収集します。

実行戦略: 決定論的な API データの取得には Python スクリプトを実行し、ウェブ調査には専門のエージェントを並行して割り当てます。このハイブリッド方式により、並列処理を最大限に活用しながら、トークンの使用量を抑えます。

ステップ 3A:コンディションデータの取得(Python スクリプト)

コンディション取得スクリプトを実行し、API ベースのデータをすべて収集します。

cd "{repo_root}/skills/route-researcher/tools"
uv run python fetch_conditions.py \
  --coordinates "{latitude},{longitude}" \
  --elevation {elevation_m} \
  --peak-name "{peak_name}" \
  --peak-id {peak_id} \
  --trailhead "{trailhead_lat},{trailhead_lon}" \
  --distance-mi {round_trip_distance_mi} \
  --gain-ft {total_gain_ft} \
  --start-time "{HH:MM}" \
  --waypoint "{lat1},{lon1}" --waypoint "{lat2},{lon2}"

オプションの引数:--trailhead を指定すると、複数の郡にまたがるルートのサンプリング(登山口→山頂)が有効になります。病院とレンジャーの検索は、いずれの場合も山頂から実行されます。--distance-mi/--gain-ft を指定すると time_estimates が有効になります。--start-time(距離と標高差も指定)を指定すると itinerary が有効になります。--waypoint(2つ以上)を指定すると bearings が有効になります。

次の情報を含む JSON が返されます。

  • weather:気温、降水量、凍結高度を含む7日間の予報。各日には、凍結高度を積雪ラインとしてわかりやすく示す snow_line_note と、凍結高度が山頂から2000 ft以内の場合に true となるブール値 near_summit が含まれます
  • air_quality:AQI 評価と懸念事項
  • daylight:薄明の完全な一覧表(astronomical_dawn、nautical_dawn、civil_twilight(日の出前の薄明)、sunrise、sunset、civil_dusk、nautical_dusk、astronomical_dusk)。高緯度地域で太陽が基準高度に達しない場合(白夜)は値が null になります。daylight_hours、timezone も含まれます
  • time_estimates:ロープ使用/不使用と3段階のペース(roped_hr、unroped_hr、fast_hr、moderate_hr、leisurely_hr)。CLI 引数 --distance-mi と --gain-ft が指定された場合のみ含まれます
  • itinerary:安全に関する情報を含む行程表(start_time、summit_eta、turnaround_by、return_eta、total_hr、ブール値 after_dark、dusk_cutoff、note)。--start-time、--distance-mi、--gain-ft がすべて指定された場合のみ含まれます。after_dark: true は安全上の警告であり、目立つように提示する必要があります。total_hr は往復の所要時間(時間)です
  • bearings:ウェイポイント間のナビゲーション方位(bearing_deg、distance_mi、cumulative_distance_mi を含む segments[]、および total_distance_mi)。--waypoint "lat,lon" 引数が2つ以上指定された場合のみ含まれます
  • avalanche:手動確認用の NWAC 地域と URL
  • peakbagger:標高差の統計と最近の登頂記録(peak_id が指定されている場合)
  • counties:登山口から山頂までに通過する郡(county_name、county_fips、state_name、state_code を含む counties[])。sampled ブール値と sample_points 整数値は、ルートのサンプリングが実行されたかどうかを示します(--trailhead が必要です)。--trailhead がない場合は、山頂のある郡のみが返されます
  • nearest_hospital:最寄りの病院/ER(name、lat、lon、distance_miles、emergency を含む hospitals[]。OSM に情報がある場合は phone/website/address も含まれます)。緊急対応施設を優先し、次に距離順で並べ替えられます。最大3件です
  • ranger_station:最寄りのレンジャーステーション(name、lat、lon、distance_miles を含む stations[]。情報がある場合は phone/website/address も含まれます)。山頂の座標が USFS のレンジャー地区に該当する場合は、任意で admin_district(district_name、forest_name、region)も含まれます
  • campgrounds:およそ12 mi(20 km)以内にある整備済みキャンプ場(name、lat、lon、distance_miles、camp_type、backcountry、operator を含む campgrounds[]。情報がある場合は website も含まれます)。奥地や高所のキャンプ地は含まれません。登山記録から抽出してください
  • gaps:レポートに記載された、API の失敗情報

ステップ 3B と並行して実行してください。並列性を最大限に高めるため、同じ応答ターンで fetch_conditions.py の Bash コマンドと3件すべての Task 呼び出しを含めてください。

ステップ 3B:調査エージェントの派遣(並列)

1つのメッセージで、調査エージェントを3つ派遣します(すべての Task 呼び出しをまとめて実行)。各エージェントは割り当てられた情報源を調査し、登山記録の内容を直接取得します。

エージェント 1:PeakBagger + SummitPost

Task(
  subagent_type="general-purpose",
  model="sonnet",
  prompt="""You are a route researcher gathering mountaineering data for {peak_name}.

## Your Assignment
Research from these sources: PeakBagger, SummitPost

**Discover first (web sources):** for SummitPost, run a `site:summitpost.org` WebSearch to get exact URLs, then fetch those (don't WebFetch guessed paths).

## PeakBagger Research
1. Search: "{peak_name} site:peakbagger.com"
2. Extract route descriptions from peak page
3. List recent ascents with trip reports:
   ```bash
   uvx --with patchright --from "git+https://github.com/dreamiurg/[email protected]" peakbagger peak ascents {peak_id} --format json --with-tr --limit 20
  1. 内容のある登山記録(word_count > 0)を特定します

  2. 次を使用して、最近の登山記録を最大5件まで取得します。

    uvx --with patchright --from "git+https://github.com/dreamiurg/[email protected]" peakbagger ascent show {ascent_id} --format json
    

SummitPost の調査

  1. 検索:「{peak_name} site:summitpost.org」

  2. WebFetch を使用して、ルート名、難易度、アプローチ、説明、危険要因を抽出します

  3. WebFetch に失敗した場合は、次の取得手順を使用します。

    # Fast path (httpx with browser-like headers, no browser)
    uv run python {repo_root}/skills/route-researcher/tools/cloudscrape.py "{url}"
    
    # If the above returns {"error": ...} or content is blocked/JS-rendered:
    uv run python {repo_root}/skills/route-researcher/tools/cloudscrape.py --render "{url}"
    
    # If --render still returns a Cloudflare challenge page, escalate (needs a display):
    uv run python {repo_root}/skills/route-researcher/tools/cloudscrape.py --render --headed "{url}"
    

登山記録の抽出

取得した各記録について、以下を抽出します。

  • 日付、著者、ルートの状況、言及された装備
  • 危険箇所(明示的に個別に抽出):
    • 落石地帯:ルート上の場所、状況、言及された通過時刻の目安
    • 落氷・セラックの危険:場所、安定性、夜明け前の行動や時刻に関する助言
    • 雪庇の危険:場所、張り出す方向、回避に関する注意事項
  • 地形の詳細(言及がある場合に抽出):
    • クライムダウン区間:場所、難易度、あれば懸垂下降の支点
    • 川・小川の渡渉:場所、水量、渡渉の難易度
    • 水場:名称のある場所、季節ごとの利用可能性
    • 名称のあるキャンプ地またはビバーク地:名称・場所、露出に関する注意事項

出力形式(以下の JSON をそのまま返す)

{
  "sources": ["PeakBagger", "SummitPost"],
  "route_info": [
    {"source": "...", "name": "...", "difficulty": "...", "description": "...", "hazards": [...]}
  ],
  "trip_reports": [
    {"source": "...", "date": "...", "author": "...", "url": "...", "summary": "...", "conditions": "...", "has_gpx": false,
     "rockfall": "...", "icefall": "...", "cornices": "...",
     "downclimbs": "...", "crossings": "...", "water_sources": "...", "camps": "..."}
  ],
  "gaps": ["what couldn't be fetched and why"]
}
```"""
)

エージェント 2:WTA + Mountaineers + 地域の情報源

Task(
  subagent_type="general-purpose",
  model="sonnet",
  prompt="""You are a route researcher gathering mountaineering data for {peak_name}.

## Your Assignment
Research from these sources: WTA, Mountaineers.org, northwesthikers.net, hikeoftheweek.com, Oregon Hikers Field Guide (oregonhikers.org), Cascade Climbers (cascadeclimbers.com), Mountain Project

**Retrieval strategy — discover URLs, then fetch.** For each web source below (except mountaineers.org — use the Mountaineers MCP, see below), FIRST run a `site:` WebSearch (e.g. `"{peak_name} site:wta.org"`, `site:nwhikers.net`, `site:cascadeclimbers.com`) to collect the exact hike-page and individual trip-report URLs. THEN fetch each discovered URL through the fetching ladder. Do not WebFetch a guessed URL — enumerate real URLs first. This recovers reports that one-pass fetching loses to 403/JS blocks.

## WTA Research
1. Search: "{peak_name} site:wta.org"
2. Find the hike page and extract: trail name, difficulty, distance, elevation gain, hazards
3. Get trip reports from AJAX endpoint: {wta_url}/@@related_tripreport_listing
4. Fetch content for up to 5 recent trip reports using the fetching ladder:
   ```bash
   # Fast path first
   uv run python {repo_root}/skills/route-researcher/tools/cloudscrape.py "{trip_report_url}"

   # If output contains {"error": ...} or content is blocked/JS-rendered:
   uv run python {repo_root}/skills/route-researcher/tools/cloudscrape.py --render "{trip_report_url}"

   # If --render still returns a Cloudflare challenge page, escalate (needs a display):
   uv run python {repo_root}/skills/route-researcher/tools/cloudscrape.py --render --headed "{trip_report_url}"

Mountaineers の調査(まず Mountaineers MCP を使用してください。スクレイピングは禁止です)

mountaineers.org は WebFetch/cloudscrape に対して、安定して HTTP 403 を返します。代わりに Mountaineers MCP ツールを使用してください。構造化データが返されます。

  1. mcp__mountaineers__search_routes(クエリ「{peak_name}」)と mcp__mountaineers__get_route を使用し、ルート/場所のページ(難易度、道順、装備)を取得します。
  2. mcp__mountaineers__search_trip_reports(クエリ「{peak_name}」)を使用し、ルート URL がある場合は mcp__mountaineers__get_route_trip_reports を使用して、会員の登山記録を一覧表示します。
  3. mcp__mountaineers__get_trip_report を使用し、関連する各記録の本文と構造化フィールド(日付、著者、結果、道路/状況に関するメモ)を取得します。
  4. MCP が利用できない場合に限り、その不足を記録してください。mountaineers.org は WebFetch/cloudscrape に対して安定して HTTP 403 を返すため、このドメインではスクレイピングは有効な代替手段になりません。

注:Mountaineers MCP は、Task によってディスパッチされた general-purpose エージェント(このエージェント)から利用できます。MCP の結果から、ルートのベータ情報、技術的要件、危険箇所を抽出してください。

NWHikers の調査(northwesthikers.net / nwhikers.net)

  1. 「{peak_name} site:nwhikers.net OR site:northwesthikers.net」を検索します。
  2. WebFetch を使用して、一人称の登山記録、GPS トラックのメモ、状況を抽出します。
  3. WebFetch が失敗した場合は、cloudscrape.py "{url}" を使用します(通常は高速な方法で十分です)。

Hike of the Week(hikeoftheweek.com — --render が必須)

  1. 「{peak_name} site:hikeoftheweek.com」を検索します。

  2. --render フラグを必ず使用してください。このサイトは Cloudflare で保護されており、WebFetch をブロックします。

    uv run python {repo_root}/skills/route-researcher/tools/cloudscrape.py --render "{url}"
    # If --render still returns a Cloudflare challenge page, escalate (needs a display):
    uv run python {repo_root}/skills/route-researcher/tools/cloudscrape.py --render --headed "{url}"
    
  3. 行程、ルートの説明、アクセスに関するメモ、登山口への道順を抽出します。

Oregon Hikers Field Guide(oregonhikers.org — オレゴンの目標のみ)

  1. 「{peak_name} site:oregonhikers.org」を検索します。
  2. WebFetch を使用します。このサイトは静的な MediaWiki HTML で、WebFetch で取得できます。
  3. ルートの説明、アクセス、許可証、状況に関するメモを抽出します。

Cascade Climbers(cascadeclimbers.com)

  1. 「{peak_name} site:cascadeclimbers.com」を検索します。
  2. WebFetch を使用します。ブロックされた場合は cloudscrape.py "{url}" を使用します。
  3. 技術的なルートのベータ情報、装備リスト、登山記録、状況を抽出します。

Mountain Project(技術的な区間/岩場の場合)

  1. 「{peak_name} site:mountainproject.com」を検索します。
  2. WebFetch を使用して、ルート名、グレード、装備、説明、岩質を抽出します。
  3. WebFetch が失敗した場合は、cloudscrape.py "{url}" を使用します。

フォールバック

いずれかのページで WebFetch が失敗した場合は、取得手順として cloudscrape.py "{url}"(高速)→ JavaScript 描画または Cloudflare で保護されたページには cloudscrape.py --render "{url}" を使用します。

登山記録の抽出

取得した各記録について、以下を抽出します。

  • 日付、著者、ルートの状況、言及された装備
  • 危険箇所(明示的に個別に抽出):
    • 落石地帯:ルート上の場所、状況、言及された通過時刻の目安
    • 落氷・セラックの危険:場所、安定性、夜明け前の行動や時刻に関する助言
    • 雪庇の危険:場所、張り出す方向、回避に関する注意事項
  • 地形の詳細(言及がある場合に抽出):
    • クライムダウン区間:場所、難易度、あれば懸垂下降の支点
    • 川・小川の渡渉:場所、水量、渡渉の難易度
    • 水場:名称のある場所、季節ごとの利用可能性
    • 名称のあるキャンプ地またはビバーク地:名称・場所、露出に関する注意事項

出力形式(以下の JSON を正確に返してください)

{
  "sources": ["WTA", "Mountaineers", "NWHikers", "HikeOfTheWeek", "OregonHikers", "CascadeClimbers", "MountainProject"],
  "route_info": [
    {"source": "...", "name": "...", "difficulty": "...", "description": "...", "hazards": [...]}
  ],
  "trip_reports": [
    {"source": "...", "date": "...", "author": "...", "url": "...", "summary": "...", "conditions": "...", "has_gpx": false,
     "rockfall": "...", "icefall": "...", "cornices": "...",
     "downclimbs": "...", "crossings": "...", "water_sources": "...", "camps": "..."}
  ],
  "gaps": ["what couldn't be fetched and why"]
}
```"""
)

エージェント 3:AllTrails

Task(
  subagent_type="general-purpose",
  model="sonnet",
  prompt="""You are a route researcher gathering mountaineering data for {peak_name}.

## Your Assignment
Research from AllTrails

## AllTrails Research
1. Search: "{peak_name} site:alltrails.com"
2. Use WebFetch to extract: trail name, difficulty, distance, elevation gain, route type, best season, hazards
3. If WebFetch fails, use:
   ```bash
   uv run python {repo_root}/skills/route-researcher/tools/cloudscrape.py "{url}"
  1. ルートの説明と、閲覧可能なレビュー/コメントがあれば、以下の情報を抽出します:
    • 落石地帯、氷瀑/セラックの危険、雪庇の危険
    • クライムダウン区間、川/小川の渡渉、水源、名前の付いたキャンプ地

出力形式(以下の JSON を正確に返してください)

{
  "sources": ["AllTrails"],
  "route_info": [
    {"source": "...", "name": "...", "difficulty": "...", "distance_miles": N, "elevation_gain_ft": N, "description": "...", "hazards": [...],
     "rockfall": "...", "icefall": "...", "cornices": "...",
     "downclimbs": "...", "crossings": "...", "water_sources": "...", "camps": "..."}
  ],
  "trip_reports": [],
  "gaps": ["what couldn't be fetched and why"]
}
```"""
)

1 回の応答にすべての Task 呼び出しを含めて、3 つのエージェントを並列実行してください。

ステップ 3C:結果の集約

Python スクリプトとすべてのエージェントの結果が返った後、統合データ構造に集約します:

{
  "conditions": { /* from fetch_conditions.py */ },
  "route_data": {
    "sources": [ /* merged from all 3 agents */ ],
    "trip_reports": [ /* merged from all agents */ ]
  },
  "gaps": [ /* merged gaps from all sources */ ]
}

一部失敗時の処理:

  • エージェントが完全に失敗した場合は、成功したエージェントのデータを使って処理を続行します
  • 失敗した情報源を gaps 配列に記載します
  • 最低限必要な情報:コンディションデータと少なくとも 1 つのルート情報源
ステップ 3D:アクセス、許可証、道路/ゲートの状況(インライン)

許可証と登山口までの現在の道路/ゲートの状況を確認します。ユーザーに確認先を案内するだけではなく、実際の状況を情報源と日付を添えて積極的に調査し、報告してください。

許可証:

WebSearch: "{peak_name} trailhead access" ; "{peak_name} permit requirements"

道路/ゲート状況のワークフロー(まずアクセス道路となる幹線道路、林道、管理機関を特定してから、記載順に情報源を確認します。レポート用に各情報源の URL を記録してください):

  1. 州の DOT 峠レポート(WA → WSDOT):該当する峠のページを取得します。例:https://wsdot.com/travel/real-time/mountainpasses/mt.-baker(SR-542)または .../north-cascades(SR-20)。RoadCondition/TravelAdvisoryActive/規制を確認します。その他の州では、WebSearch "{state} DOT mountain pass report {highway}" を使用します。
  2. USFS の森林警報/道路状況:https://www.fs.usda.gov/{region}/{forest-shortname}/alerts(例:r06/mbs/alerts)と /conditions を取得し、ページ内で道路番号/登山口名を検索します。通行止め地点、理由、季節ゲートを確認します。また、季節的な開通に関するプレスリリースを探すには、WebSearch "{forest name} {road or trailhead} road open {year}" を使用します。
  3. NPS の道路状況(国立公園内または通過する場合):https://www.nps.gov/{park-code}/planyourvisit/road-conditions.htm(例:noca、mora、olym)を取得し、道路ごとの OPEN/CLOSED とマイルポストを確認します。
  4. WTA の現地情報(PNW):WebSearch "site:wta.org {trail} gate road open closed {year}" を使用するか、ハイキングページを取得します。直近 3~5 件のトリップレポートで「gate」/「road open/closed」/「drove to」を確認します(WTA が 403 を返す場合は cloudscrape.py --render を使用します)。
  5. InciWeb の火災による通行止め(7~10 月):WebSearch "inciweb {area} closure {trailhead} {year}" を使用します。登山口付近で進行中の火災がある場合は、通行止め情報のページを確認します。

情報をまとめる際は、レポートの「道路状況」セクションに記載する、日付入りの状況文を作成します:

「ゲート/道路の状況({date} 時点):情報源によると、{road} は {OPEN/CLOSED/SEASONAL GATE/UNKNOWN} です。{通行止めの場合:ゲートは {milepost} にあり、片道約 {N} mi の追加歩行が必要です。}」

確認できる情報源がない場合は、そのことを明記し、代替の連絡先として管理を担当するレンジャー事務所の電話番号を記載します。登山口名、許可証、状況文、すべての情報源 URL を route_data に追加します。

フェーズ 4:ルート分析

目標: 収集したデータを分析し、ルートの特徴を判断して情報をまとめます。

ステップ 4A:ルートタイプの判定

ルートの説明、標高、装備に関する記載に基づいて、次のように分類します:

  • 氷河: クレバスへの言及、氷河上の移動、通常は 8000ft 超
  • 岩場: 技術的な登攀、YDS 評価(5.x)、プロテクションへの言及
  • スクランブル: クラス 2~4、露出はあるが技術的ではない
  • ハイキング: クラス 1~2、登山道が中心で、露出は最小限
ステップ 4B:複数の情報源からルート情報を統合

目標: ステップ 3B の調査エージェントが取得したトリップレポートとルートの説明に、ステップ 3A のコンディションデータを加え、包括的なルートベータを作成します。

情報源の優先順位:

  1. トリップレポート(ステップ 3B のエージェント)— 実際に訪れた人の経験
  2. ルートの説明(ステップ 3B のエージェント)— 公開された基本ルート情報
  3. PeakBagger/登頂データ(ステップ 3A の Python スクリプト)— 基本情報、傾向

ルート、核心部、危険箇所の統合パターン:

  1. 標準情報から開始します。ルートの説明にある情報を基準にします(標準ルート名、公表されている難易度)。
  2. 山行報告の詳細で補足します(目印、具体的な状況、実際の体験)。
  3. 山行報告と公表情報が食い違う場合は、相違点を記載します。
  4. 複数の報告で一致する内容を強調します(「複数の報告で言及されています……」)。
  5. 具体的な情報を含めます(標高、場所、引用)。
  6. 個別の山行報告に基づく情報の出典は、すべてリンクにします。 特定の山行・登攀報告から得た詳細(日付、引用、「あるパーティーは……と感じた」、「最近の報告では……と記されていた」など)を記載する場合、出典の帰属は必ずその報告の URL への Markdown ハイパーリンクにしてください。通常のテキストで記載してはいけません。情報を統合する際は、各山行報告の url(および日付・著者)を保持し、リンクを付けられるようにしてください。合意内容を示す場合(「複数の報告で……とされています」など)は、該当する報告を 2~3 件、文中にリンクしてください。一般的な情報または特定の出典のない公表済みのベータ情報には、リンクを付けないでください。

例(ルートの説明):

「標準ルートは東稜(クラス 3)を進みます。2025 年 9 月のパーティーは、標高 4,800 フィートで右に分岐する、ケルンがよく設置された踏み跡を見つけました。そこが正しい分岐でした。ガレ場は『うんざりするほど長く』、『足首をひねりやすい』と評されていました。2025 年 10 月の報告では、その区間は雪に覆われており、軽アイゼンが必要だったと記されています。」

以下にもこの形式を適用してください。

  • ルート: 基本構成に沿って、山行報告から目印やナビゲーション情報を追加し、実際の所要時間も含めます。
  • 核心部: 場所と難易度を説明し、山行報告での評価を加え、条件によって変わる点にも触れます。
  • 危険箇所: 山行報告にある危険要因をすべて抽出します。種類ごとに、明確に分けた個別の小節に整理してください。落石や氷瀑を「露出度」などの一般的な項目にまとめてはいけません。
    • 落石: 発生場所、引き金(他のパーティー、凍結と融解、日差しが斜面に当たること)、時間帯による対策(夜明け前に通過する、危険区域を素早く抜ける)を記載します。
    • 氷瀑/セラック: 発生場所、安定性の評価、時間帯による対策(午後を避ける、夜明け前に通過する)を記載します。
    • コルニス: 発生場所、避けるライン、状況(雪庇の成長方向、季節)を記載します。
    • その他の危険要因(クレバス、露出、ルートファインディング、季節要因)は、個別の箇条書きにします。
    • 安全に関わるため、情報を漏れなく記載してください。具体的な場所と対策を含めます。
  • 地形の詳細: 山行報告やベータ情報に記載がある場合は、以下を報告に反映します。
    • 下降箇所: 場所、難易度、懸垂下降用アンカーの有無。
    • 川・沢の渡渉: 場所、季節ごとの水量、渡渉の難易度。
    • 水場: 名称のある場所と、季節ごとの日ごとの利用可能性。
    • 名称のあるキャンプ地・ビバーク地: 名称、場所、露出状況。これらの情報源がキャンプ場データベースではなく山行報告であることを明記します。

重要情報の抽出:

統合したすべてのデータから、以下を特定します。

  • 難易度評価: YDS クラス、スクランブルのグレード、または一般的な難易度(山行記録で検証済み)
  • 核心部: ルート中で最も難しい、または技術的な区間(上記の情報をまとめたもの)
  • 危険要因: 特定されたすべての危険要因(上記の情報をまとめたもの)
  • 特記事項のある装備: 山行記録やベータで言及されている、特殊な装備または重要な装備(独立したセクションにはせず、関連するセクションに記載)
  • 登山口: 名称とおおよその場所
  • 距離/獲得標高: 往復距離と獲得標高(公表値と実際の山行記録データを比較)
  • 所要時間の目安: fetch_conditions.py の出力にある conditions.time_estimates(キー:fast_hr、moderate_hr、leisurely_hr、roped_hr、unroped_hr)を使用します。--distance-mi と --gain-ft を指定して実行した場合に限り、これを表示します。conditions データに time_estimates がない場合は、「情報の不足」に記載してください。値を取得するには: Step 3B の調査でルートの距離と獲得標高が判明したら、--distance-mi {distance} と --gain-ft {gain} を指定して fetch_conditions.py を再実行します。同時に --start-time HH:MM を追加すると itinerary が取得でき、--waypoint 引数を追加すると bearings が取得できます。これらのオプション出力は、該当する引数を指定した場合にのみ有効になります。
  • 氷点高度の分析: 山頂標高と予報上の氷点高度を比較します。
    • 氷点高度の警告を含める場合: 予報期間中のいずれかの日に、氷点高度が山頂標高の 2000 ft 以内にある場合
    • 省略する場合: 予報期間を通じて氷点高度が山頂より 2000 ft を超えて高い場合(一般的な夏の条件)
    • 例:標高 5,469 ft の山頂に対し氷点高度が 5,000~8,000 ft → 警告を含めます(限界に近い条件)
    • 例:標高 4,000 ft の山頂に対し氷点高度が 10,000 ft 以上 → 警告を省略します(山頂より十分に高い)
Step 4C:レポートに地理空間データを掲載する

利用可能な場合は、以下の地理空間データ項目を含めます。レポート内で名前が挙がる場所には、すべてリンクを付けてください。以下のリンクパターンを参照してください。

場所/地図へのリンクパターン(場所の lat/lon と name から作成):

  • Google Maps の場所(名称のある施設):https://www.google.com/maps/search/?api=1&query={URL-encoded name + address} — 病院、レンジャーステーション、キャンプ場、その他名称のある場所には、座標だけのリンクではなく、実際の施設に解決されるこの形式を使用します。座標のみが有効な場合は、query={lat},{lon} を使用します。
  • Gaia GPS:https://www.gaiagps.com/map/?loc=14/{lon}/{lat}(ズーム/経度/緯度)。
  • CalTopo:https://caltopo.com/map.html#ll={lat},{lon}&z=14&b=mbt。

掲載ルール:

  • 郡: 概要に conditions.counties.counties[] の county_name + state_name を記載します。空または error の場合は、「情報の不足」に記載します。
  • 緊急連絡先: conditions.nearest_hospital.hospitals[] および conditions.ranger_station(各ステーションと admin_district)から表を作成します。各名称には、website があればそのリンクを付け、なければ名称と住所で Google Maps の場所を検索するリンクを付けます。電話番号と住所の列は必ず含めてください。OSM から取得できる場合、各項目には phone/website/address/lat/lon が含まれます。phone または address がない場合は、「—」と記載する前に、公式サイトまたは Google Maps の掲載情報などを使って実際の電話番号/住所をできる限り調べてください。欠落または error の場合は、「情報の不足」に記載します。
  • キャンプ場: conditions.campgrounds.campgrounds[] からキャンプ表を作成します。名称にリンク(ウェブサイトまたは Google Maps の場所)を付け、各項目の lat/lon から Google Maps と Gaia の地図リンクを追加します。
  • レポート内の名称がある場所すべて(野営地、ビバーク地点、上部キャンプ、名称のある地形、登山口):上記のパターンに従い、少なくとも Google Maps と Gaia のリンクを付けます。座標のない、山行記録で言及されたキャンプ地には、名称で Google Maps の場所を検索し、できる限り位置を特定してください。特定できない場合は、その旨を明記します。バックカントリーのキャンプ地や上部キャンプは、キャンプ場データベースではなく山行記録から取得します。
Step 4D: 情報の不足を特定する

見つからなかった、または信頼性が低かったデータを明記してください。

  • トリップレポートが見つからない
  • GPS トラックが利用できない
  • スクリプトの実行失敗(天候、雪崩、日照時間)
  • 情報源間で情報が矛盾している
  • 季節データが限られている
Phase 5: レポートの生成

目標: レポートライターエージェントを呼び出して、包括的な Markdown ドキュメントを作成します。

Step 5A: データパッケージを準備する

収集・分析したすべてのデータを、構造化された JSON に整理します。

{
  "peak": {
    "name": "{peak_name}",
    "id": {peak_id},
    "elevation_ft": {elevation},
    "coordinates": [{latitude}, {longitude}],
    "location": "{location}",
    "peakbagger_url": "{url}"
  },
  "conditions": {
    // From fetch_conditions.py output
    "weather": {"forecast": [{"date": "...", "snow_line_note": "...", "near_summit": bool, "freezing_level_ft": N, ...}], ...},
    "air_quality": {...},
    "daylight": {"astronomical_dawn": "...", "nautical_dawn": "...", "civil_twilight": "...", "sunrise": "...", "sunset": "...", "civil_dusk": "...", "nautical_dusk": "...", "astronomical_dusk": "...", "daylight_hours": N},
    "avalanche": {...},
    "peakbagger": {...},
    "counties": {"counties": [{"county_name": "...", "county_fips": "...", "state_name": "...", "state_code": "..."}], "sampled": bool, "sample_points": N},  // sampled + sample_points only present when --trailhead was given
    "nearest_hospital": {"hospitals": [{"name": "...", "lat": N, "lon": N, "distance_miles": N, "emergency": "yes|null", "phone": "...", "website": "...", "address": "..." /* phone/website/address optional */}]},
    "ranger_station": {"stations": [{"name": "...", "lat": N, "lon": N, "distance_miles": N, "phone": "...", "website": "...", "address": "..." /* optional */}], "admin_district": {"district_name": "...", "forest_name": "...", "region": "..."}},
    "campgrounds": {"campgrounds": [{"name": "...", "lat": N, "lon": N, "distance_miles": N, "camp_type": "...", "operator": "...", "website": "..." /* optional */}], "note": "..."},
    "time_estimates": {"roped_hr": N, "unroped_hr": N, "fast_hr": N, "moderate_hr": N, "leisurely_hr": N, "note": "..."},
    "itinerary": {"start_time": "HH:MM", "summit_eta": "HH:MM", "turnaround_by": "HH:MM", "return_eta": "HH:MM", "total_hr": N, "after_dark": false, "dusk_cutoff": "9:15 PM" /* 12-hr AM/PM format, unlike other time fields */, "note": "..."},
    "bearings": {"segments": [{"from": 0, "to": 1, "bearing_deg": N, "distance_mi": N, "cumulative_distance_mi": N}], "total_distance_mi": N}
  },
  "route_data": {
    // Merged from all Researcher agents
    "sources": [...],
    "trip_reports": [...]
  },
  "analysis": {
    // From Phase 4
    "route_type": "{hike|scramble|technical|glacier}",
    "difficulty": "{rating}",
    "crux": "{description}",
    "hazards": [...],
    "access": {...}
  },
  "gaps": [...]
}
Step 5B: レポートライターエージェントを呼び出す
Task(
  subagent_type="general-purpose",
  model="sonnet",
  prompt="""You are a Report Writer generating a mountaineering route report.

## Instructions

1. **Read the report template:**
   Use the Read tool to read: {repo_root}/skills/route-researcher/assets/report-template.md

2. **Generate report following template structure exactly:**
   - Header with peak name, elevation, location, date
   - AI disclaimer (prominent safety warning)
   - Overview: route type, difficulty, distance/gain, time estimates
   - Route Description: synthesized from sources, include landmarks
   - Crux: describe hardest section with specifics
   - Known Hazards: comprehensive list
   - Current Conditions: weather forecast, freezing levels, air quality, daylight
   - Trip Reports: links organized by source with dates
   - Information Gaps: explicitly list missing data
   - Data Sources: links to all sources used

3. **Markdown Formatting Rules:**
   - ALWAYS add blank line before lists
   - ALWAYS add blank line after section headers
   - Use `-` for bullets (not `*` or `+`)
   - Use `**text**` for bold emphasis
   - Break paragraphs >4 sentences
   - **Link specific-report attributions.** Any statement attributed to a particular trip/climb report (a date, a quote, "one party…", "a recent report…") MUST be a Markdown link `[date/author](report_url)` to that report's source URL — never plain-text attribution. Pull the URL from the matching `trip_reports[].url` in the data package. Leave only generic/published beta (no specific source) unlinked.

4. **Save the report:**
   Use the Write tool to save to the user's current working directory: {date}-{peak-name-slug}.md

## Data Package

{data_package_json}

## Output Format (return EXACTLY this JSON)
```json
{
  "status": "SUCCESS",
  "file_path": "/absolute/path/to/report.md",
  "filename": "YYYY-MM-DD-peak-name.md",
  "sections_generated": N
}
```"""
)
Step 5C: レポートファイルのパスを取得する

エージェントの JSON レスポンスから file_path を抽出し、Phase 6 で使用します。

Phase 6: レポートのレビューと検証

目標: レポートレビュアーエージェントを呼び出して、レポートの品質を検証します。

Step 6A: レポートレビュアーエージェントを呼び出す
Task(
  subagent_type="general-purpose",
  model="opus",
  prompt="""You are a Report Reviewer validating a mountaineering route report.

## Instructions

1. **Read the report:**
   Use the Read tool to read: {report_file_path}

2. **Perform systematic quality checks:**

   **Factual Consistency:**
   - Dates match their stated day-of-week (e.g., "Thu Nov 6, 2025" is actually Thursday)
   - Coordinates, elevations, distances consistent across all mentions
   - Weather forecasts align logically (freezing levels match precipitation types)

   **Mathematical Accuracy:**
   - Elevation gains add up correctly
   - Time estimates reasonable given distance and elevation gain
   - Unit conversions correct (feet to meters, etc.)

   **Internal Logic:**
   - Hazard warnings align with route descriptions
   - Recommendations match current conditions
   - Crux descriptions match overall difficulty rating

   **Completeness:**
   - No placeholder texts like {{peak_name}} or {{YYYY-MM-DD}}
   - All referenced links actually provided
   - Mandatory sections present: Overview, Route, Current Conditions, Trip Reports, Information Gaps, Data Sources

   **Formatting:**
   - Markdown headers properly structured
   - Lists have blank lines before them
   - Tables properly formatted

   **Safety & Responsibility:**
   - AI disclaimer present and prominent
   - Critical hazards properly emphasized
   - Users directed to verify information from primary sources

   **Emergency contacts & location links (verify INDEPENDENTLY):**
   - Each emergency contact (hospital, ranger station) has a working name link (website or a Google Maps place link to the actual entity — NOT bare coordinates), a phone, and an address. Independently confirm the phone/address look right for that named entity (e.g. via its official site / Google Maps); fix or flag mismatches and fill blanks you can confirm.
   - Road/gate status is a dated statement with a cited source, not a "go check it yourself" punt.
   - Every named place in the report (campsite, bivy, high camp, trailhead, named feature) carries map links (Google Maps + Gaia GPS). Flag any named location missing links.
   - Specific trip-report attributions are hyperlinks to their source, not plain text.

3. **Fix issues:**
   - **Critical** (safety errors, factual errors, missing disclaimers): MUST fix using Edit tool
   - **Important** (completeness, consistency): SHOULD fix
   - **Minor** (formatting, polish): FIX if quick

## Output Format (return EXACTLY this JSON)
```json
{
  "status": "PASS" | "PASS_WITH_FIXES" | "FAIL",
  "issues_found": N,
  "fixes_applied": ["description of fix 1", "description of fix 2"],
  "remaining_issues": ["issues that couldn't be fixed"],
  "report_path": "/absolute/path/to/report.md"
}
```"""
)
Step 6B: 検証結果を処理する

レビュアーエージェントのレスポンスを処理します。

  • PASS または PASS_WITH_FIXES: report_path を使用して Phase 7 に進みます
  • FAIL: remaining_issues をユーザーに提示し、対応を尋ねます

レポートレビュアーは問題を自動的に修正し、修正後のファイルパスを返します。

Phase 7: 完了

目標: 完了したことと次の手順をユーザーに伝えます。

ユーザーに以下を報告します。

  1. 成功メッセージ: 「{Peak Name} のルート調査が完了しました」
  2. ファイルの場所: 生成されたレポートの完全な絶対パス
  3. 概要: 2~3 文で簡潔に説明します。
    • ルートの種類と難易度
    • 主な危険箇所や考慮事項
    • 重要な情報不足があればその内容
  4. 次の手順: 以下をユーザーに勧めます。
    • レポートを確認する
    • 重要な情報を一次情報源で検証する
    • ルートに挑戦する前に最新の状況を確認する
    • 行程とナビゲーション: ユーザーが出発時刻に基づくスケジュールやコンパス方位を希望する場合は、--start-time HH:MM(itinerary キーを追加)や --waypoint lat,lon フラグ(ウェイポイントを 2 つ以上指定すると bearings キーを追加)を指定して fetch_conditions.py を再実行します。after_dark: true は目立つ安全上の警告として表示します。
    • 登山後のトリップレポート: 登山後、トリップレポートを作成する際の出発点として、skills/route-researcher/assets/trip-report-template.md にあるトリップレポートのテンプレートを案内します。

完了メッセージの例:

Route research complete for Mount Baker!

Report saved to: 2025-10-20-mount-baker.md

Summary: Mount Baker via Coleman-Deming route is a moderate glacier climb (Class 3) with significant crevasse hazards. The route involves 5,000+ ft elevation gain and typically requires an alpine start. Weather and avalanche forecasts are included.

Next steps: Review the report and verify current conditions before your climb. Remember that mountain conditions change rapidly - check recent trip reports and weather forecasts immediately before your trip.

エラー処理の原則

実行中は、以下のエラー処理ガイドラインに従ってください。

スクリプトの実行失敗
  • 処理を止めない: Python スクリプトが失敗した場合は、「情報の不足」に記録して続行します
  • 代替手段を提示する: 手動で確認できるリンク(Mountain-Forecast.com、NWAC.us)を含めます
  • 再試行は 1 回: ネットワークのタイムアウト時は 1 回だけ再試行し、その後は続行します
データの欠落
  • 明記する: 見つからなかった情報は必ず記録します
  • 役立つ情報を提供する: 手動で確認できるリンクを提示します
  • 推測しない: 不足を埋めるためにデータを捏造してはいけません
検索の失敗
  • 表記を変えて試す: ピークが見つからない場合は、別の名前(Mt と Mount など)を試します
  • ユーザーに尋ねる: それでも見つからない場合は、ユーザーに詳細や直接の URL を尋ねます
  • 検索方法を案内する: PeakBagger で手動検索する方法を提案します
WebFetch/WebSearch の問題
  • 取得の順序: まず WebFetch を使用し、次に cloudscrape.py "{url}"(高速な httpx、ブラウザー不使用)、最後に cloudscrape.py --render "{url}"(Patchright 経由で実際の Chrome を使用。Cloudflare のチャレンジが解消されるまで待機し、表示環境が利用できる場合は、読み込みにくいページに --headed を追加します)
  • --render を使用する場合: hikeoftheweek.com、および通常の方法では標準出力に {"error": ...} が返されるサイトや、コンテンツがブロックされている、または JavaScript でレンダリングされるサイト
  • 段階的に縮退して処理する: 1 つの情報源が利用できなくても、調査全体を中止する必要はありません。cloudscrape.py は失敗しても終了コード 0 を返します
  • 不足を記録する: 利用できなかった情報源を記録します(WebFetch と cloudscrape.py のすべての方法(高速処理、--render、--render --headed)が失敗)
  • 安全を優先する: 雪崩や危険箇所など、重要な安全情報が得られない場合は、不足情報のセクションで強調します

実行タイムアウト

  • 個々の Python スクリプト: API 呼び出しは 30 秒、--peak-id が指定されている場合は最大 120 秒(peakbagger-cli)
  • WebFetch 操作: デフォルトのタイムアウトを使用します
  • WebSearch 操作: デフォルトのタイムアウトを使用します
  • スキルの総実行時間: 3~5 分を目標とし、包括的な調査では最大 10 分まで許容します

品質原則

生成するすべてのレポートでは、次のことを必ず行ってください。

  1. ✅ 安全に関する免責事項を冒頭に目立つように記載します
  2. ✅ 不足している情報をすべて明記します
  3. ✅ リンク付きで情報源を引用します
  4. ✅ ファイル名とメタデータに現在の日付を使用します
  5. ✅ テンプレートの構成に厳密に従います
  6. ✅ 実用的な情報(距離、所要時間、装備)を提示します
  7. ✅ 検証の重要性を強調します — これは調査結果であり、絶対的なものではありません

実装に関する注意事項

詳しい実行フロー、コンポーネントの概要、データコントラクト、設計上の決定事項については、skills/route-researcher/docs/architecture.md を参照してください。

peakbagger-cli コマンドリファレンス(v1.10.0、git ソース)

patchright + Google Chrome が必要です。 peakbagger-cli は独自の uvx 環境で実行され、Cloudflare を回避するために Patchright ブラウザーを使用します。そのため、呼び出しのたびに --with patchright を指定する必要があります。指定しないと、Error: patchright is required to bypass Cloudflare というエラーが発生してコマンドが中断されます。

すべてのコマンドで、構造化出力を得るために --format json を使用します。次のように実行します。

uvx --with patchright --from "git+https://github.com/dreamiurg/[email protected]" peakbagger <command> --format json

使用可能なコマンド:

  • peak search <query> - 名前で山を検索します
  • peak show <peak_id> - 山の詳細情報(座標、標高、ルート)を取得します
  • peak stats <peak_id> - 登頂統計と時期的な傾向を取得します
    • --within <period> - 期間で絞り込みます(例:'1y'、'5y')
    • --after <YYYY-MM-DD> / --before <YYYY-MM-DD> - 日付で絞り込みます
  • peak ascents <peak_id> - 個々の登頂と登山記録へのリンクを一覧表示します
    • --within <period> - 期間で絞り込みます(例:'1y'、'5y')
    • --with-gpx - GPS トラックがある登頂のみを対象にします
    • --with-tr - 登山記録がある登頂のみを対象にします
    • --limit <n> - 返す登頂数の上限です(デフォルト:100)
  • ascent show <ascent_id> - 登頂の詳細情報を取得します

注意: コマンドのオプションを詳しく確認するには、peakbagger --help または peakbagger <command> --help を実行してください。

山名の表記揺れ

最初の検索で見つからない場合は、よくある表記揺れを試してください。

  • 語順の入れ替え: "Mountain Pratt" → "Pratt Mountain"、"Peak Sahale" → "Sahale Peak"
  • 名称の展開: "Mt" → "Mount"、"St" → "Saint"
  • 場所を追加: "Baker, WA" または "Baker, North Cascades"
  • 名称を省略: "Mt Baker" ではなく "Baker"
  • 表記揺れの組み合わせ: 名称を展開しながら語順を入れ替えてみます(例:"Mountain Pratt" → "Pratt Mount" + "Pratt Mountain")
ナビゲーションマップのリンク
山頂座標のリンク

レポートの概要行に使用するため、山頂を中心としたリンクを(小数度で)作成します。

Google Maps:

https://www.google.com/maps/search/?api=1&query={latitude},{longitude}

CalTopo(MapBuilder Topo ベース、ズーム 14):

https://caltopo.com/map.html#ll={latitude},{longitude}&z=14&b=mbt

Gaia GPS(順序はズーム/経度/緯度):

https://www.gaiagps.com/map/?loc=14/{longitude}/{latitude}

PeakVisor ハイキングマップ(ズーム/緯度/経度。クエリ内のスラッシュは %2F として URL エンコードします):

https://peakvisor.com/hiking-map?custom=14%2F{latitude}%2F{longitude}#14/{latitude}/{longitude}

例(Mt Baker、48.7768、-121.8144):

  • Google Maps:https://www.google.com/maps/search/?api=1&query=48.7768,-121.8144
  • CalTopo:https://caltopo.com/map.html#ll=48.7768,-121.8144&z=14&b=mbt
  • Gaia GPS:https://www.gaiagps.com/map/?loc=14/-121.8144/48.7768
  • PeakVisor:https://peakvisor.com/hiking-map?custom=14%2F48.7768%2F-121.8144#14/48.7768/-121.8144

注意: 小数度を使用します。Gaia GPS ではズーム/経度/緯度の順序が必要です。CalTopo と PeakVisor では緯度が先で、次に経度です。

登山口の Google Maps リンク

座標がある場合(例:Mountaineers.org の場所情報から取得):

https://www.google.com/maps/search/?api=1&query={latitude},{longitude}

例:https://www.google.com/maps/search/?api=1&query=48.5123,-121.0456

登山口の名前しかない場合:

https://www.google.com/maps/search/?api=1&query={trailhead_name}+{state}

例:https://www.google.com/maps/search/?api=1&query=Cascade+Pass+Trailhead+WA

注意: より正確な位置を示すため、座標がある場合は座標を優先してください。


スキルのバージョン: 5.1.0 | 最終更新日: 2026-05-22

コメント