route-researcher について
route-researcherは、北米の山を調査してルート情報レポートを作成するスキルです。登山者向けに、登山サイトや山行記録、天候などの情報をまとめます。
主な機能
- 01山の特定と詳細情報の取得
- 02天候と雪崩状況の確認
- 03登山情報ソースの調査
- 04山行記録と危険要因の整理
- 05ルート情報レポートの作成
活用シーン
- 01登山前に対象の山を調査
- 02ルート、危険要因、最近の状況を確認
- 03登山の時間や行程を計画
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ dreamiurg/ claude-mountaineering-skills --skill route-researcherインストール後、Claude Code で/route-researcherを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
assets/report-template.mdtrip-report-template.mddocs/architecture.mdexamples/2025-10-23-mount-si.md2025-11-06-mount-adams.md2025-11-06-wolf-peak.md2026-01-29-mount-shuksan.md2026-01-29-tinkham-peak.mdtools/.python-versioncloudscrape.pyfetch_conditions.pypyproject.tomlREADME.mdtest_cloudscrape.pytest_fetch_conditions_unit.pytest_fetch_conditions.pytest_geodata_fetchers.pytest_phase4.pytest_phase5.pyuv.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:ピークの特定
目標: 調査対象のピークを特定し、確認します。
-
ユーザーメッセージからピーク名を抽出します
- ピーク名、山名、登山目標を探します
- 一般的なパターン:「Mt Baker」「Mount Rainier」「Sahale Peak」など
-
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 が含まれます
-
複数の候補への対応:
-
複数のピークが見つかった場合: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 での一般的な検索
- 「ピーク名のバリエーション」セクションを参照し、体系的にピーク名の表記を変えて試します:
-
-
ピーク ID を抽出:
- 検索結果の JSON から
peak_idフィールドを抽出します - 以降の peakbagger-cli コマンドで使用するために保存します
- 参照リンク用に PeakBagger の URL も保存します
- 検索結果の JSON から
フェーズ 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
-
内容のある登山記録(word_count > 0)を特定します
-
次を使用して、最近の登山記録を最大5件まで取得します。
uvx --with patchright --from "git+https://github.com/dreamiurg/[email protected]" peakbagger ascent show {ascent_id} --format json
SummitPost の調査
-
検索:「{peak_name} site:summitpost.org」
-
WebFetch を使用して、ルート名、難易度、アプローチ、説明、危険要因を抽出します
-
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 ツールを使用してください。構造化データが返されます。
mcp__mountaineers__search_routes(クエリ「{peak_name}」)とmcp__mountaineers__get_routeを使用し、ルート/場所のページ(難易度、道順、装備)を取得します。mcp__mountaineers__search_trip_reports(クエリ「{peak_name}」)を使用し、ルート URL がある場合はmcp__mountaineers__get_route_trip_reportsを使用して、会員の登山記録を一覧表示します。mcp__mountaineers__get_trip_reportを使用し、関連する各記録の本文と構造化フィールド(日付、著者、結果、道路/状況に関するメモ)を取得します。- MCP が利用できない場合に限り、その不足を記録してください。mountaineers.org は WebFetch/cloudscrape に対して安定して HTTP 403 を返すため、このドメインではスクレイピングは有効な代替手段になりません。
注:Mountaineers MCP は、Task によってディスパッチされた general-purpose エージェント(このエージェント)から利用できます。MCP の結果から、ルートのベータ情報、技術的要件、危険箇所を抽出してください。
NWHikers の調査(northwesthikers.net / nwhikers.net)
- 「{peak_name} site:nwhikers.net OR site:northwesthikers.net」を検索します。
- WebFetch を使用して、一人称の登山記録、GPS トラックのメモ、状況を抽出します。
- WebFetch が失敗した場合は、
cloudscrape.py "{url}"を使用します(通常は高速な方法で十分です)。
Hike of the Week(hikeoftheweek.com — --render が必須)
-
「{peak_name} site:hikeoftheweek.com」を検索します。
-
--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}" -
行程、ルートの説明、アクセスに関するメモ、登山口への道順を抽出します。
Oregon Hikers Field Guide(oregonhikers.org — オレゴンの目標のみ)
- 「{peak_name} site:oregonhikers.org」を検索します。
- WebFetch を使用します。このサイトは静的な MediaWiki HTML で、WebFetch で取得できます。
- ルートの説明、アクセス、許可証、状況に関するメモを抽出します。
Cascade Climbers(cascadeclimbers.com)
- 「{peak_name} site:cascadeclimbers.com」を検索します。
- WebFetch を使用します。ブロックされた場合は
cloudscrape.py "{url}"を使用します。 - 技術的なルートのベータ情報、装備リスト、登山記録、状況を抽出します。
Mountain Project(技術的な区間/岩場の場合)
- 「{peak_name} site:mountainproject.com」を検索します。
- WebFetch を使用して、ルート名、グレード、装備、説明、岩質を抽出します。
- 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}"
- ルートの説明と、閲覧可能なレビュー/コメントがあれば、以下の情報を抽出します:
- 落石地帯、氷瀑/セラックの危険、雪庇の危険
- クライムダウン区間、川/小川の渡渉、水源、名前の付いたキャンプ地
出力形式(以下の 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 を記録してください):
- 州の 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}"を使用します。 - USFS の森林警報/道路状況:
https://www.fs.usda.gov/{region}/{forest-shortname}/alerts(例:r06/mbs/alerts)と/conditionsを取得し、ページ内で道路番号/登山口名を検索します。通行止め地点、理由、季節ゲートを確認します。また、季節的な開通に関するプレスリリースを探すには、WebSearch "{forest name} {road or trailhead} road open {year}"を使用します。 - NPS の道路状況(国立公園内または通過する場合):
https://www.nps.gov/{park-code}/planyourvisit/road-conditions.htm(例:noca、mora、olym)を取得し、道路ごとの OPEN/CLOSED とマイルポストを確認します。 - 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を使用します)。 - 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 のコンディションデータを加え、包括的なルートベータを作成します。
情報源の優先順位:
- トリップレポート(ステップ 3B のエージェント)— 実際に訪れた人の経験
- ルートの説明(ステップ 3B のエージェント)— 公開された基本ルート情報
- PeakBagger/登頂データ(ステップ 3A の Python スクリプト)— 基本情報、傾向
ルート、核心部、危険箇所の統合パターン:
- 標準情報から開始します。ルートの説明にある情報を基準にします(標準ルート名、公表されている難易度)。
- 山行報告の詳細で補足します(目印、具体的な状況、実際の体験)。
- 山行報告と公表情報が食い違う場合は、相違点を記載します。
- 複数の報告で一致する内容を強調します(「複数の報告で言及されています……」)。
- 具体的な情報を含めます(標高、場所、引用)。
- 個別の山行報告に基づく情報の出典は、すべてリンクにします。 特定の山行・登攀報告から得た詳細(日付、引用、「あるパーティーは……と感じた」、「最近の報告では……と記されていた」など)を記載する場合、出典の帰属は必ずその報告の 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: 完了
目標: 完了したことと次の手順をユーザーに伝えます。
ユーザーに以下を報告します。
- 成功メッセージ: 「{Peak Name} のルート調査が完了しました」
- ファイルの場所: 生成されたレポートの完全な絶対パス
- 概要: 2~3 文で簡潔に説明します。
- ルートの種類と難易度
- 主な危険箇所や考慮事項
- 重要な情報不足があればその内容
- 次の手順: 以下をユーザーに勧めます。
- レポートを確認する
- 重要な情報を一次情報源で検証する
- ルートに挑戦する前に最新の状況を確認する
- 行程とナビゲーション: ユーザーが出発時刻に基づくスケジュールやコンパス方位を希望する場合は、
--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 分まで許容します
品質原則
生成するすべてのレポートでは、次のことを必ず行ってください。
- ✅ 安全に関する免責事項を冒頭に目立つように記載します
- ✅ 不足している情報をすべて明記します
- ✅ リンク付きで情報源を引用します
- ✅ ファイル名とメタデータに現在の日付を使用します
- ✅ テンプレートの構成に厳密に従います
- ✅ 実用的な情報(距離、所要時間、装備)を提示します
- ✅ 検証の重要性を強調します — これは調査結果であり、絶対的なものではありません
実装に関する注意事項
詳しい実行フロー、コンポーネントの概要、データコントラクト、設計上の決定事項については、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