カテゴリ:プラグイン 自作 追加 未公開

custommap.webp

インタラクティブマップ作成プラグイン

custommap.inc.php
製作者kanateko
バージョン1.7.0
動作確認PukiWiki 1.5.4 - 1.5.4
最終更新2026-03-11

タイル画像を使用したインタラクティブマップを表示し、指定した位置にカスタムマーカーを設置できるプラグイン。ゲームの攻略マップなど、カスタム画像上に任意のマーカーを配置できる。

プラグインの特徴

  • 🗺 タイルベースマップ — ズームレベル対応のタイル画像表示
  • 📌 カスタムマーカー — アイコンの種類や背景ピンの色をカスタマイズ可能
  • 🔍 洗練されたUI — ズームコントロール、ツールボックス、タブ形式のドロワーメニュー
  • 📱 レスポンシブ・タッチ対応 — PC・モバイル(ピンチズーム・スワイプ)に両対応
  • 🌙 ダークモード — PukiWikiのダークテーマ設定と自動同期
  • 🏷 ラベル常時表示 — ズームレベルに関わらず全マーカーのラベルを常に表示可能
  • 🔍 マーカー検索 — 大量のマーカーから名前や説明で目的のものを素早く検索
  • 🔗 マーカー共有リンク — マーカーのURLやIDのコピー、マーカーへのリンク設置が可能
  • 📋 座標コピー — マップ上をクリックして ||x|y||| 形式(プラグインの引数と同じ形式)で座標をクリップボードにコピー
  • 💾 状態の保存 — フィルターや表示設定をブラウザ(LocalStorage)に保存し、再訪時も維持
  • 🛠 デバッグ機能 — 座標確認、原点軸描画、マーカー座標表示など、マップ作成を支援するツール

動作環境

  • PukiWiki 1.5.4 以降
  • PHP 8.2 以降
  • モダンブラウザ(ES2022対応)

ダウンロード

このプラグインは現在公開されていません。

日付バージョン備考
2026-03-111.7.0
  • レンダリングの最適化による大幅なパフォーマンス向上
1.6.2
  • 状態保存方式の集約とリファクタリング
  • ドロワーのスクロールバーデザインのモダン化とレイアウトシフト対策
2026-03-101.6.1
  • 同座標マーカーの展開表示機能の実装
  • マーカー画像未指定時の描画改善 (白丸表示)
  • マーカーフォーカス時の自動スクロールとツールチップ解消
1.6.0
  • マーカー共有リンク機能の実装 (URLコピー・インラインリンク・固定ID対応)
  • マーカーホバーアニメーションの平滑化
1.5.1
  • ドロワー内設定のアコーディオン化
  • 座標取得ボタンのダークモード対応修正
  • 設定UIの操作性改善
  • 座標取得時の情報更新改善
  • 表示制御・操作干渉の修正
2026-03-091.5.0
  • 座標コピー機能の追加
  • ズームUIの表示設定機能の追加
  • デバッグモード時のマーカー座標表示を追加
1.4.1
  • 状態の永続化 (LocalStorage) への対応
  • カテゴリトグル動作の改善
1.4.0
  • データ読み込み方式の刷新(非同期ロード)
  • パフォーマンスの更なる向上
2026-03-071.3.2
  • ドロワーUIの刷新(タブ形式化)
  • ラベル常時表示機能の追加
  • デバッグ項目の整理
1.3.1
  • ズームボタンの無効化処理
  • ズーム時の点滅軽減
1.3.0
  • Canvas描画によるパフォーマンスの劇的改善
  • 大量マーカー表示の最適化
1.2.1
  • テーマ切り替えUIの改善
  • ドロワー内アイコンの修正
2026-03-061.2.0
  • マーカー機能の拡張 (SVGピン対応など)
  • ドロワーUI・デバッグモードの改善
2026-03-051.1.0
  • スムーズなズーム遷移
  • ズームコントロールUIの追加
2026-03-041.0.0
  • 初版作成

プラグイン設定

設定ページは :config/plugin/custommap/{設定名} に作成する。

各種設定項目

設定ページ内のオプション
-dirstringなしディレクトリモードでのタイル画像ディレクトリ名
-attachstringなし添付ファイルモードでの読み込み元ページ名
-tileSizestring'256x256'各タイル画像のピクセルサイズ。256の場合は256x256と同じ意味
-imageSizestring自動計算初期表示の全体画像のサイズ。省略時はtileSize×tileCount
-mapSizestring自動計算座標系のサイズ
-originstring'0,0'座標 (0,0) の位置。デフォルトでは画像の中心が (0,0)
-invertYbooltruetrue: Y軸が下方向に増加(UE座標系)
-centerstringorigin初期表示の中心座標
-zoomint0初期ズームレベル
  • -dir-attachはどちらか一方のみ指定可能。
  • どちらの指定もない場合は、-attach:{設定ページ名} と同じ動作をする。
  • -dirで指定した場合は、image/{dir}内の画像がタイル画像として使用される。
    • 例えば-dir:mapを指定した場合、image/map/{z}/{x}/{y}.{ext}の形式で画像が配置されている必要がある。
      ディレクトリ構造例
      image/
      └── map/                  (← -dir で指定した名前)
           ├── 0/               (← Z座標/ズームレベル)
           │    └── 0/         (← X座標)
           │         └── 0.png (← Y座標)
           └── 1/
                ├── 0/
                │    ├── 0.png
                │    └── 1.png
                └── 1/
                     ├── 0.png
                     └── 1.png
  • -attach::config/plugin/custommap/mapで指定した場合は、:config/plugin/custommap/mapに添付された{z}_{x}_{y}.{ext}の形式の画像がタイル画像として使用される。
    添付ファイル例
    :config/plugin/custommap/map
     ├── 0_0_0.png
     ├── 0_0_1.png
     ├── 0_1_0.png
     ├── 0_1_1.png
     ├── 1_0_0.png
     ├── 1_0_1.png
     ├── 1_1_0.png
     └── 1_1_1.png

マーカー定義

設定ページ内にテーブル形式でマーカーの定義を記述する。

|マーカー名|アイコン画像|カテゴリ|マーカー色|サイズ|デフォルトラベル|デフォルト説明|
必須説明
マーカー名プラグイン記述で使用する識別名
アイコン画像添付ファイルのパスまたは相対パス。省略時は表示なし
カテゴリフィルターでのグループ名。省略時は「その他」
マーカー色SVGピンアイコンの背景色 (例: #FF5A3Cred)。省略時は#2B3344
サイズアイコンの表示サイズ (WxH または単一数値)。省略時は20x20
デフォルトラベルプラグイン記述で省略された場合に使われるラベル。省略時はマーカー名を使用
デフォルト説明プラグイン記述で省略された場合に使われる説明 (PukiWiki構文使用可)

※ ヘッダー行(末尾h)やスタイル行(末尾c)は自動的に無視される。

使用方法

ブロック型でインタラクティブマップを設置する。

#custommap(設定名 [, class=追加クラス]){{
|マーカー名#ID|X座標|Y座標|ラベル|説明|
|マーカー名|X座標|Y座標|||
}}

※ IDは任意で設定可能。省略した場合は自動生成される。

インライン型では、マーカーへのリンクを設置できる。

&custommap(ID){リンクテキスト};

引数一覧

ブロック型で使える引数。

引数名説明
設定名設定ページ名 (:config/plugin/custommap/以降)#custommap(swamp)
class=wrapperに追加するCSSクラス名(複数指定可)class=wide-map dark-border

使用例

実際の表示はこのページを参照。

以下はプラグインや設定ページの書き方の例になる。

#custommap(swamp){{
|宝箱|120.000|-1245.000|宝箱(中)|・片手剣 1個&br;回復薬 1個|
|敵|122.000|-1246.000|スライム||
|拠点|-100.000|-100.000|||
}}
-dir:swamp
-tileSize:256x256
-mapSize:540000,540000
-origin:270000,270000
-invertY:true
-center:270000,270000
-zoom:0

|宝箱|./marker/chest.png|オブジェクト|#FFCC00|32x32|||
|敵|./marker/enemy.png|脅威|#FF3333|32x32|スライム||
|拠点|./marker/home.png|ロケーション|#3333FF|48x48|||

技術的メモ

  • マップの描画やインタラクション機能はTypeScriptで自作しており、外部ライブラリは使用していない。
  • WebGLによるインスタンス描画をメインエンジンとして採用。数万個のマーカーが存在する場合でも、GPU頂点シェーダー側で座標計算(マップ座標→ビューポート座標)を行うことで、マップ移動時のCPU負荷を最小限に抑え、スムーズな描画を実現。
  • WebGLが利用できない環境向けに、Canvas2Dによる高速なフォールバックも維持。
  • PHP側では設定ページの解析、JSONへのデータ変換、初期HTML構造の出力のみを行う。
  • フィルター状態やテーマ設定などはLocalStoragecustommap_state_*)に保存される。
  • ゲームのマップを作成することを前提にしているので、Y軸は下方向に増加(UE座標系)し、座標(0,0)をマップの中心に配置するようにしている。

コメント

Loading comments…