電気ひつじ牧場

技術メモ

はてなのサマーインターン2020に参加してきた

8/24~8/28の5日間,Webに関する豊富な講義と京都観光で有名なはてなインターンに参加してきました.

https://hatenacorp.jp/intern2020

今年はコロナの影響でオンライン開催でした.京都行きたかったよーー😭

何をしたのか

マイクロサービスアーキテクチャを採用した課題用のブログサービスと改善点が与えられるので,そこにmarkdownライクな記法など色々と機能を追加していきます.途中メンターさんにPRのレビューをしていただいたり,設計のアドバイスを頂いたりできます.

応募まで

毎年募集しているのを知っていたので普通に応募しました.応募課題が指定イメージをdocker runした時の出力を提出するだけだったので,絶対何か裏があると思い,30分ほどCTFしましたがどこにもflagがありませんでした.

面接ではCTOのmotemenさんと「あれ答えなんだったんですか?」みたいな話と雑談をして終わりました.CTFではなかったっぽい.

1日目

講義デーでした.講義動画が後ほど公開されるらしいのでhatenatechに張り付いてチェックしておきましょう.

gRPCやk8sやマイクロサービスに関する基本を一通りやっていくと言った感じです.途中docker historyを使ったCTFが開催されて楽しめました(解けなかった)

この日は晩にオンライン歓迎会も行われて推しのVTuberを布教したりしていました(意外とVTuber見てる人が少なそうでしたが)

2~4日目

課題をやっていく期間です.主な課題は

  • ブログのエントリを書く際にヘッダ,リンク,リスト記法が使えるようにする
  • リンク記法を用いた際にタイトルをサイトから自動取得できるようにする
    • そのためのマイクロサービスを作る

の2つでした.

markdown記法の実装

1つ目に関して,普通はmarkdownパース用のライブラリを使うところですが,ロマンを追い求めてパーサモジュールを自作しました.自作と言っても大層なことはしておらず,正規表現でパターンにマッチする箇所を抜き出してhtmlに置換しているだけです.ライブラリを使う場合と比較して,パターンマッチ→置換の間に色々処理が書けるため,後で作ったリンク記法の拡張が比較的容易というメリットがありました.

f:id:cha-shu00:20200828163322p:plain
パーサ自作勢は自分だけだったっぽい

独自記法の実装

markdownにはないおもしろ機能を実装しようということで,「画像記法」なるものを実装しました.簡単に言うと文字列から画像を生成して埋め込む記法です.

f:id:cha-shu00:20200828163417p:plain

成果発表時に社長のchris4403さんによって「煽り記法」,hatenatechツイッターによって「ワロタ記法」などの別名がついて\ワロタ/.

実はここは結構ハマったポイントで,フォントが記述されているttfファイルを元に文字の画像を生成する際,macOSに標準で付いてくるArialのttfファイルをDockerコンテナ(Alpine)にコピーして使おうとするとライブラリがエラーも返さずに静かに死ぬ,と言った現象が起きていました.

フリーのttfファイルを取得してそれを使うようにすれば解決しましたが,何がいけないのかはまだ分かってません(これから調査します).

リンク記法の拡張(タイトル補完)

リンク記法をタイトルが空欄のまま記述した際に,リンク先の<title>要素が自動で補完されるといった機能です.対象サイトをスクレイピングしてタイトルを抜き出すモジュールは,課題で指定のあった通りマイクロサービスとして切り出して実装しました.

ついでにgoroutineでの非同期呼び出しやオンメモリキャッシュなどを使って高速にタイトルが取得できるようにもしています.

5日目

成果発表日です.オンライン発表はLT大会や研究室でやっていたので慣れていたのにも関わらず開始の画面共有の時にもたつきました.なんでや.

周りのインターン生の方はブログでつい欲しいと思ってしまうような独自機能を編み出していたり,マイクロサービスをRustやScalaやKotlinで実装していたりと千差万別で面白かったです.自分が時間的にできなかった課題や,気づきもしなかった改善点に取り組んでいた方がいて勉強になりました.

speakerdeck.com

終わりに

実はこの記事を書いているのはまだ5日目の途中なので終わってはいないのですが,充実したインターン期間を過ごせたと思っています.「テスト,拡張が容易な設計を行う」を個人的な目標にしていたため,メンターのmangano-itoさんに設計に関してアドバイスを多く頂けて学びが多かったです(あとPR出すたびにめっちゃ褒められたので自己肯定感が上がった).

はてなの皆さん,ありがとうございました!!

追記

「おもしろ賞」と賞金のAmazonギフト券を頂きました!自作パーサや画像記法のユニークさを評価していただいたみたいです.「ネタ枠ではない」とのことです().