OCamler がリクルートのインターンで Python を書いてきました
2月1日〜23日まで,株式会社リクルートホールディングス (以下,リクルートさん)の冬インターンに参加してきました.
http://recruit-jinji.jp/winter-internship2015
実は去年の夏に,リクルートさんとクックパッドさんが共同開催した Joint!! という5日間のインターンに参加していて,予想以上に得られるものが多かった(お金はもらってません)ので今回もぜひ行きたいと応募したインターンでした.15万も美味しかったですし.
ちなみにこの時の私がとても楽しそうだったという理由で研究室の同期は今回応募,参加したらしいです.まだ,ここにない,出会い.素晴らしいです.
選考
Swift アイドルなので普段は iOS 開発をしているのですが,Web の知識をもっとちゃんと付けたいという理由でフロントサイドコースを選びました.
選考は,ES を書いて,AtCoder のプロコンテストがあって,1day job という流れです.
1day job,他のコースは6時間くらいで何かしらがっつり実装する,という内容だったようですが,フロントサイドは15分間の(Web 開発に関する)自慢大会でした.
とりあえず今までやったことを絞り出して,自己紹介でOCaml と Swift と某Y社ハッカソン優勝という単語をしっかり入れてプレゼンしてきました.
時間が余ったので 懇親会で選考に来てる学生たちとまだ,ここにない,出会い.をしてました.楽しかったです.
インターン
Joint!! のときは1チーム4人のうち2人がプランナー,2人がエンジニアで,かなり企画重視のインターンでしたが,今回は1チーム3〜4人の全員がエンジニアという構成でした.企画も最初の1週間弱であとはひたすら開発だったのでエンジニアからしたらとてもわくわくするインターンだったのではないかと思います.「この問題を解決するためにどんな技術を使えるか」という,技術的解決のための挑戦をできたのはとても嬉しかったです.
さらに,今回は AWS などの普段は使えないサービスをがっつり使えたのもよい経験でした.
ちなみに,私は夏にがっつりやった Lean Canvas による企画なんかもとても重要だと思っていて,その経験があるからこそ現在趣味開発をできているので,企画をおろそかにしてよいとは全く思っていません.ただ,エンジニアだけのインターンではやっぱり技術や開発重視になっているととても嬉しいのは確かです(正直 Lean ってとても難しいですし,エンジニアとしては開発に入れないフェーズは大変つらいので…).
'Indeed のうえ'
私たちのチーム(以下,MIT)は「表面上」フロントサイド2人,バックエンド1人の3人構成で,メンターの方が1人付いて下さいました.
5つのテーマから1つを選び,そのテーマに則したサービスを1つ開発する,という課題だったので,MIT は「将来のキャリアに役立つバイト探し」をテーマとして選択,「将来エンジニアを目指す学生のためのエンジニア求人サイト」を作りました.'Indeed のうえ'というサービス名です.よろしくお願い致します.
企画の段階でアンケートを実施して(100人くらい回答が集まりました.ありがとうございました.)その中で多かった(お茶濁し)「探し方が分からなくてエンジニアバイトに応募できない」という問題を解決しようという方向になりました.
で,技術として何を使えるか,ですが,
ネット上にあるあらゆるエンジニア向けの求人情報をスクレイピングして,そのバイトがどんな技術を用いたものなのかをタグ付けしていく,ということをしていました.
工夫したのはタグ付けの部分で,フレームワークから使っている言語を紐付けて親タグとして登録してあげたり,使っている言語によってその仕事が Web 系なのかモバイルアプリ系なのかなどの分類をしていました.
これを見ている方々には自然言語よりも形式的な書式の方が分かりやすいと思うので簡単な BNF もどきでも貼っておきますね.
タグの構成:
Genre = Web | Mobile | [Design] | Other
Web = [(Language, [Framework])]
Design = 'Illustrator' | 'Photoshop' |'Dreamweaver'
Other = IDE | Others
Language = (55個のプログラミング言語おのおの)
Framework = (Language で代表的なフレームワーク)
iOS = [Device]
Android = [Device]
Device = 'iPhone' | 'iPad' | 'Apple Watch' | 'Smartphone' | 'Wear' | 'Tablet'
Others = [(その他,使用する OS や DB など)]
※ あくまで「もどき」なので細かいところ突っ込まないで下さいお願いします恐いです.
それから,なんやかんや自然言語を解析してそのバイトが「初心者向け」なのか「上級者向け」なのかというレベルに分けていましたが,ここは担当の社長が書いてくれるでしょう.
ちなみに 'Indeed のうえ'という名前,ネタでもありますが,私のプログラムだと 'C', 'C++', 'C#', 'Objective-C' を全て別の単語として認識可能なので,そういう意味で 'うえ' です.もちろん 'Java' と 'JAVA' は同じ単語,'JavaScript' は別の単語です.まぁでも最初は完全にネタでした.
使っていた技術とか
Python のコードは,OCaml に書きなおしたものと一緒に後日載せようと思っているので今回はざっくりとした自然言語で.
Cloudsearch2
DB の代わりに AWS の Cloudsearch2 というものを使っていました.細かいことは社長が書いてくれると思うのですが,クエリを投げたときにうまいこと自然言語処理っぽいことをやってくれるのでシソーラスとかその辺のアレがアレで採用しました.この辺のことはメンターさんからの助言が元になっているのでとても感謝しています.ご飯も美味しかったです.ごちそうさまでした.
Python
技術というか私が担当していたタグ付けのところで使用した言語です.Python にした理由は正直なくて,私が単に言語屋として興味があったから,ただそれだけです.
タグの階層化のところで enum をうまく使って代数的データ型を作りたかったのですが,Twitter や LINE なんかで無理(意訳)と言われ続けて挫折,タグを全て String で保持するという暴挙に出ました.
が,
ここで Python にこだわらずロジック部分は素直に OCaml で書いてしまえばよかったと本当に本当に後悔しています.今回優勝できなかったこと以外に後悔があるとすればここですね.
boto
Python から Cloudsearch / Cloudsearch2 を使うためのインタフェース.チュートリアルがけっこうひどくてちょっと時間かけすぎてしまったのが残念.
その他
html5 とか sass とか compass とかを使いました.この辺のいろいろは全部社長が教えてくれました.本当にありがとうございました.お仕事も頑張ります.
ちなみに普段は Aquamacs という Emacs の Mac 版を使っているのですが今回は Sublime と仲良くなりました.仲良くなりすぎて Aquamacs のキーバインドを忘れかけました.危ない危ない.
(その他と書いているけど私はフロントサイドのはずなのでこれらはその他に入れてはいけない気がします…)
写真とか
肉ルートさん♡
TECH LAB PAAK というリクルートさんのコワーキングスペースの7Fには4Kディスプレイがありました
スタバで買ったコーヒー豆を PAAK でひくなど
PAAK さんの素晴らしさ
フォアグラといちごぱふぇを同じ日に食べて本当に幸せでした
最後に
今回は3週間もあったのでいろんなインターン生と仲良くなれました.しかも今回来ていたインターン生はみんな強い人たちで,ギークな話がたくさん聞けて,話せて,本当に天国でした.
個人的にはこういう強いエンジニアたちに OCaml の布教,すごいはすける本と TAPL の貸出,型環境という単語の認知ができたことを大変光栄に思っています.
まだ,ここにない,出会い.をたくさん提供して下さったリクルートさんに圧倒的感謝.ここでの出会いをここで終わらせず今後もいろいろと関われたらとても嬉しいです.
ぱふぇるーと,楽しみにしています(*´꒳`*)♪
他のインターン生のブログ
リクルートのインターンで負けてきました - memo-mode
Recruit Holdings Winter Internshipに参加してきた - のほほんびより
Recruit Holdings Winter Internshipに参加してた - あみゅーの( ・´ー・`)どや
Recruit Holdings Winter Internshipに参加した - enkaismのブログ
Recruit Holdings Winter Internship 2015 に参加してきた - きくらげのブログ
Recruit Holdings Winter Internship Advent Calendar 28日目 - 日記