読売新聞社様主催のジャイアンツハッカソン、4月27日に決勝に残ったチームによる最終審査が行われました:
http://www.giants.jp/G/gnews/news_3910572.html

2016042801



ITを通じてファンと球団との距離を縮め、試合観戦などをより楽しむことができるようなアイデアを広く募集し、アイデアを詰め、短期間で開発し、その出来栄えや実用性、ビジネス性を競い合う、というコンテストでした。数多くの独創的なアイデアや製品が生まれましたが、その中でもコミュニケーションツールを活用して選手をより身近に感じてもらうサービスを発表した "TEAM PAAK" チームが最優秀賞に輝きました。TEAM PAAK の皆様、おめでとうございます。また同ハッカソンに参加された多くの皆様、データ提供や審査などに参加頂いた協賛企業の皆様、大変お疲れ様でした。

同ハッカソンではアイデアを実現するためのお手伝いとして、データスタジアム様や読売巨人軍様から各種データ(試合/打席/投球/選手のデータや画像、球団グッズの売上記録など)を提供いただき、ハッカソン内で利用させていただきました。日本アイ・ビー・エムはサムライインキュベート様と共同で同データをアプリケーションから利用できるよう、各種データを API 化し、クラウドサービス(SoftLayer & Bluemix)と合わせて参加チームに提供しました。この「各種データの API 化」という部分のお手伝いをしたこともあり、この部分を少し掘り下げて紹介させていただきます。

簡単にいうと、データを提供する側の都合と、データを活用したい側の都合をあわせるための場を提供させていただきました。試合の記録データは本来有料で企業に提供されているもので、このハッカソンでの利用に限り、参加チームへは無料で提供いただきました。画像データや売上記録については、これら自体は売りものではありませんが、権利関係などで本来は公開されていないものを含めて提供いただきました。データを使う側からすると、これらのデータを丸ごと(例えばファイルごと)入手できると嬉しいかもしれませんが、上記のような事情からそういった形での提供は望まれていないものでした。 ではどのようにこれらのデータを提供するか、というのが我々の課題でした。

その答が API 化して、参加チーム毎の利用状況を管理しながら提供するという方法でした。この点についてもう少し詳しく説明します。

まずは「API 化」です。API とは Application Platform Interface の略で、ここでは「ウェブを通じて実行できる関数」という意味で使っています。少しわかりやすく説明すると、例えば「○○年□月△日、巨人戦の1回表。最初の打者の第×球目の結果は?」のような条件を与えて問い合わせをすると、「ピッチャーは●●、打者は■■、0対0、ノーアウトランナーなし、カウント 0-1、外角のスライダーで空振りストライク」のような結果が返ってくる仕組みを REST API と呼ばれる手法で用意しました。

これらのデータそのものはデータスタジアム様や読売巨人軍様から提供いただいているものです。1球毎、1打席ごと、1試合ごとなど、粒度の異なるデータを1年ちょっと全試合分提供いただきましたが、そのデータファイルそのものが流出するリスクは回避したい(つまりデータファイルは参加者に渡したくない)という事情がありました。そのため、上記のような問い合わせ条件にあうデータを取得できるような仕組みをウェブ API として(IBM Cloud を通じて)提供させていただきました。


ではそのようなウェブ API の仕組みをどのようにして短期間で(2日程度で)用意したのか? この答は実は以外とシンプルで、以下の3つの仕組みを組み合わせただけでした:
(0) 提供いただいたデータを全てリレーショナルデータベースに格納
(1) StrongLoop LoopBack を使ってデータベースを丸ごと API 化し、ウェブを通じて読み書き更新削除検索といった REST API を自動生成
(2) API Management サービスを使って (1) で作った API のうち、検索(問い合わせ)の API だけをハッカソン参加者に公開


2016042801


まず準備段階 (0) として、提供いただいたデータはいわゆる「ファイル(オフィスファイル、画像ファイル、テキストファイル混在)」でした。このままでは利用や配布/提供が難しかったため、一旦リレーショナルデータベースなどに全データをロードしました。今回は IBM の SoftLayer クラウドのサーバーを使い、その中にデータベースエンジンを導入して、全データをまとめてロードしました(要するにデータベース化しました)。 技術的にはこれでこのデータベースに適宜アクセスできるような仕組みを用意すれば外部から検索したりできる、のですが、上述の理由からデータベース丸ごとでの提供をするわけにはいかない、という背景がありました。

次にこのデータベースを API 化しました(1)。IBM Bluemix でも提供されている StrongLoop LoopBack サーバーを使うと、各種データベースを指定するだけでその中身を読み書き更新するような REST API を自動生成してくれます。

また自動生成された API には削除したり更新したりできるものもありますが、今回のハッカソンではあくまで参照(問い合わせ) API だけを公開したい、という事情がありました(2)。作成した API をわざわざ無効にする、という方法もありますが、今回はこれも IBM Bluemix から提供されている API Management 機能を使って、実際には問い合わせの API だけを公開し、かつ利用状況も合わせてモニタリングできるような方法にしました。


なお、今回の API 生成で使ったこのような (0) (必要であれば)DB を準備、(1) API 化、(2) API を限定公開して監視 という3ステップについては、以前にこちらのブログエントリで詳しい手順を紹介しています。詳しい手順などはこちらを参照してください:
Bluemix だけで REST API を作成/公開/管理する


「API を用意する」と聞くと、ちと面倒そうな印象を受けるかもしれませんが、IBM Bluemix や SoftLayer 、そして これらから提供されている各種サービスを効率よく使うことで、面倒な作業を簡略化し、目的の API を(仕様書に相当するドキュメントごと)作って公開して管理する、といったことが簡単に実現できてしまいます。 もちろんデータベースの操作に慣れた方からすると、直接データベースを扱えた方が効率は良かったかもしれませんが、様々な事情を考慮した結果の1つの実現の形として、今回はこのような提供形態とさせていただきました。今回のジャイアンツハッカソンの成功を受け、「このやり方がある程度は正しかったのではないか」と思っています。もちろんまだ改良・改善の余地はあると思いますが、「データを取りまとめて API を提供する」という役割については一定レベルで果たせたのではないかと考えています。 そしてその作業は、上記のように(IBM クラウドを使うことで)結構簡単に実現できるものだと思っています。