はてなインターン2020(オンライン)に参加してきた

 界隈で有名な、はてなインターン2020(8/24〜8/28)に参加してきましたのでその記録を残そうと思います。

hatenacorp.jp

応募する経緯

前々からはてなのインターンは過去参加者のブログを見て知っていたので、今年も開催されるなら応募しようと思ってました。ただ今年はオンライン開催ということで京都に行けなかったのが残念ですね。
 応募するにあたって、ESと課題(dockerをゴニョゴニョする)を提出したあと、面接をしました。
 面接に関して、事前に僕のGitHubページを詳しくみてもらっていたらしく、リポジトリに対して「これいいねー」といった感想をいただき、選考を通じて、はてながインターンを重視しているんだなと感じました。また質問に対しても丁寧な回答をいただき、面接体験がとても良かったです。


インターン中の取り組み

今年のはてなインターンはオンラインの5日間で、
1日目                  講義 + 歓迎会
2日目〜4日目     課題
5日目                  成果発表 + 送別会
という流れです。ちなみに5日目の午後にこのブログを書いてます。

初日の講義については kubernetes や gRPC といったことを学びました。

2日目以降はこのインターンでメインとなる課題に取り組み始めました。
お題は「既存のブログに新しくマイクロサービスを追加する」というものです。

まず課題を取り組むにあたって、テンプレートとなる「ブログサービス」があるのですが、 これはk8sやgRPCを利用し言語がGoで動いている「ブログサービス」で、就業型ではない5日間のインターンでこんなにしっかり作られている(とてもボリュームがある)ものに触れるのか!と驚きました・・

以前の面接でも感じたことですが、はてなのインターンに対する熱量がすごかったです。

課題については、

  • ブログのエントリーをmarkdownに対応させること
  • mdのリンク記法で [](URL)といったときURL先から<title>を取ってきて [title](URL) に変更させること(マイクロサービスとして追加する)
  • mdで独自記法の実装

を行いました。
 開発の流れは、自分のリポジトリにPR送ってメンターの方にレビューしてもらい、Approveされたらマージ、といった流れです。

 

学べたこと

  • kubernetes
     今までdockerは使ったことがありますが、kubernetesは一度も触れたことがありませんでした。マイクロサービスを追加する際にはk8s周りの設定を変えないといけないので、サービス間の接続で少し戸惑いましたが、メンターさんのヘルプもあって無事解決。

  • Go
     今年の4月ぐらいから個人的にGoは触ってました。課題のブログサービスはGoで書かれていて、マイクロサービスを追加するときはどんな言語使ってもいいよ!とのことでしたが、自分の勉強のためにもGoで書きました。markdownで独自記法を追加する際は構造体とか使ってモジュール化したりと、5日間でGoの知識が結構増えたと思います。
     僕は独自記法として、文字の色変えやwikipediaへのリンク記法なるものを作りました。独自記法はモジュール化したので追加しやすかったです。他のインターン生は「ネタバレ防止記法」や「文字から画像を生成する記法」などなど作ってて単純にすごかったです。

  • gRPC
     これも初めての技術でした。聞いたことはありましたが中々触れる機会がない状態だったのでインターンで触れることができてよかったです。サービス間のやり取りにIDLを書いて関数を呼ぶだけで通信ができるのはとても便利ですね。
     普段pythonを書いている人なので、(go自体速いということもありますが)gRPCでサービス間のやりとりめっちゃ速いなと感じました!

  • テスト
     人生で初めてテストを書きました。
     goの標準パッケージで書いたり、サービス間のテストにはモック(gomock)を導入したりしてテスト書いてました。 PASS ok と表示されるのが気持ちいですね。これから個人開発でも書いていきたいです。


取り組みたかったこと

 上記の課題の他に発展課題がありました。僕は時間的に間に合いませんでしたが、発展課題ではGoでキャッシュしたり、並列処理したりといった内容でした。go-cacheとか初めて知ったので使ってきたいですね。

(↓追記 id:cha-shu00 さんの発表を参考に、10個のURLからタイトル取得処理をキャッシュさせてみた。左: キャッシュなし   右: キャッシュあり

f:id:kns261:20200828232303p:plain     f:id:kns261:20200828232327p:plain

速くなってる!)

 Discordが便利すぎる

僕は今まで連絡手段にslackばっか使ってましたが、はてなインターンではDiscordを使用していました。メンターの方(id:mangano-ito)と僕、チャーシューさん(id:cha-shu00)(おもしろ賞受賞おめでとうございます!) が同じ部屋に入ってインターン中は繋ぎっぱなしでした。これはオンラインでメンターの方に質問しにくい...といった問題を完全に解決できてて、discord上でメンターの方に気軽に話しかけれたり、画面を共有できたりするので、とても良かったです。他のオンラインインターンでもDiscordを使ってほしいな〜

 

最後に

 「学べたこと」でも書いた通り、僕が知らない技術を触る機会が多く、とても濃い5日間になりました。これは研究室に通ってるだけだったり、個人開発だけでは経験できないことだと思います。
 他のインターン生はとても優秀な人ばっかりで、自分ももっと勉強しないとなと、インターンを通じて痛感しました。頑張ってき!

f:id:kns261:20200828163237j:plain

ブログに貼るはてな関連の写真がなかったので、最終日に飲んだレモネード珈琲の写真を最後に載せておきます。

 では。 

ドワンゴの就業型インターンに行ってきた話

 2月中旬から3月上旬までの3週間、ドワンゴのモバイル事業向けインターンに行ってきました。モバイル事業向けなのでニコニコではないです。詳細はこれです↓

株式会社ドワンゴ|採用情報

応募まで

 2月の卒論発表終わってから学会(3月下旬)までの間、暇だなと思ってたのでインターンを探していました。12月にES出したあと、面接2回やって1月下旬にはインターン参加することが決まりました。

地方民の人はインターン参加が決まったあとに宿泊先を各自で決める必要があります。僕は人形町のビジネスホテルを3週間予約しました。会社がある東銀座までは電車で5分ほどなので結構近場です。3週間の宿泊費を会社に出してもらえるのは地方民にとってはありがたい支援です。

 

やったこと

 3週間でAndroidアプリの開発をしてました。kotlinですね。僕はESや面接でサーバーサイドをやりたいです。と言っていたのですが当日会社に来てAndroidと言われびっくりしました*1。まあインターンにでも参加しない限りAndroid開発はやることなかったと思うのでいい機会でした。

 詳しくやった業務は書けないのですが、Androidアプリのアーキテクチャーを意識した開発(この辺 )や、ローカルDBをごにょごにょしてました。

 あと git/github に関しても勉強できて、プルリクの出し方とか、今まで一度も使ったことのないコマンド(git continue -pとか)とか知ることができました*2

 

 雰囲気とか

  • 裁量労働制なので社員の方は結構自由な時間帯にきてるみたいでした。僕は10:30に毎日出社していましたが、(コロナの影響もありますが)あまり人がいなかったです。

  • 社員の方は技術・オタクよりな人が多くて全然ガツガツな印象はなく、メンターの方も丁寧に教えてくださり、3週間お世話になりました。m(_ _)m

  • ドワンゴのオフィスは東銀座にあってランチは社員の方に連れてってもらいました。ただ銀座なので値段が高いですねー。(地方民なので東京はどこも高いイメージでしたが渋谷の方が安いらしいです)

  • 別のインターンブログでドワンゴはslackのチャンネル数が日本一みたいなことが書かれていたので割と楽しみにしていたのですが、どうやらインターン生はゲストアカウントになったらしくメインのチャンネルしか入れませんでした。残念。

  • (インターンとは全く関係ない話ですが、インターン中の土曜日に乃木坂のライブに行ってきたらサヨナラの意味聞けました。最高。)

 

 今まで3週間フルタイムで働いたことがなかったので思ってたより疲れましたが、kotlinやgit周りで多くの学びがありました。多分通年で募集しているらしいので興味がある方は応募してみてはどうでしょうか。

 

 ドワンゴ関連で撮った写真がなかったので、ドワンゴが入ってる歌舞伎座タワー地下2階にあるアクアリウムの写真を最後に載せておきます。

f:id:kns261:20200319155736j:plain

*1:Androidは今まで一回も触ったことなく開発も初めて。

*2:今までインターンには何社か参加してたのだけれど今回初めてレビューしていただきました。

React + CircleCI + AWS でタスク管理アプリを作った

 サーバーレスとやらをやってみたかったので、冬休みにAWSLambdaDynamoDBを使ってタスク管理アプリを作ってみました。あと初めてCircleCIも使いました。

作ったもの

 研究内でタスクの共有を目的に作りました。LambdaとCloudFrontでBasic認証を導入しているので共有のパスワードを入力すればアカウント登録せずにタスクを投稿できます。

f:id:kns261:20200104092717p:plain


 アーキテクチャーはこんな感じです。S3にReactのアプリをデプロイしました。
 タスクを投稿するとLambdaがDynamoDBにタスクの登録 & 研究室のSlackにタスク内容を投稿します。
 masterにmergeするとCircleCIが走って、buildからS3にデプロイまで自動で行ってくれます。

f:id:kns261:20200104093303p:plain

$12/年間 出してドメインを買いました。全てAWS上のサービスで行っているので管理がとても楽です。

難しかった点

 CircleCI周りの設定で、2つ時間をかけてしまったことがあって、
1つ目は config.yml内の persist_to_workspace の設定です。
 job間でデータを共有したい(今回はbuildファイル)ときのパスの設定が気付くまで時間がかかってしまいました。
persist_to_workspaceは、
root: ~/repo
paths: build 
 でrepo内のbuildディレクトリが共有できます。

2つ目は、環境変数の読み込みです。
 もともとReact内で env.process.~~ として.env内の変数を読み込んでいました。が、CircleCIでデプロイ後、環境変数が読み込まれませんでした(多分.gitignoreに書いてるためcheckoutしてもないから)。
未だこのやり方が正しいのか分かりませんが、CircleCI上で環境変数を設定し、config.yml内のcommandで、echoを使って設定した環境変数を.envに書き込んでいます。そしてbuild後に.envファイルをrmしています。
 

12月に書いた記事で「次にReactで作るときは、TypeScriptで書く」と書いてましたが素のJSで書いてしまいました。手始めに既存のアプリをTSに書き換えていきたいですね。

アドベントカレンダー最終日

この記事は 茨大 Advent Calendar 25日目の記事です。

 12月1日から始まった茨大アドベントカレンダーも今日で最終日となりました。
参加していただいた方々、記事を書いてくださりありがとうございました。

f:id:kns261:20191225000252p:plain

 今日は、恐らく初開催の弊学アドベントカレンダーについて作ってみた感想を書きます。

 実は去年も弊学アドカレを作ろうと思ったのですが、たとえ作ったとしても絶対人が集まらないだろうなと思ってやめた過去があります。

 今年になって研究室の同期や先輩、後輩と関わる機会が増え今年はいけるのではないかと思い、11月上旬ぐらいに https://adventar.org/ のサイトでカレンダーを作りました。11月上旬だとアドカレ初日まで約1ヶ月ぐらいありますが、人を集めるのにそれぐらい期間がかかったのでちょうど良かったです。
 弊学のアドカレだけ作って何も声かけをしなかったら本当に数人集まるかどうかだったと思うので、今年初で25日分埋めれたのは(1人複数日担当していただいたのもありますが)僕自身がカレンダーを作ったというのもあり、とても嬉しかったです。
ただ1人1記事で25日分埋めるのはかなり難しいなと思いました...

きっかけ
 そもそも弊学アドカレを作ったきっかけですが、上記サイトで「大学」と検索してみると全国色々な大学のアドカレが出てきます。毎年他大のアドカレを見ていたら、うちでもやってみたくなった。というのが理由の一つです。(豊橋技科大や筑波なんかはもう数年やられているのはやはり凄い...)
もう一つの理由として、先輩・後輩・同期・大学の人が今何をやってるのか、どんな人なのか、どんな人がいるのか、を知るいい機会になるのではないかということもあります。
 個人的には、普段全く文を書かない自分が何らかの文章を書くいい機会になったんじゃないかなと思ってます。

内容
 大学としてアドカレをやっているので、技術縛りなどのなく各々テーマは自由ということの結果、「強化学習から「台湾旅行記」まで幅広い内容の記事となりました。
どの記事も内容濃く、毎日読むのが楽しみでもあったので僕自身カレンダーをやってみて良かったです。
 

最後にもう一度
 アドベントカレンダーに参加していただいた方々、各々やることがあり年末でお忙しい中、本当にありがとうございます。
 そして今年のアドベントカレンダーを見て、来年書いてみたいと思う方いましたら、来年は僕がカレンダーを作成するのか他の方が作成されるのか分かりませんが、開催されることとなったら是非登録してみてくださいね。

それでは、みなさま良いお年を。

おすすめマイナー京都スポットの紹介

この記事は 茨大 Advent Calendar 16日目 の記事です。

 今日の茨大アドベントカレンダーは、僕が昔住んていた京都のマイナーおすすめスポットを紹介します。一部有名どころも入ってますが。

f:id:kns261:20191207144759j:plain

京都の冬は結構雪がふります。

  1. 京都駅の屋上

    f:id:kns261:20191207142838j:plain

    京都駅内は屋根がカーブしているのが特徴的です。その京都駅内をエスカレーターで登っていくと屋上に出ることができます。屋上からは京都タワーをきれいに撮ることができますし、人がほとんどいないのでおすすめです。
     

  2. 左大文字を間近に見ることのできる交差点

    f:id:kns261:20191207142809j:plain
     五山送り火の一つ、左大文字を間近で見ることのできる交差点です。西大路通りを北にまっすぐ行くと見えてきます。西大路通りは金閣寺立命館大の近くを通る道で、はま寿司やマックが道路沿いにあり結構栄えています。
     金閣寺前の交差点から金閣寺に続く道はやはりいつ来ても中国人の観光客ばっかです。そもそも京都の観光地は日本人よりもほとんど中国人の観光客ですね。


  3.  北大路ビブレ内にあるクリスマスツリー(ぶれててすみません)

    f:id:kns261:20191207144359j:plain

    毎年、この時期になるといい感じのクリスマスツリーが北大路ビブレに登場します。北大路ビブレはコメダコーヒーや本屋があるショッピングモールで、そこそこ時間を潰せるスポットです。


  4. 柊野別れ交差点

    f:id:kns261:20191207145834j:plain

    (写真はwikiより)
    Macをお使いの方は「ヒラギノ」というフォントがあるのをご存知でしょうか。実はこのヒラギノフォント、京都のこの柊野(ひらぎの)という地名から採用されたらしいです。僕が京都にいた頃、柊野はよく通ってた道ですが京都を去ってからフォントに使われていることを知りました。
     ちなみに京都では「〇〇別れ」という地名が何個かありますが「別れ」の由来は 京都の怖い地名 「柊野別れ」- 古都コトきょーと-


  5. BiVi二条

    f:id:kns261:20191207152334j:plain

     BiVi二条は映画館やゲームセンター、飲食店などが集まったショッピングモールです。(イオンよりは小さい)  写真は映画館内にある謎の絵。
     京都で映画を見るなら、河原町のMOVIXや京都駅のTジョイなどが有名ですが、二条は河原町や京都駅に比べ、そこまで人が多くないのでオススメです。二条から河原町(京都市役所前)までは地下鉄東西線で乗り換えなしで行けます。


  6. 上賀茂神社近くにある京都らしい町並み(社家町)

    f:id:kns261:20191207154652p:plain

    (画像はストリートビューより)
    京都らしい町並みと言えば八坂界隈が有名ですが、京都市北区にある上賀茂神社の近くにある町並みもイイ感じな雰囲気があります。上賀茂神社へはバスを使う必要があるので若干アクセスは悪いですが、八坂界隈に比べ観光客は少ないのでオススメです。



  7. 鴨川デルタ

    f:id:kns261:20191207155628j:plain

    出町柳駅の近くにある、高野川と加茂川の合流地点です。『夜は短し歩けよ乙女』などの作品にも登場するので知っている人も多いと思います。近くだと東に京大、西に京都御所があります。


以上、京都スポットの紹介でした。

12月もアドベントカレンダーもいつの間にか半分を切りました。早いですね。
僕はあと最後の25日を担当しますので、よろしくお願いします。

ReactとFirebaseでアンケートアプリを作った

もともと大学のアドベントカレンダー用に公開するつもりでしたが、アドカレの方は別の記事にしました。没にするのもあれなので一応あげておきます。

React

 今までサーバーサイドをやる機会が多かったのですが、最近フロントも触ってみようかなと思い始め、いろいろ記事をみてました。 フロント未学習の大学生が1週間でVue.jsを使ったポートフォリオを作った話 を読んでVueかReactかで悩みましたが、先輩からReactがいいよとオススメされたのでReactを使ってなにか作ってみることにしました。
まあ実際どっちがいいでんしょうか。

Firebaseについて

 FirebaseはGoogleのmBaaSで、スマホやWebアプリからクラウドのDBやAuthentication、ホスティングサービスを利用することのできるサービスです。初めて使いましたが、趣味程度なら十分無料枠で使える印象でした。

 

作ったもの

 Reactの勉強始めにチュートリアルをやり、その後にFirebaseのFirestore(NoSQL)を用いたアンケートアプリを作り始めました。

 Authenticationを利用していないので誰でもアンケートの作成と回答ができます。
選択肢をクリックするとChart.jsを使ったアンケート結果の確認が可能です。
パスワードでの結果確認とアンケートの削除ができます。

github.com

上のgithub内のgifを見てもらうと分かるのですが、自分が投稿したアンケートにも回答できてしまうので、Authenticationを利用してログインしている人のみアンケート作成・回答可能、アンケート作成者は自分の投稿に回答できない。などの工夫をする必要があったかなと。

 Firestoreに限った話だとブラウザからデータを確認できるのがめちゃくちゃ便利でした。Firestoreにはアンケート情報(タイトル、選択肢)とアンケート結果を保存しています。

 NoSQLはRDBMSと違ってJSONツリー型としてデータを保存できるのでネストさせた保存も可能です。今回のアプリでは保存するデータは少ないので、深くネストすることはなかったです。サクッと簡単なアプリを作るのには向いているなと思います。無料だし。
 しかし今までRDBMSを使ってきた設計をNoSQLで同じように設計しようとすると、どうするんだ?的な部分がありまして。まさにQiitaのこの記事なんですが、その記事内では、「Groupテーブル と Userテーブルがあったとき、groupに所属するuserを取得するには各モデルが相互で参照する構造にしないといけない。」と書かれてて、今までRDBMSでやってきた考えをそのままNoSQLに移行するのは厳しなーって感じです。

 

今後やりたいこと

 このアンケートアプリはReduxは使っていないので、今後新しいアプリを作るときにはReduxを導入してみたいなと思ってます。Reduxの理解難しすぎる。

おわり。

来季の中日ドラゴンズについて

この記事は、茨大 Advent Calendar 2019 2日目の記事です。
昨日の茨大アドベントカレンダーは宮森さんの「時系列分析入門(時系列データ・定常性)」でした。トップバッターありがとうございます。
アドカレ向けに自己紹介すると、茨城大情報工B4の学生で出身は名古屋です。
現在卒研がやばめです。

卒研はさておき、
今日は僕が小さい頃から応援している中日ドラゴンズの今シーズンの振り返りと来シーズンについて書いていこうと思います。

 
中日ドラゴンズ 今シーズンの成績

今シーズンの中日はセ・リーグ5位で、7年連続Bクラスという結果に終わってしまいました。。。
チーム打率.263(1位)得点圏打率.263(2位)チーム無防御率3.72(3位) 、チーム守備率.992(1位)   という成績を残しましたが、
本塁打数の少なさ90本(6位)長打率の低さ.381(5位)、チーム得点563点(5位)*1、などで今年もまたAクラス入りができませんでした。広いナゴドがホームなのでホームランが少ないのは仕方ないことなのかもしれませんが寂しいですね。


主なタイトル受賞者

以下タイトル受賞者です。京田がGGを獲れなかったのは謎ですが、周平がサードとして自身初のGGを受賞しています。来年は大島・周平だけでなく、京田(ショート)、平田(外野手)もGGを獲ってほしいです。

大野雄大  (最優秀防御率 2.58)
ロドリゲス (最優秀中継ぎ 44H)
大島洋平 (最多安打 174)
大島洋平 / 高橋周平 (ゴールデングラブ)
高橋周平 / ビシエド (ベストナイン)


去年に比べて向上したところ

防御率4.36から3.72まで減ったのが素晴らしいです。(3.72はセリーグ3位)*2
 去年は中継ぎがボロボロで明らかに勝ててた試合も落としてた印象が強いので。今年は先発防御率3.97、中継ぎ防御率3.29という成績になり、中継ぎが頑張ってくれました。
 中継ぎ陣では田島やひろし、先発陣は笠原、吉見、山井がイマイチな成績ではあったものの、今年初勝利をした投手の多さ、ロドリゲス、マルティネス、福、藤嶋の活躍などで見事な防御率になりました。

今年初勝利を収めた梅津、二塁に定着した阿部、開幕1軍を勝ち取った加藤、怪我前までは首位打者の周平、自己最多本塁打を記録した堂上、ノーノー達成大野、など去年よりポジ要素がかなりある1年だったんではないでしょうか。

ドラHOTプラスかなんかの番組で山崎が、明らかに今年の中日ドラゴンズは今までのBクラスのときの「違う」と言っていました。この「違い」は上のようなポジ要素に加え、来年以降間違いなく活躍するであろう選手が多く台頭してきたことからだと思います。

 

来年の中日ドラゴンズ

投手について

先発としては 大野・柳を中心に、笠原・ロメロ・吉見・山井 、今年ブレイクした梅津や、山本・清水・勝野・阿知羅も来シーズン先発として投げることができればいいですね。今年初めて一勝した投手が多いので来年にもつなげてもらいたいです。 ロドリゲスがメジャーに移籍するので、抑えを経験しているものの今年活躍できなかった田島・ひろしの力は間違いなく必要です。又吉・佐藤あたりも活躍できればかなり充実してきそうです。

野手について

今年ブレイクした周平・阿部の存在はかなり大きいです。全体としてチーム打率は残しているので、来年は長打を残して得点に結びつければいい感じになりそうです。
8・9月の成績を見る限り、外野は福田がレフトに入るのが妥当なのではないでしょうか。平田(ライト)、大島(センター)、福田(レフト) が来シーズン外野の中心になると思います。怪我でシーズン途中に離脱してしまった外野を守ってる井領は、ほぼ代打ながら.290打ってるのでベンチにいるとだいぶ助かりますね。

注目の根尾ですが、もう京田の守備をみるとすぐ試合で出れる可能性があるなら外野しかないのではないでしょうか。ただし今はどこのポジションも結構充実してる感があるので、根尾に関わらず若手が入り込むのはなかなか難しそうです。

 
まとまりのない文章になってしまいましたが、来年はAクラス入りしてください。ということです。

おわり

f:id:kns261:20191117212341j:plain 

明日の茨大アドベントカレンダーは Akiyamaさんの「ファクター」です。

*1:6位はAクラスに入った阪神の538点。チーム得点1位は巨人ですが、2位は最下位のヤクルト

*2:1位は阪神の3.46。Aクラス入りしている阪神のチーム得点は最下位ですが、防御率が低いので1,2点差でしっかり抑えているんだ思います。防御率最下位はヤクルトの4.78でセリーグ唯一の4点台。