GIS開発研究所 > GeoServerのGeoWebCacheがHITしない原因|gridsetとBBOXの確認

GeoServerのGeoWebCacheがHITしない原因|gridsetとBBOXの確認

2026年7月27日

8分で読めます

GeoServerのGeoWebCacheがHITせず毎回MISSになる原因を解説します。レスポンスヘッダー、WMS直接統合、tiled指定、gridset、CRS、BBOX、タイルサイズ、フィルターを順番に確認し、シード済みタイルが使われない問題を切り分けます。

GeoServer
GeoWebCache
WMS
キャッシュ

GeoServerでGeoWebCacheを有効にしたのに、地図を動かすたびにWMSの描画処理が走る。シードを実行したのに表示が速くならない。同じ場所を再表示してもキャッシュがHITしない。

この問題は、キャッシュが壊れているとは限りません。クライアントからのリクエストが、GeoWebCacheのタイル境界やgridsetと一致していないため、キャッシュ対象として扱われていない場合があります。

先に結論

次の順番で確認すると、原因を切り分けやすくなります。

  1. GeoWebCacheを経由したURLへリクエストしているか
  2. レスポンスヘッダーにキャッシュ結果が出ているか
  3. 対象レイヤーのキャッシュが有効か
  4. tiled=trueやWMS直接統合の条件を満たしているか
  5. CRS、gridset、BBOX、WIDTH、HEIGHTが一致しているか
  6. フィルターやディメンションで別タイルになっていないか

同じ地図に見えても、BBOXやパラメーターが1つ違えば別のリクエストです。まずブラウザではなく、1本のURLをcurlで繰り返して確認します。

GeoWebCacheを経由しているか確認する

GeoServerには通常のWMSとGeoWebCacheのエンドポイントがあります。

/geoserver/wms
/geoserver/gwc/service/wms
/geoserver/gwc/service/wmts

WMTSや/gwc/service/wmsを使う場合はGeoWebCacheを明示的に経由します。一方、通常の/wmsでもWMS直接統合が有効で、リクエスト条件を満たせばキャッシュされます。

まず、実際のブラウザがどのURLへアクセスしているかをNetworkタブで確認します。設定画面だけを見て判断しないことが重要です。

レスポンスヘッダーでHITとMISSを確認する

GeoWebCacheでは、デバッグ用のレスポンスヘッダーを有効にすると、キャッシュ結果やgridsetなどを確認できます。

curl -I \
  "https://example.com/geoserver/gwc/service/wms?SERVICE=WMS&REQUEST=GetMap&VERSION=1.1.1&LAYERS=workspace:facilities&STYLES=&FORMAT=image/png&SRS=EPSG:3857&BBOX=0,0,1000000,1000000&WIDTH=256&HEIGHT=256&TILED=true"

環境によってヘッダー名や表示内容は異なりますが、geowebcache-cache-resultなどを確認します。同じURLを続けて2回送り、最初がMISS、次がHITになるかを見ます。

毎回MISSになる場合は、URLのパラメーター順ではなく値に注目します。ブラウザから送られるリクエストでは、BBOXが少しずつ変わっている場合があります。

WMS直接統合の条件を確認する

通常のGeoServer WMSエンドポイントをGeoWebCacheへ直接統合する場合、任意のWMSリクエストがすべてキャッシュされるわけではありません。

確認する主な項目は次のとおりです。

  • TILED=trueが付いている
  • リクエスト対象がキャッシュ可能なレイヤーである
  • CRSに対応するgridsetが設定されている
  • WIDTHとHEIGHTがタイルサイズに一致している
  • BBOXがgridsetのタイル境界に合っている
  • FORMATがGeoWebCache側で許可されている
  • 複数レイヤーや任意のスタイル指定で条件を外れていない

OpenLayersなどのクライアントで、単一画像としてWMSを取得する設定になっていると、画面サイズに合わせた大きなBBOXとWIDTH、HEIGHTが送られます。このリクエストは、256×256などの固定タイルとは一致しません。

gridsetとCRSを確認する

gridsetは、座標系、対象範囲、ズームごとの解像度、タイルサイズをまとめた定義です。

よくある組み合わせは次のとおりです。

地図の用途 CRSの例 確認点
Web地図 EPSG:3857 Webメルカトルのgridsetを使っているか
緯度経度 EPSG:4326 軸順序と対象範囲が合っているか
国内業務地図 平面直角座標系 対応gridsetを独自に作成しているか

レイヤーの元データがEPSG:6677でも、リクエストがEPSG:3857ならEPSG:3857用gridsetでキャッシュできます。ただし、レイヤー設定、公開CRS、gridsetの組み合わせが有効である必要があります。

GeoServer管理画面では、対象レイヤーのTile Caching設定を開き、利用可能なgridsetと形式を確認します。

BBOXがタイル境界に合っているか

GeoWebCacheのタイルは、gridsetの原点と解像度に基づく固定範囲です。地図クライアントが任意のBBOXを送ると、見た目が近くても既存タイルとは一致しません。

次の2つのリクエストは、表示地域がほぼ同じでも別物です。

BBOX=15500000,4250000,15510000,4260000
BBOX=15500001,4250000,15510001,4260000

クライアント側では、GeoWebCacheが公開するWMTS capabilitiesを読み込み、そこにあるTileMatrixSetを使う構成が確実です。独自に解像度配列や原点を設定する場合は、GeoWebCacheのgridsetと同じ値を使います。

WIDTHとHEIGHTを確認する

gridsetのタイルサイズが256×256なら、WMSリクエストも通常は次の指定になります。

WIDTH=256
HEIGHT=256

512×512や画面全体のサイズを指定している場合、タイルキャッシュを使わず通常のWMS描画になることがあります。高DPI対応で512×512を使いたい場合は、クライアントとgridsetの設計をそろえます。

フィルターとディメンションを確認する

次のパラメーターが変わると、同じ場所でも異なるタイルとして扱われます。

  • STYLES
  • CQL_FILTER
  • TIME
  • ELEVATION
  • 独自のパラメーターフィルター

ユーザーごとに異なるCQL_FILTERを付けると、組み合わせの数だけキャッシュが増えます。値が無制限に変わるパラメーターは、タイルキャッシュと相性がよくありません。

必要なパターンを限定できる場合は、GeoWebCacheのparameter filtersを設定します。限定できない場合は、背景レイヤーだけをキャッシュし、動的なデータを別レイヤーで重ねる構成を検討します。

シード済みなのにHITしない場合

シードしたタイルと実際のリクエストが同じかを確認します。

  1. レイヤー名とスタイル
  2. gridset
  3. 画像形式
  4. ズーム範囲
  5. パラメーターフィルター
  6. 対象範囲

シードはEPSG:3857、ブラウザはEPSG:4326という状態では、作成済みタイルを利用できません。PNGでシードし、ブラウザがJPEGを要求している場合も別キャッシュです。

また、ディスククォータで古いタイルが削除されていないか、キャッシュ保存先への書き込み権限や空き容量に問題がないかも確認します。

ログで確認する項目

一時的にログレベルを上げる場合は、アクセス量とログ容量に注意します。確認したいのは次の情報です。

  • GeoWebCacheを経由したか
  • 使用されたgridset
  • キャッシュキーへ含まれたパラメーター
  • MISSになった理由
  • タイルの保存や読み込みで例外が出ていないか

本番環境で詳細ログを長時間有効にせず、問題を再現できる短い時間だけ取得します。確認後は元のログレベルへ戻します。

再発を防ぐ設計

  • WMTS capabilitiesを基準にクライアントを設定する
  • CRSとgridsetを用途ごとに固定する
  • タイルサイズと解像度配列をクライアントと共有する
  • 動的フィルターをキャッシュ対象レイヤーから分離する
  • HIT率、描画時間、キャッシュ容量を監視する
  • シード条件を設定ファイルや手順書へ残す
  • レイヤー更新時のキャッシュ削除範囲を決める

キャッシュHIT率だけを上げても、更新後に古い地図が残っては運用できません。表示速度と更新反映の両方を考えて、レイヤーごとにキャッシュ方針を分けます。

GeoServerの表示速度改善をご相談ください

BitLightでは、GeoServerとGeoWebCacheの設定確認、WMS・WMTSリクエストの解析、gridset設計、PostGIS側の負荷調査まで支援しています。

シードしても速くならない、特定レイヤーだけ毎回MISSになるなど、再現条件が曖昧な状態からでも切り分けできます。GIS開発を無料相談する

参考資料

GISシステム開発・改善支援

既存GISの改善から新規開発まで相談できます

QGIS、PostGIS、GeoServer、MapLibre、GeoDjangoを使った現地調査基盤、Web地図、データ処理を支援します。

GIS開発の無料相談

同期・性能・地図表示の問題を相談できます

QGIS、PostGIS、GeoServer、MapLibre、GeoDjangoの構成を確認し、原因の切り分けと改善順を整理します。

著者
守高 成悟
守高 成悟

代表取締役 CEO

千葉県出身。10歳の頃からプログラミングを始め、ゲーム、Webサイト、ロボット、スマホアプリなどを制作。大阪大学基礎工学部情報科学科で情報工学と統計学を学び、大学時代はAIを研究。大学在学中にWeb広告代理店でのインターンや人材系Webサービスの立ち上げを経験し、卒業後はフリーランスエンジニアとしてGISシステム、データ基盤構築、Webシステムの開発に従事。10年以上のWebアプリ開発・データ分析経験を基に、2023年9月に株式会社ビットライトを設立し、現場業務の仕組み化からデータ基盤構築、データ活用支援までを一気通貫で支援。

運営会社
株式会社ビットライト
株式会社ビットライト

顧客が本当に必要だった価値を、実装する。

現場業務の仕組み化からデータ基盤構築、データ活用支援までを一気通貫で支援しています。

コーポレートサイトを見る