$30 off During Our Annual Pro Sale. View Details »

脱レガシープロダクトに向けて開発環境にCIを整備し単体テストを布教した話/developers boost2021

WHIsaiyo
December 13, 2021

脱レガシープロダクトに向けて開発環境にCIを整備し単体テストを布教した話/developers boost2021

「単体テストのないコードはレガシーコードだ」(レガシーコード改善ガイドより)新卒で配属された製品開発はザ・レガシーコードでした。
巨大で密結合なコードベース、結合テストに頼った開発フロー、一部の人しか書けない単体テスト。
そんな開発環境の改善に粘り強く2年間取り組んだ結果、ついにすべての開発者が単体テストを常に書くようになり、開発が楽しくなるまでの物語です。

Presenter:寺尾 拓[Works Human Intelligence]
DX Engineer
19年に新卒入社後 [1年間自社開発製品の開発環境の改善]に取り組む
20年には製品マニュアルWeb化プロジェクトの基盤設計と実装を担当
21年は6ヶ月間の育休を取得後、社内全体のDX(Developer Experience/Digital Transformation)の改善を行うチームの立ち上げに参画。

WHIsaiyo

December 13, 2021
Tweet

More Decks by WHIsaiyo

Other Decks in Business

Transcript

  1. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシープロダクトに向けて

    開発環境にCIを整備し 単体テストを布教した話 株式会社Works Human Intelligence 寺尾 拓
  2. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential •

    DX Engineerをやっています。 • 2019/04に新卒入社 • プロダクト開発部署に配属後1年間、 開発環境の改善に取り組む • 2020/12より半年間の育休を取得 • 復帰後、開発部門全体のDX改善チーム 立ち上げに参画 ◦ Developer Experience ◦ Digital Transformation 自己紹介 2
  3. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模プロダクト開発って?

    3
  4. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模ソフトウェア開発って?

    4 チームA チームB チームC オフショアA 大規模 ソースコード • 20年間保守 • 数百万行規模 • 計40-50人(+オフショア) • 全チームが協調して共通のソ ースを編集 • 5-10 (人) x 6 (チーム) • 一部オフショアあり
  5. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模プロダクト開発のつらいところ

    5
  6. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模プロダクト開発のつらいところ

    6 • ソースコードが大規模かつ依存関係が複雑 ◦ 「機能追加したけどどこから手をつければいいんだっけ?」 ◦ 「このAPI変更したら他チームも使用しているので修正依頼してね」 • ビルドやサーバ起動等に時間がかかる ◦ 「ビルド走らせている間にコーヒーでも淹れるか・・・」 ◦ 「サーバ再起動している間に(ry」 • テスト自動化が難しく手動テストに頼らざるを得ない ◦ 「リファクタリングしたい?テスト工数が確保できないから無理」
  7. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模レガシープロダクト開発はつらい

    7
  8. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大規模プロダクト開発を「たのしく」したい

    ≒ 脱レガシー 8
  9. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential どうしたら楽しくなるか?

    9
  10. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential モノリス分割

    10
  11. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 理想の大規模ソフトウェア開発

    11 チームA チームB チームC ・・・・ オフショアA モジュールA モジュールB モジュールC • 独立した各チーム開発 • 明確な責任範囲 • シンプルな依存関係 • 小規模なモジュール • 高速なビルド
  12. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential どうやってモノリス分割するのか?

    12
  13. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential リファクタリング

    システムの振る舞いを変えずに内部構造を変える 13
  14. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential だがしかし

    14
  15. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシープロダクトのリファクタリングは困難

    15
  16. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシープロダクトのリファクタリングは困難

    16 正しい振る舞 いって何? テスト工数が 確保できない 影響範囲が大 きすぎる チーム間で 合意しないと いけない 何か起こったら どうするの!
  17. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential リファクタリングのための第一歩

    17
  18. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential リファクタリングのための第一歩

    プロダクトコードに単体テストを整備する 18
  19. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシープロダクトに向けて

    開発環境にCIを整備し 単体テストを布教した話 株式会社Works Human Intelligence 寺尾 拓
  20. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 配属当初(2年前)の開発環境

    20
  21. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 改善前のプロダクト開発

    21 問題が山積し、どこから手をつけたらわからない状態 セットアップ に2日かかる IDEの設定 がバラバラ Warningが 多すぎて エラータブ が埋もれる 単体テスト コンパイル 通らない 自動チェックが なく ビルドが不安定
  22. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential まずは、モダンで快適な開発環境を整備しよう

    22
  23. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential モダンな開発環境とは

    1.モダンで快適な開発環境の整備 23 • 開発者全員が共通の設定のIDEを利用 • IDEのファイルを編集のたびにフォーマッタやLinterを実行 • コードレビュー時に各種チェック(CI)を実行 ◦ ビルド ◦ フォーマッタ ◦ Linter ◦ 単体テスト
  24. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 快適な開発環境とは(Developer

    Experience) 1.モダンで快適な開発環境の整備 24 • IDEのセットアップを自動化されている • 自動チェックがすぐに終わる ◦ プレマージCIの実行時間は平均5分以内を目標に ◦ 時間のかかるチェックはStaging branchで定期実行 • 自動チェックの誤検知が少ない ◦ 静的解析等の既存のエラーは抑制 ◦ 誤検知率をモニタリングし対策する • 自動チェックが失敗した時に原因がすぐにわかる ◦ ビルドログから原因を抽出しコメントで指摘
  25. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 1年かけてモダンで快適な開発環境が整備できた!

    1.モダンで快適な開発環境の整備 25 https://qiita.com/autotaker1984/items/894bf0df0009c621da11
  26. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential このまま脱レガシーできるだろうか?

    26
  27. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential できない

    27
  28. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 単体テストはなかなか増えなかった

    28
  29. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dashboard なぜテストが増えないのか? 29 • JUnitの実行結果をデータベースに入 力してMetabaseで可視化 • 「最近追加されたテスト」 ◦ 最近テストが追加されたパッケー ジを表示 ◦ どの部署がテストを書いているか 概ね把握できるように • 結果 ◦ テストを書いていたのは一部の部 署のみ
  30. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 大部分の開発者は単体テストを書かなかった書けなかった

    なぜテストが増えないのか? 30 単体テスト書いてもE2Eテストも するから二度手間では? 単体テストってどういう観点で作 ればいいの? DBがないと動かないコードが多 すぎるんだけど!
  31. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 単体テストに対するチームの状態

    なぜテストが増えないのか? 31 チーム1 チーム2 チーム3 レガシーコードに 単体テストが書ける 新規コードに 単体テストが書ける 単体テストが書けない、 メリットを感じていない 「単体テスト環境整備されたらしいけど、どう書いたらいいか分からない。」 「習得する時間もないから今回は手動テストでいいかな」
  32. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential いきなりレガシーコードに単体テストを書くのはハードルが高い

    まずは、今後追加される新規コードにテストを書いてもらおう 32
  33. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dojo 2. 新規コードに単体テストを書く 33 • オンラインハンズオン形式の研修コンテンツ • 一回30-60分、10-20名ごとに実施(合計40名) https://note.com/works_hi/n/n4edd6784b632
  34. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dojoマインド編 2. 新規コードに単体テストを書く 34 • t_wadaさんの「TDD Boot Camp 2020 Online #1 基調講演/ライブコーディング」 の鑑賞会 • 目的 ◦ 単体テストの書き方やメリットを知る ◦ 単体テストを書いていこうという意識づけ https://www.youtube.com/watch?v=Q-FJ3XmFlT8
  35. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dojo基礎編 2. 新規コードに単体テストを書く 35 • 単体テストの基本的な書き方をハンズオン形式で習得 ◦ 単体テストとは ◦ テストのライフサイクル ◦ アサーションの書き方 ◦ テストダブルについて • 目的 ◦ 単体テストのコーディングスタイルを揃える ◦ 新規コードに対して単体テストが書けるように
  36. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 基礎編・マインド編後

    2. 新規コードに単体テストを書く 36 「単体テスト便利だな」 「今度のチケットで単体テストを書いてみようかな」 チーム1 チーム2 チーム3 レガシーコードに 単体テストが書ける 新規コードに 単体テストが書ける 単体テストが書けない、 メリットを感じていない
  37. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential このまま脱レガシーできるだろうか?

    37
  38. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential できない

    38
  39. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシーコードに対して単体テストがかけない

    39
  40. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシーコードのジレンマ

    40 “リファクタリングを実施するためにはテストが必要だが、 テストを書くためにはリファクタリングが必要” レガシーコード改善ガイドより
  41. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential レガシーコードのジレンマを克服する方法論を確立し、

    開発者に伝えよう 41
  42. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dojo実践編 3. レガシーコードに単体テストを書く 42 • 目的 ◦ レガシーコードに単体テストを書くための実践的なスキルの習得 ◦ 各チームのJUnitエバンジェリスト養成 dojo講師 エバンジェリスト チームメンバー JUnit dojo チームA
  43. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dojo実践編 3. レガシーコードに単体テストを書く 43 • 内容 1. 実プロダクトでテストを書くライブコーディング 2. 実プロダクトを模した研修用レガシーコードで 単体テストを書くテクニックを実践 i. リファクタリングツールを使い依存関係を整理 ii. 仕様化テストを書いてカバレッジを担保 iii. 単体テストで保護された部分をリファクタリング https://github.com/autotaker/LegacyEx
  44. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 実践編後

    3. レガシーコードに単体テストを書く 44 「レガシーコードにも単体テストが書ける(らしい)!」 「今度のチケットで実践してみよう」 「困ったら〇〇さんに聞いてみよう」 チーム1 チーム2 チーム3 レガシーコードに 単体テストが書ける 新規コードに 単体テストが書ける 単体テストが書けない、 メリットを感じていない
  45. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential これで脱レガシーできるだろうか?

    45
  46. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 開発組織に変化が起こった!

    46
  47. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dojoの後に起こった開発組織の変化 脱レガシーに向けて 47 • dojo参加者が講師役となってJUnit dojo再放送が行われた • 単体テストの勉強会が各チームで開催されるようになった • 単体テストを書きやすくするために共通モックが整備された • 他プロダクトまで噂が広がり、単体テストの環境が各プロダクトに整備された • 実務で単体テストを書いていく定期的な活動(JUnit部)が発足
  48. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dojoの後に起こった開発組織の変化 脱レガシーに向けて 48
  49. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dojoの後に起こった開発組織の変化 脱レガシーに向けて 49
  50. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential JUnit

    dojoの後に起こった開発組織の変化 脱レガシーに向けて 50
  51. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 単体テストを常に書くようになった

    脱レガシーに向けて 51 JUnit dojo実施 JUnit部発足
  52. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 研修1年後

    脱レガシーに向けて 52 「マージリクエスト作りました。単体テストのカバレッジ通っています」 「単体テスト書いたし、このロジックリファクタリングしよう」 チーム1 チーム2 チーム3 レガシーコードに 単体テストが書ける 新規コードに 単体テストが書ける 単体テストが書けない、 メリットを感じていない
  53. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシーできそう!(時間はかかるけれど)

    53
  54. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシーのために単体テストを書く文化を醸成

    3つのポイント 1.モダンで快適な開発環境を整備する ◦ テストをかくハードルを下げる 2.開発者のテストスキルを高める ◦ 足りていないのは工数ではなく技術 3.単体テストを実際に書いてみる ◦ テストのある世界を体感することで意識が変化する ◦ 各チームのエバンジェリストを通じて徐々に広がる まとめ 54
  55. © 2021 Works Human Intelligence Co., Ltd. Strictly Confidential 脱レガシーを達成し、変化に強い製品開発体制を整えるために

    まだまだハードルはたくさんありますが、 必ず、脱レガシーを達成し、 その成果を今度はデブサミで発表します 私たちの戦いはこれからだ! 55