Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Scalaの新規事業でScalaの未経験者をオンボーディング

 Scalaの新規事業でScalaの未経験者をオンボーディング

ScalaMatsuri 2022 のスポンサーセッションで発表しました

Tatsuya Iwamatsu

March 19, 2022
Tweet

More Decks by Tatsuya Iwamatsu

Other Decks in Technology

Transcript

  1. 自己紹介 2 岩松 竜也 いわまつ たつや 内山 陽介 うちやま ようすけ

    Scala歴7年 (=社会人歴) Scala Daysにも2回行った(コペンハーゲン /ローザンヌ) 最近の趣味はカロリー管理と筋トレ Scala初心者 元々はiOSエンジニア, サーバーサイドのメイン言語は Java 息子と電車旅 , お酒チョットノム 2015年 株式会社ビズリーチ新卒入社 HRMOS採用で開発全般を担当 2020年 Assured へ異動 開発全般を担当 2012年 株式会社サイバーエージェント新卒入社 主にモバイル向け SaaSの開発全般、 プリセールス、テクニカルサポートを担当 アマゾンウェブサービスジャパン合同会社入社 ソリューションアーキテクトとして、 クラウド導入支援や技術支援を担当 2019年 Assured にエンジニアとして参画 2022年
  2. Scala歴7年 (=社会人歴) Scala Daysにも2回行った(コペンハーゲン /ローザンヌ) 最近の趣味はカロリー管理と筋トレ Scala初心者 元々はiOSエンジニア, サーバーサイドのメイン言語は Java

    息子と電車旅 , お酒チョットノム 自己紹介 3 岩松 竜也 いわまつ たつや 内山 陽介 うちやま ようすけ 今日はどんどん ツッコミしていきます 2015年 株式会社ビズリーチ新卒入社 HRMOS採用で開発全般を担当 2020年 Assured へ異動 開発全般を担当 2012年 株式会社サイバーエージェント新卒入社 主にモバイル向け SaaSの開発全般、 プリセールス、テクニカルサポートを担当 アマゾンウェブサービスジャパン合同会社入社 ソリューションアーキテクトとして、 クラウド導入支援や技術支援を担当 2019年 Assured にエンジニアとして参画 2022年
  3. 7

  4. 認知的負荷とは ”心理学者ジョン・スウェラーが 1988年に 「ワーキングメモリで利用される心理的労力の総量 」 として提唱したもの” 22 Matthew Skelton, Manuel

    Paisほか.「チームトポロジー 価値あるソフトウェアをすばやく届ける適応型組織設計」 .日本能率協会マネジメントセンター .2021年.354ページ 強調等は引用者による
  5. “課題内在性負荷: 問題領域の本質的なタスクに関連するもの ” “課題外在性負荷: タスクが実施される環境に関連するもの ” “学習関連負荷: 学習を進めたり高性能を実現したりするうえで、特別な注意が必要なタスクに関連するもの ” 3種類の認知的負荷

    23 Matthew Skelton, Manuel Paisほか.「チームトポロジー 価値あるソフトウェアをすばやく届ける適応型組織設計」 .日本能率協会マネジメントセンター .2021年.354ページ 強調等は引用者による
  6. 25 それぞれの例(自分なりの解釈) 25 学習関連 負荷 課題外在性 負荷 課題内在性 負荷 Scalaの文法を覚えたりプ

    ロジェクトコードの読み方に 慣れるための負荷 ビルド・テスト方法(sbtの使 い方)や外部ツールのコン ソールコマンド(マイグレー ション手順など)を覚えるた めの負荷 セキュリティ評価のロジック やサービス間の連携など、 ビジネスドメインに関連した 知識を得るための負荷
  7. 26 「読みやすい」とは 26 学習関連 負荷 課題外在性 負荷 課題内在性 負荷 Scalaの文法を覚えたりプ

    ロジェクトコードの読み方に 慣れるための負荷 ビルド・テスト方法(sbtの使 い方)や外部ツールのコン ソールコマンド(マイグレー ション手順など)を覚えるた めの負荷 セキュリティ評価のロジック やサービス間の連携など、 ビジネスドメインに関連した 知識を得るための負荷 こちらに 集中しやすい状態
  8. ① アーキテクチャ よく見る構成にする 30 Controller (Presentation) Service (Business Logic) Repository

    (Data Access) 広く認知されている 知識を利用する 選択肢を絞る Spring Boot等のレイヤードアーキテクチャに合わせる → どこを見れば何が書いてあるのか共通認識を持ちやすい → 各層の役割や依存関係はちゃんと制御する
  9. 縦に読めばほぼわかるよう徹底 ② ビジネスロジック 32 ユーザ招待再送信処理のサンプル ① 招待IDでDBから検索 ② 招待IDが間違っていれば NotFoundエラー

    ③ 招待が有効でない場合 BadRequestエラー ④ ログインユーザの組織情報を DBから検索 ⑤ 論理的に必ず存在する Option値を取り出す ⑥ メール再送信処理 一貫性をつくる 明瞭な意図を表す
  10. Controller (Presentation) Service (Business Logic) Repository (Data Access) Model (Domain

    Logic) ③ リファクタリング 35 命名/パッケージ構成を頻繁に見直す 一貫性をつくる 明瞭な意図を表す ドメイン理解は頻繁に変わる → どこに何が書いてあるか察せるようにする =ルール化 → 早すぎる最適化(ルールの暗黙知化)は避ける
  11. オンボーディングコンテンツ「 Daily Scala」 原典 38 ④ ドキュメント 38 “オン”ボーディングも欠かさない プロジェクトに入るための最低限を担保する

    → 「Scala 勉強しておいてね」では選択肢が広すぎる → ドキュメントはPULL、初期はPUSHが重要 明瞭な意図を表す 選択肢を絞る 3年間のオンボーディングで培われた、リモートでも効果的な7+3のプラクティス
  12. 課 題 外 在 性 負 荷 性 荷 新規事業における認知的負荷

    42 情勢の変化 学習関連 負荷 影響 ビジネス変化によって必要な技術も変化する ピボット