弊チームにおけるチュートリアルやオンボーディングプランについて
はじめに
2022/07から株式会社FOLIOで働いている田口と申します。
私が所属しているチームは、4RAP というプロダクト(金融機関の「投資一任サービス」を実現する SaaS 型プラットフォーム)において、金融機関とのデータのやり取りを行うインターフェイス部分の開発・運用を担当しています。
プログラミング言語は Scala を使っており Cats(Cats Effect) という関数型ライブラリを中心に Doobie, Crice, FS2, Refined といったライブラリを主に使っています。
ところでこれらのライブラリ、どのくらいご存知でしょうか?
「全く知らないぞ」という方も多いかと思います。
実は弊チームに参画する人の中でも Scala 経験がある方は2,3割程度で、これらのライブラリ全てに経験がある人はほとんどいないと言って差し支えないかと思います。
そのため弊チームではオンボーディングの一部、最初期に取り掛かるタスクとして、newbie というチュートリアルリポジトリが用意されており、プロダクトコードの開発をするための知の高速道路の一つとして機能しています。
本記事では newbie や他のオンボーディングプランについて簡単に紹介しようと思います。
チュートリアルリポジトリ newbie の中身を紹介
newbie に収録されているうちの Cats が提供しているデータ構造の一つである Validated に関するチュートリアルを紹介します。
import cats.data.ValidatedNel
import cats.syntax.apply._
import cats.syntax.either._
import javax.inject.Singleton
//noinspection SameParameterValue
@Singleton
class ValidatedSample {
def run(): Unit = {
// Validatedは「エラー結果を累積してエラーハンドリングを行うことができる」catsが提供するデータ構造です。
// エラーを累積する性質上NonEmptyListと組み合わせて使うことが多く、ValidatedNelという型エイリアスや toValidatedNel などの関数が提供されています。
// またEitherとの相互変換を行うニーズが強く、そのための関数なども提供されていることにも注目しましょう。
// 課題1: 実行してEitherの処理との違いを確認しましょう。
val errorOrUser: Either[Throwable, User] = for {
// name, age いずれもエラーになる値が入れられている。
name <- validateName("Alice Pleasance Liddell")
age <- validateAge(-1)
} yield {
User(name, age)
}
println(errorOrUser)
val errorsOrUser: ValidatedNel[Throwable, User] =
// name, age いずれもエラーになる値が入れられている。
validateName("Alice Pleasance Liddell").toValidatedNel
.map2(validateAge(-1).toValidatedNel)(User)
println(errorsOrUser)
// 課題2: map2をmapNを使った処理に書き換えてみましょう。
// 課題3: Validatedにはどのようなメソッドがあるか調べてみましょう。
}
case class User(name: String, age: Int)
private def validateName(name: String): Either[Throwable, String] = {
if (name.length > 10) Left(new Throwable("名前は10文字以下で入力してください")) else Right(name)
}
private def validateAge(age: Int): Either[Throwable, Int] = {
if (age < 0) Left(new Throwable("年齢は0以上で入力してください")) else Right(age)
}
}
このような経験者にとっては簡単だけど、初学者にとってはふむふむ感じる程度のトピックを、一つのライブラリに対して数個ずつ勉強していくためのリポジトリになっています。
大トピックとしては、2025年現在ですと以下のようなものがあります。
- Cats
- Cats Effect
- Circe
- Doobie
- FS2
- Refined
- テンポラルデータモデル
- ※ライブラリではなく履歴管理のためのデータモデリング手法
- 参考 URL: 業務から見たテンポラルデータモデルの解釈と利用方法の紹介
- CalendarDSL
- ※FOLIOで使用している複数の営業日カレンダーを扱う業務のための日付モデル
- 参考 URL: 複数の営業日カレンダーを扱う業務のための日付モデルの紹介
- MYSQL チューニング
人によりますが5営業日くらいで終わる人が多いくらいの規模感で、じっくり取り掛かって10営業日かける人もいれば、経験者の場合は1日で駆け抜ける人もいるくらいの難易度を想定しています。
これらを実施してもらって、Pull Request を送ってもらいレビューをしてもらったらこのチュートリアルは完了になります。
他のオンボーディングプランについて
さてオンボーディングの最初期である newbie について紹介しましたので、それ以外のオンボーディングプランについてもざっくりと紹介します。
まず、前提として弊チームでは立ち上がりをサポートするためにメンターが必ず付きます。基本的にはメンターとペア(バディ)になってオンボーディングプランを駆け抜けていくので、リモートワーク環境化においても安心して業務にフェードインできる環境作りができていると思っています。私自身もコロナ禍での転職でしたが、メンターが心の支えになって無事立ち上がることができたと感じています。
やること | 概要 |
---|---|
入社初日 PCの設定などのために出社 | PCの設定の他は、メンターや上長とリアルで対面してランチに行き親睦を深める。「新メンバーとランチ行く人ー?」と募集して、出社してくれるメンバーがいる場合もある |
Welcome ページに従って PC の設定 | 一人一人に用意される Welcome ページをメンターと一緒にみながら、環境構築などを行う |
newbie の実施 | 本記事で紹介した newbie というチュートリアルリポジトリを実施する |
コーディングガイドラインを読む・説明を受ける | アーキテクチャ思想・Scala についての考え方・ライブラリ選定の勘所など多岐に渡り、チームのコーディングにおける文化を学ぶことができます |
ドメインマスター講座を読む | 弊チームの特徴としてドメイン知識を勉強するための資料がたくさん用意されています。合わせると薄い本になるくらいのボリュームがあるので、じっくりスケジュールを取ってメンターと一緒に読んで理解を深めます。 |
ペアプロ | 開発タスクをメンターとペアプロをしながら説明を受けつつ実施する。 |
他チームメンバーと話す | メンターと一緒に他チームに挨拶に行ったり、オンボーディングデイリーという名前で、全社員ウェルカムな公開デイリーを行います。 |
大雑把にオンボーディング文脈でやることをまとめました。
これ以外でもコーディングの面だと、弊チームはコードレビューが大変手厚くてそちらも立ち上がりに対する貢献としてとても大きいと感じています。
おわりに
本記事では、
- 弊チームにおけるチュートリアルリポジトリ
- そのほかのオンボーディングプラン
について簡単に紹介しました。
- 「FOLIO のオンボーディングって結構手厚いんだな」
- 「こんな素敵なところだったら入ってみようかしら」
という風に感じていただけると嬉しいです。
この記事を読んで「もっと詳しく話が聞きたい」や「うちだとこういうことやっているよ」みたいに話していただける方がいらっしゃったら、私の X に DM などいただけると幸いです。
https://x.com/nozomitaguchi
4RAPというプロダクトについて詳しく知りたい方はこちら、をご覧ください。
「世界で一番わかりやすく」4RAPについて説明します。
Discussion