半空洞男女関係

思ったこととかプログラミングしてるときのメモとか色々かいてます。メールはidそのままgmail

はてなインターンに行って高2から使ってるはてなブログのコードを触った

8/11-9/5の4週間、はてなサマーインターンに参加してきた。夏休みの期間、はてな近辺のホテルに宿泊させてもらい、はてなとホテルを往復する毎日を送りながら(時には居酒屋を経由して)、コードについて考えたり、書き続けたりすることができた。更には、高2のころから利用しているはてなブログのコードに触れることができた。(激アツじゃん!!!)


はてなサマーインターン2014

はっきり言って、ここまで集中してプログラミングに取り組めたのは人生で初めてだったと思うし、良い体験が出来た。未だ参加していない人にもぜひ参加して欲しいので、どんなインターンだったのかを振り返りながら、感想エントリを書く。ずいぶんと遅くなりました。

応募する前のこと:自分なんかがはてなインターン?

はてなインターンに応募するときの自分は、様々な理由が重なって、かなり自分の技術力に自信を持てていなかった。自分なんかが応募してしまって良いのだろうかと思うこともあった。ただ、「最終的に参加すべきかどうかは自分が決めることではなく、はてなの社員の方が決めるのだ」「応募しないと始まらないしなー」と自分に言い聞かせて、思考を変えることでなんとか応募できた。だから、はてなインターンに興味のある皆さんへ言いたいのは、とりあえず応募してみようということ。最終的に参加すべきかどうかはあなたではないと思います。あと、Perlは書けなくてもオッケーなんで安心してください。

通過した後のこと:事前課題とはてなグループ

書類選考を通過すると、インターン関係者のみが入れるはてなグループに招待されて、事前にキャッキャウフフできる。そこでさまざまな事務連絡が行われる。事前課題のアナウンスもされた。PerlとJSでLTSVパーザーを書きつつ、それぞれで色々処理とやってみましょう、という感じだった。PerlもJSもちゃんと書くのは初めてだったけど、それぞれオライリー本を片手に、大体の言語の雰囲気をつかむことができた。インターンが始まると、それぞれ課題に対してフィードバックがあってありがたい。「オライリー本は詳しいけどわかりにくい」というイメージだったけれども、初めてのPerlは良い本でした。初めてのRubyも良いよね。


hatena/Hatena-Intern-Exercise2014 · GitHub

去年のインターン生も言っていたけど、初めてのPerlはちゃんとやるとよい。可能なら、続・初めてのPerlもやるとなお良い(僕はできなかった)。折角プロのエンジニアがみっちり付いてくれるので、出来るところはなるべくこなしておいて、突っかかるところを質問しまくれたほうが得だし、有意義になるはず。

始まったはてなインターン:前半二週間

前半二週間は、簡単なダイアリーアプリを作りながら、一通りWebサービスを作ってみながら、はてなの雰囲気に慣れてみるというものだった。流れがとても良く出来ていて、スムーズに頭に入っていったのを覚えている。 

午前中講義、あとは夜まで開発という感じ。でも集中していたのであっという間だ。一つ一つの講義はとっても実践的だった。本を読むのとはまた違う感覚で学べる。

全体的に、みんなテストを頑張って書こうとしていた気がしている。僕はテストを頑張って書こうとした上、設計ミスったので工数が大変なことになった。思ったよりも物作るのは時間がかかるのだった。大体夜遅くまで居ることになってしまっていた。メンターの皆さん付き合って頂いてありがとうございました…。

テストに関して、id:hitode909さんが素敵な記事を書いていて、偶然読んだ。


テスト先に書きたい若者よ - hitode909の日記

特に覚えているもの・印象的だったもの

あまり大きなフレームワークは使わずに、適切に小さなモジュールを組み合わせてWebアプリケーションを作っているという話が印象的だった。また、MVCのModelに当たる部分を「データそのものの型をつくる」Model部と、「DBにアクセスしたり処理をする」Service部に分けていたのも印象的で、分かりやすい。このあたりは、id:moznionさんが去年書いてる。


はてなインターン2013に参加して参りました、そして与太話がしたい - その手の平は尻もつかめるさ

あとid:shimobayashiさんがSequel Proというアプリを使っていて便利そうだったので教えてもらった。データベースの中身を覗いたり、書き込んだりとか色々できる。Macユーザなら入れておいて損はないと思った。今も便利に使ってます!

id:moretさんの新機能を考えるワークショップでペーパープロトタイピングしていた時に、要素を具体的に書くべし、と教えてもらったのはなるほどだった。例えばTwitterみたいなアプリケーションをプロトタイプするなら、「ここにツイート入る」とかじゃなくて、「完全に天下一品食べたくなったので次外で何か一緒に食べる人天下一品でお願いします」とか具体的に書いてあったほうが良いということだ。このツイートを受けて「あっふぁぼってみよう」とか思って行動を決められるし良いなーと思う。実際の体験に近い。紙に書いている時も、「どんなこと書くかな」とユーザにもっと寄って考えるきっかけになるのではないか。

中間課題

一通り講義が終わると、中間課題がある。ここでは、今まで作ったWebアプリを改造したりしてオリジナルのWebアプリを作る。最初なかなか良いアイディアが出ず、「とりあえず飯行くぞ!!!!」と言ってカレーを食べに行ったら他人のアイディアを引き出すのに他のメンバーとともに貢献し、自分はもやもやし続けたまま会社に戻るということがあったのを唐突に思い出した。

色々悩んだ結果、自分はCoffeeColliderという言語の投稿サイトを作った。CoffeeColliderはSuperColliderという音を生成するための言語からインスパイアされた言語で、CoffeeScriptを使って音を生成することができる。SuperColliderはインストールしなくてはならないけれども、CoffeeColliderはWeb上で試すことができる。詳しくは作者さんの記事を参照してください。


ブラウザ音響プログラミング言語 CoffeeCollider v0.1.0 リリース - 音の鳴るブログ

CoffeeColliderがもっと盛り上がったら楽しいのになと思ってコードを書いていた。これについてはまた後日書きたい。(今Rubyで書き直してて、それが公開できたら書く) 

f:id:mactkg:20140814101206j:plain

開発し終わってプレゼン当日の私 (回らないのは正常)

みんな面白いものを作っていて、大規模コースのid:flankyhiroはブログ記事をNavie Bayes分類器にかけて、ブログの内容に合ったフォントをサジェストするみたいなことをしてたりとか、id:doughnutomoは読まれないと記事が消えていってしまうブログとかを作ってたりとかして個性的だった。最優秀を取ったid:spring_rainingのコンテンツが大きく表示されるブログは本当に良かった。今ではその成果の一部がTumblrのテーマとして公開されている。


背景に画像がでっかく表示されるTumblrテーマを作りました。 - harusamex.blog

TGIF

f:id:mactkg:20140905201922j:plain

最終日のTGIFの写真なので全体的にノリがおかしい 左からid:hitode909さん, 私, id:Windymelt

はてなにはTGIF(Thanks God, It's Friday)っていう文化があって、隔週土曜日で社内イベントをやっている。はてなランチを担当してくれているお姉さんがまた定時前はてなにやってきて、ホットドッグとかおにぎりとか、ぱくぱくつまめるパーティー料理を広げてくれる。定時になって、料理につられた(!?)社員さんたちがビールをテーブルにばら撒くとTGIFが始まる。東京支社とビデオチャットでつながっていて、ここ2週間の振り返りを行う。社員による投票制度があって、みんなでわいわいしながら、この機能リリースは最高だったじゃん!!! とランキング形式で色々取り上げる。最初は謎のテンションで半分付いていけなかったけど、後半は割と楽しんでた気がする。時間経つとみんなボドゲ始めたりするので合流した。わいわいしていて、非常にはてならしいなと感じた。

もう折り返しかはてなインターン :後半二週間

後半になると、実際の業務チームに配属される。今年の選択肢も2つで、はてなブログか、はてなブックマーク。僕ははてなブログをよく使うので、はてなブログに決めた。

まず最初に2週間で扱うテーマを決める。iOSのアプリを改良してみたりとか、おもしろ機能を付けてみたりなどのアイディアも出たが、最終的にはoEmbedへの対応を行うことになった。相方はid:Windymeltで、メンターはid:hitode909さん。打倒はてなブックマークを目標の1つに頑張った。写真にはメンターによる演出が含まれています。

f:id:mactkg:20140902184128j:plain

相方のid:Windymeltと協力してタスクを終了する様子

インターネット越しに見ていたエンジニアにメンターをしてもらい、インターネットにあったスライド越しに見ていた開発手法を実際に経験することができる。さらに、自分の書いたコードに対してコードレビューをしてもらえるというのは非常に「嬉しく」思った。自分の書くコードに対して具体的な評価が来ることは普段、ほとんど無いからだ。大学にいても、動けばとりあえずOKの世界。バイト先でコードを書くこともあるけれど、内的な品質は自分で保つしか無かった。しかしここでは、ペアプロ形式でコードを書いたり、コードレビューをしてもらったりすることで、内的な品質もちゃんと見てもらえる。こんなこと、普段の僕にはなかったと思う。(なお、前半のコードに対してもコードレビューしてもらえます。)

印象的だったデザイナーさんとのやりとり

デザイナーid:uedayさんとのやり取りも印象的だった。

oEmbedに埋め込むWidgetの製作を行う時のこと。レイアウトを相談して決めた後に、templateに適当に必要な情報を詰めたブランチを教えるだけで、あとはよしなにやってくれた。必要なことがあれば、Perlのコードも触っていたのは驚いた。「git grepしたらそれっぽいの見つけたんで、修正しました。」と書いていて、これがプロかーと思った。テストは落ちてしまったのだけれども、そんなのはプログラマがさっと修正すれば良いと思う。それよりも、デザイナーさんがこうしたところを触れられる空気感が大切かも…?というのは自論ですがそう思ったりする。それにしても、作ったものにデザインが当たるのは非常に素晴らしい。作った時のテンションが倍くらいになった。

リリース!!!!

最終的にリリースしたものは3つで、ブログカードと、oEmbed API、それにブログカードのOGP対応(インターネットカードという名前案もあった)だ。最初のブログカードをリリースした日はYAPC::Asiaの1日目で、はてなにはほとんど人が居なかった。まだ使ってない方は、どうぞ、ご利用ください。はてなブログの編集画面でURLをペーストです。


はてなブログの記事を紹介しやすくしました。URLを貼るだけで、コンパクトに整ったブログカードを貼り付けることができます【追記あり】 - はてなブログ開発ブログ


はてなブログoEmbed APIを公開しました。ブログカードの情報をAPIで取得できます(開発者向け) - はてなブログ開発ブログ


「ブログカード」をOGPなどに対応しました。さまざまなWebページをコンパクトに整形して掲載できます - はてなブログ開発ブログ

幸い好評で、たくさんの人に使っていただくことができた。リリースした翌々日の新着ブログメールをいつものように見ていると、ナチュラルに使ってくれている購読中のユーザさんが居て、あの時は感極まって泣きそうになったのを覚えている。なんでなんだろう…(お酒が入っていた気もします)。

ユーザからのフィードバックも早く、コメント欄やブクマコメで意見をいただき、吟味した上で対応していくというのは、非常にはてなっぽいなあとリリース後にコードを書きながら感じていた。ユーザとの適度な近さや、この開発スピード感は素敵ではないかと思う。まだまだ修正したいポイントはいくつもあったが、なんとかまとまったとは思う。

同じはてなブログに配属されたid:masawadaid:yebis0942の作った過去記事挿入機能も便利だ。年末絶対捗るよね。絶対使う。

成果報告会

f:id:mactkg:20140904211221j:plain

成果報告会で使うスライドに関してメンターから指導を受ける様子

インターン最終日には成果報告会がある。はてな社員の投票によって、どのチームが良かったかを決めてわいわいする。どんな良い機能をリリースしても、ここでコケてしまっては優勝できない。はてなブログからは埋め込み系と過去記事貼り付け&過去言及一覧の2チームとなった。

投票の結果、1位をいただくことができた。ありがとうございます!!! Amazonギフト券を8万分貰ったので、うち4万円を充てたことにしてインターンメンバーで三嶋亭に行った。2万円分のAmazonギフト券で生活必需品を買うぞ…。それにしても最高の肉だったよ。

インターン全体を通しての感想

と、内容にフォーカスしながら、流れを追ってインターン全体をざっと振り返ってみた。ずいぶんと長くなってしまった。このあとは全体を通しての感想を書く。

社風の話

初めてこうした企業の内部に入ったのだけれど、はてなは全体的に社員同士仲がよいなあという印象だった。TGIFやはてなランチボドゲのあるカフェスペースなどの仕組みはそうした部分が生きているように見えた。あと本棚で本を貸し借りするのも良かった。


はてな京都オフィスに憩いの場を作ってみた - Hatena Designer’s Blog

4週間居たけど、基本的に人間の生活が根本にあって、あくまでもその上に仕事が存在していることをはてなは重要視しているように見えた。当たり前の話かもしれないけど。他の企業に行っていないのでなんとも言えないけれども、企業の規模であるとか、そういうのを見ても、そうしたところを感じる。そのあたりは、この記事を読むとわかりやすい。

はてなエンジニア座談会 - 株式会社はてな

人の話

愉快な人がたくさんいる。それだけで日々楽しく暮らせるなと思う。

お酒の話

大体1週間に数回飲むという感じになっていた。インターンが終わってもそのテンションで飲むと破綻するので注意。でも飲みに行くことで色々な人と話せて楽しかった。id:jkondo会長を囲む会をid:doughnutomoが企画してくれたのは素晴らしかった。流石最年長!!!(実際あんまり年齢気にすることなくタメで話しまくっていた)

その他にも、最近社長に就任されたid:chris4403社長を囲んでid:stanaka CTOやid:onishi本部長(!)とお話する会も設けられて、ざっくばらんに様々な話を聞けた。こうした機会もなかなか無いかと思う。ありがたい。

未来の話

あまりプログラマに進んでなる気はしなかったのだけれど、はてな来てみて、良いかもなあと感じた。一日中コードについて考えられる環境すごい。チームでコードを書くのはまた楽しい。ちょっとこの業界に興味がわいたし、反対に大学もうちょい頑張ったほうがよい、今しかできないこともあるだろうと感じられた。秋学期につながるインターンだった。

はてなインターン2014終了のお知らせ

ということで、後半雑になってしまったけれども、これにて僕のはてなインターン2014を終了としたいと思う。インターン委員長のid:shiba_yu36さんをはじめ、はてなのみなさまには感謝の気持ちでいっぱいです。本当にお世話になりました。今後ともよろしくお願いいたします(インターネットユーザとして)。

そういえばそろそろはてなランチシックみたいのが出てきた。胃袋掴まれる可能性大いにあるので、未来のインターン生は注意して欲しい。それではそろそろ終わります。長文お疲れ様でした。