平成最後はgRPCなサーバーを書いてハッカソンしていた話

こういうのってあとから書こうとすると時間が経ちすぎてなかなかポストできなくなりますよね。

そういうわけで書きます。

何してきたのよ

サイバーエージェントさんの 平成最後のハッカソンに出場してきました。

www.cyberagent.co.jp

4月の頭くらいからtwitter上で人事の方々がこのハッカソンについて話をしていたので、「ちょっと出てみるかぁ」みたいなノリで考えてました。

出場するまでの流れ

そんなことを考えてると、最近イキりがすごい id:NoahOrberg

id:NoahOrberg < これ、マヤミトくんと出ない?

みたいなことを言ってきました。

「プログラミングができる5歳児」ことのあくんが、インターネットで赤ちゃんをしている id:yt8492 を推していましたし、なによりもマヤミトくんと一緒に出たいなと僕も少し考えていたのでこの3人で出ることにしました。

チームの人員としては

  • プログラミングのできる5歳児 (サーバー&技術担当) のあ id:NoahOrberg
  • SNS広報担当とチームの平均体重を引っ張り上げる(サーバー) 僕 id:flying_hato_bus
  • 精神年齢生後3ヶ月(Android) マヤミト id:yt8492

この3人で蠱毒みたいなチーム作って参加登録しました。

数日後にはみんな参加できることが決定し、やっていきを高めてました。

お題が発表される

今回のハッカソンのお題は 「平成生まれの私たちが、平成を楽しく振り返ることができるサービス/モノ」というものでした。

さっそくのあくんとマヤミトくんと何を作るかを話し合うことにしました。

f:id:flying_hato_bus:20190508170237p:plain
チーム名とスクリーンネームが被ってちょっとテンションの上がるのあ

話した時に出たものはこちら

  • 小学校時代に書いた(こともある)プロフ帳を作る
  • 黒歴史を共有できるものを作る
  • spotifyでおすすめの曲をサジェスト

主に出たのはこの3つでした。

選ばれたのは黒歴史を共有するものを作るというプラン。

他の2つは

  • プログラミングのできる5歳児 (サーバー&技術担当) のあ id:NoahOrberg
  • SNS広報担当とチームの平均体重を引っ張り上げる(サーバー) 僕 id:flying_hato_bus
  • 精神年齢生後3ヶ月(Android) マヤミト id:yt8492

このチームの人員から考えても、そんなおしゃれなものを作るよりはネタに振り切ったほうがいいだろう、という考えでボツにしました。 僕達がそういうプロダクト作るのは似合わないってことですね

f:id:flying_hato_bus:20190508170904p:plain
みんなで話し合ったあとのホワイトボード

黒歴史を共有できるものということで深堀りしていき、出てきたのがこのホワイトボードのようなことです。

黒歴史 x ブロックチェーン

f:id:flying_hato_bus:20190508172051p:plain 黒歴史というものは、オタクならば結構な人たちが作ったことであろう歴史です。

  • イキリ満載のブログエントリ
  • 某動画サイトに実況動画を投稿
  • 肌にペンで傷を描いて学校に登校
  • 霊感があるキャラを装って心霊写真を捏造

こんな感じで「あの頃はこれがかっこいいと思った」「他人とは違う自分を演じたかった」という考えで突っ走ってしまう行為です(全部僕の体験談です)

黒歴史というものはあくまで「歴史」、勝手に改変されたり、なかったことにされるということはもってのほかです。

勝手にネット上で作った黒歴史を消されてはいけません。

つまり、これを恒久的に保存してあげる必要があります。

ここでブロックチェーンです!!

ブロックチェーンは情報の改ざんに強いデータベースです。

つまり、この黒歴史の情報をブロックにしてしまえば、半永久的に黒歴史は保存され、歴史の改ざんも防ぐことができるようになります。

作るにあたって

作るにあたっての作業分担はこんな感じ

サーバーは Go x gPRC、ネイティブアプリは Kotlin x gRPC という感じの構成。

github.com

github.com

それぞれのgithub repositoryです。

のあくんとマヤミトくんがいろいろと頑張ってくれたので実装は早く終わりました。

gRPCを使ってみた感想

今までやってきたようなRESTfulなJSONサーバーより断然書きやすかったです。

gRPCは自動生成されたgoのファイルを見れば何を実装すればいいか一目瞭然ですし、入出力がProtocol Buffersなので、jsonを扱う時のように Marshal / Unmarshal しなくて済むというのがめちゃくちゃ楽でした。

goではstructで扱えるので変数に型があり、どういうデータなのかがすぐ分かりますし、何よりもシリアライズされたデータが行き来するので速さが出ます。

そんなわけで大体のサーバーはハッカソンの3日前には大方の実装が終わり、マヤミトくんに頑張ってもらうだけになってました。

ブロックチェーンについて

ブロックチェーンは †最強†エンジニアののあくん id:NoahOrberg が担当しました。

合意形成アルゴリズム

ブロックチェーンの中心とも言える合意形成のアルゴリズムはのあくんが独自に実装してくれました。

独自合意形成アルゴリズム HEISEI

合意形成アルゴリズムは平成を使いました。いい感じにブロックが生成されるのが "平" "成" の二文字を使った時でした。

これも前日にはのあくんがすべて実装していたのでさすがですね。

ネイティブアプリ

一人で全部実装したマヤミトくんの記事でしっかり書かれているはずです。

yt8492.hatenablog.com

学部2年生ながらここまでやってくれたマヤミトくんは煽り抜きで最強だと思います。

これで彼女がいれば敵なしですね。

ハッカソン当日

ハッカソン当日には黒歴史ブロックチェーンがある程度出来た状態で参加できました。

あとは繋ぎこみをするだけという状態です。

まあ、こういう時は大体苦労するんですよね、苦労しました。

サーバーにバグが結構残っていた

本当に申し訳がなかったです。許して、マヤミトくん、のあくん。

直前まで小さなバグがちょっとずつ出ていてそれを潰す作業をしていました。

前日まで散々イキっていたのにこのザマです。精進します。

発表のフォーマットが特殊すぎた

チームが多すぎて発表の時間が押していた結果、

「スライドは2枚、1枚は実際に動いている動画を貼り、2枚目には説明を書く」

というものになっていました。

見た目にインパクトがあるものが有利になったのかなと思います。

僕らのチームは 見た目のインパクト < 技術 & 発想力 みたいな部分があったので技術力としてはそれなりにあったと思いますが、インパクトが足りませんでした。

優勝者のチームが以前会ったことのあるはととさんだったことにも衝撃でした。

作ったものが。「マリオのゲームで平成を振り返る」というコンセプトで、web上でマリオのステージが進むごとにゲームハードが進化していくという技術力がやばいやつでした。

「Vueのちからってすげーーーーー!!!!」

まさかの発想がかぶる

黒歴史という発想は被りそうだな〜〜〜〜」

とマヤミトくんとのあくんと笑いながら話していましたが、見事に被りました。

それも同じ大学のmtのチームでした。

会津大学生は黒歴史が好きです

思わず笑い合いました。

ちなみに、他のチームとは黒歴史のネタがかぶらなかったです。奇跡かな。

さいごに

懇親会で他の参加者の方とお話をしていたら

黒歴史ブロックチェーン、僕は投票しました!」

という声を結構聞いて嬉しかったです。やっぱり他の人からフィードバックを受けるというのは気持ちがいいです。

ブロックチェーンをフルタイムで働きながらも作ってくれたのあくん

のあくんのひどい彼女イキリに耐えながら完璧なネイティブアプリをつくってくれたマヤミトくん

最後の最後でマヤミトくんがキレながらのあくんに 「は!?!?」 と言っていたのは見ててめちゃくちゃ面白かったです。

二人のおかげでとっても面白いものが作れました。ありがとうございました。

おしらせ

お仕事をください