Classi開発者ブログ

教育プラットフォーム「Classi」を開発・運営するClassi株式会社の開発者ブログです。

新卒1年目に3つのチームを巡る短期留学で得た学び

ソフトウェアエンジニアのいもりです。 昨年度、Classiでは新卒エンジニアの研修として新たな試みを始めました。3つの開発チームを数ヶ月ごとに巡る「短期留学プログラム」です。

私は24年度に入社した新卒エンジニアとして、短期留学プログラムを通じて多くの学びを得てきました。 今回は、このプログラムで得た学びが、学習トレーニングチームに本配属された今、私のエンジニアとしての土台をどのように築き、そして今後どのようなエンジニア像を目指すきっかけとなったのかについてお話します。

短期留学プログラムとは

このプログラムは、座学を終えた*1新卒エンジニアが、複数の開発チームを数か月ごとに巡り、実際の開発現場でOJTを経験するというものです。この取り組みには、新卒側と受け入れ側の双方に、明確な狙いがありました。

新卒側にとってのねらい:

  • 多くの社員とつながりを作り、配属前に人脈を広げること。
  • 研修で学んだ知識を、様々な開発現場で実践すること。
  • 複数のチームを経験することで、会社全体のシステムの全体像を理解すること。
  • チームごとの文化や業務内容を肌で感じ、自身の希望を明確にした上で本配属先を決めること。

開発チーム側にとってのねらい:

  • 新卒メンバーの受け入れを通して、オンボーディングやチーム体制を見直すこと。
  • 将来的なインターンシップ受け入れ体制を整えるためのトレーニングとすること。

これらの狙いのもと、私の短期留学先にはデータプラットフォームチーム欠席連絡チーム、そして現在の所属先である学習トレーニングチームが選ばれました。

次に、それぞれのチームでの経験と学びについて、詳しくお話しします。

各チームでの経験と学び

データプラットフォームチーム

最初に配属されたのはデータプラットフォームチームでした。ここでは、ユーザー向けの機能開発ではなく、社内のエンジニアがより効率的に開発を進められるようにするための基盤づくりを経験しました。 具体的には、BigQuery上のスキャン量が多かったテーブルにパーティションを付与してコストを削減したり、手動でデプロイしていた社内サービスをIaCで管理できるようにしたり、テーブルへのメタデータ付与の自動化を進めるための足がかりを作成*2したりしました。

その中でも、特に印象に残ったのはメタデータ拡充活動の足がかりを作成したことです。

当時、BigQuery上のスキーマにメタデータを付与するには、2つのリポジトリを行き来してPRを作成する必要があり、さらに手動での作業だったため、チームの負担が大きいという課題がありました。

この課題を解決するため、私は 「スキーマファイルに付与されているコメントを、BigQueryのdescriptionに自動で反映させる」 というゴールを設定し、開発を始めました。

開発方針を定めるために書いたメモがあるのですが、今見返すとDesignDocのようなものだと気付きました。当時書いたものは「社内の開発効率化」がテーマでしたが、学習トレーニングチームでは「ユーザーの学習体験改善」がテーマになります。この時の経験は、解決すべき課題の対象が社内からユーザーへと変わっても、そのプロセスは同じだと気づかせてくれる貴重なものでした。

*3

このドキュメントでは、単に作業を効率化するだけでなく、 「社内の意識改革」 という大きな目標も掲げていました。メタデータを付与する作業のハードルを下げ、全エンジニアがより積極的にデータと向き合える文化を作りたいと考えたのです。

この開発は、技術的な挑戦の連続でした。例えば、手動で付与したメタデータが自動生成で上書きされないように工夫したり、Goの go generate コマンドとS3を組み合わせて、安全かつ効率的にファイルを連携させる方法を模索したりしました。

このチームでの経験を通じて、私はプロダクトの表舞台を支える縁の下の力持ちがいかに重要かを学びました。エンジニアがスムーズに開発できる環境を整えることが、結果としてユーザーにより良いサービスを届けられることにつながると実感できたのです。

また、この経験がプロダクト開発を行う上でBigQuery上での分析や、BIツールによるユーザーの活用状況モニタリングへの抵抗を減らしてくれました。自分が改善に携わったことでツールに親しみが生まれ、今ではデータに基づいた判断を自然に行うことができています。

欠席連絡チーム

次に配属されたのは欠席連絡チームでした。データプラットフォームチームとは打って変わって、欠席連絡では実際に先生や保護者といったお客様に触っていただくサービスの開発に携わることになります。 欠席連絡チームは一言で言うと少数精鋭チームです。メンバーは当時の私含めて4人、ミーティングは基本週1回、日頃のコミュニケーションはチャットベーススタイルが特徴です。

欠席連絡チームでは 「チーム開発」ではない開発プロセスを学び、自律した個としての成果を出していくことが求められました。新人ながらも、企画から実装、リリースまでを一貫して担当し、自身の貢献がチームの成果に直結するやりがいを実感しました。

ここでは、学校/保護者向けの「学校確認済」機能の開発に携わり、私は主にフロントエンドの画面設計や開発に携わりました。

学校確認済機能については以下を参照してください。

chienowa.classi.co.jp

自分が関わった機能が、実際にユーザーの課題を解決する様子を間近で見られたことは、プロダクト開発の面白さを教えてくれました。

また、機能開発だけでなく、リリース後の運用やリスク管理も重要な仕事だと学びました。例えば、古いコードベースの書き換えや、ECSのスケーリング調整といった内部改善にも取り組みました。機能を作ったら終わりではなく、その機能が長く安定して使われるように考えることが、ユーザーと会社に対する責任なのだと実感しました。

この学校確認済機能のリリース内容を全社会で発表しました。リリースまでに苦労したことやリリース後の活用状況を話し、良い発表だったと褒めていただいたことがとても印象深いです。

このチームでの経験は、私にプロダクトエンジニアとしての振る舞いを身につけさせてくれました。少数精鋭の環境で、自分の仕事がチーム全体の成功に直接結びつくことを肌で感じられたのは、何物にも代えがたい経験です。そして、ユーザーに届けるサービスを創ることの喜びを知り、これが今後のエンジニアとしてのキャリアを考える上で大きな指針となりました。

学習トレーニングチーム

最後の短期留学先として、そして本配属されたチームが学習トレーニングチーム(以下、学トレチーム)です。欠席連絡チームとは真逆で、チーム開発を重視した、Classiの中でも人数の多い開発チームです。

留学として配属された当初、私は主に生徒画面の改善に取り組みました。 具体的には、課題学習に取り組んだ生徒に自主学習への誘導を促す導線の作成、課題取り組み中の問題数表示、課題一覧画面での取り組み目安時間表示などです。

これらの改善は、もともとあった改善要望をもとに基本的に一人で実装を進めてリリースしたものでした。 また、学トレチームに留学した初日に、「もっと自主学習を使いやすくしたい!」という思いが湧き上がり、留学の締めタスクとして 「今日の一問」 という機能を開発してリリースしました。

chienowa.classi.co.jp

「今日の一問」機能は、DesignDocの作成からフロントエンド・バックエンドの開発まで、皆さんに助けてもらいつつも一通り担当しました。開発中に次年度の新卒研修のメンターも担当し、とても慌ただしい中での開発でしたが、最終的にリリースすることができました。その結果、当初1ヶ月半で7千人程度の利用ユーザーを目標としていたのに対し、2万人を超えるユーザーにご利用いただけました。自分が作った機能が、これだけ多くのユーザーに届いたという事実は大きな自信につながりました。

ただ、これまでの留学中の開発はチームで動くというよりは個人の裁量で進めることがほとんどでした。ユーザーからの改善要望や、私が課題感を持ったものがきっかけであり、大体は一人で実装を進めてリリースしたものでした。

正直に言うと、学トレチームに配属された当初は、欠席連絡チームとのギャップに悩みました。欠席連絡チームでは個の成果が重視されていたのに対し、学トレチームではチームとして動くことが多く、どうしてもスピードが落ちてしまうため、やりたいことが思うようにできないと悩んでいたのを覚えています。

ですが、そんな悩みを抱えながらも、学トレチームメンバーが力を合わせ、大きな機能を開発していくことを目の当たりにしたとき、私も一緒にその輪に入ってチームとしての開発に携わりたいと強く感じました。

本配属後、チームの一員として

本配属後、最初のタスクとしては6月末にリリースした「授業理解課題」の開発に参入し、それからは主にチームの一員として開発に携わっています。「個の成果」を出すところと「チームの成果」を出すところはそれぞれの良さを感じております。

「個の成果」を出しやすい良い点として、例えば「これは一人で進めてあとから確認したほうがいいな」と思ったことはパッと実装し、社内で使っていただくことでスピーディーにフィードバックを得られることです。逆にチーム内で話して合意形成をとり、スムーズに方針が定まって一人では難しい課題解決ができる良さも実感しており、今後はよりそのバランスを重視した動きができるようになることを目指していきたいです。

短期留学の総括

この一年間の短期留学プログラムは、私に大きな成長をもたらしてくれました。

データプラットフォームチームでは基盤を支える重要性とデータ分析の視点を、欠席連絡チームではプロダクトエンジニアとしての振る舞いを、そして学習トレーニングチームでは企画から形にする楽しさとチーム開発の流れを学びました。

異なる3つのチームを経験したことで、一つのプロダクトがユーザーに届くまでの流れ全体を理解することができ、幅広い視点から物事を捉えられるようになったと感じています。技術的なスキルはもちろん、異なる文化や働き方を知れたことは、今後のエンジニアとしてのキャリアを考える上で、かけがえのない財産となりました。

今後の展望としては、「お客様にとって価値を感じてもらうサービスを作って改善していくこと」や、「チーム開発についてより深く学び、貢献していくこと」を意識できるエンジニアになっていきたいです。

まとめ

最後に、今年度の新卒研修も無事に終わり、後輩たちが1回目の短期留学先に配属されていきました。 私も留学生から本配属を経て、今は迎え入れる立場となりました。どうすれば私と同じ「短期留学を経験してよかった」と思ってもらえるかを日々考えています。

短期留学中にはここに書ききれなかった以上に悩んだことや壁にぶつかった経験もありましたが、どれも今の私を形作っています。目の前の課題にがむしゃらに取り組んできたからこそ成長を実感できています。

このプログラムが、今後のClassiのエンジニア育成の一つの形になり、私の経験が後輩たちにも良い影響を与えられれば嬉しいです。

*1:新卒研修を終えた後に書いたブログ記事「24年度新卒エンジニアが研修を終えて」https://tech.classi.jp/entry/2024/09/06/163000

*2:当時のチームリーダーがより技術的な記事を書いてくださっています https://tech.classi.jp/entry/metadata-management-by-dbt

*3:「ソクラテス」はClassiのデータ基盤の愛称です。ソクラテスに関する記事はこちら https://tech.classi.jp/entry/socrates-architecture-2024

© 2020 Classi Corp.