はじめまして7月に入社した開発部の志賀です。宮崎から名古屋に引っ越してきました!
カルテットでは、すぐに業務での実装を始めず、ありがたいことにとっても手厚い研修をしていただきました。
私は、PHPでの業務経験がありバックエンドエンジニアとして採用していただきましたが、Symfonyは未経験でオブジェクト指向にも苦手意識がありました。
そのため、入社前は「開発部の高いレベルについていけるのか?」という不安がありました
しかし、2ヶ月という長い期間の研修を設けていただき、そんな不安が吹っ飛びました〜!
今回は、その中でのオブジェクト指向研修(OOP研修)を中心に、具体的な内容を、研修を受けた側の目線からお届けできればと思います。
技術的な内容については、次回「~技術編~」として投稿する予定ですおたのしみに
研修内容
私が受けた研修は、上から順に3つです。
- Symfony入門(本)の写経
- Symfonyを使ったユーザ登録機能の実装
- オブジェクト指向研修 ←今回の記事のメイン!!!
それぞれ内容は以下のようなものでした。
Symfony入門(本)の写経
業務で使っているフレームワーク「Symfony」の基礎を学ぶ研修です。
実装したソースは、GitHubにpushしていきます。本中の分からないことは随時slackや口頭でメンターの方に質問できました。
Symfonyを使ったユーザ登録機能の実装
- Symfonyを使った機能実装のノウハウを知る
- 自分の実装とカルテット開発部の模範解答の差分より、自分の設計指針に気づき、オブジェクト指向に基づいたカルテットの設計指針を知る
といった目的の研修です。
模範解答ブランチのコミットメッセージのみを1つずつ見て、自分なりの実装を書いていきます。
コミットメッセージは、以下のようなものがありました。
- [UserRegistration] interfaceを実装してUserエンティティ, UserRepositoryを作成(項目はidのみ)
- [UserRegistration] Userエンティティに項目を追加(name, email, password)
そして、各コミットメッセージ(≒作業指示)に対して、以下のような手順を繰り返しました。
- 自分なりに実装(テストコード含む)をし、答え(=模範解答ブランチのコミット差分)を見る
- 自分なりの実装との違いがあれば、なぜ違うのか考える
- 答えがどうしてそのようになっているのか納得のいくまでメンターと話す
- 答えの実装を適用する
もちろん、自身の設計指針を否定するものではなく業務ではカルテットの設計指針を優先してほしいという目的のためです。
オブジェクト指向研修
使ったツール
ツール | 用途 |
---|---|
GitHub | ソース管理用。issueで課題を立て、質問や相談をissue単位で行いました。 |
CircleCI | テストの自動化のため。カルテットではテストコードを書いています! |
Trello | 研修の振り返り(KPT)を行うため。 |
esa | 日報を書く用。文章にすることで自分自身の1日の振り返りができました。メンター以外の開発の方にも進捗やつまづきポイントを知ってもらうことで、アドバイスをいただけました。 |
やり方
カルテット開発部では、採用の際に実技試験(コード提出)があります。
そこで提出したコードを元に、「オブジェクト指向を用いてリファクタリングする。」という研修でした。
(そもそも試験の段階で「オブジェクト指向を用いて実装してください」という指示があったのですが、十分にリファクタリングの余地がありました。。。)
先述の「 Symfonyを使ったユーザ登録機能の実装」 → 「オブジェクト指向を用いた実技試験のリファクタリング」 の順番のおかげで、自身の設計指針の良くないところやもっと良い設計が分かり、リファクタリングに活かせるという良い循環ができたと思います。
具体的な取り組み
リファクタリングのための問題点・改善点のissue化 → レビュー
issue作成の順番は、私→メンター→私 …の繰り返しでした。(最終的なissue総数は40件でした!)
メンターの方とissue上で改善案を話し合い、方向性が決定したら実装しプルリクを出してレビューをしてもらいます。
もちろん、問題点は分かっているけど、どう改善したらいいか分からない時もあります。(大半がそうでした)
その場合は、自分で調べたり考えたりして「こういうことをしたらいいとは思うんだけど、コードに落とし込めない」「こうしたらメリットはあるけど、こういうデメリットがありそう」など自分なりのモヤモヤも含め、すべてissueコメントに貯めていきました。
メリットとしては、3点です。
- 私自身が過去に何に困っていたかすぐ思い出せる。
- 言語化することでの私自身の頭の整理ができる。← これをすると不意に改善案が降ってくることもあります。
- メンターの方に何に悩んでいるか、どういう考えをしているのか伝えられる。(振り回していたかもしれませんがw)
ちなみに、今回メンターをしていただいた方が、実は最近お子さんが生まれたばかりで、現在はリモートワークメイン(週1日だけ出社)の働き方をされていますそのため、やり取りは基本的にテキスト(slackやissue)が中心でした。
最初はコミュニケーションが取りづらいかもしれないなと思ったのですが、実際にやってみるとissue上で綿密にやり取りすることができて、ほとんどやりにくさは感じませんでした。
また、全てissueに残るので、メモの必要もなく振り返るのも簡単で良かったです
(家族に優しい会社だな〜と感激しました)
KPTによる研修の振り返り
研修終了後に、メンターの方とTrelloを使ってKPTに基づいた振り返りを行いました。手順は以下の通りです。
- 「Keep」「Problem」「Try」にカードを追加する。
- 各リストを眺めたり質問したりして内容を共有する。
- 「Try」から次の具体的な「Action」を作成する。
1.「Keep(K)」「Problem(P)」「Try(T)」にカードを追加する
- 研修自体のやり方で良かったこと(K)・悪かったこと(P)・次こうしたら良さそう(T)
- 技術的に理解できて良かったこと(K)・理解できず終わってしまったこと(P) など…
ざっくばらんにメンター、メンティーでカードを作成しました。
2.各カードを眺めたり質問したりして内容を共有する
二人で一枚ずつカードを振り返っていきました。
- 理解が浅かった技術的なことについて、もう一度振り返ったり教えていただく機会ができた。
- 思っていたけど言えなかったことをぶっちゃける機会となり、お互いを知るきっかけになった。
といったメリットがありました。
具体的には、こんなやりとりがありました。
メンター「【Problem】リアクションが薄くてきつかったり楽しくできているかわからなかった。」
私「入社したばかりで緊張してて、猫かぶってました。とても楽しかったです。もっとリアクションします!」
メンター「そうなんですね!良かったです!」
3.「Try」から次の具体的な「Action」を作成する
最後に、今後具体的に取り組むことを決めました。
今回の研修では、こんな内容があがりました。
- 開発部ブログを書く
- 次回の研修では週に1回定期ミーティングを設けて、口頭で質問できる場を設ける など…
さいごに
手厚い研修をしていただき、開発部のみなさんを始め、会社のみなさんには本当に感謝しています!
研修を通して、オブジェクト指向やSymfonyを学ぶと同時に会社の雰囲気を感じ取ることができました。
開発部だけでなく、社員全員が知見をブログでアウトプットしていることがとてもいい文化だなと思いました。
他にも、カルテットでは社員一丸となって助け合う姿勢がめちゃくちゃいいなーと思いました。
例えば、現在開発部ではフロントエンドエンジニアを積極募集中なのですが、その採用活動も、フロントエンドチームの方だけでなく開発部全体、もっと言うと部署を超えていろんな方に協力をもらいながら行っています。
この記事を読んで少しでもカルテットに興味を持ってくださった方(フロントエンドエンジニア/バックエンドエンジニア問わず)は、ぜひ気軽にご連絡ください!