はてなリモートインターンシップ2021に参加しました

id:KarakasaDcFd です。2021/8/16より三週間に渡って開催されていたはてなインターン2021に参加してきましたので、その参加記を書かせていただこうと思います。今回のはてなインターンは前半一週間が講義パート、後半二週間が実践パートという構成でした。

f:id:KarakasaDcFd:20210906170556p:plain

前半

前半パートではWebサービスの開発や運用に関わる様々な内容の講義が行われました。自分自身、既に知っている内容もありつつ初めて触れる内容も多々あり、盛りだくさんの内容でした。

自分はインフラ周りを苦手としていることもあり、kubernetesの講義は非常に興味深かったです。AWSから講師の方が来てくださって、ハンズオン形式でAWSについて学ぶことができたのも良かったです。また技術的な講義以外にも、企画の講義では企業におけるWebサービス開発全体の流れを学ぶことができ、実践パートでも活かせたんじゃないかなと思います。

後半

後半パートではインターン生が四つのチームに分かれて開発を行いました。自分は id:sken11 さんと一緒にノベルチームに配属されました。ノベルチームは我々が記念すべきインターン一期生ということでめでたいですね。

ノベルチームでは大手出版社のKADOKAWAさんとはてなさんが共同開発しているWeb小説投稿サイト「カクヨム」の開発に携わりました。自分自身、普段からカクヨムをはじめとするWeb小説投稿サイトを利用するユーザーの一人なので、この実践パートはかなり楽しみにしていました。開発では新機能を自分たちで考えて実装し、実際にリリースするところまでをやらせていただきました。ユーザーさんの要望を調査したり、自分の興味に照らし合わせたりした結果、自分は通知機能をずっと触っていました。自分が開発した新機能は次の通り。

自主企画への参加通知

自主企画というのはユーザーが自分で小説イベントを開催できるカクヨムならではの機能です。自主企画はユーザー同士の貴重な交流の場の一つとなっているのですが、これまでは自主企画に参加作品が増えても主催者に知らせる機能がありませんでした。そのため、主催者は自分で参加作品が増えているか逐一確認しに行く必要があり、交流の妨げになっていると思いました。

この機能の開発は id:sken11 さんと共にペアプログラミングの形で作業を進めました。はじめに一日かけて通知機能周りのコードリーディングを行なって実装の理解を深めたのですが、これが技術的になかなか面白かったです。二週間ずっと通知機能を触っていたので、最終的には通知機能に関してならば、ノベルチームの中でもかなり詳しい人になれたかなと思います。その後はデザイナーの方々やディレクターの方を交えて会議を行い、通知の文言やアイコンのデザインを決めたり、その他の細かい仕様を決めたりしながら、実装を進めていきました。実装ではテストの重要性というのを改めて実感しました。本番環境にリリースする前に念入りにテストをするので、機能そのもののコードを書いていた時間より、テストのために割いた時間の方が長かったりします。

そんなこんなで8/27に無事最初のリリースを終えることができました。

ちなみにこの後、id:sken11 さんが各自主企画のトップページにおいて、参加作品を参加順に並べ替えることができる機能を開発してくれたので、この通知機能と合わせてより最強に仕上がっています。

週間ランキング上昇通知

週が明けてから残りの一週間ほどで、自分はランキングに関する通知を実装していました。Web小説投稿サイトでランキング関連の通知機能を備えているところって意外とないんですよね。これには様々な理由があると思いますが、その理由の一つにはおそらく、「誰にどこまでの範囲で通知を行うのか」を決めるのが難しいということがあると思います。たくさんのユーザーさんの心情の差異を考えて通知の仕様を決定する必要があり、このバランス感覚がとても難しいなとやってて実感しました。色々悩みましたが、最終的には「通知というものはネガティブなものではなく、めでたいことを共有したいから送るんだ」という思想のもと、「前日よりも順位が上がったら通知する」という仕様にしました。

技術的な面では結構初手で苦労しました。カクヨムの備える通知機能のアーキテクチャと、ランキング通知に必要とする要素との噛み合わせが少し悪かったんですよね。様々な実装候補を挙げてメンターの id:mfzy さんに相談し、ああでもないこうでもないと言いながら実装方法を決めていました。最終的にはメンターの id:k-murakami0609 さんの気付きによって、無事に期間内で実装できそうな方針に至ることができました。

こちらも9/2に無事リリースすることができました。実際に通知が初めて飛ぶのは翌日の朝だったので、テストをしっかり行なっているとはいえ、Twitterでユーザーさんの声を見るまではちゃんと動くかビクビクしていました。

成果発表

後半パートの最後には、各チームが開発した機能についてプレゼンを行う成果発表会がありました。はてなスタッフおよびインターン生による投票によって、最もホットなタスクを手掛けた*1チームを決めるのですが、そこでノベルチームが見事優勝することができました。優勝を目指して頑張っていましたが厳しい戦いになる*2と思っていたので、本当に優勝を掴み取ることができて嬉しいです。

最後に

今回のはてなインターンは、リモートでありながら実際のサービス開発までやるということでしたが、オンラインという制約の中で最大限のサポートをしていただけたなと感じています。実践パートではメンターのお二人を中心として、わからないことがあれば気軽に質問できる環境づくりがなされており、不自由なく開発を進めていくことができました。

そんなはてなインターンに参加させていただけて、本当に良かったなと満足しています。三週間があっという間でしたが、その中でかなり成長をすることができたんじゃないかと感じています。最後には成果発表で優勝することもできて言うことなしです。

最後になりますが、今回チーム配属でサポートをしていただいたメンターの id:k-murakami0609 さんと id:mfzy さんをはじめとするノベルチームの皆様、そしてはてなインターンを開催していただいたはてなスタッフの皆様に感謝いたします。おかげさまで最高の夏を過ごすことができました。

他のインターン生の方の参加記

kasheight.hatenablog.jp

toutounode.hatenablog.com

mds-boy.hatenablog.com

*1:はてな用語では略して「ほたて」

*2:実際、2位のマンガチームとはわずか2票差の僅差だった