まだIT業界で消耗してるの? 😊ソフトウェア開発者のブログ

カテゴリー: オープンデータ

5374 徳島市版を作ってわかった地域アプリの厳しさ

2015年9月1日

今日から9月です。約3ヶ月このWebサイトを更新するのに時間がかかっていたのでブログの更新ができていませんでした。最初に 5374 徳島市版のアクセス状況を書いてみます。

8月分のページビュー数は、73PVでした。うち5374 の本来の使い方である Direct が約半数の36PVで1日で1PVという感じで、アクセスは本当に少ない状況です。

自分でも5374徳島市版は使っていません。「ごみの日」を知る必要があるのは後片付けの時なので、手がぬれている場合が多いのでスマートフォンは使う気がしません。台所にごみカレンダーを貼っておいた方が便利だと思います。

金沢の成功事例である5374の本家版の利用者は、月間で4000人だそうです(出典:TheWave の 「強い想いが仲間と流れをよびよせた/Code for Kanazawa(前編)【鈴木まなみ】」)。

ecitizen.jp 全体だと8月のユーザー数は31000人なので、5374の本家版よりも8倍も多くなっています。

それで、ecitizen.jp の方が 5374の本家版より優れているというつもりはありません、5374の本家版は金沢市が対象なので46万人が対象になりますが、ecitizen.jp だと全国の市町村の人口のグラフを作っているので日本全国が対象になるので、対象人口が大きく違います。

Code for Kanazawa のように地域で活動するのも一つの方法ですが、それでうまくいかない場合に、あきらめずにもう少しグローバルに考えるという方法もあると言いたかったのです。

自作のAPIをオープンデータで公開しました

2015年5月27日

Xingle 氏が、ブログ「オープンデータ先進県「福井」の残念なデータに思う」で、次のようなことを書いていました。

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

「万が一にも自分の API を使ってアプリを作るような人が出ても困る」ということですが、なぜ困るのか疑問に感じていました。そもそもアプリを作る人がいないのであれば、県や市町村としてオープンデータとして公開するのは無駄な作業になるし、まして手間をかけて「元々のデータを直す」ことは税金の無駄遣いだと思います。

最近公開された徳島県のオープンデータポータルサイト(Our Open Data)では、個人でもデータカタログに登録できるようになっています。そこで、APIを作ってデータカタログに登録して公開することにしてみました。公開しているAPIは、徳島県県土防災情報システムの道路気象、雨量、水位のデータを加工したもので、以下の2種類の API です。

徳島の気温、雨量、水位 GeoJSON

徳島の気温、風速、風向、雨量の10分データ

下の図がそのAPIを使って作成したサンプルです。

image

このAPIの作成に要した日数は6日間です。時系列データを作ったり時間雨量の計算をしたりする方に時間がかかっているので、APIの作成だけであれば3日でできると思います。今後、このAPIを使ったアプリを作ろうと思っているのですが、アプリの作成には10日以上かかると思います。それで今すぐに作るのは、かなり負担になるので将来 d3.js でグラフを描く機会に作成しようと思っています。

今回のAPIの作成の開発費がどうなるかというと、人件費を考慮すると日当5万円で30万円です。でも、自分でやっているので、自分の人件費を除いて計算すると電気代とパソコンの消耗費ぐらいでほぼゼロに近いと思います。

今後の運営経費に関して計算してみると、今回の公開には Amazon の S3 を使っています。単価は、1000回のGETのリクエスト使用料が$0.0037、ネットワークの下り側の使用料金が1GBで$0.14となっています。APIのファイルサイズで一番大きいのは雨量データで32KBです。1000PV当たりで計算すると、リクエスト使用料が$0.0037、ネットワークの使用量が32MBなので料金が$0.0045になります、合計で$0.0082で1ドルを120円とすれば約1円です。S3ではなく普通のサーバーを使っても同じようなものだと思います。公開以外に、データの処理コストが必要になります。今回のAPIの処理は10分毎の処理で処理時間は2.5秒なので、サーバーに少し負荷がかかるので無料ということはないですが月何百円の単位だと思います。こうして計算してみると運営経費は本当に僅かな額です。

次に収益の方ですが、現状では収益は見込めないです。もし、Webアプリを作った場合どうなるかというと、広告収入は可能だと思います。イケダハヤト氏がブログで収入を公開していますが、今年の4月分だと129万PVで、バナー、記事広告アフィリエイトで59万円なので、1000PV当たり457円ということになります。自分のWebサイトの場合は Google アドセンスしか貼っていないのでそれよりは低いですがそれでも半分以上の単価になっています。地域限定で日常的に使うアプリの場合、スポンサーは結構取りやすいと思うので457円の単価は難しくないと思います。

しかし、地域対象のアプリで問題なのはアクセス数を稼ぐのが非常に難しいということです。徳島県の場合人口が76万人しかいないので100万PVというのは夢のまた夢です。それに、アプリを作るのに10日とか書ましたが一人で作ってかつ業務の内容も分かっているからできる話であって、普通に開発会社が開発するのであればフロントエンドのエンジニア、サーバー側エンジニア、Webデザイナー等3~4人でチームを組んで、ヒアリング等も必要になってくると思います。そうなれば数百万円のコストが必要になってくるので、自治体から委託料をもらわずに自社開発するのは無理だと思います。

それだったらなぜ「オープンデータ」という話になるかというと、stackoverflowの調査だと、開発者の70%が週に2時間以上趣味やオープンソースの開発でプログラミングをしており、週10時間以上している人も20%います。そういう開発者の力を活用しようというのがオープンデータです。確かに、今回のAPIの作成はテストにも使っているので、自分としてもさほど負担には感じていないです。また、オープンデータはアプリのプロトタイプをテストするのには便利だと思っています。

海外ではソフトウェア開発者は比較的給料もよくて恵まれている職種なのでOSSの開発をする余裕がある人が多いと思います。日本では、そういう開発者の層は薄いので、オープンデータの活用が本当に進むかどうか不透明な部分がありますが、日本でもOSSの開発経験がエンジニアの採用時に実績として重視されたり、GitHub がポートフォリオになるような時代になっていくと思うので、将来的には海外と同じようになると思います。

また、日本ではXingle氏のように行政がきちんとしたデータを提供すべきだと考える人が多いと思います。確かに、XMLやRDF等で提供されていれば形式を勝手に変更されることがないだろうという安心感があります。一方Excelで作ったデータであれば、自治体の職員がすぐに様式を変更できるので、その対応を考えておかないといけないのが結構煩わしいと思います。

でも逆にいえば、XMLやRDFの場合、修正の必要が生じたときに自治体としてすぐに対応できるのかということがあります。また、経費や手間をかけてXMLやRDFで提供している場合、利用者が少ない場合でも提供を継続してくれるのかという不安もあります。現実に日本のオープンデータで最も規模の大きいものの一つである「政府統計のAPI機能」で、総務省以外の省庁の統計データは更新がほとんどされていません。恐らく各省庁は別のシステムで統計を作っていて、政府統計のシステムにデータを手入力するのはあまりにも手間がかかるし、一方でシステム化をするにはコストが必要ですがそのコストの説明ができないため、従来通りExcel形式での公開ということになっているのではないかと思います。

そういうことを考えれば、自治体ではできるだけ手間をかけずに内部で使っているデータをそのまま公開した方がいいと思います。そして、エンジニアの方が便利なAPIを作ったら、「万が一にも」とか言わずにどんどん公開したらいいと思います。公開するための経費はほとんど必要ないし、オープンデータを使ってアプリを作るということは自己責任で作るということなので、APIの提供者は運用についてあまり気にする必要はないと思います。それに、個人が開発したAPIを使うことに対するアプリ開発者側の不安は、APIの作成ルーチンをOSSで公開することではかなり緩和されると思います。そういうことで今回のAPIを作成するプログラムは、GitHubで公開しています。長くなったのでAPIの作成の話は次回にします。

5374 徳島市版を作成してみました

2015年5月17日

Windows 10 Insider Preview と Visual Studio 2015 RC のテストを兼ねて、Code for Kanazawa が作った「いつ、どのゴミが収集されているのか」をわかるWebアプリ 5374.jp の徳島市版を作ってみました。

Windows 10 も VS 2015 も自分の使った限りでは、エラーが発生することなく使えています。今年の夏に発売予定ですが、準備の方は順調に進んでいるようです。VS 2015 で、ASP.NET 5 については、あまり使っていませんが、ASP.NET 4.6 では製品版といってもいい状況で、実際の運用環境で使ってもいいという "Go-Live" ライセンスになっているというのもうなづけます。

5374.jp については、徳島市の場合は隔週及び4週毎のごみの収集があるのに、それに対応していないため、カスタマイズをしてみました。詳しくは、GitHub の方に記載しています。

徳島市版を作成した理由の一つには、JavaScript をどこまで使うのがいいのかということに対するテストという意味合いもあります。結局は、JavaScriptにどれぐらい慣れているのかということが一番大きな要素になると思いますが、自分の場合はロジックについてはC#で書いた方が楽です。JavaScript は一般的には手軽なのですが、Date を使うのは結構ややこしいです。自分の場合は、メンテナンスまで考えると今までどおり JavaScript は、UI 部分だけで使った方がいいと思いました。

5374.jp の場合、収集日を通知してくれる機能が欲しいと思うので、Cordova で作るのがいいのか、Xamarin で作るのがいいのか試してみたいと思っています。1月にアプリを作りかけたときは、表示の項目数が多かったので、Xamarin.Forms ではレイアウトの処理に時間が掛かりすぎました。5374.jp の場合は、それと比較するとかなり簡素なので Xamarin.Forms でも余り問題がないと思うので、比較するのには丁度いいと思っています。

オープンデータ先進国イギリスの主要都市のオープンデータの状況を調べてみた

2015年2月16日

最近、地方自治体でもオープンデータの利活用に力を入れるところが増加してきたようです。じんぐる氏がブログに「オープンデータ先進県「福井」の残念なデータに思う」という記事を書いていたので、オープンデータの公開をどうしたらいいのかを少し調べてみました。

まず、オープンデータの先進国であるイギリスの主要都市のオープンデータの状況をしらべてみました。都市については、ロンドンとそれに続く「Second city of the United Kingdom」の8都市をまず選択しました。残り3都市は人口の多いところを選びました。

調べてみると、カーディフ以外の11都市は、オープンデータのホームページを持っていました。公開しているデータとして「500ポンド以上の支出」が目につきましたが、「Local Government Transparency Code 2014」で、地方自治体が公開すべきデータになっているのが影響しているのかもしれません。

都市名リンク 専用サイト 主な公開形式
ロンドン(London) リンク CMS xls, csv, pdf, html
ベルファスト(Belfast) リンク   xml, rss
バーミンガム(Birmingham) リンク   csv, xlsx
カーディフ(Cardiff) -    
エディンバラ(Edinburgh) リンク GitHub csv
グラスゴー(Glasgow) リンク CKAN csv, xlsx, geojson
リーズ(Leeds) リンク   xls, csv
リバプール(Liverpool) リンク   xlsx
マンチェスター(Manchester) リンク CMS csv
ブリストル(Bristol) リンク   csv, pdf, html
シェフィールド(Sheffield) リンク   準備中
ブラッドフォード(Bradford) リンク   準備中

xml を中心にして公開しているのは、ベルファストだけです。ベルファストはデータセットが6つ公開し、その内の4つがXmlです。xml はメタデータを作るのが大変なので、地方自治体では多くのデータセットを公開するのは難しいようです。また、csv で公開するのがいいのか、xls, xlsx で公開するのがいいのかというのは、イギリスでも微妙な問題のようで、都市によって分かれています。

公開方法については、都市のWebページの中で公開しているところが多いですが、専用のサイトを作っている所もあるという状況です。また、data.gov.uk で地方自治体もオープンデータを公開できるようになっていて、ブリストルはそれを利用しています。こう見てくると、イギリスにおいてもオープンデータについては課題が多いように思います。

じんぐる氏が残念だといっている坂井市のケースでは、珍しくxlmでデータを公開していると思ったら、既に「坂井市WebMap」というものがあってそのデータを使っているためのようです。坂井市WebMapは、坂井市のさまざまな位置情報を電子地図にて提供するWEBシステムだそうで、そのデータは KMLです。例えば、津波避難場所情報については、以下のようになっています。

http://www.city.fukui-sakai.lg.jp/map/data/hazard/hinan_tsunami.kml

自分の疑問は、なぜKMLで公開しないの?どうしてわざわざXMLにするの?ということです。KMLの方だと KML のスキーマがあるのでデータの構造は理解しやすいです。また、KMLということであれば、<description>タグの中を構造的なタグにしない理由もわかります。それに、順次公開予定となっているデータもすぐに公開できます。

地方自治体がオープンデータを公開する場合は、最初はできるだけ既存のデータを使った方がいいと思います。市町村にはITエンジニアは殆どいないのでエンジニアフレンドリーなデータを最初から公開できるということは期待しない方がいいでしょう。また、改善を要求する時には、コストのことは考えた方がいいでしょう。xml をきれいな形で公開しようと思えば、「利用者側にこんな不毛な苦労が必要なのか」という下のようなコードを、市町村側で作成しメンテナンスしていく必要がある場合が多いと思います。それでは、市町村側もこんな苦労するんだったらデータなんか公開しない方がいいと思うのではないかと思います。坂井市のこのデータであれば、空間データなので今は既存の KMLで公開しておいて、将来的には協力して 坂井市WebMap と共通で GeoJSON に持って行くのがいいように思います。

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

オープンデータは、オープンソースと同じで協力して育てていくことが重要だと思います。それに、坂井市のレベルは、決して絶句するレベルではないと思います。

C#で経済指標巡回プログラムを作成しました

2014年12月30日

Rubyで経済指標自動巡回プログラム作成しました。 - 人生、徒然なるままに。」というブログをみて、このブログの筆者は、.Net や Java を使えるのに、なぜ、新たに勉強してまで Ruby を使ったのかということに興味があったので、同じようなものを C# で作り、GitHubで公開(https://github.com/awoni/GetMarketCalendar)してみました。

今回のプログラムでは、データの取得には HTTPClient を使って直接 Url をたたいて該当ページのHTMLを取得しています。一方で、Ruby の方では、「フレームワークとしてCapybara、レンダリングドライバー・javascriptドライバーとして poltergeist, PhantomJS」を選択しているそうで、プログラムでボタンをクリックして取得したデータをもとに解析しています。今回のデータの場合は、HTML のみで必要なデータが取得できましたが、JavaScriptを使ったインターラクティブな Webページが増加しているので、Javascriptが動作する環境でブラウジングしてデータを取得する必要がある場合も多くなってくると思います。

Html のパースには、Html Agility Pack を使っています。LINQ を使って記述していますが、意外と簡単にパースすることができます。

データの保存については、データベースではなくて、そのままで API として使いやすい Json で保存するようにしてみました。 Newtonsoft の Json.NET でシリアライズしています。設定ファイルについても、Json にしてみました。

その他に NuGetのパッケージとしては、NLog を使っています。Html のパースルーティンでは、どの程度までエラー処理をすべきかが問題になりますが、画面の変更に対応しようと思うとプログラムがどんどん複雑になってくるので、自分としては、プログラムは余り複雑にせずに、画面の変更によるエラーに早く気づくようにした方がいいのではないかと思っています。NLog をログのメール送信にも対応しているので、こういう点に関しては便利だと思います。ただ、今回公開しているプログラムでは、時間の関係でとりあえずの状況なのですが、実際にアプリケーションを作る場合は、ログをどうとるかは結構重要だと思っています。

C#で実際に同じようなプログラムを書いてみて、実務的にいえば C# は十分優秀だと思います。LINQ や 今回は使っていませんが await async による非同期処理は便利です。ではどこが Ruby より劣るのかということを考えてみると、ブログの筆者のいう「rubyは面白いらしい」ということに尽きるのではないかと思います。それに、日本では情報量の差も大きいと思っています。

C#がどうすれば面白くなるかはよくわかりませんが、ブログの作者が巡回プログラムを作る動機になった「Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例」という本は、amazon.co.jp の「ソフトウェア・開発言語」で7位にランクされています。クローラーは意外と興味がある人が多いようなので、自分もクローラーであれば結構ネタはあるので、時々ブログに書いてみようと思っています。