これは MIERUNE Advent Calendar 2025 の11日目の記事です。
昨日は @nokonoko_1203 さんによる Deck.glのScatterplotLayerで1000万ポイント描画! でした。
ボーリングデータXMLのバージョンについての解説と、そのパーサーを作っている話
皆さんはボーリングデータXMLというデータをご存知でしょうか?
主に土木業界、とりわけ電子納品で利用されるデータの形式であり、国土交通省から仕様が公開されています。
電子納品自体はオープンデータではありませんが、ボーリングデータXMLに関しては一部の機関から公開、または購入することができます。
本記事では、ボーリングデータについて皆さんに知ってもらうことを目的としており、最後に現在OSSとして公開・作成しているボーリングデータXMLのパーサーについて宣伝します。
ボーリングデータの仕様
ボーリングデータの仕様は国土交通省から公開されています。何度か更改されており、2025年現在では全部で6つのバージョンが存在しています。それぞれの仕様へのリンクを下記に示します。
仕様書の歩き方
ここではバージョン4.00の仕様書を例にとり、どうやって仕様書を読み解いていけば良いかを解説します。
概要
ボーリングXMLの仕様は、DTDで記述されています。つまり、各要素における型定義は事実上存在せず、全てはテキストで定義されます。
解析を行いたいシチュエーションが出てきた時には「じゃあどうやって値の型を判別すればいいの?」という疑問が出てくるわけですが、それはPDFで定義されている補足資料を確認することになります。
電子納品の要領・基準に記載されているバージョン4.00の解説付属資料には、実質的にDTDの要素の型を定義する表が掲載されています。
TypeScriptで表すとこんな感じに解像度が上がります。
interface LocationData {
/** その他の型 */
...
/** 測地系 */
geodeticSystemCode: any;
}
↓
interface LocationData {
/** その他の型 */
...
/** 測地系 */
geodeticSystemCode: string;
}
仕様を読み解いていくと、もっと厳密な型定義を行うことができます。
今回は様式Aに存在している、緯度経度情報の測地系に着目してみましょう。詳解されている項目が解説付属資料のこの項目にあります。こちらは実質的に測地系が列挙可能な型であることを示しています。

この情報を使うと、先ほどの型定義よりもさらに解像度が上がります。(numberで定義するかどうかは置いておいて)
interface LocationData {
/** その他の型 */
...
/** 測地系 */
geodeticSystemCode: string;
}
↓
interface LocationData {
/** その他の型 */
...
/** 測地系 */
geodeticSystemCode: '00' | '01' | '02';
}
このように、解析を進めるときにはこれらの資料を突き合わせながら進めていくことになるわけです。気持ちとしてはこれらがXSDにより単一ファイルで実現されていると最高なのですが、この仕様やデータが公開されているだけでも感謝すべきでしょう。国土交通省さん、ありがとうございます!!
補足
DTDファイルの中身の先頭には、今までのバージョンとの差分が書かれています。現在の最新バージョンである4.00のDTDファイルを見ると、全5段階の差分がすべて表されています。解析を行う際にはこちらを参考にすると楽に進めることができるでしょう。
<!-- ********************************************************************** -->
<!-- DTDバージョン4.00 -->
<!-- 2016/5/1 以下を変更したために、DTDのバージョンをver3.00→ver4.00へ -->
<!-- 公開フラグを追加 -->
<!-- 主任技師、現場代理人、コア鑑定者、ボーリング責任者の地質調査技士登録番号を追加-->
<!-- 電子納品管理者、地質情報管理士登録番号を追加-->
<!-- ボーリング基本情報の項目名称変更-->
<!-- 総掘進長 → 総削孔長-->
<!-- 掘進角度 → 角度-->
<!-- 掘進方向 → 方位-->
<!-- ハンマー落下用具、N値記録用具 削除-->
<!-- 名称変更 岩石土区分 → 工学的地質区分名現場土質名-->
<!-- 標準貫入試験の貫入量の単位変更cm → mm-->
<!-- 名称変更 コア形状区分 → ボーリングコアの形状区分-->
<!-- 名称変更 割れ目区分 → 割れ目の状態区分-->
<!-- 名称変更 風化区分 → 風化の程度区分-->
<!-- 名称変更 変質区分 → 熱水変質の程度区分-->
<!-- 破砕度を追加-->
<!-- 名称変更 孔内水平載荷試験 → 孔内載荷試験-->
<!-- 孔内水位 掘削状況 → 削孔状況、水位種別・備考のコードを削除-->
<!-- 名称変更 掘削工程 → 削孔工程、掘進深度 → 削孔深度-->
<!-- 名称変更 掘進速度 → 削孔速度-->
<!-- コア質量を追加-->
<!-- 名称変更 地下水検層試験 → トレーサーによる地下水流動層検層-->
バージョン間における互換性
ボーリングデータのバージョンを扱うための無料で利用できるツールをいくつか紹介します。
- ボーリングデータバージョン変換システム
1.10→2.10、2.01→2.10、2.10→3.00、3.00→2.10への変換を行うことができます。
防災科学技術研究所さんと産業技術総合研究所さんが共同で開発したものです。
- 産総研:佐藤善輝のwebsite(XML変換)
職員の方の善意で作られています。4.00→3.00への変換を行うことができます。
国土地盤情報検索サイト(Kunijiban)におけるバージョンの内訳
いくつかのバージョンのボーリングデータXMLが存在していることについては記述しましたが、実際にはどれくらいの割合で存在しているのでしょうか?今回は国内で最も大規模にボーリングデータを公開しているデータ公開している、国土地盤情報検索サイトにて、XMLをダウンロードし、集計を行ってみました。以下はその結果です。
圧倒的に2.10のものが多くなっています。一方、1.10のものは1000件にも満たず、全体の1%以下となっています。策定初期ということもあり、普及が進まなかったのでしょうか?当時の状況を伺い知ることは叶いませんが、ここ最近のバージョンは増えていることもあり、普及は進んでいるようです。
| バージョン | 件数 |
|---|---|
| 1.10 | 878 |
| 2.00 | 2397 |
| 2.01 | 1117 |
| 2.10 | 109349 |
| 3.00 | 31446 |
| 4.00 | 46541 |
※ 上記の表は半年ほど前に集計したデータです。最新のものではない可能性があることに注意してください。
バージョン4.00時点での問題点
- 現行ではJGD2024に対応していないようです。まだまだ未対応の基準や仕組みが多いですが、なるべく早くの対応が望まれるでしょう
- バージョン変換ツールが古い
- これは権利の関係上仕方ない面もあると思うのですが、バージョン変換を行うツールは存在するものの、新しいバージョンに対応していない問題があります
- ソースコードが公開されていれば互換ツールを作ることもできるのですが、少なくとも今はブラックボックスな状態となっているのが現状です
- 仕様の型付けがされていない
- 先述しましたが、モダンな仕様とは言えないでしょう。XSDなどの別の表現手法を用いることによってもっと良いものになると思っています
パーサーを作っている話
XMLのままだと少し扱いづらいところがあるので、Rustの構造体やJSONで出力することができるライブラリ & CLIツールを作成しました。現状ではDTD通りのテキスト出力しか扱うことができませんが、将来的には仕様書の読み解きを進め、より型安全な形の解析や、GeoSpatialなファイルでの出力の実装についても考えています。もしご興味があればご連絡ください。
