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

CIは5分以内!素早い開発サイクルを支えるCI

ham
February 20, 2024

 CIは5分以内!素早い開発サイクルを支えるCI

2024/02/20開催の「TechBrew in 東京 〜CI/CDパイプライン改善の取り組み〜」で発表したスライドです。

https://findy.connpass.com/event/309537/

ham

February 20, 2024
Tweet

More Decks by ham

Other Decks in Technology

Transcript

  1. Findy Team+(チームプラス)とは?
 3
 開発生産性の可視化、開発プロセスの伸びしろの発見、継続的な改善をサポート 生産性可視化 生産性向上 事業開発スピード加速 (開発スピードの向上により、仮説検証スピードも加速) 開発プロセス改善 (開発フロー・配置・ツールの伸びしろを可視化・最適化)

    文化づくり・自己組織化 (メンバーの自発的な改善促進、改善を称賛する文化作り) 継続的な生産性向上サイクル データ 連携 Biz Engineer Engineer 開発組織ブランディング (エンジニアは、開発生産性が高い組織で働きたい) Recruit
  2. 開発サイクルにおけるCIの役割 コードを書く
 レビュー
 マージ
 CIを通す
 (PR作成)
 CIでは下記を実⾏ ‧lintや型などの静的解析 ‧⾃動テスト ‧build

    CIにより下記を担保 ‧コーディングルールに従っていること ‧既存実装が壊れていないこと ‧デプロイ可能であること
  3. 開発サイクルにおけるCIの役割 コードを書く
 レビュー
 マージ
 CIを通す
 (PR作成)
 CIでは下記を実⾏ ‧lintや型などの静的解析 ‧⾃動テスト ‧build

    CIにより下記を担保 ‧コーディングルールに従っていること ‧既存実装が壊れていないこと ‧デプロイ可能であること CIがあることで レビュー負荷を下げつつ ⾼速でマージしても品質を担保することができる 素早い開発サイクルを⽀えるために必要なもの それが CI (Continuous Integration)
  4. • バックエンドの主な技術 ◦ Ruby / Rails / RSpec / Rubocop

    / Brakeman • CI (GitHub Actions) ◦ テスト(RSpec) / 静的解析(Rubocop) / セキュリティ(Brakeman) バックエンド バックエンドのCIは「テスト」に時間がかかります。 現時点で素直に実⾏すると20〜30分かかる。
  5. • バックエンドの主な技術 ◦ Ruby / Rails / RSpec / Rubocop

    / Brakeman • CI (GitHub Actions) ◦ テスト(RSpec) / 静的解析(Rubocop) / セキュリティ(Brakeman) バックエンド テストを分割して並列実⾏する仕組みを社内で⾃作。 configでサクッと並列数を変更できるようにしている。 CIの⼀部抜粋(testを8分割) 👉
  6. • フロントエンドの主な技術 ◦ React / TypeScript / Jest / ESLint

    / webpack / Nx • CI (GitHub Actions) ◦ テスト(Jest) / 静的解析(TypeScript / ESLint) / ビルド(webpack) フロントエンド フロントエンドのCIは「テスト」「ビルド」「静的解析 (TypeScript)」に時間がかかります。 現時点で素直に実⾏するとそれぞれ15〜20分かかる。
  7. フロントエンド https://nx.dev/ Nxを使って機能ごとに分割 - apps - pages - libs -

    feature-a - feature-b - … - feature-z - ui - shared - utils 依存 pages → feature → ui / shared / utils
  8. フロントエンド https://nx.dev/ Nxを使って機能ごとに分割 - apps - pages - libs -

    feature-a - feature-b - … - feature-z - ui - shared - utils 依存 pages → feature → ui / shared / utils ここがすごいよ「Nx」!! ‧依存関係を解釈して関連するところだけCIを実⾏ →featureを変更した場合、変更したfeatureとfeature に依存しているpagesのみCIが実⾏され、他はキャッ シュが使われる