Slide 1

Slide 1 text

ボイラープレート自動生成 ツールを使わなくなった話 2024/7/17 D-Plus Tokyo #4 ~しくじり事例から学ぶ!開発生産性の取り組みLT会~ @sugar235711

Slide 2

Slide 2 text

2 sugar-cat 所属: Cyber Agent/AI Shift バックエンドエンジニア パフォーマンスチューニングとセキュリティの話が好きです 自己紹介 @sugar235711

Slide 3

Slide 3 text

3 開発者から見た 開発生産性の話です

Slide 4

Slide 4 text

4 Agenda 1. 開発フロー 2. ボイラープレートと課題 3. まとめ

Slide 5

Slide 5 text

5 1.1. 開発中のプロダクト 1. 開発フローと開発生産性

Slide 6

Slide 6 text

6 1.2. インフラ構成 1. 開発フローと開発生産性

Slide 7

Slide 7 text

7 1.2. インフラ構成 1. 開発フローと開発生産性

Slide 8

Slide 8 text

8 Git Flowを採用した featureベースの開発 1.3. 開発フロー 1. 開発フローと開発生産性

Slide 9

Slide 9 text

9 OpenAPIを中心としたスキーマ駆動開発 1.4. 開発プロセス 1. 開発フローと開発生産性

Slide 10

Slide 10 text

10 OpenAPIを中心としたスキーマ駆動開発 1.4. 開発プロセス 1. 開発フローと開発生産性 ここの話

Slide 11

Slide 11 text

11 スキーマをベースに詳細な実装を詰めていく。 クリーンアーキテクチャベースでレイヤー間で責務を分けるのでコードの記 述量が多い。 1.5. APIサーバーの開発 1. 開発フローと開発生産性 Request Response Handler Usecase Repository

Slide 12

Slide 12 text

12 開発工数の削減 ● Stubの開発を高速化しフロントエンドに影響を与えたくない ● レイヤー分けをした時のコードの記述量を減らしたい ● 他サービスへの展開 認知負荷を減らす ● 誰が書いても同じような実装にする ○ メソッドの命名 etc 2.1. 導入背景 2. ボイラープレートについて

Slide 13

Slide 13 text

13 開発工数の削減 ● Stubの開発を高速化しフロントエンドに影響を与えたくない ● レイヤー分けをした時のコードの記述量を減らしたい ● 他サービスへの展開 認知負荷を減らす ● 誰が書いても同じような実装にする ○ メソッドの命名 etc 2.1. 導入背景 2. ボイラープレートと課題

Slide 14

Slide 14 text

14 2.2. ツールと実装 2. ボイラープレートと課題

Slide 15

Slide 15 text

15 2.2. ツールと実装 (ejsのテンプレートからコードを生成例 ) 2. ボイラープレートと課題

Slide 16

Slide 16 text

16 2.2. ツールと実装 (ejsのテンプレートからコードを生成例 ) 2. ボイラープレートと課題

Slide 17

Slide 17 text

17 2.2. ツールと実装 (入力や選択可能な少しリッチな CLIを作れる) 2. ボイラープレートと課題

Slide 18

Slide 18 text

18 [開発初期] ● 0->1で多くのAPIを同時並行に一気に作ることが多かった 2.3. 導入後に見えた課題 2. ボイラープレートと課題

Slide 19

Slide 19 text

19 [開発初期] ● 0->1で多くのAPIを同時並行に一気に作ることが多かった ➢ 大量のファイルを一気に作れて便利だった 2.3. 導入後に見えた課題 2. ボイラープレートと課題

Slide 20

Slide 20 text

20 [開発初期] ● 0->1で多くのAPIを同時並行に一気に作ることが多かった ➢ 大量のファイルを一気に作れて便利だった [半年~現在(8ヶ月目)] ● 設計の見直しや、バグ Fixなど部分的な修正が増えた ● 要件の複雑化で実装パターンが増えてテンプレートの準備が大変に なった ● ejsつらい 2.3. 導入後に見えた課題 2. ボイラープレートと課題

Slide 21

Slide 21 text

21 [開発初期] ● 0->1で多くのAPIを同時並行に一気に作ることが多かった ➢ 大量のファイルを一気に作れて便利だった [半年~現在(8ヶ月目)] ● 設計の見直しや、バグ Fixなど部分的な修正が増えた ➢ 既存ファイルの上書き、部分的な生成が難しい ● 要件の複雑化で実装パターンが増えてテンプレートの準備が大変に なった ➢ CQRSなどのアーキテクチャパターンへの対応 ● ejsつらい ➢ 人類には早い、読みづらい 2.3. 導入後に見えた課題 2. ボイラープレートと課題

Slide 22

Slide 22 text

22 😇 2. ボイラープレートと課題

Slide 23

Slide 23 text

23 ● そもそも使う人がいなくなった 2.4. どうして消した? 2. ボイラープレートと課題

Slide 24

Slide 24 text

24 ● そもそも使う人がいなくなった 2.4. どうして消した? 2. ボイラープレートと課題 [認知] ・ツールがあることを知らない

Slide 25

Slide 25 text

25 ● そもそも使う人がいなくなった 2.4. どうして消した? 2. ボイラープレートと課題 [認知] ・ツールがあることを知らない →オンボーディング不足

Slide 26

Slide 26 text

26 ● そもそも使う人がいなくなった 2.4. どうして消した? 2. ボイラープレートと課題 [認知] ・ツールがあることを知らない →オンボーディング不足 [興味] ・使い方がわからない

Slide 27

Slide 27 text

27 ● そもそも使う人がいなくなった 2.4. どうして消した? 2. ボイラープレートと課題 [認知] ・ツールがあることを知らない →オンボーディング不足 [興味] ・使い方がわからない →ツール固有の知識の学習コスト、社内ドキュメント不足

Slide 28

Slide 28 text

28 ● そもそも使う人がいなくなった 2.4. どうして消した? 2. ボイラープレートと課題 [認知] ・ツールがあることを知らない →オンボーディング不足 [興味] ・使い方がわからない →ツール固有の知識の学習コスト、社内ドキュメント不足 [行動] ・理想の生成結果ではなかった

Slide 29

Slide 29 text

29 ● そもそも使う人がいなくなった 2.4. どうして消した? 2. ボイラープレートと課題 [認知] ・ツールがあることを知らない →オンボーディング不足 [興味] ・使い方がわからない →ツール固有の知識の学習コスト、社内ドキュメント不足 [行動] ・理想の生成結果ではなかった →アーキテクチャ設計の変更に弱い、運用が属人化で追従できない

Slide 30

Slide 30 text

30 ● 周知とフィードバックの収集 ● 属人性の排除 2.5. どうしたら良かった? 2. ボイラープレートと課題

Slide 31

Slide 31 text

31 ● 周知とフィードバックの収集 ○ 開発チーム側への利用提案 ■ 導入は開発チームに決めてもらう ■ FBをもらう。 良い悪いかかわらず改善のサイクルを回す。 ○ とりあえず入れるで終わらない、 計測し状況を可視化する ■ 使いやすさ : ASTベースでさらにカスタマイズ可能な Generator方が良いかもしれない ■ 開発速度 : 開発完了までのリードタイムにどのくらい影響を与えたか ● 属人性の排除 ○ 協力者を増やす ■ Platform Engineering的な考え方を取り入れ、汎化可能な知見とし てプロダクト横断して取り入れるようにする 2.5. どうしたら良かった? 2. ボイラープレートと課題

Slide 32

Slide 32 text

32 ● ボイラープレートの自動生成ツールを作ったが、運用が困難になり使われなくなっ た事例を紹介した 3. まとめ