GIS開発研究所 > GeoServerのGeoWebCacheがHITしない原因|gridsetとBBOXの確認
2026年7月27日
•約8分で読めます
GeoServerのGeoWebCacheがHITせず毎回MISSになる原因を解説します。レスポンスヘッダー、WMS直接統合、tiled指定、gridset、CRS、BBOX、タイルサイズ、フィルターを順番に確認し、シード済みタイルが使われない問題を切り分けます。
GeoServerでGeoWebCacheを有効にしたのに、地図を動かすたびにWMSの描画処理が走る。シードを実行したのに表示が速くならない。同じ場所を再表示してもキャッシュがHITしない。
この問題は、キャッシュが壊れているとは限りません。クライアントからのリクエストが、GeoWebCacheのタイル境界やgridsetと一致していないため、キャッシュ対象として扱われていない場合があります。
次の順番で確認すると、原因を切り分けやすくなります。
tiled=trueやWMS直接統合の条件を満たしているか同じ地図に見えても、BBOXやパラメーターが1つ違えば別のリクエストです。まずブラウザではなく、1本のURLをcurlで繰り返して確認します。
GeoServerには通常のWMSとGeoWebCacheのエンドポイントがあります。
/geoserver/wms
/geoserver/gwc/service/wms
/geoserver/gwc/service/wmts
WMTSや/gwc/service/wmsを使う場合はGeoWebCacheを明示的に経由します。一方、通常の/wmsでもWMS直接統合が有効で、リクエスト条件を満たせばキャッシュされます。
まず、実際のブラウザがどのURLへアクセスしているかをNetworkタブで確認します。設定画面だけを見て判断しないことが重要です。
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が少しずつ変わっている場合があります。
通常のGeoServer WMSエンドポイントをGeoWebCacheへ直接統合する場合、任意のWMSリクエストがすべてキャッシュされるわけではありません。
確認する主な項目は次のとおりです。
TILED=trueが付いているOpenLayersなどのクライアントで、単一画像としてWMSを取得する設定になっていると、画面サイズに合わせた大きなBBOXとWIDTH、HEIGHTが送られます。このリクエストは、256×256などの固定タイルとは一致しません。
gridsetは、座標系、対象範囲、ズームごとの解像度、タイルサイズをまとめた定義です。
よくある組み合わせは次のとおりです。
| 地図の用途 | CRSの例 | 確認点 |
|---|---|---|
| Web地図 | EPSG:3857 | Webメルカトルのgridsetを使っているか |
| 緯度経度 | EPSG:4326 | 軸順序と対象範囲が合っているか |
| 国内業務地図 | 平面直角座標系 | 対応gridsetを独自に作成しているか |
レイヤーの元データがEPSG:6677でも、リクエストがEPSG:3857ならEPSG:3857用gridsetでキャッシュできます。ただし、レイヤー設定、公開CRS、gridsetの組み合わせが有効である必要があります。
GeoServer管理画面では、対象レイヤーのTile Caching設定を開き、利用可能なgridsetと形式を確認します。
GeoWebCacheのタイルは、gridsetの原点と解像度に基づく固定範囲です。地図クライアントが任意のBBOXを送ると、見た目が近くても既存タイルとは一致しません。
次の2つのリクエストは、表示地域がほぼ同じでも別物です。
BBOX=15500000,4250000,15510000,4260000
BBOX=15500001,4250000,15510001,4260000
クライアント側では、GeoWebCacheが公開するWMTS capabilitiesを読み込み、そこにあるTileMatrixSetを使う構成が確実です。独自に解像度配列や原点を設定する場合は、GeoWebCacheのgridsetと同じ値を使います。
gridsetのタイルサイズが256×256なら、WMSリクエストも通常は次の指定になります。
WIDTH=256
HEIGHT=256
512×512や画面全体のサイズを指定している場合、タイルキャッシュを使わず通常のWMS描画になることがあります。高DPI対応で512×512を使いたい場合は、クライアントとgridsetの設計をそろえます。
次のパラメーターが変わると、同じ場所でも異なるタイルとして扱われます。
STYLESCQL_FILTERTIMEELEVATIONユーザーごとに異なるCQL_FILTERを付けると、組み合わせの数だけキャッシュが増えます。値が無制限に変わるパラメーターは、タイルキャッシュと相性がよくありません。
必要なパターンを限定できる場合は、GeoWebCacheのparameter filtersを設定します。限定できない場合は、背景レイヤーだけをキャッシュし、動的なデータを別レイヤーで重ねる構成を検討します。
シードしたタイルと実際のリクエストが同じかを確認します。
シードはEPSG:3857、ブラウザはEPSG:4326という状態では、作成済みタイルを利用できません。PNGでシードし、ブラウザがJPEGを要求している場合も別キャッシュです。
また、ディスククォータで古いタイルが削除されていないか、キャッシュ保存先への書き込み権限や空き容量に問題がないかも確認します。
一時的にログレベルを上げる場合は、アクセス量とログ容量に注意します。確認したいのは次の情報です。
本番環境で詳細ログを長時間有効にせず、問題を再現できる短い時間だけ取得します。確認後は元のログレベルへ戻します。
キャッシュHIT率だけを上げても、更新後に古い地図が残っては運用できません。表示速度と更新反映の両方を考えて、レイヤーごとにキャッシュ方針を分けます。
BitLightでは、GeoServerとGeoWebCacheの設定確認、WMS・WMTSリクエストの解析、gridset設計、PostGIS側の負荷調査まで支援しています。
シードしても速くならない、特定レイヤーだけ毎回MISSになるなど、再現条件が曖昧な状態からでも切り分けできます。GIS開発を無料相談する
千葉県出身。10歳の頃からプログラミングを始め、ゲーム、Webサイト、ロボット、スマホアプリなどを制作。大阪大学基礎工学部情報科学科で情報工学と統計学を学び、大学時代はAIを研究。大学在学中にWeb広告代理店でのインターンや人材系Webサービスの立ち上げを経験し、卒業後はフリーランスエンジニアとしてGISシステム、データ基盤構築、Webシステムの開発に従事。10年以上のWebアプリ開発・データ分析経験を基に、2023年9月に株式会社ビットライトを設立し、現場業務の仕組み化からデータ基盤構築、データ活用支援までを一気通貫で支援。