2016-09-26

オートマチック・オタク・マッチング ― Hack U 2016 名古屋会場に参加しました

#日記 #参加記 #プログラミング

先日9月25日,Yahoo! JAPAN 主催のハッカソン, Hack Uの名古屋会場にて「チーム天伯之城 (豊橋技科大)」として作品を発表してきました. このハッカソンはヤフー社員の方に Slack でアドバイスをもらいながら 「自動〇〇」というテーマで立案から開発までを行い, その作品をオンサイトで発表するというものです.

以下がチーム天伯之城の発表です. うーん,かなり映像が乱れていますね….

実は 2 本目の動画は自分が喋っているのですが, 機能追加とそれに伴うバグ取りで徹夜明けのテンションなのでめちゃめちゃテンションが高いです. こうして形に残ってしまうので,ちゃんと寝ましょうという教訓が得られました….

さて,本記事では,チーム天伯之城が作ったアプリの紹介をしたいと思います.

オートマチック・オタク・マッチング

オタクという生き物は濃い趣味を持っているものです. その趣味への情熱を同志と分かち合いたいと思ったとき, その趣味がディープであればあるほど, 自分の周りにはなかなか同志を見つけられないものです. それでは,どうすれば見つけられるでしょうか?

街中や学校で自分の趣味を言って回りましょうか. あるいは出会った人ごとに趣味を聞いて回りましょうか. 溢れんばかりのコミュ力を持ち合わせたリア充ならいざ知らず, 我々オタクにはなかなか難しいものだと思います.

そこで今回,Hack U で我々のチームが作ったのが, 同じ趣味のオタクを近距離でマッチングする Android アプリ 「オートマチック・オタク・マッチング」です.

プロフィール設定

このアプリに自分のプロフィールと, 自分のオタク的趣味を表す「タグ」 (Twitter のハッシュタグのようなものです) を登録し,街中を歩きます. 今回は #Ruby #Java8 #おジャ魔女 そして #文学 を設定しました.

ひろば画面

そして,本アプリを使用している人同士がすれ違うと, Wi-Fi Direct により自動的に端末同士が接続し, ひろば画面にその人のアイコンが表示されます. 中央に表示されている大きなアイコンが自分のアイコンで, 周りに表示されているアイコンが近くにいるオタクのアイコンです. それぞれのアイコンをタップすると, その人のプロフィール画面を開くことができます.

プロフィール交換

端末同士のタイミングでプロフィールの情報が交換されます. 交換したプロフィールは,後に「すれ違ったオタク」画面から選択して見ることができます.

オタクマッチング!

そして,ここが注目の機能なのですが, プロフィールを交換した相手のタグに,自分の登録しているタグが含まれていると, 携帯がバイブレーションして通知が届き,近くに同志がいることを伝えます. 今回は #文学 が趣味の 工藤健 くんがマッチしました.

人のプロフィール欄の右下のボタンをタップすると, その人の Twitter が表示されます (Twitter クライアントが立ち上がります). 興味がある人であれば Twitter で話しかけてぜひ会ってみましょう!

こころの叫び

なお,ひろば画面の右下のボタンをタップすると表示される 「こころの叫び」ダイアログを使って発言したいことを投稿すると, 接続中の端末にその投稿がブロードキャストされ, それらの端末のひろば画面のアイコンに吹き出しが表示されます. 以下のケースでは,自分の「暇だ😔」という叫びは 久保茜 さんのひろば画面に表示されていることになります.

近くにいるオタク全員に対して呼びかけたい言葉がありましたら, この機能を使うことができます.

入手方法

現在, GitHub にてソースコードを公開しております. チーム天伯之城のチームメンバー全員が Android プログラミング初心者の状態で, 作りながら Android プログラミングを学習したような面があるので, 各機能の実装方法はまるで参考にならないかと思います. (現在の自分から見ても,この実装はひどいなと思う面があるので…).

上記リポジトリを clone & build して使っていただくのが現在の唯一のアプリ入手方法となっておりますが, 近々 Google Play にアップロードする予定なので, 興味があればぜひ使ってみて下さい.

特長

本アプリの特長は,なんと言っても Wi-Fi Direct を使った通信です. Nintendo DS のすれちがい通信機能と似た仕組みで通信を行います. インターネット上にサーバを持つ必要がないので, 保守のコストがかかりませんし,サービスの終了は事実上存在しません. また,端末同士が直接通信できることを担保に近くにいることを保証しているので, Pokémon GO で問題になったような位置情報の偽装を行うこともできません.

また,コミュニケーション機能を外部サービス (Twitter) に投げたのは, 決して実装が面倒だったかったからではありません. 本アプリは外部との通信機能は Wi-Fi Direct による P2P 接続しか持ちません. そのため一対一のチャット機能のようなものを実装しても, そのタイミングでは相手の携帯とのコネクションが切断されている恐れがあります. 不確実なチャット機能を実装してユーザを不安に,そしてイライラさせるよりも, インターネットを利用した外部サービスを利用させたほうが良いと考えたため, このような機能になりました.

今後の課題

通信部分がまだまだ不安定です. Bluetooth ではなく Wi-Fi Direct を採用したのは, Bluetooth に通信の安定性面で不安があったことが一つあったのですが, Wi-Fi Direct も Bluetooth に負けず劣らず (?) 安定性に不安要素があるようでした. 所感として,特に Android 4.x では安定した通信が行えないようでありました. 今後は Wi-Fi Direct 以外の技術も視野に入れて, 通信部分の安定性の向上を図っていきたいと考えています.

最後に

チーム天伯之城のみなさん,本当にありがとうございました. 終盤は怒涛のコミットラッシュで, 毎日徹夜でオンラインで通話しながら開発をしていましたが, 本当に楽しかったです. またこのメンバーで何か作りましょう!

そして何よりヤフー社員のみなさま,大変お世話になりました. グループ開発の経験が浅い中で 2 週間で開発するとのことで, 正直完成するのか不安でいっぱいだったのですが, お蔭様で無事発表までこぎつけることができました. 本当にありがとうございました.