はてなサマーインターン2013に参加しました

はてなサマーインターン2013に参加しました。
いろいろあって出遅れてしまいましたが、インターンに参加した感想を書き残しておこうと思います。

f:id:questbeat:20130812100748j:plain

他の参加者はみな既に良い感想エントリを公開されています。こちらもどうぞ。

インターンへの応募

僕がはてなサマーインターンに応募したのは今回が初めてではなくて、実は去年も応募していました。
去年の僕はまだ実力不足だったため参加はかなわず、一時は興味を失いかけていましたが、去年の参加者の感想エントリを読んでいるととても面白そうで、やはり一度行ってみたいと思いました。
その日から、来年のはてなサマーインターンに参加できるぐらいの技術力を身につけてやろうと、はてなサマーインターン参加をひとつの目標のようなものとして捉えて力をつけてきました。
やったことといえばiOS/MacOSアプリ開発とオープンソース活動ぐらいですが、それでも去年よりは自信を持って応募できるくらいにはなりました。
そして今回、無事にはてなサマーインターン2013への参加することができたのでした。(面接はありませんでした :D)

院試に研究に忙しい大学4年

今回のはてなインターンは 8/12〜9/6 までの全20日という日程で行われました。
僕は期間中に院試を控えており、さらにインターン終了と同時に研究発表のためスイスに行かなくてはいけないため、参加できるかどうかという感じでしたが、はてなサマーインターンでは学業優先ということで、幸い何日か休みを頂くことができました。

他にも「インターン行きたいけど、予定が合わなくて難しい」と思っている方がいるかもしれませんが、数日程度のバッティングであれば問題なく参加できると思います。
ただ、この後も書きますがインターン前半は重要な勉強期間のため全日参加が望ましいです。

事前学習

はてなサマーインターンの参加者には事前課題が課せられます。
内容はPerlJavaScriptの簡単なものですが、僕はまず Perl の勉強から始める必要がありました。
勉強に使ったのはもちろんこの本「初めてのPerl」。

初めてのPerl 第6版

初めてのPerl 第6版

院試勉強の合間にこの本を読んで勉強していました。これは本当に良い本です。
ただ、この本の中でのPerlは仕事を便利にするための道具でしかなく、この言語で一体どうやってWebアプリケーション開発ができるんだろうと思っていましたが、そこは続編である「続・初めてのPerl」も読むべきだったようです。

続・初めてのPerl 改訂第2版

続・初めてのPerl 改訂第2版

ですが、参加してみて役に立ったのはほとんど「初めてのPerl」の内容だったので、最低でもこれだけ読んでおけばいいのかもしれません。
Perlを使ったオブジェクト指向プログラミングははてな教科書を自分で読んで勉強することもできますからね。

事前準備

インターンでは最初に環境構築のための時間が設けられています。
そのため事前に環境構築を全部済ませておく必要はありませんが、最低でもすぐにコードが書けるような手に馴染んだエディタだけは準備しておく必要があります。

僕は当然Vimです。

インターン前半

はてなサマーインターンの後半では「はてなブックマーク」や「はてなブログ」のチームに参加し、実際のサービスにコミットすることになります。
なので、前半の2週間では社員と同等の品質のコードが書けるようになるための講義を受け、Webアプリケーションの作り方を勉強します。

講義の内容はこんな感じでした。

  • Perl の基本的な文法・書き方
  • DB の基礎知識、SQL の知識、O/R マッパとはなにか
  • Javascript の基本的な文法・書き方、イベントドリブンなプログラミングの知識
  • WAF (Web Application Framework) の知識、使い方
  • 簡単な iOS アプリの作成
  • 評価アルゴリズムの検討・考察 (講義・演習では、はてなブックマークのホットエントリーアルゴリズムを題材に)
  • Web サービスの企画ワークショップ

はてなインターン2013に参加して参りました、そして与太話がしたい

DBの講義ではコマンドラインで動作する日記ツールを作るのですが、その後のWAFの講義ではこのツールがWebアプリケーションに進化します。
この流れがとても面白くて興奮しました。

講義の中で特に印象に残ったのは、WAFを使わないということと、ModelをさらにModel層とService層とに分けるということでした。
こういうことも、「実際にはてなではこうしています」という教えられ方なので、自信を持って勉強することができます。

1日の流れとしては、午前中は講義、午後はもくもく課題をやるという感じです。
うまくいけば時間終了までに課題を終えることができますが、課題の再提出などもあり、ホテルに戻ってからもほとんどコードを書いていたと思います。
それくらい1日の密度が高いので、前半過程では用事などで1日でも抜けてしまうとすごく苦労します。

インターン前半は本当に忙しく感じますが、はてな社員の方は講義や課題のレビューでそれ以上に忙しいはずです(それもインターンのためだけに)。
そのおかげで前半のたった2週間にこれだけの内容を詰め込めるわけですし、これだけでもはてなインターンに参加する価値は十分にあると思いました。

f:id:questbeat:20130823143518j:plain

インターン期間中の過ごし方

休日の過ごし方は基本的に自由ですが、鴨川でビールを飲んだり、京都観光をしながらビールを飲んだりするイベントが用意されています。
僕は研究発表の準備のためこれらのイベントには参加できませんでしたが、業務終了後に本社で人狼やボードゲームをして楽しみました。

インターン後半

後半からはチームに分かれてサービスの開発に参加します。
僕ははてなブログチームに参加し、id:cockscomb さんのもとではてなブログアプリのiPad対応を担当することになりました。

参考: iPadでも書きやすく、読みやすい! iOSアプリをユニバーサルアプリ化しました

id:cockscomb さんはジョブズの精神を大切に守るiOSエキスパートで、去年のインターンではてなブログアプリを作ったまさにその人。
今回のインターンではiOSの講義を担当し、素晴らしい教科書とサンプルコードを用意してくださいました。
もともとiOSが得意という体で参加した今回のインターンですが、id:cockscomb さんのコードから学ぶことは多く、特にWebサービス用クライアント型iOSアプリの良い実装を学ぶことができたのは大きな収穫という感じです。

さて、今回のiPad対応にあたって一番苦労したのはUIです。
ユニバーサルアプリの開発はこれが初めてでしたし、iPhone版のUIがほぼ完成されていて、そこからiPadにどう移植するかという感じだったので、UI設計は慎重に行う必要がありました。

そこで、まず最初にペーパープロトタイピングを行いました。

f:id:questbeat:20130903182116j:plain

iPadの広い画面を活かす」こと、それから「iPhone版と同じ感覚で操作できる」ことを意識して設計しました。
その結果できたものがこちら。

f:id:questbeat:20130924012848j:plain

かっこいい!!
実物を見るまで不安でしたが、納得のいくアプリに仕上がりました。

編集画面のUIもきちんとiPadに最適化してあります。(ここが一番苦労しました)

f:id:questbeat:20130924012850j:plain

もちろんデバイスの回転もサポートしていますし、iPhoneでは全画面表示だったものがポップアップで表示されるようになっていたりと、いろいろ頑張りました。
iPadをお持ちの方は(僕のオススメはiPad miniです)、ぜひ便利になったはてなブログアプリでブログを書いてみてください。

成果報告会

はてなインターンの最終日には成果報告会があり、みんなが後半過程を使って作った成果物を発表し、投票によって優秀なチームを表彰しました。
残念ながら僕はそのとき既にドイツ・フランクフルト行きの飛行機の中だったので、ビデオレターという形での発表になりました。

f:id:questbeat:20130924015947p:plain

右下にいる手話の人みたいなのが僕です。
ビデオは動画編集エキスパートである id:cockscomb さんが編集してくれました。ありがとうございます。

投票の結果は全7チーム中同率2位でした。
優勝できかったのは悔しいですが、他のチームの成果物も本当によくできていて、面白い結果になったなあという感じです。
もっと苦労した点をアピールしていれば勝てたかもしれません。

商品はAmazonギフト券2万円分。僕は1人チームなのでちょっと得した感があります・・!
さっそく頂いたギフト券を使ってKindle Paperwhiteのニューモデルを予約しました。

Kindle Paperwhite(ニューモデル)

Kindle Paperwhite(ニューモデル)

おわりに

id:moznion さんも書いていましたが、はてなインターンは「金を払ってでも受けたい!」というレベルの内容なので、参加できて本当にラッキーでした。
もし、この記事を読んではてなサマーインターンに興味を持った人がいれば、ぜひ来年の「はてなサマーインターン2014」に応募してほしいと思います。

お世話になりましたはてな社員の方々、ブログチームの方々、後半過程でご指導頂きました id:cockscomb さんに心より感謝致します。
また、終始サポートして頂きました id:tomomii さんに深く感謝いたします。

最後に、一緒にアツい夏を過ごしたインターン生の方々、本当にありがとうございました。

おまけ

本編に書くほどのことでもないようなことを書いていきます。

ホテル

ホテルは本社から徒歩3分程度の近さで、通勤に関しては運動不足が本気で気になるくらいの便利さでした。
部屋も綺麗で、隣から奇声が聞こえること以外は概ね満足でした。
(ちなみに僕は id:moznion という芸人っぽい人と同室でした)

ホテルのテレビでは毎週「デュアルソーダブルカッター」の紹介が流れていて、もし優勝したらこれを買って家の車を真っ二つにするつもりだったのですが、できませんでした。

飲み物

はてな本社では飲み物が無限に出てきます。
僕は「豆乳いちご」の飲み過ぎで毎日トイレが大変でした。

f:id:questbeat:20130828154519j:plain