xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

オープンデータ先進県「福井」の残念なデータに思う

2013 年 6 月 14 日に閣議決定された世界最先端 IT 国家創造宣言。政府が打ち出した「日本は IT で 1 位になるんです!2 位じゃダメなんです!」というアレです。この方針に従うべく、日本中のアチコチの自治体/行政が自分たちの持っているデータを一般に公開するオープンデータを始めているのは周知のことと思います。

Open Data

福井県 (特に鯖江市) はその中でもモデルケースとして非常に注目されており、オープンデータとしての情報公開数が日本一 (記事公開時点で 27 個) となっています。そこには市営バスの現在位置などのリアルタイムな情報まで含まれており、すでにそれらが活用されたスマホアプリなども公開されています。2013 年に高互換性コンピューター言語「XML」でバズったのも記憶に新しいですね。

中日新聞の「鯖江市が行政データ「XML」形式で提供 全国初、加工可能に」についての反応

今回紹介するサンプル

さて、そんな福井県のオープンデータの中を覗いてみましょう。私も福井県民なので「福井のオープンデータがアツい!」と言われたらチェックしないワケにはいきません。という流れに乗って、かれこれ 2 年ほど前に見てみたことがありました。

今回はその中のひとつである、坂井市の津波避難場所データを紹介します。まぁいろいろやばい。絶句するレベルでヤバぃ。そして 2 年前から何も変わってない...(白目

不要な情報

まず、最初にある exchangeMetadata タグ配下で必要な情報が日付しかない。結構いろいろとタグがあるにも関わらず!しかも日付の中に日付 (date タグの中に date タグ) という謎構造な上に、「2012-05-10」ではなく「2015- 5-10」という微妙な値。そのまま DateTime.Parse できないのではないか感すら漂う...。この XML ファイルを作ったツールの名前とかバージョンになんて全く興味ないし、連絡先情報に URL や メールアドレスを載せる気すら感じられない。お願いだからゴミデータを「オープンデータ」とか言わないでくれ

<exchangeMetadata>
    <datasetCitation>
        <title>title</title>
        <date>
            <date>2012- 5-10</date>
            <dateType>creation</dateType>
        </date>
    </datasetCitation>
    <citedResponsibleParty>
        <organizationName>partyName</organizationName>
        <contactInfo>
            <onlineResource>
                <linkage>partyUrl</linkage>
                <name>urlName</name>
            </onlineResource>
            <address>
                <electronicMailAddress>emailAddress</electronicMailAddress>
            </address>
        </contactInfo>
        <role>resourceProvider</role>
    </citedResponsibleParty>
    <encodingRule>
        <encodingRuleCitation>
            <title>地理情報標準第2版電子国土プロファイル</title>
            <date>
                <date>2005-03-29</date>
            </date>
        </encodingRuleCitation>
        <toolName>shp2cjp</toolName>
        <toolVersion>1.0.0</toolVersion>
    </encodingRule>
</exchangeMetadata>

構造化されていない形式

津波避難場所情報の XML を読み込んでいることは (このファイルにアクセスしている段階で) 明白なはずなのに、律儀に「津波避難場所」が name タグに入ってたり。description タグ以降も同じく何の役にも立たないので完全にデータ転送量のムダ。まずまず dataset タグとか言う非常に抽象度の高いものの中に layer タグ (謎) がひとつだけ。しかもそんな layer タグの中にファイルの名前とか説明とかが含まれてる...。ちょっとよく分からない。データが全然構造化されていなくてどうしよう状態。

<dataset>
    <layer>
        <name>津波避難場所</name>
        <description>description</description>
        <style>
            <name></name>
            <type>symbol</type>
            <displaylevel>all</displaylevel>
            <display>on</display>
            <tranceparent>off</tranceparent>
            <selection>on</selection>
            <symbol>
                <uri>image/hinan_tsunami.bmp</uri>
                <size>20,static</size>
            </symbol>
        </style>
        <!-- 以下略 -->
    </layer>
</dataset>

Key1=Value1, Key2=Value2...

そしてさらに厄介なのが、最も重要なデータのコレ。Point タグが避難場所を表しているらしいことは分かります。でも id="pt0" の意味は全然わからない。無くても何も困らない。そして Point タグの下にある point タグ。お前はなぜネストされているんだ...。

<Point id="pt0">
    <point>
        <CRS uuidref="JGD2000 / (L, B)"/>
        <position>
            <coordinate>136.155623 36.211798</coordinate>
        </position>
    </point>
    <name>津波避難場所</name>
    <attribute>施設名称=三国南小学校,所在地=三国町山王一丁目1-50,電話番号=82-0158,標高=21.0m</attribute>
</Point>
<!-- 以下略 -->

Coordinate タグは経度緯度での座標位置を表していると思われますが、半角空白を区切りとして自力で分解しなければなりません。最悪なのが attribute タグ。自分で構造的なタグを作れる「高互換性コンピューター言語」の XML だと言うのに、なぜか「Key1=Value1,Key2=Value2,...」という怪奇構造。これを読み込むためだけに以下のような解析コードが必須になってしまいます。

var data = attribute.Value
         .Split(',')
         .Select(x => x.Split('='))
         .Select(x => new
         {
             Key = x[0],
             Value = x[1]
         })
         .ToArray();

なぜ利用者側にこんな不毛な苦労が必要なのか。というか、もし住所とか場所名に「=」や「,」が入っていたらどうするつもりなんだろう?

どうあるべきか

2 年前このデータを見たとき、ついカッとなって上記のデータを良い感じの形式に変換する API を作ったりしました。が、公開を目前にして「どう考えても元々のデータを直すべきで、万が一にも自分の API を使ってアプリを作るような人が出ても困る」と我に返り、踏み留まりました。ザッとではありますが、大体以下のような構造になっていると使う側としては嬉しいですよね。

{
    document: {
        version: "1.0",
        creationDate: "2012-05-10",
        description: "津波避難場所に関する情報を提供します。"
    },
    points: [
        {
            name: "三国中学校",
            address: {
                zipcode: "913-0043",
                prefecture: "福井県",
                city: "坂井市",
                town: "三国町錦1丁目7-3",
                building: null
            },
            tel: "0776-82-1177",
            coodinate: {
                crs: "JGD2000",
                latitude: "36.211798",
                longitude: "136.155623",
                altitude: "19.1"
            }
        }
    ]
}

まとめ

これが福井のオープンデータの現状です。せっかく活用しようと思っても「なんかこんなんじゃヤル気が...」と思われても仕方ない。それでもデータが公開されているというだけで (その 0 と 1 の違いは天と地との差なので) とても評価できますし、今後も継続的に公開していこうとしている姿勢は県民として非常に誇らしいです。なので、今後もモデルケースであり続けられるようにもう一歩進化しても良いと思っています。エンジニアフレンドリーなデータもそのひとつだと思ってます。

実は 2 年前も「市役所に改善を要求してこようと思う!」とか言っていました。でもまだ何も行動していません。なので、腰の重い自分に行動を促すように / 忘れないようにこれを書きました。大好きな地元に IT で貢献できるなら、そんなに光栄なことはない。市民と一緒に広げるオープンデータ。頑張ろう!