Slide 1

Slide 1 text

CI/CD・自動化入門 iOSDC2022

Slide 2

Slide 2 text

- 名前 - くろるり - 所属 - teamLab Inc. - 仕事 - iOSアプリ作る - アプリ開発効率化有志チーム - 業務改善有志チーム 本日話している人

Slide 3

Slide 3 text

前説

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

「プログラマーの三大美徳」?

Slide 6

Slide 6 text

怠惰 短気 傲慢

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

全体の労力を減らすこと = 怠惰

Slide 11

Slide 11 text

CI/CD・自動化の導入

Slide 12

Slide 12 text

CI/CDってなんだ?

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

エラーのデバッグやマージコンフリクトの 解決にかける労力を減らす為の仕組み = CI

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

デプロイの自動化 = CD

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

デプロイを自動化してないために発生している労力 - 手元でのビルド時間があるので開発者が他の作業をできない - ビルドするブランチの間違い等による手戻り - デプロイの状況確認や終了通知などのコミュニケーション QA ビルドまだ 終わらない? 開発者 ごめん そういや終わってた 開発者 20分待っても ビルド終わらん QA 次次回リリースの 機能が入ってるけど 開発者 作業中のブランチで ビルドしちゃった!

Slide 19

Slide 19 text

CI/CDは開発とデプロイの 労力を省く仕組みとシステム ↓ CI/CDの推進 = 怠惰

Slide 20

Slide 20 text

実践

Slide 21

Slide 21 text

CI : PullRequestのチェック

Slide 22

Slide 22 text

Merge PullRequestまでの流れ Create PR コンフリクト有無 マージ後のビルド 変更行数 コードフォーマット 実際の動作 設計 PullRequestフォーマット Merge可能かのチェック コードレビュー Approve & Merge PR レビューコメント 返信 / コード修正

Slide 23

Slide 23 text

https://danger.systems/ + https://docs.fastlane.tools/

Slide 24

Slide 24 text

担当範囲 - fastlane : xcodebuild コマンドの代替 - fastlane build_app : アプリのビルド - fastlane run_tests : Unit Test / UI Test の実行 - ( コードフォーマットのチェック ) - Danger : Pull Request全体のチェック + コメント - ビルド時 Warning のコメント with danger-xcode_summary - テストカバレッジのチェック / コメント with danger-xcov - 変更行数のチェック - PullRequest自体のフォーマットチェック

Slide 25

Slide 25 text

Merge PullRequestまでの流れ ( 一部自動化後 ) Create PR コンフリクト有無 マージ後のビルド 変更行数 コードフォーマット 実際の動作 設計 PullRequestフォーマット Merge可能かのチェック コードレビュー Approve & Merge PR レビューコメント 返信 / コード修正

Slide 26

Slide 26 text

CD : アプリのデプロイ

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

デプロイの自動化後 最新版の需要 ビルド作業と配信 お知らせ 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`

Slide 30

Slide 30 text

その他タスクの自動化

Slide 31

Slide 31 text

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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

気が向いたときにしかやらないタスクの例と対応例 - ビルドツールのアップデート - アップデートのPullRequestが自動で作られるようにする - ライブラリのアップデート - アップデートのPullRequestが自動で作られるようにする - アップデートがあることを issueもしくはslackで通知する

Slide 36

Slide 36 text

導入後の改善

Slide 37

Slide 37 text

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

Slide 38

Slide 38 text

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

Slide 39

Slide 39 text

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

Slide 40

Slide 40 text

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

Slide 41

Slide 41 text

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

Slide 42

Slide 42 text

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

Slide 43

Slide 43 text

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