「?でわっしょい」してきたぞ - はてなインターン2018参加記 -

?でわっしょい

?でわっしょい

「超ひだまつり」以外でひだまりスケッチの話をたくさんしたこと。同い年のオタクとあっちこっちの話で盛り上がったこと。毎日ホテルの自室に誰かが来ていて、中学校の修学旅行の時のようなテンションが1ヶ月続いたこと。タイトなスケジュールでWebアプリケーションのコードを書きまくったこと。毎日のように美味い酒を飲み、飯を食べたこと。いろいろなことが新鮮で、あっという間に過ぎていった1ヶ月だった。

応募

フォロワーの id:spring_raining さんや id:upamune さんの記事を読んでいたので、4月あたりから今年ははてなインターンに応募しようと決めていた。ので、募集が始まってすぐに応募した。rot13のデコーダを書くように言われたため爆速で書いて出した

その後審査にパスして面談へ進み、東京オフィスで id:motemen さんと30分くらい話をした。motemenさんは部屋へ入るとすぐ僕の顔を見て「Monad in TypeScript の人ですよね?」とおっしゃった。はてなのCTOに自分の書いた記事が読まれているということが衝撃的で、この経験はいまだにモチベーションになっている。

面談の結果、無事に参加できることになった。普段お世話になっているインターン先にはお休みを頂戴し、千葉から新幹線で京都へと向かった。

初日

初日はアイスブレイクの日だった。各自がLT形式で自己紹介をしていった。id:YaaMaa さんの自己紹介が最高だった。

前半課程

はてなインターンは前半過程と後半過程に分かれており、前半過程では「はてなダイアリー」を模した日記のWebアプリケーションの開発を通していろいろな知見を得ることができた。講義・演習形式で全インターン生が共通のカリキュラムをこなし、各回の演習にはコードレビューや講評を通じて丁寧なフィードバックが返ってきた。

前半過程は今年からカリキュラムが刷新されたらしく、Perl & Scalaだった内容がGo & TypeScriptな内容になっていた。個人的にはPerlを書いたことがなかったため、今年からのカリキュラムのほうがスムーズに進めることができてよかったと思う。(逆にPerl & Scalaだったらそれはそれで勉強になったとは思う。)

Webアプリケーション開発と一言で言っても、GraphQL API, Session + Cookieによる認証, React.js + TypeScriptによるSPA開発, AWS(中の人が来て、ECSとかFargateの使い方を教えてくれた), 機械学習入門(はてブのコメントに対して悪意のあるコメントかどうかを判定する単純パーセプトロンを実装した)と本当に幅広い内容だった。各回の講義はそれぞれ別のエンジニアが担当されていて、人によって教え方や考え方に色があって面白かった。

前半過程を振り返ると、自分がカバーできている知識の範囲というか、基礎力がまだ足りていなかったなと実感した(この点は最終日の面談で id:motemen さんにも指摘していただいた )。特にデータベースと認証周りの知見が足りないので、時間がある学生のうちに手を動かして理解を深めておきたい。あとは講義では触れられなかったけれどWebサーバの設定(ネットワーク周りとかキャッシュとか)もある程度知っておきたいなという気持ちになった。次のISUCONに出ることにしたのでそこでまとめてキャッチアップしたい…

後半過程

後半過程では1~2人ずつ5つのチームに配属され、チームごとに機能追加や改善等のタスクに取り掛かった。私ははてなブログの開発をしてみたくてコンテンツプラットフォームを志望したが、ブログチームは忙しく受け入れができなくなり、僕の配属先は今年から新設された社長コース(特命!社長とWebサービス開発コース)になった。相方は id:turtar_fms だった。

社長コースは、はてなの代表の id:chris4403 さんとCTOの id:motemen さんと一緒に新規サービスを作っていこうというコースだった(超豪華!)。新規サービス開発ということで他チームよりも圧倒的にインターン生の裁量があり、自分たちの作りたいものをお二人の超強力なサポートのもと開発していく、という流れだった。

今回は"はてな匿名ダイアリーのいい話"というAlexa Skill(AmazonスマートスピーカーAlexaのアプリ)と"無常はてな"というWebサービスの2つを企画・開発した。

はてな匿名ダイアリーのいい話

はてな匿名ダイアリーに投稿された記事のうち、いい話をAlexaが読み上げてくれるというAlexa Skillを開発した。現在ストアに申請中でもうすぐ公開予定(4回くらいリジェクトされた)。 リリースされました!!!

labo.hatenastaff.com

gigazineさんに取り上げられました!しかも利用例の動画つき!!!

gigazine.net

youtu.be

朝起きてすぐや寝る前など、好きなタイミングで「いい話だな…」という気持ちになることができる。いい話の取得にははてなブックマークでつけられたタグ・ジャンルなどのメタデータを利用した。

工夫したのはいい話のフィルタリングで、いい話かどうかというのは官能評価なので判別が難しい。機械学習を使っても良さそうだったけれど時間がかかりそうなのでやめた。今回は夜寝る前に聞きたいタイプのいい話に絞ることにして、特定のジャンル・タグの投稿( 男女 タグはドロドロしていてつらいのでやめる等)や、極端に文字数が長い/短い投稿は切り捨てるようにした。

Amazonスマートスピーカーということで、AWS Lambdaでシュッと書くことができた。全体の構成はこんな感じ。

f:id:E_ntyo:20180907184546p:plain
はてな匿名ダイアリーのいい話」の裏側

無常はてな

無常はてなは、id:turtar_fms が土曜日の朝4時に投稿したジャストアイデアのリスト(のちに 遺言 と呼ばれる)から産まれたWebサービスインターン最終日に社内リリースをした。重要な機能がいくつか実装できず外部向けにリリースするには至らなかったのが悔しい。

f:id:E_ntyo:20180907181211p:plain
遺言

ユーザ投稿型のWebサービスで、特徴はこうだ。

  1. 投稿の検索ができず、トップページに投稿がランダムで数件表示される
  2. トップページで出会った投稿は共有用URLを発行することができるが、そのURLは5分で失効する。ただし、共有用URLのページから再度その投稿を共有することができる。

f:id:E_ntyo:20180907183458p:plain
トップページ

f:id:E_ntyo:20180907183734p:plain
投稿の全文を確認できる画面。リロードすると読めなくなる。

f:id:E_ntyo:20180907183836p:plain
記事をシェアしてから5分経つと読めなくなる

読む側は、面白い記事が話題になると「消えちゃうから早く読まなきゃ」となり、書く方は「5分で消える」という制約のもとでいかに多くのインプレッションを得られるかというゲームを楽しむことができる。

id:motemen さんと相談して GAE/Go環境で作ることにした。フロントエンドは前半過程でReact.js + TypeScriptの構成を触ったのでそれを採用した。状態管理はrxjsで実装した。デザインフレームワークにはTypeScript CompatibleなAnt Designを使った。

f:id:E_ntyo:20180907184350p:plain
無常はてなの裏側

最終日の今日は後半過程の成果を発表し、社員の投票でランク付けがされた。社長コースは4位(5チーム中)だった。せめてどちらか一方でもリリースできていれば…

待遇

往復の交通費,1ヶ月のホテル代,ホテルでの朝食, オフィスランチが提供される。最高!夜は頻繁に飲み会に連れて行かれるため夕飯代も浮く…!

京都観光企画や id:onishi さん, id:chris4403 さんと飲みに行く会なんかもあって、楽しくて時間があっという間に過ぎてしまう。

所感

はてなインターン、噂には聞いていたけれど最高だった。id:motemen さんが初日に「インターネットへ還元するつもりでインターンをやっている」と仰っていたが、まさにそのとおりだと思う。講義の準備や教材の用意など、社員が結構な時間を使って準備をしていた様子が伺えたし、社内の雰囲気からインターン生への愛みたいなものも感じた。こんなにいたれり尽くせりなインターンは初めてだった。

以下はインターン生&社員さんへのメッセージです。本当にお世話になりました!!!

  • id:motemen マジで格好良かったです。自分が詰まっているところをVSCodeのLive Shareでササッと編集していって自分の仕事に戻っていった時はビリビリシビれました。最終日の懇親会中に黙々と無常はてなにコミットしてくれていたのも格好良かったです。Suzuriで売っているTシャツが比較的リーズナブルなのも格好良かったです。買いました。本当にお世話になりました。

  • id:chris4403 ほたて(成果発表の投票をするときに使った社内ツール)で謝辞を書いていなくてすみませんでした許してください。エンジニアとして未熟な僕と id:turtar_fms を冷静な視点で支え、軌道修正してもらえてとても助かりました。またB'zの話をしたいです。烏丸FM(社内Podcast)にもまた呼んでください!お世話になりました!

  • id:albacore 神崎蘭子。ホテルの部屋のテレビのリモコンを返してくれ。トランプとUNOとワインを持って帰ってくれ。俺をLGTMカメラで撮って勝手にツイートしないでくれ。君が毎日部屋に押しかけるせいでとても迷惑でした。でも楽しかった。

  • id:NoahOrberg アユニ・D。女性関係で黒歴史がある(俺もある)。Goが好き。よく部屋に来ていたけれど id:albacore より行儀が良かった。メ社のインターンも頑張ってくれ!

  • id:mizdra 日向 縁。React.jsとWASM。俺とサブカルの趣味が一緒な気がする…東京の大学に通っているのでまたすぐ会える気がする!体調に気をつけて!!!

  • id:turtar_fms 野々原ゆずこ。御庭つみき。相棒。普段はメディアプログラミングで素敵な作品をたくさん作っている。Alexaのインタラクション周りや無常はてなのデザイン周りを特に頑張ってくれた。清潔感があるイケメンなので絶対にモテる気がする。

  • id:YaaMaa 服部平次。前半課題のクオリティが毎回すごくて(丁寧で)スゲーと思った。最終発表でも id:mizdra が病欠の中ちゃんと発表していてすごかった。よく寝ている。

  • id:gazimum なんか失礼なことばかり言ってしまってすみませんすごく尊敬しています!!!大学でもよろしくお願いします!!!!!最後の発表での受賞コメントが格好良かったです!

  • id:guni1192 いつもツッコミ役をさせてしまってすみませんでした…東京へ来た時は酒飲もうな!!

  • id:cohalz 大学の先輩。たくさんご飯をごちそうになりました…ありがとうございます!就業後によく絡みに来てくださって嬉しかったです。ありがとうございました!!

  • id:hitode909 とにかく会話が上手でめちゃめちゃ面白かったです。ステッカーをたくさんもらえて嬉しかったです。発表にもたくさん質問をくれてありがたかった。

  • id:susisu 大宮忍。Kyoto.なんか #4でBuckle Scriptの話をしていてスゲー!!!となりました。実はブログをよく読んでいます。

  • id:riko 素敵な講義&講評をありがとうございました。インターンでユーザコミュニティについて学んだのは初めてで非常に有意義だったと思っています。懇親会でも無常はてなについて色々意見を頂けて嬉しかったです。

  • id:onishi 個人的に一番好きな講義でした。ビールを飲むのが早くて格好良かったです。カラオケに行けなくて残念でした。

  • id:Hasesann 2つのサービス両方に、本当に最高なアイコンとロゴを提供してもらいました。髪色とかネクタイ+シャツのファッションが素敵でした。機会があればまた最高なコンテンツをつくってください!!!お願いします!!!!!

他のインターン生の記事

albacore.hateblo.jp

tomoyaf.hatenablog.com

yaamaa-memo.hatenablog.com

↓同じチームの id:turtar_fms の記事

turtar-fms.hatenablog.com

noahorberg.hatenablog.com

www.mizdra.net

guni1192.hatenablog.com

社長の記事

chris4403.hateblo.jp