見出し画像

新卒2年目から見たナビタイムのトレーニング制度

こんにちは、猫じゃらし太郎です。ナビタイムジャパンでドライブサポーターのAndroidアプリ開発を担当しています。

皆さんの会社にはどんな制度がありますか?
今回は新卒2年目のエンジニアが利用した、技術トレーニング制度について紹介していきます。
制度を通じて、当社の雰囲気や文化も伝わりましたら幸いです。

技術トレーニング制度とは?

技術トレーニング制度とは、名前の通り技術力向上を目的とした社内制度です。
主に、ジョブローテーション等で異なる技術分野の知識・スキルが必要になった場合や、業務のためにスキルアップしたい場合に利用されます。
技術目標を設定し、達成に向けてトレーナーとマンツーマンで技術を学ぶことができる点が特徴です。

実際にトレーニングを始めるまでには以下のようなフローで進んでいきます。

  1.  トレーニーの選出・応募

  2.  運営事務局が適切なトレーナーを選出

  3.  トレーニーとトレーナーで話し合い、目標と活動内容を決定

  4.  スタート!!

なぜ利用しようと思ったのか

私がこの制度を利用しようと思ったのは、新卒1年目の時に、部長との面談で紹介してもらったことがきっかけです。

当時、アプリ開発がスケジュール通りに進まず予定から遅延してしまう課題があり、焦りを感じていました。
原因を整理する中で、実装がうまくいかず開発中に手戻りが発生してしまうことが要因であると考え、自力で考え設計する力・コーディングスキルをさらに身につけたい!、と思ったのが応募に至った背景になります。

活動スタート!

上記の経緯から、「Androidアプリの設計・実装を行い、設計理由を説明できるようになる。」をトレーニングの目標として設定し、
個人アプリ(筋トレ記録アプリ)の開発をベースとして、3ヶ月週1回ペースで活動していきました。

主な活動内容

  • 個人開発アプリの全体設計と実装をレビュー ➡️ 修正

  • モブプロ(Kotlin FlowDI

  • その他必要に応じてレクチャー(Android Studioの機能、命名について、等)

  • 随時、質問&回答タイム

DI(依存関係インジェクション)のモブプロについては、Android用のDIライブラリであるHiltを用いて、ローカルDBにアクセスするデータベースクラスの注入を実装しました。
実装を通じて、クラスで依存関係の作成を管理する必要がなく、意識せずにクラスを使いまわせる点が利点であると感じました。
業務で開発しているプロダクトでもkodeinというDIライブラリを使用していますが、これまでは盲目的に既存コードに倣って利用していたので、有用性を考える機会になって良かったと感じています。

得られた成果

活動してきて一番良かったと思うのは、設計・実装の良し悪しを判断する基準として、運用コスト という軸が明確にできたことです。
運用コストとは、今後、機能追加などの目的で自分が実装した箇所に誰かが手を加える際に、コードを理解する時間とコードを追加・変更する時間を指しています。

これまでも理解しているつもりでしたが、細かくフィードバックをいただく中で、

  • 各クラスの役割を明確に決める。分ける。

  • クラスが役割を担っていない仕事をできないように制限する。

これらの点にこだわることで、構成がシンプルかつ分かりやすくなりました。例えば、ホーム画面のクラス設計です。

筋トレ記録アプリのホーム画面

ホーム画面では、過去の履歴を確認できるようにカレンダーを表示しています。
「表示月」や「今日の日付」の設定を元々は、レイアウト表示を担当するfragmentクラスに持たせていましたが、表示に必要なデータ・状態を保持するviewModelクラスを作成し、こちらに処理を移行しました。
これによって、fragment側はviewの表示に専念でき、役割を分けたことで、仕様を変更する場合に変更箇所をわかりやすくすることができました。

実務でもクラスの責任範囲を整理することで、考慮もれが少なくなり開発スピードが上がったと感じています!

まとめ

今回は社員を支える社内制度についてお話ししました。
利用してみて、社内の有識者から学べる機会があるのは心強いと感じました。
業務に必要なスキルアップのサポート体制があることは、ナビタイムジャパンの強みの1つなのかもしれません。

最後まで読んでいただきありがとうございました。