Slide 1

Slide 1 text

CIをGASで継続的に 改善したら幸せになった CI/CD Test Night #3 pixiv Inc. kwzr / Kazumasa Kawazure 2019.02.21

Slide 2

Slide 2 text

2 自己紹介 ● kwzr / Kazumasa Kawazure ○ Twitter : @_kwzr_ ● ピクシブでpixiv Sketch iOSの開発 ○ 以前はいろんなiOS・Androidアプリの開発 ● 情熱大陸に映り込んだことがある ○ オレは情熱大陸出たことあるけど、キミは ? kwzr モバイルアプリエンジニア

Slide 3

Slide 3 text

● 2018年1月からBitriseに移行 ○ 社内ライブラリなどを含めて21個のアプリが登録 ○ 毎週約300回以上のビルド ○ Org Standard Plan(最大6並列ビルド) ○ 社内配布方法の変更 ● サーバーサイドやWebフロントのことはわかりません ○ Circle CIとGitLab CIを使っているはず 3 ピクシブのモバイルCI事情について

Slide 4

Slide 4 text

● 2018年1月からBitriseに移行 ○ 社内ライブラリなどを含めて21個のアプリが登録 ○ 毎週約300回以上のビルド ← どうやって取っているの ○ Org Standard Plan(最大6並列ビルド) ← どうやって決めたの ○ 社内配布方法の変更 ← なに ● サーバーサイドやWebフロントのことはわかりません ○ Circle CIとGitLab CIを使っているはず 4 話すこと

Slide 5

Slide 5 text

● Jenkinsの介護がつらく、CIサービスを探していた ○ 新しいXcodeが出たらインストールが必要 ○ VPNを繋がないと見れない。特にスマホからアクセスしたい時に面倒 ■ 社員以外の人にCIの結果を見てもらうのが難しかった ○ 自作の配布ページを作ってそこから社内配布していた ■ メンテあまりされていない ■ アプリによってはDeployGateを使っていた 5 Bitriseに移行した流れ

Slide 6

Slide 6 text

● 言わずと知れたモバイルアプリ向け CIサービス ● GUIでワークフローやトリガーを操作できる。 UIがかわいい(重要) ● 他CIサービスと比べても比較的安価 ● アプリの配布機能もある(Deploy to Bitrise.io) ● とてもよい! 6 Bitriseとは

Slide 7

Slide 7 text

● 最初はOrg Standard Plan(最大3並列)を導入 ● 弊社、アプリの数が多い ○ 参考: モバイルアプリエンジニア約20人 : iOS・Androidアプリ 13個 ● アプリのフルビルド時間は10-20分くらい掛かってとても長い ● 思い思いにビルドを走らせると、最大 3並列ビルドだと頻繁に詰まる!! ● → プラン変えよう! 7 移行してわかってきた問題

Slide 8

Slide 8 text

● Google Apps Script(GAS)とBitrise.io API v0.1を使用 ○ Bitrise.io APIはまだWIPらしいけど、だいたい動いてる ● 始業時間前に前日のビルドを集計して、スプレッドシートに記録 ○ ビルド回数・ホールド時間・ビルド時間等 ○ https://github.com/kvvzr/bitrise-collect ○ 2018年2月から取ってる 8 まずは計測しよ...

Slide 9

Slide 9 text

● 手軽にデプロイできる ● WebHookからの起動や、スケジューリングができる ● 計測したいので、SpreadSheetに書き出したい ● 普段使っている、慣れているもので要件を満たしていたらなんでも良さそう 9 なぜGAS?

Slide 10

Slide 10 text

● 置かれている状況による ○ 金の弾丸が使えるなら、良いやつを選べば良さそう (適当) ■ おそらく、稟議の起案理由に妥当なことを書く必要 ○ 計測した結果を使って、状況に合うコスパの良いプランを選ぶ ● 1日の総ホールド時間を基準にすることにした ○ ホールド時間 = ビルド開始時間 - ビルド実行(トリガー)時間 10 何を見てプランを決めるか?

Slide 11

Slide 11 text

11 総ホールド時間の推移(2018/08-2018/12)

Slide 12

Slide 12 text

12 総ホールド時間の推移(2018/08-2018/12) Org Elite Plan 最大3並列ビルド 2 week trial ホールド時間減ってる

Slide 13

Slide 13 text

● Org Elite Planはハイスペックなマシンが使えるプラン ○ 毎ビルド5分以上早く終わるようになってすごい! ■ しかし、まだそこそこ詰まる ○ 値段がOrg Standard Planの倍 ○ スペック上げるより、並列数増やしたほうが良さそう 13 計測してわかったこと

Slide 14

Slide 14 text

14 総ホールド時間の推移(2018/08-2018/12) Org Standard Plan 最大6並列ビルド 導入 狙い通り、ホールド時間がほ ぼ0になった

Slide 15

Slide 15 text

● 何を減らしたいのか ○ 待ってる時間の人件費換算? (でも待ってる間別の作業できるし ... ● 気持ち!!!!!!!1(のすり減り) ○ ホールド待ちは他のプロジェクトが原因なのでヘイトが溜まる ○ 自分のプロジェクトのビルドが遅いのは、ある程度自分でなんとかできる ● → 並列数を上げるだけで、コスパよく気持ちの良い開発ができるように! ○ 金の弾丸があれば、Elite Planを湯水のごとく使おう 15 総ホールド時間を基準にした理由

Slide 16

Slide 16 text

16

Slide 17

Slide 17 text

● 「ビルドして」トリガー ○ Bitriseは現状Pushしたときに発火するトリガーのみ ○ 定期的にチームや社内向けにアプリを配布したい!けど ○ 配布物を作るビルドは長いので、必要なときだけ走らせたい! ■ ユニットテストだけPushで走らせる ■ だいたい半分くらいの時間 ● 社内配布アプリの一覧ページ(あまりうまく機能しなかった) 17 その他の取り組み事例

Slide 18

Slide 18 text

18 とても便利

Slide 19

Slide 19 text

● GitHubのPRにコメントしたら、ビルドが走るようにする ○ ポイントはPRトリガーとして実行すること ■ PRにコメントするステップでPRの番号が取れない ○ GitHub Actions使いたい 19 トリガーをGASで自作 「ビルドして」だった らAPI叩く WebHook Pull Request 結果を通知 GAS Bitrise

Slide 20

Slide 20 text

20 https://gist.github.com/kvvzr/8be18b134b3da1828bf0905df2625d40

Slide 21

Slide 21 text

● comment-on-github-pull-request っていうコミュニティステップ作った ○ https://github.com/kvvzr/bitrise-step-comment-on-github-pull-request ● PRに配布物へのリンク(QRコード)が紐づくと、過去のあの変更でどうなったか、追いやす くて良い ○ Slackだけに流すと探すのが大変 21 宣伝: GitHubにコメントするステップ

Slide 22

Slide 22 text

● Bitriseはいいぞ ● 置かれている環境によって計測してプランを検討しよう ○ 他社がどういうプラン使っているのか調べても出てこなくてつらかった ○ ワークフローに無駄がある場合もある。計測すると気付ける ● GASなどを使えば計測もトリガーも手軽に自作できる ● ステップも簡単に作れるので、秘伝のタレを持っていたらステップ化しよう! スライド中にあるBitriseの価格は2019年2月21日のものです 22 まとめ