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

CI/CD·自動化入門

Kuroruri
September 10, 2022

 CI/CD·自動化入門

iOSDC2022

Kuroruri

September 10, 2022
Tweet

More Decks by Kuroruri

Other Decks in Programming

Transcript

  1. CI/CD・自動化入門 iOSDC2022

  2. - 名前 - くろるり - 所属 - teamLab Inc. -

    仕事 - iOSアプリ作る - アプリ開発効率化有志チーム - 業務改善有志チーム 本日話している人
  3. 前説

  4. 今回のプロポーザル プログラマーの三大美徳の一つと言われる怠惰さを一番発揮しやすい場所はどこでしょうか? それはCICDを含む自動化の仕組みの構築にあると思います。 ソフトウェアの開発においてCICDはもはや必須です。 ではCICDで得られるものはなんでしょうか? それは我々が余分な仕事をしなくて済む時間です。 例えば、アプリをビルドするのに自分のPCを何十分も専有され、その間コードは一行も触れないなんてのは嫌なのです。 そんな時間があるなら我々はもっと他にやりたいことがあるのです。 面倒なことは機械が勝手にやって欲しいのです。 本セッションでは今まで面倒な仕事を勤勉にこなしてきた人が明日から怠惰に過ごせるよう、普段の仕事を自動化していくための考え方と進

    め方についてお話します。 そして導入した仕組みをコスト的に効率良く運用するためにどうすればいいか、導入した後の改善法についてもお話します。
  5. 「プログラマーの三大美徳」?

  6. 怠惰 短気 傲慢

  7. 「怠惰」と言われて想像するもの - 新しい機能実装するんだけど他の機能と似てるからコードコピペしちゃえ - アプリのデプロイするのも本当は手作業でやるべきじゃないんだけど、 今はその自動化する時間ないから手作業でやろう

  8. 「怠惰」と言われて想像するもの - 新しい機能実装するんだけど他の機能と似てるからコードコピペしちゃえ - アプリのデプロイするのも本当は手作業でやるべきじゃないんだけど、 今はその自動化する時間ないから手作業でやろう 「偽物の怠惰」

  9. The quality that makes you go to great effort to

    reduce overall energy expenditure. It makes you write labor-saving programs that other people will find useful, and then document what you wrote so you don't have to answer so many questions about it. Hence, the first great virtue of a programmer. Also Hence, this book. See also impatience and hubris. [1] 「怠惰」の定義 [1] Brian d Foy, Tom Christiansen, Jon Orwant, Larry Wall (2012) : Programming Perl: Unmatched power for text processing and scripting (English Edition) 第4版, O'Reilly Media, p.1746 画像出典 : https://www.oreilly.com/library/view/programming-perl-4th/9781449321451/ , 2022/08/03
  10. 全体の労力を減らすこと = 怠惰

  11. CI/CD・自動化の導入

  12. CI/CDってなんだ?

  13. GitHubによるCIの説明 Continuous integration (CI) is a software practice that requires

    frequently committing code to a shared repository. Committing code more often detects errors sooner and reduces the amount of code a developer needs to debug when finding the source of an error. Frequent code updates also make it easier to merge changes from different members of a software development team. This is great for developers, who can spend more time writing code and less time debugging errors or resolving merge conflicts. [1] [1] GitHub Docs : https://docs.github.com/en/actions/automating-builds-and-tests/about-continuous-integration, 2022/08/03
  14. エラーのデバッグやマージコンフリクトの 解決にかける労力を減らす為の仕組み = CI

  15. GitHubによるCDの説明 Continuous deployment (CD) is the practice of using automation

    to publish and deploy software updates. As part of the typical CD process, the code is automatically built and tested before deployment. [1] [1] GitHub Docs : https://docs.github.com/en/actions/deployment/about-deployments/about-continuous-deployment, 2022/08/03
  16. デプロイの自動化 = CD

  17. デプロイが自動になってない世界の仕事 最新版の需要 ビルド作業と配信 お知らせ QA 次のリリースに向けテ ストしたいので 最新のアプリ出して 開発者 わかった

    ビルドするから 1時間くらい待って 開発者 git switch Xcodeでビルド 開発者 ビルド待ち・・・ 終わるまでXcode 触れん 開発者 出来ました このverをDLしてね QA わかった バグあったら チケット上げるね 開発者 ・・・終わった! testflightで配信
  18. デプロイを自動化してないために発生している労力 - 手元でのビルド時間があるので開発者が他の作業をできない - ビルドするブランチの間違い等による手戻り - デプロイの状況確認や終了通知などのコミュニケーション QA ビルドまだ 終わらない?

    開発者 ごめん そういや終わってた 開発者 20分待っても ビルド終わらん QA 次次回リリースの 機能が入ってるけど 開発者 作業中のブランチで ビルドしちゃった!
  19. CI/CDは開発とデプロイの 労力を省く仕組みとシステム ↓ CI/CDの推進 = 怠惰

  20. 実践

  21. CI : PullRequestのチェック

  22. Merge PullRequestまでの流れ Create PR コンフリクト有無 マージ後のビルド 変更行数 コードフォーマット 実際の動作 設計

    PullRequestフォーマット Merge可能かのチェック コードレビュー Approve & Merge PR レビューコメント 返信 / コード修正
  23. https://danger.systems/ + https://docs.fastlane.tools/

  24. 担当範囲 - fastlane : xcodebuild コマンドの代替 - fastlane build_app :

    アプリのビルド - fastlane run_tests : Unit Test / UI Test の実行 - ( コードフォーマットのチェック ) - Danger : Pull Request全体のチェック + コメント - ビルド時 Warning のコメント with danger-xcode_summary - テストカバレッジのチェック / コメント with danger-xcov - 変更行数のチェック - PullRequest自体のフォーマットチェック
  25. Merge PullRequestまでの流れ ( 一部自動化後 ) Create PR コンフリクト有無 マージ後のビルド 変更行数

    コードフォーマット 実際の動作 設計 PullRequestフォーマット Merge可能かのチェック コードレビュー Approve & Merge PR レビューコメント 返信 / コード修正
  26. CD : アプリのデプロイ

  27. おさらい : デプロイが自動になってない世界の仕事 最新版の需要 ビルド作業と配信 お知らせ QA 次のリリースに向けテ ストしたいので 最新のアプリ出して

    開発者 わかった ビルドするから 1時間くらい待って 開発者 `git switch hoge` Xcodeでビルド 開発者 ビルド待ち・・・ 終わるまでXcode 触れん 開発者 出来ました このverをDLしてね QA わかった バグあったら チケット上げるね 開発者 ・・・終わった! testflightで配信
  28. おさらい : デプロイが自動になってない世界の仕事 最新版の需要 ビルド作業と配信 お知らせ QA 次のリリースに向けテ ストしたいので 最新のアプリ出して

    開発者 わかった ビルドするから 1時間くらい待って 開発者 `git switch hoge` Xcodeでビルド 開発者 ビルド待ち・・・ 終わるまでXcode 触れん 開発者 出来ました このverをDLしてね QA わかった バグあったら チケット上げるね 開発者 ・・・終わった! testflightで配信 最新であればよいので 特定ブランチが更新された時に ビルドすれば良い
  29. デプロイの自動化後 最新版の需要 ビルド作業と配信 お知らせ GitHub 特定ブランチに 最新コミット確認 webhook発火 CI/CD webhook来た

    処理開始 CI/CD `git checkout hoge` `fastlane build_app` CI/CD 計算機処理中 CI/CD `fastlane slack` 最新版アプリは… slackに通知来てるね QA CI/CD `fastlane upload_to_testflight`
  30. その他タスクの自動化

  31. 自動化の目的 - わざわざ人間がやらなくてもいい仕事をやらなくてすむようにする - 単純作業を行う労力を省く - 手作業で行っているがゆえに発生するささいなミスを無くす - 作業ミスによる手戻り、或いはそれを防止するための確認の労力を省く

  32. 何を自動化していくべきか - 頻度が多い機械的な作業 - 開発者のPCを専有する作業 - 定期的に発生するが基本的に気が向いた時にしかやらないタスク

  33. どのようにして自動化していくか 1. どういう作業が必要なのか整理する 2. 必要な作業をスクリプトで出来るようにして自分のPCで動かす 3. 自分のPCだけでなく誰のPCでも動くようにする 4. 誰のPCでも動くようになったスクリプトをCI/CDサービスで動くようにする

  34. CI/CD構築も結局は作業内容の整理とスクリプト化

  35. 気が向いたときにしかやらないタスクの例と対応例 - ビルドツールのアップデート - アップデートのPullRequestが自動で作られるようにする - ライブラリのアップデート - アップデートのPullRequestが自動で作られるようにする -

    アップデートがあることを issueもしくはslackで通知する
  36. 導入後の改善

  37. CI/CD・自動化はワークフローの 一部を機械化するにすぎない

  38. 元になるワークフローの変化に併せて CI/CD・自動化の仕組みも改善が必要

  39. ここまでやってきたこと 人間の作業 コード 整理

  40. ここまでやってきたこと 人間の作業 コード 整理 = 属人化の解消

  41. コードである以上GitHubで管理可能 誰でも閲覧可能・編集可能

  42. CI/CD・自動化がアプリ本体の開発と 同じチームで変化に併せて 改善され続ける状況を作る

  43. まとめ - 全体の労力を減らすよう動く、怠惰な気質がプログラマには必要 - CI/CDや自動化の仕組みを取り入れ、 機械に仕事をさせることで人間の労力を減らそう - CI/CDも自動化もアプリ本体と同じように、 変化に応じて開発者全員で改善を行っていくのが重要