ITSP PBL で作ったもの・使った技術やツール

PBLというチーム開発の授業でうちのチームはこんなの作ったり使ったりしたよという記事です。 成果発表会や展覧会では技術的なことの説明はほとんどしなかったように思うので、せっかくなので公開しておきます。

来年以降この授業を取る人の参考になればと思います。

(他のチームのも読みたいので誰か書いてください!)

ITSP について

東工大IT特別教育研究コースのことで、このコース専用の授業がいくつかあったりします。

例えば、

などがあります。わりと実践的なものが多いです。

PBL について

ITSP コースのメインが PBL (Project Based Learning) という授業です。単にITSPといったときはこのPBLを指すこともあります。

PBLは4月から12月の展覧会に向けてチームで企画から開発までやってみるという授業です。

授業で習うことはほとんど上流工程のことやコミュニケーションについてで、具体的な開発についてのことはまったくやりません。各チームに完全に任せられる感じになります。

僕達のチーム (White Chocolate、以下白チョコ) は7人 (+2人、読めばわかる) でした。他のチームは人数が減っていったりしたのですが、白チョコは誰も欠けることなく最後までいきました。

使ったサービス

GitHub

ソースコードの管理は GitHub の教育用 organization を使って無料で10個プライベートリポジトリをもらって使っていました。現在10/10使っています。

申請に2,3回はねられたのですが直接メールを送ったらすぐに受理してくれたので、拒否されたらすぐにメールを送ってみるといいと思います。

白チョコの organization

idobata.io

チーム内のチャットツールとして、idobata.io を使いました。 チャットツールは他にもいろいろありますが、無料で、かつ他のサービスと連携しやすいこれを選びました。

今ならデファクトっぽくなっている Slack を選ぶかなと思います。 当時 Slack にしなかった理由は、無料の範囲だと10000件しかメッセージを保持しなかったのと外部サービス連携が3つまでだったからです。今はどうか知りませんが2014年4月時点ではそうでした。当時は10000件以上前のメッセージを検索することもあるかなと思って Slack はやめたのですが、結局メッセージを検索することはしなかったので Slack のほうが今っぽいしいいかなと思います。外部サービスもちょうど3つ (GitHub, Wercker, Heroku) だったので Slack でよかったです。

あと idobata.io の Chrome 拡張めっちゃ便利でした。

Heroku

チャットに住まわせる Hubot を Heroku で動かしていました。デフォルトでは死なないように何分かごとに ping が飛んでくるのですが、それでもときどき死んでしまうので困りました。

Wercker

CI サービスは Wercker を使いました。Wercker にした理由は、プライベートリポジトリでも無料でOKだったのと、自前で環境を作れるからです。今回 Play を使ったので、wercker-box-activator という環境を作って使っていました。

mackerel

サーバの負荷を見るために使っていました。

Google Drive

仕様書以外の文書等はここで管理していました。

作ったもの

Yukiho

https://github.com/white-chocolate/yukiho

チャットに住んでいる bot さんです。ラブライブ!の高坂雪穂さんがモデルです。白チョコが崩壊せずうまくいったのはこの子がいたからと言っても過言ではない気がします。

(経緯)

f:id:amutake:20150223095237p:plain

Yukiho は優秀でいろいろやってくれます。

ラブライブ!の放送をリマインドしてくれる

by tondol

f:id:amutake:20150223095443p:plain

素数を見つけると教えてくれる

by tokuhisa

東工大っぽさ

f:id:amutake:20150223101149p:plain

ラブライブという単語を見つけるとラブライブ!GIFを貼ってくれる

by amutake

animate me ラブライブ の alias です

f:id:amutake:20150223101112p:plain

寿司, 鮨, スシ, すし, sushi, (寿司の絵文字) という単語を見つけると寿司ゆきの画像をランダムに貼ってくれる

by amutake

Qiita の bot のパクリ (https://twitter.com/mizchi/status/535731282869616640)

f:id:amutake:20150223101029p:plain

ランダムレビュワー

by amutake

https://github.com/white-chocolate/yukiho-reviewer-lotto

sakatam/hubot-reviewer-lotto を folk して改造したもの。

f:id:amutake:20150223100904p:plain

f:id:amutake:20150223100758p:plain

deploy to production

by amutake

bot に頼むと GitHub にプルリクを送ってくれてマージすればデプロイされるあれです。 Atrae Tech Blog — Hubotとwerckerを利用したデプロイフロー改善 を参考に作りました。

f:id:amutake:20150223095559p:plain

f:id:amutake:20150223095334p:plain

ARISA

チームで作った Web サービスです。名前は Academic Research Investigation Service by Association の略です。(ラブライブ!の絢瀬亜里沙さんがモデルという噂がたっていますが...)

PBL は一応 Android アプリを作るという授業になっていますが、授業に沿って企画したアプリがモバイルアプリではなくPCから使えたほうがいいようなものになってしまったので先生に確認したところ、EC2 使うならいいよということでしたので Web サービスになりました。

サービスの内容は、論文に対してコメントとか質問とかをつけることができるというものになっています。

f:id:amutake:20150223095848p:plain

また、ある学術分野 (キーワード) から近い分野を視覚的に表示してくれる分野マップというものもあります。

f:id:amutake:20150223100018p:plain

サーバとクライアントは Web API (JSON) 経由で情報をやりとりしています。API サーバは Scala + Play framework + MySQL (Slick) + Elasticsearch (elastic4s) で動いていて、クライアント側は JavaScript + Vue.js + page.js + D3.js で動いています。

Scala を使ったのはよかったのか悪かったのかわからないです。もちろん自分は慣れてるのでいいんですが、他のメンバーは全員 Scala (や他の関数型プログラミング言語) の経験は全くなく、最初はみんな Scala わからない〜〜という感じでした。でもみんな普通に書けていたのでいいのかな…。いずれにしてもみんなが慣れるまではもう少しサポートすべきだった気がします。

また、サーバはひとつしか使えなかった (m1.small) ので、API サーバも静的ファイルサーバも MySQL も Elasticsearch も論文メタデータクローラも類似度計算も全部一つのサーバで動かしていました。途中から重すぎて自分の VPS (お名前VPS2Gプラン。m1.small よりはいい…)に移行しました。

あと Nginx を前にたててリバースプロキシにしてました。

Scala bindings for Microsoft Academic

by amutake

ARISA では論文メタデータを収集するために、Microsoft Academic という Microsoft が提供している論文データベースを使っています。これはその APIScala から便利に利用するためのライブラリです。 dispatch というライブラリを使っています。

Microsoft Academic Metadata Crawler

by amutake

Microsoft Academic から論文のメタデータをとってきてDBに保存するプログラムです。上の自前ライブラリを使っています。

Calculation Similarity

by tamaizumi

キーワード間の類似度を計算するプログラムです。同じ論文の二つのキーワードは近い、引用・被引用の関係にある論文についている二つのキーワードはわりと近い、というように計算しています。

これは事前に計算しておいて分野マップのところで使っています。

Scala 製。

データを Elasticsearch にぶちこむやつ

DBに保存してある論文メタデータを Elasticsearch に入れるやつです。 今だったら embulk とか使えば良さそうです。

Ruby 製。

やりたいけどまだできてないこと

クラウドっぽくなるならインスタンスもっと使ってもいいよという先生の言質をとった (先生が酔ってたときに) ので、Spark とか使って類似度計算を一気に行いたいなあと思っているのですがまだできていません。

あと Microsoft Academic 以外の論文データベースにも対応させたり、最終的には自前で論文データベースを作ったりしたいです。

今後どうするか

発表するといろいろな人から今後どうするか聞かれるのですが、それはまだ未定です。チームで話し合って決めたいと思います。

その他

チームの順位

5チーム中1位でした。

進捗報告

だいたい週一で集まって進捗報告をしていました。夏休み中もやっていました。

勉強会

比較的早い段階で、Yukiho を開発するための Git 勉強会と、Scala の勉強会を開きました。 Scala の勉強会は自分の説明下手のせいで良かったのかはわかりません...

親睦会

ITエンジニアといえば寿司、みたいなところがありますが、ちょうど自分が寿司を握れるので自分たちのチームでも寿司パーティを開いて親睦を深めました。

その他にもチームでラブライブ!聖地巡礼したり映画館に楽園追放を見に行ったりしました。

おわり。

f:id:amutake:20150223103019p:plain