cocuh's note

type(あうとぷっと) -> 駄文

ピクシブでインターンしてきました!

pixiv 2015 SPRING BOOT CAMPに参加してきました。
(期間的には10営業日ですね。)

abstractだけを述べると「めっちゃたのしかったです。」となっちゃいます。詳しくは下に書きます。

f:id:cocu_628496:20150305153525j:plain:w365

どうして参加したの

風のうわさ*1ピクシブインターンが楽しいという話を聴いたのがキッカケです。
昨夏の講義資料がめちゃくちゃ楽しそうだったというのがあります。

なんとなく、github選考怖かったのでやめて一般選考を受けました。
github選考でも受かったよ」と言っていただけたので、今後参加する方は参考にしてください。

自分のやってることについて語った駄文をエントリーフォームで投げて、軽く面接*2をして、メールが届くという感じでした。倍率が10うんちゃらとかそうじゃなかったとか。こわい。

pixivって某phpだし某phpだし某phpだしと身構えてましたがそんなことはなく、 幸せにpython書けました(後述)。

どんな感じだったの

会社の雰囲気はこんなかんじです。*3
勤務時間は10時-19時ですね。

f:id:cocu_628496:20150309093323j:plain:w512

f:id:cocu_628496:20150309093333j:plain:w512

f:id:cocu_628496:20150303095700j:plain:w512

かわいいにじげんのおんなのこみながらしごとできるのってさいこうでは。

写真だけ見るとなんかめっちゃベンチャーっぽくて遊んでるっぽいようにみえますけど、 ちゃんと真面目に仕事しています。
オンオフしっかりしてると思いました。

にじげんいっぱいのおふぃすに関しては、
別の方がblogで書いてくれるでしょう。(丸投げ)

私は椅子に注目します。椅子がオカムラbaronです!
(写真撮るの忘れた…)

すごい座り心地よい。良さ。自宅にも欲しい。*4

でも、最近流行りのスタンディングデスクも良いです。
眠気覚まししたいときとか使えます。
開発してる時は1時間交代でスタンディングデスクとbaronを往復してました。・ω・

インターンの雰囲気ですが、
茨城県の某学園都市に住んでいてピクシブまで1.5時間ぐらいですが、ホテルを用意していただきました。(東京都民は自宅通いな感じでした)
別チームも巻き込んで一緒に 夜ふかし 夜の開発会(1回だけでしたが)もしたりしました。

でも、インターン参加者でLinuxユーザーが一人だけってさみしいじゃん。
ArchLinux使いやすいよ1!!!

どういうことしたの

やったことは簡単に言えば、『ハッカソン』です。
グループで「pixivらしいゲーム攻略サイトを作る」というお題でアプリケーションを開発するという感じでした。
(お題を公開しても聞き忘れたので念の為ぼかします(´・ω・`))
(公開しても大丈夫であればコメントください)

(大丈夫らしいので書きました✌)

だいたい4チームでした。
私のチームは全然使わなかったですけど、
pixivピクシブ大百科のコードをいただき、
phpもぐもぐするのは楽しかったです。
あの時代のphp読んでるとすごい時代感じますね。

他には、講義やいくつかの課題もありました。

特徴的なことはなに?

個人的に興味深かったことは、エンジニアだけでなく総合職の方が一緒にグループになったということです(3対1ぐらい)。

ピクシブでは、業務のグループでもエンジニアと総合職が一緒に作業するようです。
たしかに実際の仕事(特にB2C)だと、エンジニアは開発だけしていればよいと言うわけでなく、 問題発見・仮説検証・他企業さんとの連携など開発以外の仕事もやれるほうが要件定義が楽ですし、自分が顧客としやすいですし、広い視点で考えることが出来ます。というより、その方が楽しいですし。

会社説明会によるとエンジニアが6割で総合職が4割だそうですし、実際の開発チームにもデザイナーや総合職が同じぐらいの割合で入っている印象を受けたので、そういう雰囲気を体験してもらいたい背景もあるのかなと思いました。

そんなこともあり、一緒に作業してみるといろいろと考え方と視点が違って楽しかったです。
エンジニアだと実装が楽しくて暴走しがちなこともありますが、
(2週間ですが)スケジュールを建てて どこまでやるかなにをしないかこのプロダクトの何が重要か を考えながら開発するのは新鮮で楽しかったです。
『チームで何かを作る』ということが体験できたと感じます。

なにで開発したの

特に言語など制限は特になく、とにかくplayableなものを作れ!という話でした。ピクシブという会社自体が、言語に対するこだわりはそれほどないようです*5
(某phpなのはたぶん移行のコストとかパフォーマンスとかそういうのなんだろうな)

webアプリケーションになりそうだとグループで話になったので、開発チームをよくある サーバーサイドクライアントサイドに分けました。javascriptにっょぃ方(@_makky_)が同じチームだったので クライアントサイド を押し付けて*6、私はサーバーサイドをやることになりました。

完全に私の趣味で、 PythonPyramid でwebアプリケーションを開発しました。
一緒に開発するメンバー(4人のうち2人)がpython触ったことあるし、あんまり Rails 好きじゃないし、環境構築もデプロイも楽だし*7やっぱり Pyramid でしょ!!!
という本当に私の趣味で決めました。後悔はしていません。

開発手法は?

githubのprivate repositoryをいただき、よくあるpull-req方式でやりました。(歓喜の声)*8
issueジョリジョリ書きながらpull-req投げていくスタイルです。
メンバーのアイコンとgithub idの公開了承取りました。

f:id:cocu_628496:20150316155318p:plain:w512



とりあえずissue建てる私のノリからみんなでwaiwai楽しい感じになりました。
(新宿御苑を散策するという謎のissue)

f:id:cocu_628496:20150316155155p:plain:w512



メンバー全員がお酒好きというやばい感じだったので、
インターン期間中は毎日飲みました。:sake:

アルコール駆動開発だ!!!*9

f:id:cocu_628496:20150316155418p:plain:w512

f:id:cocu_628496:20150316155544p:plain:w512

※他のグループは馬鹿みたいに飲んでいないので安心してください。

結局どんなのつくったの

初日にみんなでお酒飲みながらゲーム攻略サイトについて考えていたら、「ゲーム作ってソース公開したらゲーム攻略サイトじゃね?」 と私が変なこと言っちゃったせいで、ゲーム攻略サイトじゃなくてゲーム作るサイトになりました。

「pixivの絵師とpixiv小説とpixiv音楽*10を混ぜあわせて、 ノベゲー作れるようにしよう!みんな酒好きだし、混ぜあわせるし、名前はshakerね!」

とめっちゃ軽いノリでした。

ちなみに、要件とシステム構成は?

ノベゲー作るサイトで交流と創作の促進が目標だったので、
欲しい機能は大きく下の感じです。

  • ゲームプレイ画面(データをjsonで振らせてjsごりごり)
    • 選択肢表示
    • メッセージ切り替え
    • 背景画像切り替え

f:id:cocu_628496:20150316180537p:plain:w300

  • ゲーム編集画面

f:id:cocu_628496:20150316180757p:plain:w300

テーブル構成はこんな感じですね。sqliteです。(あんまり見ても嬉しくない情報)

f:id:cocu_628496:20150316181258p:plain:w300

  • project(ひとつのゲーム)があって、コメントがあって協力者募集があってって感じです。
  • 左のほうのchapterが章でbranchが選択肢です。
  • 選択肢から次のchapterが決まるので、compositeパターンのようになってます。

一番(個人的に)悩んだのは、木構造をどのようにデータベースに入れるかという問題です。
そもそも、木構造みたいなものをもちたいなら木構造だけmongoとかのほうが良さそうだしそうすべきかもしれないです。
でも、RDBMSに突っ込みたいと思った時、どうすればよさ気なのか思考実験するのが楽しかったです。
この解決法だれか考えている方いらしたらぜひ教えてください。

10日もない実装なので、オーダーとか考えてないやばい実装です。
セッション管理すら諦めていますので、CSRFとかできるイケてるサイトです。

結局どうだったの

準優勝でした✌

正直、順位とか考えてなくて楽しめればいいやと思っていたので、
ラッキーだぃぇぃってかんじです。
別グループにcontributeとかもしてたし

個人的に一番ヨッシャと思ったのはかたついさん(@catatsuy)に「XSS見つからなくってくそぉってなった」って言われたことです✌
こういうところでセキュキャン卒業生をアッピルしていく所存。
私じゃなくて主に@_makky_ががんばってくれました。 f:id:cocu_628496:20150316182258p:plain:w512

ちなみに、DoSするのはさっきの木構造の深さをめっちゃ深くすれば簡単です。

ほかになんかやったの

エンジニア講義がかなり面白かったです。
技術力の高いことをバババババとする講義もあれば、YAGNIのような開発思想の話もあれば、lean start upgrowthに関する講義もあれば、と幅広く講義をしていただきました。

スライド公開している方がいらっちゃるので観てみてください楽しいのでどうぞ。

クラウドとオンプレ / on the Cloud or Premises // Speaker Deck

ピクシブ広告サーバー開発・運用の軌跡 2015春インターン講義資料 // Speaker Deck

感想は?

めっちゃ楽しかったです。 (lack of japanese skill)

今まで知らなかった視点を得ることが出来ました。
(お酒も飲めたし飲み仲間も増えたし)

(ちょっと心残りなのはインターン中に別案件が降ってきたりして集中できなかったことですね。。。)

振り返ってみると、インターンのエントリーに書いてあることが得られたことそのものを示していると感じました。

(https://ssl.pixiv.net/recruit/entry/entry_intern_spring.php より引用)

■このインターンシップで得られること

・学生向けのプログラムではなく、実際に就業を体験することで、仕事とはどんなものか、緊張と醍醐味を理解できる

・自分のやりたいこと、考えを反映でき、それがビジネスで通用するか体験できる弊社で活躍する社員からのフィードバックを受け、エンジニアとして、ディレクターとして必要な目線を持ち帰ってください

・「働くこと」のやりがい、楽しさ、厳しさを知り、今後の社会人生活に活かすことができる想像やネット情報からのみではない、自分の軸を形成してください

・チームやユーザーと共にサービスやイベントを成功させたときの達成感を味わうことができる

「またおいでよ!」と誘われたので、頑張って行きたいと思います(`・ω・´)ゞ。
たぶん雰囲気的にはかなり自分にあっている気がしました。議論楽しいし。

さいごに

インターン生なのに店員さんに顔を覚えられて行きつけの店となった鍛冶屋 文蔵に感謝して締めたいと思います*11




インターン
ミナサン、
イキマショウ。






これからまたおしごとの日々がはじまる。がんばるぞい

*1:セキュリティキャンプ界隈ですね

*2:MacBookProにArchLinux入れているせいでwebcamのドライバがなくてカメラ使えなかったという悲しいこともありました

*3:なんとなく「大学の研究室」の雰囲気がします

*4:こじきするな

*5:広告鯖がgolangですし

*6:途中から私もクライアントやりましたけど

*7:個人的な感想です

*8:PRで開発するならgithubが一番幸せだと思っているので

*9:チーム名がコレです。ADD(Alcohol Driven Development)

*10:出てきたらの話だけど

*11:1杯呑んで1.5kぐらいなのは普通に考えて安い