このリポジトリでは「左パネルは操作/コントロール、右パネルは表示/詳細」を原則とするマスタ詳細パターンを採用しています。
https://yr-geo-portal.vercel.app/
- 左側の簡潔な操作領域で設定・絞り込みを行い、右側で対象コンテンツ(Re:Earth 等)を同時に確認・操作できるUXを実現する。
- 左パネル: クイックアクション、プリセット、表示切替などのコントロールを配置。画面幅に合わせて折り畳みやリサイズを可能にする。
- 右パネル: タブで複数のビューを切り替え(
reearth,googlemap,settings)。各タブは共通の状態を参照して表示を更新する。 - 状態管理:
src/PortalContext.jsを導入。reearthUrlをコンテキストで管理し、設定はportal:settings(localStorage)へ統一して永続化・復元します。
設定タブで URL を編集(プレビューは即時適用可能)。- 「保存」ボタンで localStorage に永続化。
- 「初期化」でデフォルト値に戻す。
- 起動 URL に
EARTHまたはearthクエリを付けると、Re:Earthの初期表示 URL として読み込みます。 - 優先順位は クエリ (
EARTH/earth) > localStorage 保存値 > デフォルト値 です。 - 例:
https://re-earth-portal.vercel.app/?EARTH=https%3A%2F%2Fomoya.visualizer.reearth.io%2F
実装ファイル:
- pages/index.js — UI(左パネル、右パネル、設定パネル)、iframe 表示制御
- src/PortalContext.js — URL 状態・プレビュー・保存ロジック
- 外部サイト埋め込み(iframe)と通信する場合、オリジン検証付きの
postMessageを利用する設計を推奨します。必要に応じてsandbox属性で権限を限定してください。
- iframe インスタンスは常にマウントされ、タブ切替は CSS の
displayで行って表示/非表示を切り替えます。これにより iframe 内の状態(地図の位置やログイン状態など)を保持します。loading="lazy"は併用しています。 - 設定入力のデバウンスやプリフェッチ制御で過剰なロードを避けることを推奨します。
- プリセット保存/読み込み(URL のセットを名前付きで保存)。
- クイック履歴(最近使った URL)を表示。
- 左パネルの折り畳み/リサイズ、ショートカットキー対応。
- 保存前に「プレビュー → 確定」ワークフローを明確に(誤反映回避)。
- ブラウザの localStorage に依存するため、プライベートモードやブラウザポリシーでの動作を確認してください。
- 変更後は
npm run dev(Next.js 開発サーバ)で動作確認してください。
postMessageを用いた iframe 双方向通信の雛形追加- 設定の共有(URL クエリや短縮リンク生成)
- プリセット UI とエクスポート/インポート機能
作業で追加・編集した主なファイル: pages/index.js、src/PortalContext.js
以下はランチャーの実際のメイン画面構成を要素単位で整理したものです(左上から順に操作を行い、下部で状態確認や操作を行うレイアウトを想定しています)。
- 概要: 起動設定(プロファイル / プロジェクトパス / QGIS Version)に基づいて QGIS / QField を起動するデスクトップランチャーです。設定は
qgis_settings.json(構造はQgisSettings)に保存され、GUI(FLTK)または CLI モードで操作できます。
-
プロファイル(ドロップダウン)
- 説明: 使用する QGIS プロファイルを選択します。
- 備考: 設定基準フォルダの
profilesと%APPDATA%以下を自動検出します。
-
プロジェクト(ドロップダウン)
- 説明:
project_pathに設定された候補(ファイルまたはフォルダ)から起動する.qgs/.qgzを選択します。 - 表示: 「親フォルダ名 - ファイル名」(例:
ProjectFiles - ProjectFile.qgs)。
- 説明:
-
プロジェクト・バージョン
- 説明:
Project File Versionを表示します。この項目は選択したプロジェクトファイルがどの QGIS バージョンで作成されたかを示します。
- 説明:
-
QGIS Version(ドロップダウン)
- 説明: システム上で検出した QGIS 実行ファイルを一覧表示します。複数バージョンがある場合は起動時に選択可能です。
- 補足: 選択したプロジェクトファイルの
version属性に基づき、同バージョンの QGIS 実行ファイルを自動で初期選択します(GUI のドロップダウンでいつでも手動変更可能)。
-
ユーザーロール(ドロップダウン)
- 説明:
Viewer/Editor/Administratorのいずれかを選択します。選択したロールは QGIS 起動時に--customizationfile/--globalsettingsfile/--codeで渡され、QGIS 内の UI 表示やレイヤーの編集可否に反映されます。 - 備考: 詳細な振る舞い(どの設定ファイルが渡されるか等)は下部の「ユーザーロール制御」セクションに記載しています。
- 説明:
-
ボタン類(下部)
Launch QGIS: 選択中の設定で QGIS を起動します。Reset Profiles: 配布プロファイルを再配布/強制上書きする操作用(モーダルで進捗表示)。
-
状態表示領域
- 説明: QGIS 実行ファイル検出や起動ログ、エラーメッセージなどを短く表示する領域です。
project_pathは設定上の候補一覧です。GUI 上でプロジェクトを選択してもproject_path自体は書き換わりません。選択はcurrent_projectに保存され、次回起動時の初期選択に使われます。Project File Versionは 選択されたファイルのみ を解析して表示します(範囲を限定することで最小限の負荷を確保)。.qgzの取り扱い: ランチャーは.qgzを一時展開せずに ZIP を読み取り、最初に見つかった.qgsを解析してバージョン情報を抽出します。- 解析結果キャッシュ: 取得したバージョン文字列は内部キャッシュに保存し、ファイルの最終更新時刻が変わらない限り再解析しません(表示の高速化)。
- CLI モード(
--cli): GUI を起動せず設定に基づいて直接 QGIS を起動します。
これにより、ユーザーは画面上で起動に必要な項目を左上から順に設定し、下部で状態確認・起動操作を行えるようになります。
- これにより、JSON の正式仕様(\\ を使う)に準拠していないファイルでも正常に動作します。
- 有効な JSON エスケープ(\", \\, \/, \b, \f, \n, \r, \t, \u)はそのまま保持されます。
- 例:
json "project_path": [ "C:\github\\ReEarth_Portal\qgis_launcher\download\ProjectFiles", "C:\ProjectFiles2" ]
上記は読み込み時に自動的に正規化されます。
-
GUI: デフォルトでは簡易 GUI(FLTK)を起動します。GUI はプルダウンでプロファイル、プロジェクト、QGIS バージョンを選択して「Launch QGIS」で起動します。プロファイル候補は
%APPDATA%下の QGIS プロファイルパス(get_qgis_profile_paths())と、設定基準フォルダ配下のprofilesフォルダを参照します。プロジェクト候補はproject_pathに指定されたファイル/フォルダを上記ルールで解決して列挙します。QGIS / QField の実行ファイル候補はシステム上の標準インストール箇所やポータブル配布を探索して自動検出します。 -
QGIS バージョン別プロファイル配信:
-
設定基準フォルダ配下の
profilesフォルダにQGIS3\/QGIS4\サブフォルダを作成することで、インストール済みの QGIS バージョンごとに専用プロファイルを自動配信できます。 -
コピーのタイミング: EXE 起動時に自動実行されます(「Launch QGIS」ボタン押下前)。コピー先にファイルが既に存在する場合はスキップされるため、複数回起動しても無駄なコピーは発生しません。
-
バージョン自動検出: システムにインストールされている全 QGIS を自動検出し(
ProgramFiles、C:\OSGeo4W、レジストリ等を探索)、検出したメジャーバージョンごとにコピーを行います。QGIS 3 と QGIS 4 が両方インストールされている場合は両方に同時にコピーされます。 -
バージョンの判定はインストールフォルダ名から行います(例:
QGIS 3.44.8→ バージョン 3)。 -
QGIS3\/QGIS4\フォルダが存在しない場合はprofiles\直下(共通)を全バージョンに使用します。 -
フォルダ構成例:
(設定基準フォルダ)/ profiles/ QGIS3/ geo_custom/ ← QGIS 3.x 用プロファイル → %APPDATA%\QGIS\QGIS3\ へコピー QGIS4/ geo_custom/ ← QGIS 4.x 用プロファイル → %APPDATA%\QGIS\QGIS4\ へコピー -
バージョン検出の判定順位: パス中に
QGIS 4/QGIS4→ バージョン 4。QGIS 3/QGIS3→ バージョン 3。検出不能な場合はprofiles\直下を使用。 -
注意: コピー先に既存ファイルがある場合は上書きしません(ユーザーの設定変更を保護)。配信ファイルを更新してユーザー側に反映させたい場合は、コピー先の該当ファイルを削除してから再起動してください。
ランチャーの GUI には「Reset Profiles」ボタンがあり、配布プロファイルの再コピーと既存プロファイルの強制削除を一括で実行できます。実行中はメッセージとプログレスバーを備えたモーダル風ウィンドウで進捗を確認でき、完了すると自動で閉じてメインウィンドウに結果が表示されます。大量のファイル削除/コピーを伴う処理のため、完了まで時間がかかる場合があります。
-
-- CLI モード: --cli を指定すると GUI を起動せずに CLI モードで動作します。
現状、Reset Profiles は GUI 操作用の機能として提供しています(GUI 起動時に利用可能)。
qgis_settings.json ①ベース設定
↓
qgis_settings_override.json ②全ユーザー強制オーバーライド(任意)
↓
qgis_settings_{USERNAME}.json ③ユーザー個別オーバーライド(任意)← 最終適用
③が最後に適用されるため、ユーザー個別設定(③)は全ユーザー強制オーバーライド(②)より優先されます。
C:\qgis_launcher\
qgis_settings.json ← 全員共通のベース設定
qgis_settings_override.json ← 全ユーザーに強制適用(任意)
qgis_settings_yamamoto.json ← yamamoto ユーザーのみ上書き(任意)
qgis_settings.json と同じディレクトリに qgis_settings_override.json を置くと、ユーザー名に関係なくすべてのユーザーに対して設定を強制上書きできます。
マージルールはユーザーオーバーライドと同じです:
| キー | マージ方式 |
|---|---|
drive_mappings |
drive キーで既存エントリを照合してフィールド単位で上書き(未指定フィールドは維持) |
path_aliases |
マップキー単位でマージ(未指定キーは維持) |
| その他のキー | 値ごと置き換え |
特定の profile を全員に強制したい場合:
{
"profile": "corporate_profile"
}特定のドライブマウントを全員に強制追加したい場合(他のフィールドはベースのまま):
{
"drive_mappings": [
{
"drive": "S:",
"mode": "subst",
"local_cache": "C:\\shared_data"
}
]
}サンプルファイル: qgis_launcher/download/qgis_settings_override.json.example
BOX のフォルダ階層はユーザーによって異なる場合があります。qgis_settings.json と同じディレクトリに qgis_settings_{Windowsログイン名}.json を置くと、全員共通のベース設定を上書きできます。
C:\qgis_launcher\
qgis_settings.json ← 全員共通のベース設定
qgis_settings_tanaka.json ← tanaka ユーザーのみ上書き
qgis_settings_yamamoto.json ← yamamoto ユーザーのみ上書き
{USERNAME} は Windows の %USERNAME% 環境変数(ログインユーザー名)と一致させてください。
| キー | マージ方式 |
|---|---|
drive_mappings |
drive キーで既存エントリを照合してフィールド単位で上書き(未指定フィールドはベースを維持) |
path_aliases |
マップキー単位でマージ(未指定キーはベースを維持) |
| その他のキー | 値ごと置き換え |
robocopy_src だけを変えたい場合(他のフィールドはベースのまま):
{
"drive_mappings": [
{
"drive": "Q:",
"robocopy_src": "BOX:\\MyFolder\\Geo_Portal"
}
]
}path_aliases の BOX パスだけをユーザーごとに変えたい場合:
{
"path_aliases": {
"BOX": "D:\\Box"
}
}サンプルファイル: qgis_launcher/download/qgis_settings_USERNAME.json.example
GUI の「User Role」ドロップダウンで Viewer / Editor / Administrator を選択すると、QGIS の UI がロールに応じて制限されます。
QGIS 起動時に以下の 3 つの引数が自動で設定されます:
| 引数 | ファイル | 内容 |
|---|---|---|
--customizationfile |
ini/<role>.xml(QGIS4) または ini/<role>.ini(QGIS3) |
ランチャーが QGIS 実行ファイルパスからメジャーバージョンを判定し、QGIS4 では .xml(Customization XML)を、QGIS3 では .ini をそれぞれ必ず渡します(フォールバックは行いません)。 |
--globalsettingsfile |
ini/qgis_global_settings.ini |
userrole を QGIS グローバル変数として設定(プロジェクト式 @userrole で参照可能)。ランチャーはこのファイルを生成して渡します。 |
--code |
ini/startup.py |
起動後に動的制御(ツールバー表示・レイヤーのReadOnly設定) |
qgis.exe --profile geo_custom
--customizationfile ini/Viewer.xml # QGIS4 の場合
--customizationfile ini/Viewer.ini # QGIS3 の場合
--globalsettingsfile ini/qgis_global_settings.ini
--code ini/startup.py
ランチャーは子プロセスの環境に PORTAL_USERROLE を注入します(launch_qgis が cmd.env("PORTAL_USERROLE", role) を設定)。startup.py は QGIS グローバル変数 userrole を参照し、存在しなければ PORTAL_USERROLE を参照するため、両者を併用することで確実にロール情報を伝達します。
| ロール | カスタマイズファイル(QGIS4 / QGIS3) | UI 制御 | レイヤー |
|---|---|---|---|
| Viewer | Viewer.xml(QGIS4 / 推奨) / Viewer.ini(QGIS3) |
編集メニュー・編集ツールバーを非表示 | プロジェクト読み込み時に全ベクターレイヤーを ReadOnly に設定 |
| Editor | Editor.xml(QGIS4) / Editor.ini(QGIS3) |
プロジェクト新規作成・保存メニューを非表示(編集操作は許可) | 制限なし |
| Administrator | Administrator.xml(QGIS4) / Administrator.ini(QGIS3) |
制限なし | 制限なし |
基本は QGIS4 を想定しており、ランチャーは QGIS の実行ファイルパスからメジャーバージョンを判定して、可能な限り QGIS4 用の *.xml(Customization XML)を渡します。QGIS3 を使用する環境では *.ini を渡します。現在の実装ではメジャーバージョンに応じて必ず適切な拡張子を使用し、フォールバックは行いません。
qgis_launcher.exe と同階層/
ini/
Viewer.xml ← QGIS4 用 Customization XML(推奨)
Viewer.ini ← QGIS3 用 INI フォーマット(互換)
Editor.xml
Editor.ini
Administrator.xml
Administrator.ini
qgis_global_settings.ini ← 起動のたびに自動生成(userrole を記録)
startup.py ← QGIS 起動後に自動実行されるスクリプト
注意:
ini/フォルダが実行ファイルと同階層に存在しない場合、ロール制御はスキップされます(エラーにはなりません)。
| タイミング | 処理 |
|---|---|
| 起動後 500ms | UI 制御(ツールバー表示/非表示、ボタンの有効/無効) |
| プロジェクト読み込みのたびに | Viewer の場合、全ベクターレイヤーを ReadOnly に設定 |
-
設定ファイルの探索と優先度:
- ランチャー実行時の設定基準フォルダは
qgis_launcher.exeと同じディレクトリ になります。 - ※以前のバージョンで存在した
C:\qgis_launcherへの固定フォールバックや、JSON内部での絶対パス指定は廃止され、常に「EXEの配置場所」ベースでポータブルに動作するようになりました。
- ランチャー実行時の設定基準フォルダは
-
プロファイル選択の優先順位:
qgis_settings.jsonのprofileが空でない場合はそれを使用- そうでなければ CLI の
--profile引数 - それでも無ければ
defaultを使用
-
QGIS 実行ファイルパスの優先順位(重要):
- CLI 引数
--qgis_executable(明示指定) qgis_settings.jsonのqgis_executableフィールド- レジストリやファイル関連付けからの自動検出(
find_qgis_path_from_registry()) - 見つからない場合はエラーで終了します(実装上、レジストリ検出に失敗すると起動を中止します)。
- CLI 引数
-
ビルド・実行例:
cd qgis_launcher
cargo build --release
# ランチャー(デフォルトは GUI を起動)
cargo run --release
# CLI モードで即座に起動
cargo run --release -- --cli- 備考:
Cargo.tomlはfltk-bundledを feature として利用する設定(guifeature)になっており、FLTK をソースからバンドルビルドします。初回ビルドは時間がかかる点に注意してください。
※注意: Web ポータル(ブラウザ)側では rclone を実行してマウントする処理は行いません。
drive_mappings 設定は互換性のため読み書き・保持しますが、実際のドライブ割り当てや rclone の起動は
ローカルの qgis_launcher 実行環境(ランチャー)側でのみ行われます。ランチャーを使用しない環境ではこの設定は無視されます。
QGIS 起動前に任意のフォルダをドライブレターへ自動割り当てする機能です。
追加インストール不要の subst モードを採用しています。
対応クラウドストレージ: BOX Drive / OneDrive / Google Drive for Desktop など、ローカルフォルダとして同期されるすべてのクラウドストレージに対応します。
BOX Drive (BOX:\Geo_Portal = %USERPROFILE%\Box\Geo_Portal)
│
│ robocopy /MIR(起動時に自動実行)
│ ← BOX → ローカルの一方向コピー
▼
ローカルキャッシュ (C:\qgis_cache\master)
│
│ subst
▼
Q: 参照用・高速読み取り専用
BOX Drive (BOX:\Geo_Portal = %USERPROFILE%\Box\Geo_Portal)
│
│ subst
▼
R: 編集用・BOX Drive アプリが BOX へ自動同期
| ドライブ | 書き込み先 | BOX への反映 | 用途 |
|---|---|---|---|
| Q: | ローカル SSD | されない | QGIS 高速参照専用。起動時に robocopy でキャッシュを最新化 |
| R: | BOX Drive フォルダ | BOX Drive アプリが自動同期 | データ編集・保存 |
QGIS プロジェクトファイル(.qgs)のデータソースパスを Q:\data\道路.gpkg のように
ドライブレターで統一でき、チーム全員が同じ .qgs ファイルを共有できます。
注意: Q: に直接保存したデータは BOX へ反映されません。編集・保存は R: を使用してください。
{
"path_aliases": {
"BOX": "%USERPROFILE%\\Box",
"OneDrive": "%OneDrive%",
"SharePoint": "%OneDriveCommercial%\\<サイト名>\\Geo_Portal",
"OneDriveBiz": "%OneDriveCommercial%",
"GoogleDrive": "G:\\マイドライブ"
},
"drive_mappings": [
{
"drive": "Q:",
"mode": "subst",
"local_cache": "C:\\qgis_cache\\master",
"robocopy_src": "BOX:\\Geo_Portal",
"robocopy_exclude": ["secret-folder", "private-data"]
},
{
"drive": "R:",
"mode": "subst",
"local_cache": "BOX:\\Geo_Portal"
}
]
}| フィールド | 説明 |
|---|---|
drive |
割り当て先ドライブレター(例: Q:) |
mode |
subst(省略時は subst) |
local_cache |
割り当て元フォルダのパス(必須。BOX:\\path ・ %VAR% 記法対応) |
robocopy_src |
指定時は起動時に robocopy /MIR で local_cache へミラーリング(BOX:\\path ・ %VAR% 記法対応)。コピー方向は robocopy_src → local_cache の一方向 |
robocopy_exclude |
robocopy の除外サブフォルダ名の配列(例: ["secret-folder", "private-data"]) |
path_aliases ではエイリアス名(2文字以上)をパスにマッピングできます。BOX は未定義時のデフォルトで %USERPROFILE%\Box に解決されます。OneDrive / Google Drive 等も同様に定義できます。
| 記法例 | 展開後 |
|---|---|
BOX:\Geo_Portal |
C:\Users\<ユーザ>\Box\Geo_Portal(BOX エイリアス展開) |
OneDrive:\Documents |
C:\Users\<ユーザ>\OneDrive\Documents(%OneDrive% 展開) |
OneDriveBiz:\Geo_Portal |
C:\Users\<ユーザ>\OneDrive - 会社名\Geo_Portal(%OneDriveCommercial% 展開) |
GoogleDrive:\Geo_Portal |
G:\マイドライブ\Geo_Portal(Google Drive のドライブレターを指定) |
%USERPROFILE%\Box\Geo_Portal |
C:\Users\<ユーザ>\Box\Geo_Portal |
C:\qgis_cache\master |
そのまま |
使用するクラウドストレージに応じて以下を設定してください。
| クラウド | 準備 | エイリアスの基準 |
|---|---|---|
| BOX Drive | BOX Drive アプリをインストール、対象フォルダをオフライン同期(常にこのデバイス上に保持)に設定 | %USERPROFILE%\Box(デフォルト、または path_aliases で変更) |
| OneDrive(個人) | OneDrive アプリが動作していれば %OneDrive% 環境変数が自動設定される |
%OneDrive% |
| OneDrive(法人/Microsoft 365) | サインイン後に %OneDriveCommercial% 環境変数が自動設定される |
%OneDriveCommercial% |
| Google Drive for Desktop | Google Drive for Desktop をインストール、ドライブレター(例: G:)を確認 |
G:\マイドライブ(ドライブレターは環境により異なるため path_aliases で指定) |
| SharePoint(ライブラリ) | ブラウザで対象の SharePoint サイトのドキュメントライブラリを開き「同期」をクリックして OneDrive と同期してください。同期後に作成されるローカルフォルダ(通常は %OneDriveCommercial% 以下)を path_aliases に設定してください(例: %OneDriveCommercial%\\<サイト名>\\Geo_Portal)。 |
%OneDriveCommercial%\\<サイト名>\\Geo_Portal |
- Q: の
local_cache(C:\qgis_cache\master等)は初回起動時に自動作成されます。 - OneDrive は会社名がパスに含まれる(例:
OneDrive - 株式会社XXX)ため、ユーザーごとにパスが異なる場合があります。その場合はユーザーオーバーライドでpath_aliasesを上書きしてください。
MIT License — 詳細は LICENSE ファイルを参照してください(未作成の場合は MIT として扱います)。
| ソフトウェア | ライセンス | 配布 | 備考 |
|---|---|---|---|
| FLTK (fltk-rs) | LGPL v2 + 例外条項 | 同梱可 | スタティックリンク時も再配布可 |
| QGIS | GPL v2 以降 | 別途インストール | qgis_launcher とは独立したソフトウェア |
配布パッケージの構成例:
qgis_launcher.exe
qgis_settings.json
本システムは個人のPCで作成・テストされたものです。
ご利用によるいかなる損害も責任を負いません。

