本日は先日滋賀県で開催された「 International Open Data Day 2015 in Shiga / Biwako 」のワークショップイベントのプチレポートをお届けしたいと思います。

イベント概要

私たちが今回参加した International Open Data Day 2015 in Shiga / Biwako というイベントについてまずはかんたんにご説明させていただきます。

International Open Data Day とは、オープンデータ活用に関連したイベントを世界中で同時的に行おうという比較的新たな取り組みです。 公式サイトも存在し、そこには次のような説明がなされています。

> オープンデータデイは、オープンな公開データを使ってアプリケーションを書いたり、データを開放したり、視覚化したり、分析結果を公開するために世界中の市民が集まって、世界の地方、地域、そして中央政府によるオープンデータに関する政策の導入を支援、奨励します。

その一環で今回 Code for Shiga / Biwako という団体さんが滋賀県でイベントを開催されました。 そのイベントが私たちが今回参加した International Open Data Day 2015 in Shiga / Biwako です。

International Open Data Day 2015 in Shiga / Biwako 02

滋賀県で開かれる数少ない Web 関連のイベント、中でも開発方面のイベントということで、こぞって参加してきました。

ちなみに Code for Shiga / Biwako というのは昨年 2014 年に発足された滋賀県を拠点にワークショップを運営されている団体さんです。 公式サイトでは次のような説明がなされています。

> 「Code for Shiga / Biwako」は、プロボノ(職業的なスキル・経験を活かしたボランティア)による有志の集まり(任意団体)です。商工・観光・まちづくり・教育・防災など地域のあらゆる課題を、県内クリエイターが持つ技術・アイデアを地域で共有しあうことによって、創発的な地域貢献を目指す、官民を問わないワークショップコミュニティを運営しています。

私たちは今回このイベントを通じてはじめてその存在を知りましたが、過去にもさまざまなワークショップを開かれており、滋賀ラブな私たちとしては今後注目していきたい団体さんです。

今回のイベント概要はこのような形でした。

  • 日時: 2015年2月21日(土)11:00 - 17:00
  • 場所: びわ湖ホール リハーサル室
  • 内容: 滋賀で 2015 年に予定されている 2 つのイベントのデータを使った開発ワークショップ

内容

まずは最初に Code for Shiga / Biwako の筈井さんからイントロとしての概要の説明がなされた後、 3 つのグループに分かれてワークショップを行いました。

  • 初心者向けプログラム:Idea Hack
  • 中級者向けプログラム:Beginner’s Dev Camp
  • 上級者向けプログラム:Creative Hack

今回私たちは Creative Hack の方に参加させていただきましたが、他のワークショップでも盛んに話し合いや開発が行われていたようで、盛り上がっていた様子でした。 特に Beginner's Dev Camp はものすごいスピードで進められていたようで、最初は HTML やエディタの説明というところから始まって、最終的には動くものを作り上げるところまで行っていたようです。 その時間の中ですべてを身につけることは難しそうですが、ホームページやアプリを立ち上げるまでの全体像が俯瞰できるという意味で参加された方にはとても刺激的なセッションだったのではないかと思います。

人数は、合計で 50 名超の方が参加されていたでしょうか。 私は「滋賀 x コード」のイメージでてっきり「当日は多くて 20 名くらいかなぁ・・・」と事前に想像していたのですが、予想以上に参加者が多く、参加者それぞれに取り組める課題が用意されており、イベントとしてとてもいい感じに組まれたものだなぁという印象を持ちました。

ワークショップの時間が終わったら、最後に各グループの成果物についての発表の時間があって終了、という形でした。

今回のオープンデータ

今回提供されたオープンデータは次の 2 つのイベントに関するデータです。

今回はこれらのデータを使ったアプリ、サイトの開発にチャレンジしました。

データを公開する意義としてはマーケティング・広報的な意味合いもあるかと思いますので、ここでも少しご紹介できればと思います。 滋賀県に来るのはびわ湖花火大会とイナズマロックフェスぐらい

ラ・フォル・ジュルネびわ湖 はびわ湖ホールで毎年 4~5 月に開催されている音楽祭で、今年は 5 月 2 日と 3 日の 2 日間開催されるそうです。 私は音楽に疎いこともあり恥ずかしながらその存在を知らなかったのですが、年々参加する方が増えていてたいへん盛り上がるイベントだとのこと。 私も今年タイミングが合えばぜひ行ってみたいと思います。

守山ほたるパーク&ウォーク は大津のそば、守山市で梅雨のはじめ、 5~6 月頃に毎年開催されているイベントです。 とてもローカルなお話になりますが、私は守山市内の運動公園近くだけがほたるスポットだと思っていたのですが、その他にも市内にたくさんのほたるスポットがあるとのことです。 また、「スポットごとにほたるがたくさん翔ぶ日が異なる」ということや、「鑑賞マナーが向上していかないと今後の開催が難しくなってくる」というような状況についても私は知らず、今回参加してはじめて知ることができました。

いずれも公式サイトにより充実した情報が載っていますので、興味のある方はよろしければご覧になってみてください。

ラ・フォル・ジュルネびわ湖 2015

ラ・フォル・ジュルネびわ湖 2015

守山ほたるパーク&ウォーク

守山ほたるパーク&ウォーク

今回の成果物

今回私は時間的な制約もあって、「ラ・フォル・ジュルネびわ湖 2015 」の方のデータに取り組みました。 使ったのは Drupal です。 イベントデータを Drupal のノードとして取り込むと Drupal の強力な機能を使っていろいろな展開が可能となるので、まずはイベントデータのインポートから。 ひととおりノードとして取り込むところまでが完了したところでタイムアップとなりました。

今回のコードを以下にはりつけておきます。 Drupal のモジュールとして作りました。 モジュール名は lfjb (ラ・フォル・ジュルネびわ湖の頭文字)です。

lfjb.info:

name = ラ・フォル・ジュルネ琵琶湖
core = 7.x

dependencies[] = date
dependencies[] = entity

lfjb.module:

<?php /**
 * 定数
 */
// ラ・フォール・ジュルネびわ湖のデータ URL JSON 形式
define('LFJB_URL_JSON', 'http://lfjb.biwako-hall.or.jp/events-jsonld/');


/**
 * すべてのイベントをロードして Drupal に取り込む
 */
function lfjb_node_load_all_events() {
  $response = file_get_contents(LFJB_URL_JSON);
  $events_json = json_decode($response);
  _lfjb_node_save_multiple($events_json);
}


/**
 * 複数のイベント情報をまとめて Drupal に保存する
 */
function _lfjb_node_save_multiple($events_json) {
  foreach ($events_json as $event_json) {
    _lfjb_node_save($event_json);
  }
}


/**
 * 単一のイベント情報を Drupal に保存する
 */
function _lfjb_node_save($event_json) {
  // イベントノード初期化
  $wrapper = _lfjb_initialize_event_node();

  // フィールド情報を入力
  $wrapper-?>title = $event_json-&gt;{'schema:name'};
  $wrapper-&gt;field_status = $event_json-&gt;{'event:status'};
  $wrapper-&gt;field_starttime = _lfjb_format_datetime($event_json-&gt;{'schema:startDate'}, 'timestamp');
  $wrapper-&gt;field_endtime = _lfjb_format_datetime($event_json-&gt;{'schema:endDate'}, 'timestamp');

  $wrapper-&gt;save();
}


/**
 * イベントノードを初期化して entity metadata wrapper で返す
 */
function _lfjb_initialize_event_node() {
  $values = array(
    'type' =&gt; 'event',
    'uid' =&gt; 1,
    'status' =&gt; NODE_PUBLISHED,
    'comment' =&gt; COMMENT_NODE_CLOSED,
    'promote' =&gt; NODE_NOT_PROMOTED,
  );
  $entity = entity_create('node', $values);
  $wrapper = entity_metadata_wrapper('node', $entity);

  return $wrapper;
}


/**
 * 文字列型の日時情報を Drupal に取り込みやすい形に変換する
 */
function _lfjb_format_datetime($datetime_str, $format = 'datetime') {
  // 途中全角の : が出てくるので半角 : に置換する
  $datetime = strtotime(str_replace(':', ':', $datetime_str));
  $datetime_formatted = date('Y-m-d H:i:s', $datetime);

  // $format = 'timestamp'|'datetime'
  return ($format === 'timestamp') ? $datetime : $datetime_formatted;
}

以下、ちょこっとテクニカルなお話になるので、 Drupal 技術者の方だけお読みいただければと思います。

今回のコードが動作するための条件は以下のとおりです。

  • Drupal のバージョン: Drupal 7
  • 次のモジュールが有効化されている: date entity
  • 次のフィールドを持った event というノードタイプが用意されている: status(string) starttime(date) endtime(date)

バッチで取り込むには以下のコマンドを使用します。 本来であれば drush コマンドを用意したいところですが、ひとまずこの形で。

$ drush eval "lfjb_node_load_all_events()"

あとは Views やいろんなものでがちゃがちゃやればいい感じになりそうですが、今回できたのはひとまずノードとして取り込むところまでです。 またある程度いいところまで完成したらどこかで公開してみたいと思います。

レポートは以上です。 いかがだったでしょうか?

今回は International Open Data Day 2015 in Shiga / Biwako というワークショップイベントのプチレポートをお送りしてみました。

今回は主催された Code for Shiga / Biwako さん、会場をご提供くださったびわ湖ホールさんのおかげで、刺激のある充実した時間を過ごすことができました。 ふだんホームページ制作会社で働いていても滋賀県内の他の制作会社の方にお会いする機会はあまり多くはないので、他の制作会社の方に会ってお話ができただけでも収穫のあるよい機会だったかなと思います。

今後も引き続き、今回のようなイベントがあればまたぜひ参加していきたいと思います。 私たち自身も少しずつ、滋賀を盛り上げられるようなイベントを開催していきたいです。

びわ湖ホール沿いのびわ湖の風景


共に働く新しい仲間を
募集しています

スタジオ・ウミは「Drupal」に特化したサービスを提供する Drupal のエキスパートチーム。
フルリモート&フレックス制だから、働く場所を選ばず時間の使い方も自由です。
そんなワークライフバランスの整った環境で、当ブログに書かれているような
様々な技術を共に学びながら、Drupalサイト開発に携わってみたい方を募集しています。
まずはお話だけでも大歓迎!ぜひお気軽にご連絡ください。