Cybozu Summer Internship 2018に参加してきました。僕は、第3タームにあたる9/10〜9/14の5日間、大阪会場でお世話になりました。いろいろと学びが多く濃密な5日間だったので、書ける範囲で忘れないうちに書きたいと思います。
選考
インターンの内容
私は、kintoneというサービスの機能追加を行いました。今回は、東京のインターン生3人を合わせた計4人のチームで、開発を行いました。
リモートで作業するということに加え、今回は、5日間通して、全て「モブプログラミング」というスタイルで開発を行いました。
モブプログラミングとは、チームメンバーのうち1人が「ドライバー(作業者)」となり、それ以外のメンバーが「ナビゲーター」としてドライバーに指示を出しながらプログラミングを行う手法です。イメージとしてはペアプロの大人数版みたいなやつ。
インターン中は、基本的にテレビ通話を東京と繋ぎっぱなしにした状態で開発を進めていきました。
リモートであることに加え、普段聞き慣れない開発スタイルを体験して正直不安でしたが、案外なんとかなりました。
というより、「モブプログラミング」めちゃくちゃいい。早い話CPUとキャッシュメモリが複数存在しているようなものなので、わからないことを叫べば瞬時に答えが帰ってくるし、実装しながら後ろで同時進行でコードレビューが行われているような状態になる。チーム全員で作業してるので、「実装の責任がチーム全体に分散してる」という点で精神的にも楽。
サイボウズには「ウルトラワーク」という制度があり、個々の社員の働き方を会社として尊重する風土があります。そのため、リモート勤務を行う社員も多く、拠点も大阪や松山にあるため、基本東京オフィスとリモートで作業することが多いそうです。そのこともあってか、ここまでリモートワークがしっかり定着して、ちゃんと運用されている会社は初めてだったので非常に驚きました。
また、インターンでは、kintoneチームの普段の開発スタイルである「スクラム」に則って同じように作業を行いました。そのため、プロダクトバックログを作成し、タスクを分割し、朝会や振り返りを行いつつスプリントを回していく、といった一連のサイクルを体験できました。
インターンの大まかなスケジュール
インターンの大まかなスケジュールはこんな感じでした。
- 1日目
- オリエンテーション
- ユーザーストーリー・使用検討検討
- 2日目
- 講義
- 実装
- 3日目
- 講義
- 実装
- 4日目
- 講義
- テスト作成
- 5日目
- 発表資料作成
- 成果報告会
1日目
1日目は、オリエンテーションを行いました。出社してすぐに会議室に通されて一人分の弁当が広々とした会議室に置かれてました。寂しい。
オリエンテーションは東京で行われるので、大阪会場等の拠点はテレビ通話です。基本的にこちらはミュートした状態で東京の様子を中継を見てる感覚で楽しんでました(高みの見物感があってわりと楽しかった)
集合写真を撮る時は、東京側で大阪会場の画面が映った画面を囲う形で撮影しました。これもリモートならではの文化らしいです(面白かった)
オリエンテーション後には、さっそく業務に入りました。
課題は、メンターが用意してくれたお題のうちから一つを選んで、モブプログラミング形式で作業していくという形でした。 とりあえず、テストまで書きたかったので、難易度的には中間くらいのものを選択しました。
課題が決まると、ユーザーストーリーと仕様の検討に入りました。本当にちょっとした機能追加だったのですが、しっかりユーザーストーリーを書いたり、仕様や受け入れ条件をしっかり定義したのは正直驚きでした。これが、スクラムにおける、プロダクトバックログの作成です。
プロダクトバックログが完成したら、タスクの分割を行い、実際の実装に入っていきます。このあたりで1日目が終了しました。
各日の終わりには、「ふりかえり」というものを行いました。これは、スクラムのプロセスの一つらしく、「KPT」という評価軸でその一日の振り返りを行いました。
KPTとは、以下の3つの評価軸の略です。基本的に、一人それぞれ一つずつKPと、それに対するTを発表していき、振り返りを行いました。
- K: Keep(継続していきたいところ)
- P: Problem(まずかったこと)
- T: Try(次に試すべきこと)
昼飯
お昼ご飯はお弁当でした。わーい!
夕飯
夕飯はさすがに出なかったので、大阪のグルメ巡りに繰り出しました。トンテキを絶対に食べろと知人に言われていたので、食べてきました。メチャウマでした。
2日目
各日のはじめには、朝会というものを行いました。朝会では、「昨日やったこと」「今日やること」「進捗の妨げになっていること」の3つを一人ずつ発表していきます。これもスクラムのプロセスの一つらしいです。眠い目をこすりながら、頑張って朝会に臨みました。
朝会を終えると、昨日の続きで、仕様書を完成させました。いよいよ実装に入っていきます。
とりあえず、分割されたタスクを見て、以下のような順序で進めていくことにしました。
フロントエンド(API不要部分の実装)→バックエンド(API整備)→フロントエンド(API関連機能実装)→結合してテスト→自動テスト
ただ、フロントの実装がかなりえぐかった上にコード量も膨大なので、仕様把握でほぼ1日使ってしまいました。とりあえず必要なUIの実装は40%ほど進みました。
ドライバーを適宜交代しながらだったのですが、最初は慣れずに切り替えにもたついたり、慣れない開発環境に手間取ったりすることが多かったです。
昼飯
社長の青野さんとのランチです。もちろん僕はリモート参加です。ぶっちゃけた話とかたくさん聞けて面白かったです。ありがとうございました!!
夕飯
連れの会社の同僚が(なぜか)会いたがってたらしいので3人で「ねぎ焼きやまもと」へねぎ焼きを食べに。とん平焼きとかいうのも食べました。旨すぎる。
ちなみに写真は取り損ねました。おいしいクラフトビールの写真ならあります。
3日目
朝会を終えて、昨日の続きです。しかし、フロントの思いもよらぬところで問題が発生してしまいました。再利用しようとしていた実装が、実は再利用できないような実装になっていたということです。
かなり重要なUIの部分だったので、なんとかしようともがいているうちに1日が終わってしまいました。
1日の最後に思い切って方針転換を行い、別の部分の実装を流用することで解決することができないか、という仮説を立てました。とりあえず、4日目にその実装をためそう、ということで、3日目は終了しました。
昼飯
メンターの方と大阪オフィスの開発部長さんにランチに連れて行っていただきました。せっかくなので大阪名物を、ということで、たこ焼きを食べに行きました。ごちそうさまです…めちゃくちゃおいしかった… しょうゆ+マヨネーズって意外と合いますね、めちゃくちゃアリです。家でもやります。
夕飯
4日目の昼飯で行こうと社員さんと話していたマルショウ、台湾まぜそば好きとしては居ても立ってもいられずにフライングしました。
4日目
作業が滞っていたので、フロントとバックの2手にわかれ、それぞれメンターさんとともにモブを行うことにしました。
3日目丸々使っても解決できなかったフロントの問題ですが、4日目の午前中の作業1時間分で解決してしまいました。再利用しやすい設計の大切さが身にしみてわかりました。設計大切。
バックエンドはやるだけだったのでなんの問題もなく実装が完了し、フロントと結合して難なく動作しました。3日目の苦労は一体何だったんだ…
細かい不具合を修正し、発表資料を作成するのを優先しました。自動テストを書く余裕は、5日目次第ということで、4日目が終了しました。
また、4日目は、サイボウズ内のインフラ刷新プロジェクトに携わっている社員さんとお話をさせていただきました。
業務でOSS開発をしているとのことで、いろいろと貴重なお話を聞くことができました!ありがとうございました!
昼飯
マルショウです。カレーも美味しかった… 味付けが関西風ですね。あっさりしてました。これはこれで好きだ…
夕飯
そろそろネタに困ったのと、普通に疲れて探す気力がなかったので、ホワイティうめだの定食屋へ。豚汁がうまかった…
5日目
最終日です。資料の各個人のページを追記し、自動テストの実装に入りました。
自動テストは、発表映えを重視し、ユニットテスト部分は全て後回しで、SeleniumWebDriverを使用した受け入れテストのみを実装しました。
僕がSeleniumの使用経験があったり、チームメンバーがソースコードに読み慣れてきたのもあって、すぐに実装が完了しました。
というわけで、無事、成果報告を終えることができました。
「再利用 しやすい実装 目指そうね」
また、5日目は、「趣味でOSS開発している人と面談したい」という僕の無理なお願いで、@koba04 さんと面談させていただきました!
OSS活動のとっかかりだったり、普段どんな感じで開発をしているのか等々、ためになるお話をたくさん聞けて本当に勉強になりました… これからOSS活動頑張ってみたいです!がんばります!
昼飯
インターン生だけでランチです。元橋田研の東大院生だったり、SecHack365の2期生だったり、いろいろと縁がある人とお話できて楽しかったです!!!
懇親会
ありがとうございました!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
さいごに
大阪オフィス、めちゃくちゃ快適でした。大阪オフィスの社員さんはみんな暖かく接してくださり、全く寂しい思いをすることなく5日間過ごすことができました。本当にお世話になりました。
大阪オフィスの社員さんがたまたま同じ学科出身の方で内輪話で盛り上がれたり、なぜかSwiftに関するお話をいろいろできたり、就活の相談にのってもらったり、本当にこのインターンだけで得られたものがあまりにも多すぎて消化不良をおこしてるレベルです…
思い切って大阪に行きたいと言ってよかったな、と思ってます。(交通費・宿泊費まで負担していただいているので実質タダで旅行してるみたいになってしまった)
リモートワーク、空気感を読むのがつらい等々ありますが、案外いけるので、東京以外の就職も普通にありえるな、と感じました。
あとは、サイボウズ社の自由な働き方を直接社内から感じることができたのが収穫だなあと思っています。ワーク・ライフ・バランスは非常に大事だと個人的には思っているので、副業やったり在宅勤務したり等々自由にやらせてくれるのは本当にエンジニアにとっては素晴らしいと思いました。
兎にも角にも、皆さんも是非大阪へ!!