CyberAgent「TechCAMPオオサカ編」の感想を書いてみるよ。後編

前編ではインターン全体の話を書きましたが、後編では私(たちのチーム)の話を書こうと思います。
例によって、プロジェクトX的な文章でお送りします(笑)。

それでは、どうぞ。

プロローグ

「そういえば、あいつらのチーム名なんだっけ」
「Team GIKADIE」
「プレゼンで大コケしてたよな」
「まさしく『DIE』やな、ハッハッハ」

ここは、インターンの最終発表会。そんな会話が、会場から聞こえた-気がした。最終プレゼンが終わった私は、ようやく我に返ろうとしていたところだった。本番に弱い私が、なぜか全ての死亡フラグをかっさらい、そしてプロダクトと共に死んだ瞬間だった。私は「ごめん」と「すいません」しか言わない、ファービーを社畜にしたようなロボットと化していた。

最終発表の審査結果はこの後発表される。私は、私と相方の6日間をフイにしたものがテンパっていたせいでデモ時に一言添えるのを忘れたせいだったことをずっと悔やみ、そして6日間を振り返りながら、その時を待っていた。

「これは、イケる」

その前週の日曜日。私とその相方はSkype経由でアイデア出しをしていた。

「エンジニアがハマるアプリ」-それが今回のTechCAMPのお題だった。これを見た瞬間から頭の思考リソースの2割はこれに割かれていた。

「エンジニアってさ、どこの会社でもチームで開発してるやん。あと、コーディングでドはまりすると席から動かんやん。で、なんかのタイミングでチームの誰かに変なミッションが降ってきて、例えばリフレッシュスペースからお菓子持ってきてみんなに配るとか、突然馬のマスクかぶって踊ってみたりとかするわけよ。そんで、それを写真に撮ったり、みんなで「いいね!」的なことをしたら、ミッションによっては軽く運動にもなるし、チームのメンバーもなんか楽しくなるし、面白いんじゃないかな」
「んで、ミッションじゃなくても、例えばこれがあたった人が掃除当番とか、弁当の買い出しとかっていうのもできるし、それこそ王様ゲームみたいに変なミッションが降ってきてもいいわけだよね」

そんな感じの話をしたと思う。2人とも苦手なゲームプログラミングをうまく回避しつつ、既存のありがちなコンテンツやゲームとも一線を画し、なおかつ題意にも合致したアプリのコンセプトが生まれた瞬間だった。私たちは密かに「これはイケる」と踏んでいた。

いつの間にか、フロントとバックが逆転する

アプリのコンセプト的に必要な物は、ざっくりとこんな感じだった。

  • ユーザの管理。ユーザは複数のチームに所属できる。
  • ユーザの追加にはIDを手打ちする他、NFC(Androidビーム)を経由して相手のID情報を受け取ることができる。
  • ユーザはそれぞれ「ミッション」を保持している。新規で追加したり、実装はできなかったがパッケージング(用途やシチュエーションで切り替えられる)やシェア(他の人の面白いミッションを取り入れる)ことで面白さや状況に応じた使い方を実現する。
  • あるタイミング(用意していたのはGithubやSlackなど)でチームの誰かにミッションが降ってくる。ミッションはプッシュ通知で当該ユーザのスマホに表示される。
  • ミッションを受け取ったユーザは、それをするまでミッションが通知バーに常駐する(消せない)。それをやり終えると(Done itボタン)を押すと、チームメンバーにそのミッションを本当にやっていたかどうかを確認する通知がプッシュされ、承認されると当該ユーザーにポイントが加算される。
    ちなみにNFCは本来ミッション承認時に使用しようとしていたが、時間の関係で実装できず…

つまりAndroidアプリだけではなくサーバサイドでユーザ管理、プッシュ通知、ミッション生成などの処理を行う必要があった。

最初はサーバサイドは相方がPythonで実装することになっていたが、BaaSである「Parse.com」を使えば手軽ということで、そっちを使うことにした。ParseのサーバサイドはJSで記述することになるので、それなら私もやるよということでいつの間にかサーバサイド(バックエンド)とアプリ(フロント)が逆転というか、「それぞれが必要だと思う機能に対して必要な部分は適宜いじる(or分担する、ナレッジを共有する)」という形になっていった。

Parseの場合、データベースからの取得周りの話がJSとAndroidである程度似通っていることもあって「こうするとできる」ということが共有できたのは良いポイントだった。ただ、ParseのデータベースがODB形式である点をうまく活かせず、RDB形式でデータベースを設計してしまったおかげで少々取り出しが複雑になってしまった。

紆余曲折はあれど、6日間でアプリを作る以上あまり細かいところで引っかかってはいられない。「まず動けばええんや」という正論とも悪魔の囁きともとれる言葉を心に抱きつつ、ひたすらコンセプトをアピールする上で必要なコンポーネントを実装していった。

お互い少々アプリ開発からは遠ざかっていたとはいえ、どちらも高専上がりの技科大生(私は豊橋、相方は長岡)というだけあってか、時々タイポで時間を取られたりメンターに意見を求めることはあったものの、比較的順調なペースで開発は進んでいった(と思う)。

最終発表会で、大コケ

発表会前日の段階で、2,3人程度で想定したユースケースでの動作を確認していた(ただ、プッシュ通知を全体にブロードキャストのような形で送っていたため、フィルタリングの処理で少々ハマっていたが、前日夜にサクッと直した)。

そして発表会。結果から言うと序章の通り大コケした。私がガッチガチに緊張して手が震えるあまりNFCでユーザ追加をするところが実演できず、そしてユーザ登録後にミッションを追加するステップを忘れていたがためにミッション通知が送られないというトラブルに見舞われた(まあ、設計上の問題だったんですが…)。
ただ、最後に乱数で私にミッションが来てそれをDONEすることで全員にプッシュが飛び、一連のフローを見せることができたことは唯一の救いだった。

発表の後に我に返った後、本当に悔しかった。相方に向ける顔が無かったが、(表面的にだとしても)終わったことは仕方ないと言ってくれたこと、そして最後になんとか動きを見せられたことに救われた。

ハンド・ドラムロール

(このセクションは、ぜひB’zの「NO EXCUSE」をかけながら読んでいただきたい)

そして結果発表。3位から発表されていくが、3位、2位どちらにも名前がない。やっぱりプレゼンでコケたからドベだろうな…でも、もしかしたら…そう思っていた。
そして1位の発表。みんなで机を叩くドラムロールがとても長く感じた(実際長かったw)。

そして画面に現れた「GIKADIE」の文字。

私の呼吸が一瞬、止まった。

一応発表で一度はうまく行ったとはいえ、やっぱりコケていたことには変わりなかったけど、それでもアプリのコンセプトと面白さ、ミッションをプッシュする機構や用途の拡張性などが評価され、満場一致だったと(後のフィードバックの時間に)聞いた。

最初に受賞の言葉を相方に譲り、私はパソコンの電源を入れた。私の番が来た時、こう切り出した。

「受賞のあいさつの前に、もう一度デモをやらせてください。2分で終わるので」
(ここで「NO EXCUSE」のサビ後のフレーズ「ちょっと、もう一回やらせてくださいよー!」が来ればナイス)

私が今、この感想を述べても悔しさしか出てこない。それに、あのデモのまま賞をもらうことは、試合に勝って勝負に負けるようなものだと思った。私とチームの意地を、6日間の成果を見せたかった。

各ユーザに1つでよいのでミッションを追加してもらい、通知を実行。図らずも「優勝賞品を(メンターの名前)に譲る」というミッションが出て会場が大爆笑に包まれた。そしてそれを「承認」するフェーズも実行でき、アプリの一連の流れを、楽しみ方を見せることができた。

デモを終えた後、本気で泣きそうになりながら、やっとの思いで「これで成仏できます。ありがとうございました」とあいさつをさせて頂いた。

技術屋としての執念

時間も若干押している中でああいうことをしたのは、少々迷惑だったかなぁと思った。でも、あのまま終わるのは、私も、見ている人も「あれは残念だった」という感想しか抱かない。それなら、私が後で(怒る人はいないけど)怒られようとも、自分たちの成果を見せて楽しんでもらおうと思った。それがサポートして頂いた方々への感謝であり、私たちチームの執念であり、私が一番伝えたいことだった。

相方は「もしあれでまたコケたらどうするのかと思った」と後で言っていたが、私の中では勝算があった。もしそれでもコケたら、私はエンジニア就職をやめてじいちゃんの家の畑でエヴァの加持さんよろしくスイカを育てる人になろうと割と本気で思っていた。結果的には私が伝えたいことを伝えることができ、本当に嬉しかった。

エピローグ

後のフィードバックで、「チームワークがとても良く見えた」という評価を多くの方から頂いた。良かったかどうかは、実を言うと私は開発に没頭していたのであまり考えたことが無かった(笑)。
ただ、技術的な視点や感覚の似通ったペアなのだろうなと思うことは多々あった。一つゴールを見据えて共にそれをブラッシュアップしていく姿勢や、「こうしたら面白いかも」という感覚が自分の裏返しを見ているようで、ある意味新鮮だった。

テクニカルな話をすれば、私はGitやサーバサイドプログラミングに慣れていなかった点もあり、「あれが実装できればなぁ…」と思う点も、確かに多々あった。「こうなったらいいよね」と言っていながら手を付けられなかったアイデアもあった。その点は、自分のスキルがもう少し高ければなぁと思うところである。コミットログに同じコメントを付けてみたり、タイポで3,4時間無駄にしたりと、出来のいい相方じゃなくで申し訳ないなぁとずっと思っていた。

それでも結果として優勝することができたことは素直に嬉しいし、自分たちのアイデアを、スキルを、技科大生の底力を、見せつけることができたと思う。
あの後お互いに謙遜しあっているところまで性格の裏返しのように思えたけど、6日間お疲れ様でした。本当にありがとう。

CyberAgent「TechCAMPオオサカ編」の感想を書いてみるよ。前編

8/6~11の6日間、CyberAgentの短期インターン「TechCAMP(オオサカ編)」に参加してきました。
選ばれし精鋭(?)10人・5チームで、ある「お題」に対してチームなりの課題を定義し、iOSもしくはAndroidアプリを開発するというものです。

実際に開発したものとかそういう話は長くなりそうなので後編に書くとして、前編ではTechCAMPの雰囲気というか、どんな感じのイベントなのかをまとめてみたいと思います。

とにかく、全力投球。

今回の参加メンバーはそれぞれ、経験の多寡はあれどある程度のiOSもしくはAndroidアプリ開発についての事前知識やコーディングスキル、開発手法についての知識を持ち合わせていました。

こうしたバックグラウンドはあれど、6日間でお題に対して課題を自分たちで定義し、それに合うアプリケーションを開発する…ということになるので、今回の参加者は日程的に実質4日間のところ全チームが土日にも会社に来て開発をしていました 1)一応、開放日と時間は指定されていました。土曜は淀川花火大会の影響で早めに退社。
ちなみに言っておくと、参加者全体で申し合わせたわけでも、担当者からそうするよう言われたわけでもなく、チームの相方と「とりあえずやることはあるから行っとくか」「せやな」みたいな感じで行ったらみんな居た、的な感じです 2)まぁ私に関して言えば、普段から土日どっちかは研究室にいたりするので、休みの感覚が希薄というのはありましたが。

結果的には6日間みっちり開発で、全チームが出せる限りの力で全力投球している感じでした。

全力投球をサポートする環境が、ある。

各自のPCは基本持ち込み(会社からレンタルも可)なのですが、開発が長時間に及ぶため、必然的に自分が持ち込んだデバイスだけでは操作が大変になったり、画面切り替えが面倒になったりしてきます。

と思っているとマウスがどこからともなく机に置かれていたり、社内で余っていた(らしい)ディスプレイがチームに1台配られたりしていました。その他チーム開発で必要なGithubのプライベートリポジトリ(アプリ用とサーバサイド用の2個)が支給されました。
そして何より、強力なメンター陣が開発のサポートをしてくれるため、とにかく困ったらメンターを捕まえて質問するかSlackに投げるとサポートが得られるという環境が整っていました。

あとは時々お菓子や飲み物、昼食など(本来は基本的に自腹)が差し入れられるなど、開発面だけではなくメンタル(?)面のサポートも充実していました。

みんな仲良し、そしてアツい同志。

今回だけかは分かりませんが、10人という少人数だったこともあって自分のチーム(ペア)だけではなく全員の仲がよかったと思います。
だいたい晩ご飯はみんなでホテルの外に行ったり、ちょっと開発の息抜きに他のチームの開発を覗きに行ったり、誰かがボケると必ず誰かが反応したり、なぜかBGMに中島みゆきが流れてきたり(相方の仕業)、「ここでL○NE Music流したら怒られますよね?」とか言いつつAWAのプレイリストをBGMに開発したり(これは私)と、エンジニアとして志の似通ったメンバーが多かったおかげでとても雰囲気がよかったです。

とはいえ寝ても覚めても野郎しかいなかったので、そこはみんなで残念がってましたが。笑
(たまにメンター?として、女性の来年入社の方や社員さんが遊びにいらしてました)

暑い夏に、アツいメンバーと、アツく開発。

(↑クソダサいキャッチコピー作ってごめんなさいw)

少人数で短期間ということもあって、開発スキルは結果的に高度さを求められるような感じになったと思います。実際、最終発表前日は全チームが追い込みに入っており、その前の日よりも室内が静まり返っていました。
あまりにもみんなが集中していて若干ピリピリしていたので、ちょいちょい各チームの様子を見てじゃm…もとい、iPhoneで広報用に写真を撮っていた人事の方も撮る回数減らしてました。笑

最終発表ではそれぞれのチームが全力を尽くしたアプリを発表し合い、最後まで全力を尽くした6日間になりました。終了後の打ち上げでは何人か疲れて寝ていましたが(笑)、それも各人がこのインターンに全力を尽くした証だと思います。

大阪は夏真っ盛りで暑かったですが、我々もアツく開発に没頭することができた6日間でした。

References   [ + ]

1. 一応、開放日と時間は指定されていました。土曜は淀川花火大会の影響で早めに退社。
2. まぁ私に関して言えば、普段から土日どっちかは研究室にいたりするので、休みの感覚が希薄というのはありましたが。