個人開発のWebサービスでオープンデータを使ってみた

私が運営している、「観光地の魅力をクイズでみつける、発信するWebサービスKorette（コレッテ）」は国や自治体が公開している「オープンデータ（データーと伸ばさず、データと記載するのが主流？）」を利用しています。

2018年3月に、東京都オープンデータアプリコンテストに応募したところ、準優勝することができました。
※コンテストの発表会・表彰式の模様はこちら。
http://opendata-portal.metro.tokyo.jp/www/contents/1522039625760/index.html

コンテストの中で、審査員の方から「オープンデータで公開してほしいもの、期待すること」などについて質問がありました。その時はその場で思いついたものをお話したのですが、改めて整理してみようと思いました。

そこで今回、Koretteという観光系のWebサービスで実際にオープンデータを利用してみて、その利点や問題点、そしてデータ提供者に期待することをまとめました。

プログラミング歴が1年未満での内容なので、技術力のある方であれば簡単に解決できてしまう内容も含まれるかもしれませんが、オープンデータの利用者視点での情報はあまり出ていないようなので、興味のある方や、これから使ってみようと思っている方の少しでも参考になれば幸いです。


#１．Korette（コレッテ）って？
観光地の魅力をクイズでみつける、発信するWebサービスです。
独学でプログラミングを学びながら開発を進め、2017年12月にリリースしました。

https://korette.jp/
![topup.jpg](https://qiita-image-store.s3.amazonaws.com/0/189348/83d58d7b-f911-7f43-718f-ae71b81c60d8.jpeg)
(2019.7ドメイン変更につき修正）


Koretteは、クイズを用いることにより、観光地の魅力を歴史や音楽、人物などといった魅力に細分化し、さらにそれを訴求力の高い形で観光地に興味を持つ人に伝えるのが特徴です。

また、クイズの作成・投稿を地域に住む人や縁のある人が行うことにより、地域密着の情報が可視化されるという特徴や、地域に住む人が魅力を再発見できるという特徴も備えています。

※もう少し詳しいサービス開発の背景やリリースするまでの話などは、こちらにまとめています。
「中年の危機」ど真ん中のオッサンがWEBサービス作ってみた。
https://qiita.com/hiroz31/items/d7f2f9b7d02f9be1ca92

このサービスで、クイズに紐づく観光スポットの情報にオープンデータを利用しています。
現在、内閣府のRESASや総務省の公共クラウドシステム、東京都など自治体のオープンデータなど、約9,000件のデータを取り込んで利用しています。

(1)観光地を題材にしたクイズを起点に観光スポットの情報に誘導
![quizup.jpg](https://qiita-image-store.s3.amazonaws.com/0/189348/ba75a1b8-f908-a5bc-8596-cefbd33f4fe3.jpeg)

(2)観光スポットの情報（＋他のクイズで見所をみつける）を閲覧して観光地へ誘導

![spotup.jpg](https://qiita-image-store.s3.amazonaws.com/0/189348/2ba06b67-c225-dbf2-0399-f7703e0cb114.jpeg)



#２．オープンデータを利用して良かった点
Koretteで実際にオープンデータを利用してみて、その効果は大きかった、有用であったと感じます。
効果が大きかった、有用であった事としてあげられるものは、３つあります。

##(1)少ないリソースでも大量のデータを用意できる
Koretteは、リリースとほぼ時を同じくして、全国約9,000件の観光スポットの情報を備えるサービスとしてリリースできました。

個人開発や少人数での開発など、開発リソースが限られる状況でも大量の登録データが存在する状態からサービスをリリースすることができます。

もし、Koretteで9000件の観光スポットデータを自分で調べながら登録するとしたときの労力は計り知れません。
これがデータとして自由に利用できるというのは、非常に大きいです。

##(2）データの商用利用・二次利用ができる
インターネットに公開されているデータは非商用利用に限定されている、データを加工して利用する（いわゆる二次利用）ことが禁止されていることが多くみられます。

なので、公開されているデータがあっても、サービスでの利用が難しい状況でした。

これに対しオープンデータは、出典の表示など一定のルールを守ることで、商用利用や二次利用が可能なので、非常に利用しやすいデータになっています。

##(3)コンテストなども行われPR効果が高い
オープンデータはここ数年、国や公共団体が積極的に推進していて、オープンデータを活用したアプリのコンテストなども積極的に行われています。

そこに応募して入賞できれば、サービスの実績作りやPRがしやすくなります。

サービス規模が小さい場合や、運営者が実績ある法人ではないサービスの場合、サービスのPRや企画提案などを持ち掛けても、そもそも話も聞いてもらえないケースが多々あります（というか殆どです）。

これが、東京都のような自治体のコンテストで入賞したとなると、メディアに興味を持ってもらいやすくなったり、PRした際に話を聞いてもらえる確率がぐっと上がります。
これは、特に相手先がメディアだったり大きな企業であるほど実感できます。

サービスのプロモーション（とそのための土台）として、素晴らしい価値を得ることができます。

#３．問題点・期待すること
Koretteで実際にオープンデータを利用してみて、総体としては良かった、有用だと思っていますが、使う中でイマイチだった点、今後に期待する点が5つほどありました。
（良かった点より数が多いですが、内容が細かいことによるもので、だから使えないという意味ではありません。念のため）

##(1)データの公開が足りない
データの公開がまだ足りないと感じます。特に小規模な市町村のデータが少ない印象です。

公開されていても、Koretteが必要とする観光スポットのデータ、特に位置情報の入ったデータや画像データはまだまだ少ないと感じます。

###期待すること
観光スポットのデータについては、特に画像がユーザーを引き付ける力を持ちますので、画像データの公開をお願いしたいです。

それから、スポットを公開する際は位置情報のデータの充実するようお願いしたいです。

##(2)データの公開状況の全体像が見えない
データ公開のもう１つの問題として、自治体ごとにデータがあるかないかの全容を知るのが大変ということがあります。

Koretteは全国の観光スポットのデータを必要とするので、データを利用するために、まずは市町村ごとにオープンデータのページを探して、そこで公開されているデータの一覧をみつけるところから始めます。

そこから観光のデータがあるか探し、あればデータを開いて、位置情報など必要なデータがありそうかを調べます。そこになければ、県が市町村のデータをまとめて公開している場合があるので、県のページを探して・・・という感じで探していきます。

また、公開されているデータを開いてみると、国・都道府県・市町村で同じ（似たような）データが存在していたりします。その場合は、実際にデータをみて同一のものか、違うものかを見極める作業が必要です。これに結構な手間がかかります。

これらを、約1,700の市町村と47都道府県について作業するとなると、手間が馬鹿になりません。

現在、国のオープンデータを利用して観光スポットを広く浅く登録したうえで、徐々に市町村のデータを追加している状況です。



###期待すること
データの種類ごとに、国や都道府県・市町村データそれぞれの提供状況一覧が確認でき、同じデータの場合はそれがわかる情報がわかるサイトがあると、手間が軽減されると思います。

##(3)データの各項目の仕様がバラバラ
公開している自治体ごとにデータの仕様が微妙に違っていることが大変に感じました。

データの項目数が自治体ごとに違うのは、取り込むときに取捨選択すれば良いとしても、同じ項目なのに入っているデータ仕様が微妙に違っています。

例えば、同じ「住所」という項目なのに、ある自治体のデータは都道府県・市町村名から始まる住所が入っているが、ある自治体のデータは条丁目から始まるといった形になっています。観光スポットの説明という項目も、ある自治体は住所・電話番号・オープン時間などを詰め込んだ項目になっているが、ある自治体はそれぞれ別の項目として存在していることがあります。

最終的にはこれを、Koretteの中で一つのデータベースとしてデータ仕様をそろえて取り込む必要があるので、データの状況によっては人間が目で判断して加工する必要があり、手間がかかります。

###期待すること
データの仕様やサンプルの情報が足りないので、各項目にどういうデータが入っているか、項目名が同じでもそこに入るデータの仕様が同じかは実際のデータを見てみないと分かりません。

データの項目定義が標準化されれば良いですが、既存データの公開という視点からみると、それを要望するのは難しいと思うので、せめてどういうデータが入っているのかもう少し詳しく知ることができると良いなと思います。

##(4)データを結合して利用するのが大変
データを見てみると、どのデータも微妙に備えているデータ項目が違って「帯に短したすきに長し」の状況でした。

例えばKoretteで必要な観光スポットの位置情報のデータは、RESASのデータが一番備えていましたが、それ以外の項目（スポットの情報など）が不足していました。

一方、公共クラウドシステムのデータや自治体の観光スポットのオープンデータはスポットの説明や画像の情報が充実しているが、位置情報が不足しているという状況です。

また、自治体のデータは説明や画像の情報が充実しているが、位置情報が無いものが多い状況でした。

そこで、これらのデータを名寄せしてデータを作成すると必要なデータが揃うのですが、キーとなるIDのようなものが無いので、日本語のスポット名称で名寄せする方法を採用することになります。

ただ、この日本語名の表記も微妙に違うことがあり、機械的にうまく名寄せができず、登録できなかったり、重複するスポットのデータが登録されてしまうケースも発生しました。

###期待すること
取得仕様や項目仕様の標準化、データを名寄せするIDのようなものが全国統一で付与されていて、それがデータに含まれると良いなと思います。

そうすれば、公開されたデータをAPIを介した巨大なリレーショナルデータベースとして使えるので使い勝手が非常に向上すると思います。

##(5)API形式（特に都度取得する形態）のメリットが乏しい
オープンデータは、データをCSVなどで一括で提供するケースと、APIを使ってJSONやXML形式でオンデマンドで取得するケースの２つのパターンがあります。

CSV取得するケースはEXCELでデータを見ながら人間が判断して加工しやすい（不要項目の削除や、CSV同士の項目合わせ、名寄せなど）というメリットがあります。

一方、１つのスポットにN個の情報があるなどデータが階層になっている場合、それらはすべてフラットなデータとなるため、データだけ見てもデータ構造が分かりにく、取り込みに難儀することがありました。

APIでの取得は基本的にはCSVの反対のメリットデメリットになりますが、加えて言うと、APIはオンデマンドでのデータ取得が採用できるので、その場合は提供元で随時データが更新されるような場合に対応でき、データの鮮度を保つことができるメリットがあります。

一方、API仕様がそれぞれ違うので、仕様を調査してそれぞれに対応したデータ取得ロジックを記載することになります。

※最近公開されたオープンデータカタログサイトの多くは何種類かのオープンソースのソフトウェアを利用して提供されているようですが、国のサイトなど古いもの(?)は仕様が違っているケースがあり、その都度仕様を確認しながら対応しています。

あと、これはオープンデータだからということに限らないとは思いますが、レスポンスデータの項目が結構多いので、データをデシリアライズ（パース）するモデルクラスを作るのが大変でした。

KoretteはAspNetCore(MVC)を利用していますので、モデルクラスを記述してライブラリを呼び出すことによりJsonをデシリアライズしてオブジェクトに放り込むという処理を書くことになります。

その時、受け取るデータ項目が多く、かつ掲載されているデータ仕様がPDFなどでコピペが難しいと、モデルクラスに記載するデータ項目を大量の項目名を手打ちで作成するということになります。

これはやってると発狂しそうになります。

※これは後にブラウザでAPIをたたいて、そこで帰ってくるJSONデータをコピーして、VusualStudio「形式を選択して貼り付け→Jsonをクラスとして貼り付ける」の機能を使い、データからモデルクラスを自動生成するという方法で大分楽になりました。ただ、これもAPIから帰ってくるデータが全ての項目が含まれるデータをみつけなければ完全ではありません。

現状は公開したままの自治体が多く、更新予定を明らかにしている自治体もなさそうなので、データが更新されない状況でAPIを使うメリットが乏しいなと感じました。

そういったこともあり、データが頻繁に更新されるといった都度取得のメリットがないとCSVの方が早くて楽だなぁと感じています。


###期待すること
・データ仕様、API仕様の標準化や充実
　データ項目の仕様が異なる問題は解決しませんが、どのサイトにアクセスしても同じAPI仕様であれば取得ロジック書く面では楽になります。

　同じプラットフォームソフトウェア使ってくれると仕様が揃うので楽で良いですし、もっと理想を言えば、１つプラットフォームに入ってるとエンドポイントも1か所で済むと思うのですが、それは難しいのですかね。

・モデルクラスやサンプルコード
　各言語でのデータモデルのクラスやAPI取得のサンプルコードがあると使いやすくなります。
　モデルクラスについては、標準的なJSONのサンプルデータがあればそこから自動で作成したりもできるので、それだけでもいいと思います。

・データ更新のロードマップを示してほしい
　更新されたデータの更新予定はあるのか。更新するとすればいつ、どの程度の頻度を予定しているのか。
　それらの情報があれば、手間がかかってもAPIで取得するようにする選択肢も出てくると思います。

#４．おわりに

最初、オープンデータ（の利用）は、データ分析の専門家が利用する・役に立つものという印象がありました。
ですが、今回やってみて、身近なサービスでも使うことができるものだと感じました。

また同時に、オープンデータをサービスのコアの部分に使うだけでなく、Koretteクイズがメインでそこに紐づくスポット情報という利用のしかたのように間接的な利用、サービスの構築を加速させる利用の仕方も可能だと思いました。

なので、今後はもっと多様な活用場面が生まれてくるのではと思います。

ITは、低コストで大規模なサービスを提供できるという特徴から、これまで公共でしか担えなかった課題対応がビジネスとして運用できる時代の幕を開くものだと思っています。
そして、オープンデータはこの時代をさらに加速させるもので、これまで収益規模の面から大企業が参入しにくかった部分に中小企業やNPO、個人という単位が社会課題の担い手として持続できる形で参画しやすくなっていくのだと考えています。

なので、国や自治体など、オープンデータを推進される立場の方は、個人や小規模団体の活動にも目を向け、作られたサービスのPRや後押し、そのための機会の提供などの支援をしていただけたらと思います。

また、利用する側が使ってみての感想や意見をもっと提供側に言える、提供側とコミュニケーションが取れる機会がもっとあってもよいのかなと思いました。

私もKoretteというサービスの運営を通して、個人レベルでのオープンデータの活用の事例として、微力ですがこれからも貢献していけたらと思っています。