読者です 読者をやめる 読者になる 読者になる

さわっても熱くない花火

ちょっとした驚きを食べながら生きています

実録、コミュ障非リアでもリクルート社インターンシップで優勝できる。

私事 考え事

序論

この記事は、リクルートホールディングス社冬季インターンシップへの参加の記録を、アトラクティブかつユーモアを持って紹介する記事である。
誇大表現等も含まれている事を予めお詫びしておく。

(ぶっ飛んだ記事になっていますので、真面目な内容を読みたい人は、最後の方だけ読んでくださいね。)

まず冒頭ですがこの場を借りて、このような貴重な機会を与えて下さったリクルート社関係者及び、チームメンバー及び参加者のみんなに感謝申し上げます。ありがとうございます。


潜入

11月某日、
筆者(yanoshi)は、リクルートホールディングス社インターンシップの全貌を調べるべく、単身潜入調査を行うこととした。
今回ターゲットとしたインターンシップはこれである。

RECRUIT HOLDINGS-リクルートホールディングス-|インターンシップサイト


ESと言う名の壁

筆者は何を隠そう、面倒くさいことが嫌いだ。
そんな筆者にとって、ESと言う存在は世間が想像している以上に大きな壁である。
しかしながら、インターンシップに参加するにはこの難関をクリアするしか他に道はない。
「どうすればこの苦行を回避できるだろう…」思案した結果、応募コースを1つに絞ることにした。


当初は「Application Engineerコース」と「UX Designerコース」に併願で応募する予定であったが、その計画はこの時点で打ち砕かれた。
恐るべしES。ちなみに以下の様な質問項目が合ったように記憶している。

  • 過去の開発経験
  • インターネット上のアウトプット
    • 上記サービスへの関わり

確率論から言って、併願可能な応募システムで複数応募しない事は不利でしかない。来年度参加予定の方は、ぜひ計画的なES執筆をおすすめする。


プログラミング試験という名のAtCoder

どのような審査がなされたかは謎であるが、第一の関門をクリアした筆者は、第二の関門であるプログラミング試験を受験した。
形式は、自身所有のパソコンを持ち込んで行うスタンダードな競技プログラミングであった。ちなみに問題提供はAtCoder社であった。
AtCoder (アットコーダー)

AtCoder社といえば、「Code Formula」をはじめとして近年リクルート社と共同で様々な企画を展開している、競技プログラミングの企画運営を専門としている企業だ。本インターン選考からも、AtCoder社とリクルート社の親密な関係をうかがい知る事ができる。

どのような内容だったかは割愛するが、一言書き記しておくとすれば「おのれDP*1め…」といったところだろうか。

私は(満点/2)+α程度の点数しか取れなかったが、この選考を突破できた。この試験は足切りのために行っているのだろう。
筆者の競技プログラミング力は、高専本科二年生から更新されていないのではないか?とつくづく思う今日このごろだ。アリさん本でも読んだ方が良いのだろうか。
そんな筆者の憂鬱は本記事には不必要であると推察されるので、閉口する。


これはぼやきであるが、このような足切りを用意するのであれば、あの苦行(=ES執筆)は必要だったのだろうか?不思議である。*2


面接と言う名の雑談

次のフェーズは面接であった。
大阪のリクルート支社へが会場となっていたので、そこへ向かった。会場には東京からやってきたという人事の方がいらっしゃった。
この面接は良くあるIT企業の面接といって良いだろう。
脳に適切な糖分さえ補給しておけば乗り切れる雑談である。


東京本社で行われる謎の自慢大会

ここでボスが現れるとは思っていなかった。謎の自慢大会である。
本記事を読んでいる方には何を言っているかわからないだろうが、実は著者自身も何を言っているか分からない。
選考には1dayJOBと呼ばれるフェースが存在していたのだが、その実体は「自身のこれまでの取り組みを自慢する」という物だったのだ。

筆者はApplication Engineerコースの中でも「フロントサイドエンジニア」コースとして応募していた。1dayJOBの内容は各コースごとに異なっており、フロントサイドエンジニアコースのそれが自慢大会だったのである。

正直筆者は非常に困った。
困り果てた挙句、以下の様なスライドを作成した。(スライドの一部抜粋)
f:id:yanoshi:20150302023615p:plain
f:id:yanoshi:20150302023812p:plain
「フロントサイドエンジニアコース…とは!?」といった感じのごった煮発表を行った。まさに外道である。私の生存戦略としてこれにしか勝利を見いだせなかったからだ。

選考に訪れていた者達は、まさしく猛者ばかりでありかなり圧倒された。まさしくフルスタックエンジニアと言うにふさわしいような力を持った人々が集まっていたからである。
客観的に見て、落ちたと感じていた。


少々、脱線をするが、筆者がフロントサイドエンジニアコースに応募した理由は、消去法であった。
筆者の経験上、正直iOSエンジニアコース以外どれでも良かったのだが、Javaをあまり書きたくないという理由からAndroidを除外、MySQLの最適化等をしたくないという理由からバックエンドを除外した結果、フロントサイドエンジニアコースで応募するに至った。
正直、ひと通り選考が終了した時点で「他のコースの方が勝率が高かったのではないか?」と感じたのは内緒である。


まさかのアクセプト

筆者の予想とは裏腹に、結果は良いものだった。
喜ばしい限りである。




リクルートの内情をうかがい知る

インターンシップに良くある、社内のエンジニアや企画の第一線で働いている社員の登壇が、当インターンシップでも行われた。

詳しい内容はNDA等もあるため割愛するが、記憶に残った単語を幾つか書き記しておくこととする。

  • KPI
  • TTP
  • まだ、ここにない出会い
  • リボン図

特に受験サプリに関する発表は、リクルート社の成長の理由を観察することができ、とても良い知見を得ることができた。




調整されたランダムが生むUXの高いチーム分け

インターンシップにおいて、チーム分けとはとても重要な存在である。
下手なチーム編成にすると、パワーバランスの崩壊や険悪なムードになりかねない。
きっと担当者の方々は非常に気を使いながらチーム編成を検討しているのだと思っている*3。実際のところは分からないが…

各チームの構成は次のようなものだった。

  • バックエンドエンジニア x1名
  • Android or iOS or フロントサイドエンジニア x2名

素晴らしいメンバー、素晴らしいメンター

幸いにも筆者が所属したチームには、高いスキルと技術に対するこだわりを持った濃いメンバーが集まっていた。
筆者が唯一の一般人だったといえるだろう。
またメンターさんも技術的にも人間的にも非常に面白い方であり、まさに最高のチームメンターさんだったといえる。

インターンシップは、技術に重点を置いた評価が行われると始まった時点で宣言されていた。
これはリクルート社主催のこれまでのインターンシップにはなかった取り組みのようで、野心的なリクルートの方針転換を伺うことが出来る。

このような背景から、筆者はチームの勝利の可能性を感じることが出来た。

ちなみに所属していたチーム名は「あいしす!」である。

上がるシンクロ率

プログラムとは人間が書くものである。そのためプログラミングにおけるアウトプットには、どうしてもメンタルの影響が出てしまう。チーム開発におけるコードのクオリティは残念ながら人間関係が大きく影響してきてしまう。
そういう点では、チーム「あいしす!」の人間関係は良好なものであったといえる。
「趣味が合った」という事実が、メンバーの人間関係を大きく担保していたのではないかと思う。
チーム開発に対する考え方や、サブカルに対する造詣、SNSなどのインターネットサービスの利用志向等も似ていたように思う。

そんなチームメンバーのシンクロ率を上げた一つの動画を紹介しておく。

呑み会の際、メンバーが同時に「ジブリール4」と口にした時のシンクロ率は相当なものだったと思う。
ほんとに素晴らしいチームだ。


戦いの日々

フロントサイドエンジニアコース…とは?

チームメンバーはまさしく「猛者」であった。
JavaScriptを信奉し、フロントサイドに熱い思いを持つ id:temperman
数学的思考力を持ち、スマートなコードを書き上げる id:cympfh
彼らのプログラミング力には脱帽した*4が、それ以上に自頭の良さにも感動を覚えた*5。まさに最強のメンバーだ。「これは優勝せざるを得ない」そう筆者は思った。

そう思った結果、私は彼らがやりたがらない仕事を観察し、率先的に行っていく事とした。
結果としてリーダーのような立ち振舞となっていたが、明示的にリーダーというものを立てた記憶も無く、リーダーになった記憶もない。しかしながら「yanoshiはこういう事をしてくれる」という共通認識があっただろうし、これは非常に良い傾向だったと思う。

プレゼン作成も行ったし、APIの設計や、フロントとバックのすり合わせ、ちょっとした進捗の確認やプルリク対応、AWSをぺしったりもしたし、技術選定っぽいこともしたような気がする。そういえばロゴの作成もやっていたような…
かっこ良く言えばCTOっぽいことをしていたような気がするが、実際はただの雑用だ。

「フロントサイドエンジニアコースとは?」とツッコミを受けそうだが、よく考えてもらいたい。
3人で家を作るとして、一人がのこぎりの使い手、一人が釘打ちの天才だったとしよう。その場合もう一人の存在であるあなたは、彼らの仕事を押しのけて木を切ったり、釘を打ったりするだろうか?
私は二人が心地よく仕事が出来るように、設計等を伝えたり、家の土台作りや壁塗りを率先してやろうと思うし、これが最適解だと信じている。
要はそういうことだ。

チームメンバーの思考を読み、常に先の一手を打つように心がけていたように思う。

AWSと戯れる

リクルート社は太っ腹で、AWSの沢山の機能を利用することが出来た。
そのおかげで沢山の知見を得る結果となったので、その一部を記載しておく。

余談だが、チームメンターさんいわく、筆者にはバックエンドな人間の思考が流れているらしい。新たなる発見だ。

同一リージョン間のVPCVPC Peering Connectionで接続する

皆さんご存知の通り、AWSにはVPCという仮想ネットワーク区分が存在する。便利だ。
同一リージョン内では、VPCネットワーク同士をVPC Peering Connectionというもので接続できる。
ルーティング等も余り難しいことがなく非常に良く出来ていると言える。AWS - VPC Peeringの設定 - Qiita

別リージョン間のVPC接続は闇が深い

別リージョン間(ex,東京-シンガポール)でのVPC同士の通信となると、途端に大変だ。
VPC Peering Connectionが使えないのである。

私はVyOSなインスタンスを立ち上げ、IPSecを利用して通信を確立した。この辺りの記事が参考になる。AWSでのリージョン間接続(VPN/VyOS) | cloudpack技術情報サイト

VyOS - StaticRoutingで簡単にsite-to-siteVPN冗長化 - Qiita


余談だが、Ciscoが作ったCisco Packet Tracerと呼ばれる、学習用ソフトウェアがありルーティング等を検討するには非常に良いソフトのように思う。
まさか、高専時代の謎の授業(褒め言葉)が役に立つ日が来るとは思っていなかった。感謝である。
Cisco Packet Tracer - Networking Academy

Amazon Cloud Frontは素晴らしい

「これまでどうして使ってこなかったんだろう?」と思うような素晴らしい機能だった。
今後も有効活用していきたい。


その他の知見

mongodbの冗長設計は結構楽

mongodbにはレプリケーションと呼ばれる機能が存在している。便利だ。

Node.js - MongoDBでReplica Setsを試した時のメモ - Qiita


新しいドメインは、Androidの標準ブラウザにやさしくない

今回、.picsドメインを利用したのだが、このドメインAndroidの標準ブラウザだと「URLだと判断してもらえず、Google検索にクエリが行く」という問題があった。http://から入力すれば良いのだが…色々と問題である。

Apigeeは便利

今回のプロダクトでは、RESTfulAPIを使った通信を多用していたので、Apigeeには非常にお世話になった。
https://apigee.com/about/
https://apigee.com/about/


徹夜はよろしくない

これは私の恩師の言葉である。
「健全なプログラムは、健全な肉体に宿る。」


そして勝利

こんなものを作った。

f:id:yanoshi:20150302045141p:plain
f:id:yanoshi:20150302045323j:plain
f:id:yanoshi:20150302045341g:plain
f:id:yanoshi:20150302045512g:plain
f:id:yanoshi:20150302045542p:plain
f:id:yanoshi:20150302045601p:plain
f:id:yanoshi:20150302045829p:plain


そして勝った。良い話だ。
ちなみに賞金は3人で100万円(非現金)である。素晴らしい。

f:id:yanoshi:20150223175649j:plain
f:id:yanoshi:20150223180213j:plain

インターンシップの勝敗というのは基本的によくわからないものだ。
上位何チームかは万人が見てもキャッチできる傾向にあるが、それ以上の順位付けは非常に難しいだろう。

しかしこの流れは、別にインターンシップのみにあることではない。
世の中で普通にある流れなのだ。
例えば、芸術に関するコンテストではこれが顕著に露呈するだろう。結局は審査員の趣味や世の中の流れ、政治的な意図が如実に反映されてしまう。
というか評価軸が多すぎるため、しかたがないことである。

まぁなので、おごること無く謙虚に評価を噛みしめたいと思う。嬉しい。

分析「どうして勝てたか」

それは審査員に聞かないと分からない。

と言ってしまえば終わりなのだが、もう少し考えてみよう。
他のチームを見渡すと、本当に素晴らしい完成度のプロダクトばかりだった。
商用プロダクトが採用しているような環境や、システムを導入し、素晴らしい管理された開発体制でものづくりが行われていた。

しかし、うちのチームは違った。
CIは導入していなかった。TDDもしていない。
しかし、商用プロダクトもやってないような変態的な技術的こだわりが何箇所かあった。
わざわざシンガポールリージョンに置いたDBのレプリケーションを行っていた。
フロントはSingle Page Applicationとして構成されていて、メモリーダンプを利用して解析し、極限までメモリーリークが排除された素晴らしい設計となっていた。
写真データやAPIのレスポンスデータも適宜、LocalStorageに保存されていたし、キャッシングは何重にも行われていた。
io.js+CoffeeScriptでコメントが不要なレベルのかなりスマートに書かれたコードも魅力的だったように思う。
上げていけばキリがないのだが、尖った存在だったのではないだろうか。

どちらにせよ、どう考えてもチームメンバーとチームメンターさんのおかげだと思うし、感謝しかない。

リクルートインターンシップは、コミュ障非リアでも優勝できる

大変失礼な話なのだが、私の中でのリクルートインターンシップのイメージは、「いかにもコミュ力が高く、プレゼン力が高い人間が、ドヤ顔でプロダクトをプレゼンして優勝していく」という物だった
チーム「あいしす!」は正直いって、これには当てはまっていない。
基本的にコミュニケーションはTwitterかSlackで、Githubすら最高のSNSサービスと化していた。まさにインターネット力の塊であり、ステレオタイプなコミュ力の高い人の集まりではなかったと断言できる。

しかし、そんなチームでも優勝できるのだ。

これは朗報である。リクルートがエンジニアに力を入れている決意の表れとも捉えられる。良い話だ。

最後に

筆者はこれまで様々なインターンシップに参加してきたが、今回のインターンシップはその集大成だったように思う。
これまでのインターンシップで培ったあらゆる知見を動員できたと思うし、結果もついてきたので万々歳である。
本当に面白いメンバーだったし、素晴らしいメンターさんだった*6
感謝カンゲキ雨嵐である。

番外編: 賞金の使い道

賞金は、「リクルート社の担当者さんにほしいものを伝える」という方法で利用できる。
筆者の取り分は333333円あるので、かなり贅沢ができるだろう。

とりあえず、これを頼んである。ブルーレイ&DVD -TVアニメ「ご注文はうさぎですか?」公式サイト-

リクルート社の会計担当者さんが、ごちうさのBDの見積もりを取る姿を想像して欲しい。
まさしくこれこそ、世界平和のあるべき姿なのではないだろうか?

こころぴょんぴょん。

番外編: ご飯

リクルート社さんは何度もご飯をご馳走してくれた。
神である。

番外編: 給与

インターンシップでは、交通費も給与も出る。
15万円だ。
すごい。

これに釣られて参加している学生は筆者以外にも大勢いた。
お金の力にはかなわない。

番外編: 宿について

リクルート社はその膨大な資金を使って、筆者たちインターン生をもてなしてくれた。
その福利厚生の一つに、宿の提供がある。
太っ腹で、必須出社日は7日であったが、3週間分の宿を手配してくれていたのだ。ありがたい限りである。
私はこの宿を拠点に活動をしていた。

しかし、この宿、大きな欠点があった。
それはTOKYO MXが映らないことである。これは筆者にとって死活問題であった。どうやら電波障害によりTOKYO MXが映らない宿だったようだ。
ぜひ次回インターンからは改善されることを願っている…

番外編: レベルの高い参加者たち

リクルート社はどこから集めてきたかわからないが、凄くレベルの高い人材ばかりだった。
通常、コンテストやインターンシップ等に参加すると、上位層は割と知り合いばかりになることが多いのだが、今回は全く面識のないすごい人たちが何名もいらっしゃった。

本当にリクルート社の人材発掘能力には感動を覚える。

不思議な出会い

まず id:ibenza が参加していたこと。彼のチームとは1位2位を競うこととなり、かなり良いライバルであった。
彼は何を隠そう、高専時代からの友人であり、プロコン等を共に戦った同志である。インターンシップで彼と競うことになるとは思っていなかった。

あとyuma_foggi氏との出会いも予想外である。彼は記憶していなかったようだが、高専2年生の時に参加した情報オリンピック本戦で、ほぼ唯一お話した相手が彼だったのである。
筆者もほぼ忘れていたが、彼は当時からかなりハイレベルなJava使いであり、神奈川在住というところから思い出すに至った。

また、逆にいつも何故か出会う方もいらっしゃった。@ryotakameoka氏である。
彼にはどこに行っても出会う気がしている。彼の活動的な姿勢とその能力には毎回脱帽である。


真面目なまとめ

…ということで、リクルートの冬季インターンシップに参加して、優勝してきました。
チームメンバーに感謝感謝。どう考えても彼らのお陰で優勝できたとしか思えません。
どうしてこんな記事になったかといいますと、他のメンバーが興味深い技術的な記事は書いちゃっていたからなんですね。はい。
真面目なパートは彼らに任せて、私はエンターテイメントの方に振った感じですね。一応こんな記事ですけど、ユーモアのつもりで書いています。


チームメンバーの素晴らしい記事はこちらです。Recruit Holdings Winter Internship Advent Calendar 28日目 - 日記

Recruit Holdings Winter Internship 2015 に参加してきた - たわし様がみてる


とりあえず、ホントにあらゆる方面に感謝しかありません。
最高に面白いチームメンバーだったので、本当に楽しかったです。

またチームメンバーとは呑みに行きたいなぁ。


ということで超絶長い記事だったけど、これでおしまい。

インターン中は「いい話だなぁ」って言葉を連呼していたのですが、本当にいい話だなぁ。



2015年4月7日追記

yanoshi.hatenablog.jp

*1:もちろん動的計画法のことだよ☆

*2:「Application Engineerコースには面倒なESって不要だよねー」って言いたいな

*3:卒業旅行の部屋割りですら難しいのに、数回しか会ったことのない人たちをうまくチームで分けるとか、どう考えても大変ですよね。ほんとすごいと思います。

*4:めっちゃコード書くの早い。すごい

*5:頭良い人としゃべるの、楽しいよね。

*6:あのメンターさんの下で働けるなら、リクルート社に就職してもいいと思えました