サイボウズに新卒入社してkintone開発チームに配属されてから1年経ったのでふりかえる

こんにちは もやし丸 です。2019年にサイボウズに新卒入社して、kintone開発チームでWebエンジニアとして働いています。

kintone開発チームに配属されてから1年経過したのでふりかえりを書きました。

自分が配属される時期に中途入社された sakito さん、 Nokogiri さん、あおいさんが入社1年をふりかえるブログを書いてて、それを見て触発された感じです。

https://note.com/mki_skt/n/nd11c9fe2ec3fnote.com

nkgr.hatenablog.com

blux.hatenablog.com

shisama_さんも1年ふりかえりブログを書いていたので追記しました:

shisama.hatenablog.com

採用に関する仕事に携わったときに「入社した理由」「入社までにやっていたこと」「入社後どんな仕事をしているのか」をよく質問されるので、それについても触れながらふりかえろうと思います。

目次

入社の経緯

就活中はチームワークの向上に繋がるツールを開発している会社に興味があって、チャットアプリやグループウェアを提供しているところを見ていました。

学生時代にチームでアプリ開発をすることが何度かあったのですが、イケてるツールを導入するだけではチームをうまく回すことができなかったため、ツールの使い方だったり、カスタマーサポートにも力を入れている会社じゃないとチームワークの向上には繋がらない思っていました。

世の中のチームワークを高めることを目的にツールと文化を両方提供している会社を探していたところサイボウズ と出会い、企業理念から本気でチームワークを良くしていきたいということが伝わってきたので最終的にサイボウズ に入社することに決めました。

2017年度のサイボウズ のサマーインターンシップでモバイルコースに参加していたため、ある程度社内の雰囲気を理解していて、働くイメージができていたというのも入社を決めた理由の1つです。

cybozu.co.jp

内定時のスペック(2018年1月)

  • 地方の大学の電気系学科の学部3年生
  • 組み込み系の開発が多少できる
  • Pythonで簡単なスクリプトを書ける
  • Android/iOSの開発が多少できる(SNSアプリを2~3週間ぐらいで作れるぐらいの能力)
    • Android は Kotlin と JavaiOS は Swift4
    • MVC, MVP, MVVM パターンでアプリを作れる
    • 当時は RxKotlin と Databinding を使ったMVVMパターンのアプリを作成していた。

入社までにやっていたこと

Webのことを全然理解していない状態でWebサービスを提供している会社に就職するのは嫌だなあと思っていたので、研究と同時並行でWebの技術の勉強をしていました。

自分はIoT関連の研究をしていて、通信プロトコルの知識を必要とする機会が多かったので、通信周りの話から徐々に学習していきました。

書籍は マスタリングTCP/IP 入門編Real World HTTP Webを支える技術 を読んでました。

2018年の秋頃に Twitter で「Webサイトのリプレース作業を手伝ってくれない?」という話をもちかけられたため、この時期から本格的に HTML/CSS/JavaScript の勉強を始めました。

書籍は よくわかるHTML5+CSS3の教科書JavaScript本格入門徳丸本 を読んでいました。

ネットの教材は Codecademy というサイトを使ったり、ドットインストールを使って勉強していました。気が付いたら500本以上視聴していました。SQLSQLZOO というサイトで勉強しました。

入社してから

1年目

4~5月 (全体研修)

最初はビジネスの人と一緒に全体研修を受けました。

各部署がプロダクトとどのように関わっているのか把握しておくことは大事だし、どうせ数ヶ月後に知りたくなるだろうと考えていたので、2ヶ月間コード書けなくなることに対してそこまでつらい気持ちはありませんでした。

むしろ全体研修のおかげでビジネス側の同期と喋る機会が増えてよかったです。たぶんこの研修がなかったら僕は同期と一言も喋っていなかったと思います。

同期も先輩も優しい人ばかりで、仕事自体は楽しかったのですが、人は人と比較してしまう生き物。スーパーハイスペック人材しかいなかったので、毎日「もうだめだ...おしまいだ....。」と考えながら生きてました。人間性と能力の差に絶望しながら「なんで採用されたのかよくわからんなー」と茫然と考えながら出社する日々を過ごしていました。

また、社内で悪意のあるコミュニケーションをとってくる人が1人もいないことに動揺を隠しきれませんでした。人に優しい人しかいない空間は僕にとっては異常で、しばらくは何か裏があるんじゃないかと思って恐る恐る人と接していました。後に考えすぎだったことを知ります。

開発チーム以外の場所でも HRTの原則 を感じられるところがこの会社の本当にすごいところで、実際そういう文化があるおかげで他部署と連携しやすいんだろうなあと思っています。

note.com

6月 (エンジニア新人研修)

2019年度のエンジニア新人研修は、1週目に必須講義を行い、2週目から興味のある開発チームの仕事を体験するというものでした。

スケジュール

  • 5/27〜5/31(第1週)
    • 必修の講義や演習が中心
    • 空き時間はRFC精読や予習/復習
  • 6/3〜7/12(第2〜7週)
    • チーム体験と選択講義期間
    • 2週間で体験するチームを変えて、合計3チーム

研修の内容は毎年変化していて、2020年度はRFCを読んでHTTPサーバーを実装する研修が復活していました。2019年度は読むだけだったので今年の新人がちょっと羨ましいです。

講義資料のほとんどは Cybozu Inside Out にて公開されています。 blog.cybozu.io

僕は kintone開発チーム、モバイルチーム、生産性向上チームを体験しました。

kintone開発チームとモバイルチームでは kintone の機能実装を行いました。生産性向上チームでは、社内で使われているブラウザ拡張機能の修正/機能追加をしたり、ktlintの導入をしたりしていました。(本当はCI/CD 周りの仕事をしたかったが、僕が体験した週は優先度が低めだった)

チーム体験前は「スキルセット的にモバイルチーム以外の選択肢はないだろうなあ」と思っていたのですが、チーム体験をすることで「意外と他の部署でも仕事ができそうだぞ」ということが分かってきました。そこで、一度持っているスキルのことは忘れて、今後この会社の中でどういう仕事をやりたいのか考え直しました。

当時は"Webの技術に興味がある"、"kintone という製品のコアとなる部分にも積極的に携わっていきたい" という気持ちが強かったため、第1希望を kintone開発チーム にしました。

配属前に面談があったので、現状のスキルセットで仕事を進められるのか不安だという話をしたところ、「これから身に付ければいいよ」と言われてあっさり kintone開発チーム に決まりました。

(なぜかフォロワーが200人増えたツイート)

7月~9月 (つらい時期)

この時期が一番辛かったです。

kintoneはモブプログラミング(以下モブと呼ぶ)で開発が進められていて、"わからないところがあったら遠慮なくモブを止めて質問する"ということになっています。メンバーの認識を揃えることが属人化を防ぐことに繋がるし、メンバーの質問で考慮できていなかった部分を新たに発見できることもあるので、積極的に質問してほしい!という雰囲気を感じます。

blog.cybozu.io

そんなkintone開発チームのモブの中で、僕はほとんど発言できていませんでした。発言してもちょっとよくわからない日本語を話していました。

開発に使っているフレームワークプログラミング言語デザインパターン、kintoneのドメイン知識、仕事の進め方など、とにかく分からないことが多すぎて、僕は何が分からないのか分からない状態になっていました。

いくら質問しやすい環境にいても、わからない部分を言語化できなければ周りの人も何を教えてあげればいいのかわかりません。分からない部分を相手に伝えることができないもどかしさを感じながら開発する日々が続き、精神的につらいと感じることが増えていきました。

7月に開催されたモブプログラミングMeetupで登壇したときは一丁前のことを言ってましたが、実際のところ僕のモブの立ち回りはボロボロでした。

この頃、同じチームに配属された同期はチームの問題点を指摘して改善案を出してたり、社内のハッカソンで新しいプロジェクトを立ち上げていたりしました。その様子を見て自分の力の無さを痛感して落ち込んだし、何より1年後先輩方のようにバリバリ開発できるようになっている姿が全く想像できなくて完全に自信を失っていました。

10月~12月

モブの中で質問できるようにする

言語化する能力が低いということを受け入れ、どうやったらモブを止めて質問できるようになるのか考えてました。

モブの目的は認識を揃えることで、質問はそのための手段です。なので、僕以外の人に僕が分かっていないところを言語化してもらうことで認識を揃えてもいいはずだと考えました。

僕は自分で分からないところを言語化するということを一旦諦めました。そして、分かっていないところを指摘してもらうやり方に変えました。

モブでは「認識があっているか確認させてください。○○という認識であってますか?」ということをよく質問するようにしていました。この質問の仕方だと、認識が間違っている部分をメンバーに指摘してもらって、自分が理解できていない部分を明確にすることができるからです。

また、実装に関する質問を言語化するのもなかなか難しかったので、実装前に図を描いてメンバーに積極的に共有していました。図を描けば最悪"これ"とか"それ"でも伝わりますし、影響範囲が一目でわかるようになります。

こんな感じで間違っているところを教えてもらいやすいように工夫して、なんとか開発チームの中に溶け込んでいきました。

kintoneの開発に必要な最低限度のスキルを身に付ける

kintoneは フロントエンドが Closure Library(中身はJavaScript)、サーバーサイドが Java で書かれています。両方の実装が必要になるタスクは珍しくないため、どちらも実装できるようにしておく必要があります。

当時僕が所属していたチームでは、16時~18時を個人探究時間として使っていいことになっていたので、その時間を利用して kintone に必要な知識のキャッチアップをしていました。

実際にコードを書いた方がわかりやすいので、フロントエンド、サーバーサイドの両方の実装を必要とするインターン生用の課題を拾ってきて、実装しながら kintone の設計や処理の流れについて勉強してました。

社内の勉強会も活発で、この時期に css設計勉強会 と Effective Java勉強会 をやっていたので参加していました。

休日は プロトタイプチェーン、関数内の this が指すもの、変数の巻き上げ、イベントループの仕組み....etc など、 JavaScript の言語仕様について調べていました。

焦らない

同期と一緒に登った赤城山の写真

とにかく焦っていました。

仕事ができるようになるまでの道のりがあまりにも遠く、今後どう立ち回っていけばいいのか考えすぎて眠れない日もありました。

そんなときに同期から登山に誘われました。

山の麓から頂上を見たとき、その道のりはあまりにも遠く見えました。でも、方向を間違えずにペース配分を考えながら進むと、気が付いたら頂上に辿り着いていました。

理想の状態に辿り着きたかったら方向性とペース配分が大事。山がそう教えてくれたような気がします。

家に帰ってきたときには、すでに焦る気持ちは消えていました。

1月~3月 (兼務してた時期)

kintone の新規機能を React + TypeScript で実装するプロジェクトが始まりそうな機運を感じていて、自分もこのプロジェクトに参加したかったので勉強を始めました。

社内で利用されているブラウザ拡張機能を TypeScript に置き換え、ポップアップ画面を React を使って再実装したりしていました。

ただ、趣味開発の時間をこれまで以上に確保することに限界を感じていたので、仕事で React を書く決意をしました。

ちょうど .com共通管理画面 を React + TypeScript で書き換えるプロジェクトが進行中だったので、思い切って兼務してもいいかPMに聞いてみたところ、あっさり承認されたので週1で兼務することになりました。そのため、週4日kintone開発、週1日.com共通管理画面のリプレース という働き方をするようになりました。

他には有志メンバーで サーバーサイドのテストコードの改善(hamcrest → AsserJ移行) を進めたり、Pythonで書かれた開発用の便利ツールの修正をしていました。

2年目

4月~6月 (1人で開発してた時期)

kintone開発 と .com共通管理画面のリプレース作業 を切り替えながらの開発が負担になっていました。

リプレース作業の次の日に1日分のkintone開発の進捗を把握してモブに参加するのはなかなか大変で、仕事の内容を思い出す時間のことも考えると無駄な時間が多いと感じていました。

色々と悩んだ結果、一度 kintoneの新規機能開発 をやめて .com共通管理のリプレース作業 に集中することにしました。ちなみにチームメンバーは僕1人でした。

1日中誰とも喋らずに、ただひらすら黙々とコードを書く日々...久しぶりのぼっち開発はなんだか新鮮な気分でした。技術のことだけ考えていればよかったので最高 of 最高でした。

平日は8時間コードを書き、寝るまでの間は技術系の記事を読み、休日は趣味開発にすべての時間を注いでいました。

趣味で開発していたのは「Flexbox Cheat Site」という Webサイト です。

kuroppe1819.github.io

リリースしてみたら意外と反響がありました。

はてなブックマークのテクノロジー欄でホットトレンド入りを果たし、ブックマーク数は500を超えていました。

はてなブックマーク - 人気エントリー - テクノロジー - 2020年5月25日

リリースしたら社内の技術LT会で発表する!と決めていたので登壇もしました。

その後は検索かけても引っかからなかった内容の記事を書いたり、オライリーのTypeScript本Webパフォーマンスチューニングの本を読んだりしていました。

7月~ (これから)

なんやかんやで kintone開発チーム に戻りました。現在は kintoneの機能を React で開発するプロジェクトに携わっています。

戻った理由は以下の3つです。

  • モブで知識を吸収した方が効率がいい
  • .com共通管理のReact化で学んだスキルを共有できる
  • kintone開発 でぶつかった問題は .com共通管理の開発 でもぶつかることが多いので問題の対処法を一緒に考えたい

今後の方針としては、3ヶ月ごとに kintoneのReact化 と .com共通管理のReact化 を切り替えながら働くことを考えています。

1年をふりかえってみて

自分のできることを模索していた1年間だったなーと思います。

配属された頃はあまりにも仕事ができなくて悩んでいましたが、開発メンバーのサポートのおかげでひよっこWebエンジニアぐらいにはなれたような気がします。

kintoneのドメイン知識もフロントエンドの知識もまだまだ足りないので、これからも精進する所存です。

2年目も頑張るぞー!