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

楽しかったです。

hatenacorp.jp

体験記

選考課題はdocker runするだけだったので楽だった。面接はES締切後にメールをいただき、そこで調整して日付を決めた。 Google Meetで面談するのは初めてだったがSkypeやZoomに比べて使いやすかった。 流れとしては人事の方との日程等諸確認のあと、エンジニアの方と志望動機やスキルについて話すものだった。 自分はまだどのような業界でどのようなエンジニアとして働くかを考えている途中で、 そこについて若干突っ込まれる事はあったものの全体としては和やかに進んだと思う。

最初の一日目は講義で、他の参加者の方も書かれているようにかなり良かった。 かなり完成度が高くコストを割いて準備していただいた事が分かる。 gRPCやKubernetesに触れるのは初めてだったので勉強になった。

本体の開発はDiscordとScrapboxでメンターの方1人に対しインターン生2人の体制。 1030出社の1900終業なので弱点属性が朝な自分でも参加がそこまでキツくなかった。 テキストチャットを使わずScrapboxに情報を集約すると後からかなり見返しやすくなり便利だし、 Dsicordは画面共有が出来るのでオンラインでもペアプロが出来るので、今後オンラインで開発することがあれば積極的に導入したい。 一日目は残業なしで済ませたが、2日目はDockerでハマって残業をしてしまった。結局OpenSSLを自前ビルドしてmusl ABIを使うのが一番早い。 その点Goはデフォルトでシングルバイナリに収まるので便利ですね。

最終日の発表資料は日付上の当日にGoogle Slidesでエイヤッと作ったので時間等不安だったが制限時間の5分ほぼきっかりで終わったので良かった。 自分は実装でいっぱいいっぱいだったので文字の多いスライドになってしまったが、 他のインターン生はグラフィカルで分かりやすいスライドを作っていた。すごい。

実装したもの

虹色に輝くテキスト
実装したもの
* 既にある記法変換サービス(Go)にgoldmarkを使ったマークダウン変換機構を実装 * ☝に独自記法(テキストの背景色が1650万色に変化するゲーミング記法) * 与えられたURLのタイトルを取得するサービス(Rust) * ☝これにキャッシュを実装 * ☝同じドメインへのアクセス制限(DDoS踏み台対策)を実装 * 上記サービスを使い生URLを文字列に置換する機能を記法変換サービスに実装 * ☝これの並列化

時間があればrobots.txtのパースやUAの設定をやりたかった(すべきだった)。昔自分でマークダウンもどきパーサをRustで書いたことがあるので、その実装をサルベージしても良かった気はするが、Goに触れられたのは良かった。

ここに書いておらず時間を使ったのはDocker。先の章で書いたように、Rustのバイナリをmuslにしようとしたり諦めたりで色々と時間を使った。 あとminikubeとskaffoldでRustを使うときはminikubeの方でCPUのリミットを外しておかないと死ぬ。自分はこれで死にました。 Rustのビルドはめちゃくちゃ遅いので2コアとかだとビルドに5億年かかる。

あとやっぱりテストは難しい。副作用を扱う部分はtraitに切り出してテストするようするべきですね。 普段はやっていますが、今回はサボってしまった。

こういう既存のライブラリを活用しつつ、それなりに高い品質のコードを素早く書いていくのは結構難しく、周りのペースについていくのが大変だった。RustはGoに比べるとハマりどころは多そうだし、ネットワーク関連のライブラリがまだ枯れてない印象はあるもののメモリ競合が起きない事はかなり強力で、最初から適切にエラーハンドリングを行えばほとんどサービスが死なないのは嬉しい。メモリリークもOOM Killされるので大丈夫(大丈夫ではない)。

感想

非常にモダンな環境での開発が出来て楽しかった。あと他のインターン生の実装速度が速くてすごい。同室のid:slashnephy さんとか…… メンターの方とも細かく進捗共有が出来ていてコミュニケーション上の問題も感じなかったです。 オンラインなので出費がほとんど発生しないのは助かりましたが、京都での長期インターンもやってみたかったですね。 就活で京都に行くのが楽しみです。

メンターの方はじめはてなの皆様、インターン生の皆さんありがとうございました。