しゅういちのぶろぐ

活動記です.アウトプットにも使う予定です.ジャンルは多岐にわたる予(ry.

Chatworkで最高の夏休みを過ごしてきた

TL;DR

  • Chatworkはいいぞ.
    • 環境がとてもいい.人はいいし社内・社外の環境全てがいい.
    • 社の人のインターンに対する本気度がとても伝わってきて,すごく嬉しかった.
  • Scalaスクラム開発でドメイン駆動設計をしてきた.
  • プログラミングを学んだことのある人なら誰もが参加のチャンスがある.
    • 事前学習や講義パートで必要な知識を身に付けることができ,その後のチーム開発(以降業務)パートでも手厚いサポートがある.
  • 合意の重要性を実感した
    • チームで合意を取らないとどこかでガタが来ることを,身をもって知れた.

はじめに

お久しぶりです,しゅういちです.
この夏8月19日~9月6日までの3週間,Chatworkの短期インターンに参加してきたので,参加記を書くことにしました.
来年以降にChatworkのインターンに参加したい人にとって参考になれば幸いです.

~0週目(インターン参加まで)

私がこのインターンの存在を知ったのは2019夏のITエンジニアインターンの情報が集まる魔法のスプレッドシートで, 他の参加者もほとんどがここで存在を知ったらしいです.
Scalaは未経験でしたが,応募条件はプログラミング経験の有無のみだったので申し込んでみました.
関数型言語自体はElmを少し触ったことがあったり,Rustで雰囲気関数型を少し触ったりしていたのですが,本格的に使用することは初めてだったので不安でした.しかし不安よりもとても楽しいことができそうだという気持ちが勝り,勢いで申し込みました.

選考は 1.書類選考 と 2.面接 があり,面接は本社またはLive面接でした. 参加者のうち1人は移転前のオフィスで面接を行ったらしいです.当時のオフィスは土足がダメで,普通の家と変わらない外観だったらしいです.すごくリラックスできる環境だったらしく,とても羨ましいと思いました.もちろん現在のオフィスの居心地も最高です!

合格後は事前課題として「実践Scala入門」を送って頂いたのでそれを読むのと,Akkaについてこちらを読んでくるよう指示があったので,それらを当日まで読んでいました.

1週目

最初の週は講義パートでした.1~5日目まで主に,

  1. チームビルディング,ChatworkのMVVを知るためのワークショップとソフトウェア開発の講座
  2. 要件定義,ドメイン駆動設計(DDD)の講座
  3. 業務パートのための環境構築,Webサービス開発の基礎の講座
  4. データベース設計の講座,Scalaのハンズオン
  5. インフラ,チーム開発の講座とScalaハンズオンの残り

を受けました.

1日目

チームビルディングでは,ドラッカー風エクササイズを行いました.
お互いの強みを知ることと同時に,お互いの人となりを知る機会になりとてもよかったです.

昼からは,内田さんによるChatworkのMVVを知るためのワークショップを行った後,藤井さんによるソフトウェア開発の講座を受けました.ワークショップについてはリンク先が詳しいので説明は省略します.
講座ではChatworkでのソフトウェア開発がどのようなステップを踏んで行われているのかの説明がありました.ウォーターフォールアジャイル開発スクラム)といったよく聞く言葉から,PRD(Product Requirements Document,製品要求仕様書)といった言葉も出てきました.

お昼は近くのお店でご飯をご馳走になりました.どれも量が多くて美味しくてオススメです.唐揚げもとても美味しそうでした.

tabelog.com

f:id:hinagamura:20190918201257j:plain
一人分で食べる量じゃないサラダ

2日目

20分ほど遅刻しました(ごめんなさい).
また,この日から1人のインターンの人が2日半ほど大学の用事で参加できないとのことでした.

この日はかとじゅんさんによるシステム設計の非常に濃厚な講義を受けました.

要件定義の講座では,RDRA2.0を基に解説を受けました.
こういった開発する前の手法は個人開発ではどうしても学ぶ機会がないので,とても学びになりました. 個人的には,具体例でChatworkだとどのようなモデル図になるのかといった説明がわかりやすくてとても参考になりました.

午後からの講座は,ドメイン駆動設計とは何か?実際にどのようにモデリングをしていけばいいのかといった内容でした.
この講義のおかげで,業務パートでただ技術的な要素に偏重するのではなく,ビジネスとしてはどうあるべきかというドメインに基づいた考えに重きを置けたのだと思います.
また,インターン生の間で「ドメインモデル貧血症」がバズワードになりました.

夜は,かとじゅんさんがせっかく東京から来てくださっているので,オフィスでご飯を食べながらお酒を飲みつつ,社員さんとお喋りをしました. かとじゅんさんによる進路相談会は,酔っ払ったかとじゅんさんによってかなり話が脱線しましたが,非常に楽しくとても参考になりました.

なおこの時点で今回のインターンに対する満足度が100%を突破しました.

3日目

この日は林さんによる業務パートの環境構築とWebサービス開発の基礎の講座を受けました.
環境構築では,全員が足並みを揃えて行えるようサポートして頂けたのがとても良かったです. Webサービス開発の講義は基本的に知っていることの復習でしたが,JWT周りは初耳だったのですごく参考になりました.

この頃から業務パートで用いるアプリケーション(通称が某国民的RPGの呪文,以降業務app)のコードリーディングを始めました.ところが,

という問題に直面しました. 業務期間中は業務後にChatworkで日報を書いて共有していたので,Scalaのプロジェクトのコードリーディングの方法について質問しました.
すると,

  1. build.sbtを読んでプロジェクトの構成を把握する
  2. projectディレクトリ配下のsbtプラグインやその他周辺のライブラリにどういったものがあるのか把握する
    というのを必ずしたあと、Clean Architectureで書かれていると分かったら、
  3. infrastructureのコードを読む
  4. domainのコードを読む
  5. usecaseを読む
  6. interface adapterを読む
  7. Mainを読む
  8. resources配下のapplication.confなど、設定関係を読む

という回答を頂けて,「知見だ...」となりました.

4日目

この日は藤井さんによるデータベース設計と,今廣さんによるScalaのハンズオンがありました. DBについての最低限必要な情報をもう一度復習でき,全員の知識レベルの足並みを揃えることもできました.
ハンズオンはモブプロで行ったのですが,なかなかすぐにはコーディングが進まず時間がかかりましたが,お互いアドバイスをし合えるのはとてもよかったです.社内でも普段の業務でモブプロを行なっていることが多いらしく,所属しているサークルの活動でもモブプロをしていけると楽しいだろうなと思いました.そういえば,競プロのチーム戦って実質モブプロでは...?

お昼は近くのお好み焼き屋で焼きそばを食べました.

tabelog.com

f:id:hinagamura:20190918203912j:plain
あえてお好み焼きを食べない

5日目

この日は安達さんによる業務appのインフラ構成についての講座と,藤井さんによるチーム開発についての講座がありました. 業務appではAWSk8sConcourse CIといったCI/CDを使用しており,どれも触ったことのない技術で不安でしたがとても楽しみでもありました.
チーム開発の講座はスクラム開発に関する内容で,ハンズオンとしてコイン渡しドットゲームを行いました. Doneの定義の大切さや,WIP(Work In Progress)の制限の大切さを身を以て体感できてとてもよかったです.これはアイスブレイクにも使えるゲームですし,今後チームで何かをする時に実践したいと思いました.

お昼は香辛薬麺という汁なし担々麺専門店で担々麺を頂きました.
この店の特徴は,32種類のスパイスを使用していて,さらにナッツや京都の老舗漬物屋の福神漬も入っているところです. スパイスの複雑な香りが口腔内を満たし,ナッツや玉ねぎや福神漬の食感がそれぞれ異なっているためいつまで経っても飽きることがない,これが宇宙か...(放心).

tabelog.com

f:id:hinagamura:20190918203938j:plain
これが宇宙

2週目

この週からは業務パートが始まりました.
基本的にスクラム開発でアプリケーション作成を行いました. 1週間を1スプリントとして残り2週で2スプリント行いました. 通常のスクラムと異なる点として,東京の方から尾崎さんshakaさんに来て頂き,エルダーとしてチームにジョインして頂きました. かとじゅんさんや宮下さんも含め途中で東京に帰られるのですが,チャット上あるいはビデオチャットで会議を行なって意見を交換することができ,同じ場所にいなくても業務を遂行できるのがいつものことなのかと驚いた記憶があります.

初日は,宮下さんによるプロダクトマネジメントについての講義と,スプリントプランニングを行いました.
PMと言ってもプロジェクトマネジメント(PdM)とプロダクトマネジメント(PjM)があることを知らなかったので勉強になりました.また,PDRについての説明では,Chatwork内での使用例を実際に見せて頂き使い方のイメージが湧いてとてもよかったです.
スプリントプランニングではバックログアイテムの定義と工数見積もりを行いました.プランニングポーカー工数を見積もったのですが,1回目でストーリーポイントが全員一致しなかったとき,その次で全員揃うのが忖度だなって思いました.

2日目はまずデイリースクラムをしてから,運用保守の講座と作業フェーズが始まりました.
CI/CDに関しての講義と,Chatwork内でどのようなツールが使われているかの説明がありました.あまりにも多くのツールが使われていて,保守って大変なんだなと思いました.

1スプリント目の作業フェーズは,

でした.この設計の段階で合意が取れていないと実装中にまた設計に戻ってしまうので,ここは時間をかけてよかったと思います.ただ,見積もりをはるかに超える時間がかかったので経験不足を実感しました.また,実装をスプリント終了までに詰めきれず悔しかったです.実装は最初ということで基本的にモブプロで行ったのですが,知識の共有のしやすさといういい面がありますが,時間がかかるという悪い面もありました.

作業終了後は

  • スプリントレビュー
  • スプリントレトロスペクティブ

を行いました. スプリントレトロスペクティブでは,Fun/Done/Learnを使って振り返りを行いました.KPTとは違ってネガティブな発言が出づらいので個人的に好きでした.

この週の初日にウェルカムパーティーもあり,普段接することの少ない社員の方ともお話ができました.オフィスで飲むお酒は美味しいです.
あと,オフィスにいい感じのコーヒーミルがあったり,炭酸水生成器があるのも面白いと思います.

f:id:hinagamura:20190918204047j:plainf:id:hinagamura:20190918204104j:plainf:id:hinagamura:20190918204111j:plain

この週はこんなものを食べたりしました.
ラーメン人生JETと沖縄料理屋さんが特に良かったです.

tabelog.com

tabelog.com

f:id:hinagamura:20190918204035j:plainf:id:hinagamura:20190918204122j:plainf:id:hinagamura:20190918204221j:plainf:id:hinagamura:20190918204233j:plainf:id:hinagamura:20190918204242j:plain

3週目

この週から2スプリント目が始まりました.
このスプリントでは,先週デプロイできていなかったもののデプロイと残り追加機能の実装・デプロイを行いました.
元々PMに提案されたMUST要件はなんとか実装できましたが,議論してこれも必要だと思いユースケース設計したものは実装できずとても悔しかったです.
前スプリントでの反省点として

  • 議論が長過ぎる
  • モブプロばかりで実装が進まない
  • 期限に間に合うようにするという意識が足りていない

があったので,

  • 議論が長過ぎる → タイムボックスを意識する(例えば15分以内で話し合いは終える)
  • モブプロばかりで実装が進まない → 7人チームだったので3人,4人のペアに分ける
  • 期限に間に合うようにするという意識が足りていない → スプリントゴールを設定する

というのを心がけました.

業務内で得た知見としては

  • scalaのREPLとsbt consoleでは起動時にimportしてくるものが違うらしい
  • ULIDは1ミリ秒短い間隔で生成してもユニークになるが,1ミリ秒以内ではソートはできない
    • ULIDについての参考はこちらで,ULID文字列の前半でUNIX時間を使っていて後半はランダムだから1ミリ秒までしかソートができない

がありました.ULIDに時間を溶かしたので許せない気持ちでいっぱいです.テストケースは仕様を考慮してしっかり作りましょう.

他にも開発本部長の春日さんと1on1をしたり,インタビューを受けたりしました. また,最終日前日にはリッツ・カールトン社長と会食という,これ本当にインターンなのか?みたいなイベントもありました.社長と聞いてビクビクしていましたが,とても気さくな方かつエンジニアって感じがしてとても楽しい時間を過ごせました.リッツ・カールトンの椅子はフッカフカでやばかったです.

www.ritz-carlton.co.jp

f:id:hinagamura:20191003121905j:plain
ご飯の写真撮り忘れましたごめんなさい

あとこの週のご飯コレクションです.写真には撮り忘れたのですが麻婆豆腐本当に美味しかったのでおすすめです.並びすぎてて最終日の昼からの業務に遅刻したのは秘密.

tabelog.com

tabelog.com

tabelog.com

f:id:hinagamura:20190918204303j:plainf:id:hinagamura:20190918204314j:plainf:id:hinagamura:20190918204326j:plain

まとめ

とりあえずで申し込んでみたインターンでこんなにも楽しく貴重な経験ができるとは思っておらず,いい意味で想像を裏切られた感じでした. 今回のインターンで得た人との繋がりや知見は今後の人生でも大切にしていきたいと思います.
また,この記事が少しでも来年のインターンシップ参加者にとって役に立てば,と思います.

長文読んで頂きありがとうございました.

3週間お疲れ様でした!!!!!

f:id:hinagamura:20191003122626j:plainf:id:hinagamura:20191003122638j:plain
皆さんもう買いましたよね? https://utme.uniqlo.com/jp/front/mkt/commodities/FkVlOUQ?locale=ja