Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
テスト漏れを無くしたい!ワークフロー単位でトリガーを自由に設定したい要望
Search
Futa HIRAKOBA
August 05, 2020
Technology
0
170
テスト漏れを無くしたい! ワークフロー単位でトリガーを自由に設定したい要望
2020年8月5日(水) CircleCI コミュニティミートアップのLTで話した内容です
https://circleci.connpass.com/event/178558/
Futa HIRAKOBA
August 05, 2020
Tweet
Share
More Decks by Futa HIRAKOBA
See All by Futa HIRAKOBA
terraform plan 結果の検証を自動化するぞ! with Conftest / Testing terraform plan with Conftest
korosuke613
0
15k
生産性向上チームとは?
korosuke613
1
1.5k
サイボウズの生産性を高める生産性向上チームと開発文化 / Development culture and EPT in Cybozu
korosuke613
5
1.1k
What will your future college life look like? 〜今後の大学生活をどのようにしますか?〜
korosuke613
0
110
ETロボコン2019 CS大会モデル[DA] - K-Lab
korosuke613
0
1k
ETロボコン2019 地区大会モデル[DA] - K-Lab
korosuke613
0
930
人月の神話紹介
korosuke613
0
260
片山徹郎研究室紹介スライド2019
korosuke613
0
650
逆求人自己紹介プレゼン(平木場)
korosuke613
0
320
Other Decks in Technology
See All in Technology
Product Engineer
resilire
0
130
プラットフォームエンジニアリングとは何であり、なぜプラットフォームエンジニアリングなのか
doublemarket
1
550
eBPFとwaruiBPF
sat
PRO
2
940
原理から解き明かす AIと人間の成長 - Progate BAR
teba_eleven
2
300
MAP-7thplaceSolution
yukichi0403
2
250
“決まらない”NSM設計への処方箋 〜ビットキーにおける現実的な指標デザイン事例〜 / A Prescription for "Stuck" NSM Design: Bitkey’s Practical Case Study
bitkey
PRO
1
340
法人支出管理領域におけるソフトウェアアーキテクチャに基づいたテスト戦略の実践
ogugu9
1
110
私も懇親会は苦手でした ~苦手だからこそ懇親会を楽しむ方法~ / 20251127 Masaki Okuda
shift_evolve
PRO
4
550
Claude Code はじめてガイド -1時間で学べるAI駆動開発の基本と実践-
oikon48
42
25k
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
9.9k
Oracle Cloud Infrastructure:2025年11月度サービス・アップデート
oracle4engineer
PRO
1
110
安いGPUレンタルサービスについて
aratako
1
1.7k
Featured
See All Featured
Designing Experiences People Love
moore
142
24k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
690
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
How to Ace a Technical Interview
jacobian
280
24k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
Why You Should Never Use an ORM
jnunemaker
PRO
60
9.6k
GraphQLとの向き合い方2022年版
quramy
50
14k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.3k
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Typedesign – Prime Four
hannesfritz
42
2.9k
Done Done
chrislema
186
16k
Transcript
テスト漏れを無くしたい! ワークフロー単位でトリガーを ⾃由に設定したい要望 サイボウズ株式会社 ⽣産性向上チーム 平⽊場 ⾵太(@shitimi_613) 2020年8⽉5⽇(⽔) CircleCI コミュニティミートアップ
簡単なプロフィール 2020/08/05 2 平⽊場 ⾵太(Futa HIRAKOBA) • 4⽉にサイボウズ新卒⼊社 • 6⽉末から⽣産性向上チームにJoin!
これまでの主な業務 • CI/CDパイプラインの整備 • dockerfile職⼈ • AWSリソースのゴミ掃除⾃動化 • ⿅児島に帰省したいけどコロナで帰れない... • 対⾺にはよく⾏く(ゲーム) • 最近はk8sの勉強やってる Shitimi_613 korosuke613
2020/08/05 3 とつぶやいたら 3~4⽇前...
2020/08/05 4 まさかの公式さんから連絡が来て いろいろあってLTすることになりました 3~4⽇前...
TL;DR ワークフロー単位で トリガーをPRに設定できるよう になってほしい! 2020/08/05 5
背景 2020/08/05 6
Garoonという製品がある 2020/08/05 7 https://garoon.cybozu.co.jp/
phpcsコマンドでコーディング規約を チェックしてコメントするジョブ Garoon開発のざっくりとした流れ 2020/08/05 8 コーディング 静的解析 テスト デリバリー lint-php
lint-js phan ... phpcs phpcs: https://github.com/squizlabs/PHP_CodeSniffer QA リリースなど コーディング規約を継続的に確認している
phpcsジョブが やってくれること 2020/08/05 9 1.GitHub APIを叩いて1、 マージ先ブランチ(base)と マージ元ブランチ(compare)との差分を取得 2.差分3に対してphpcsコマンドを実⾏ 3.GitHubのPull
Requestにコメント 1. h$ps://developer.github.com/v3/media/#commits-commit-comparison-and-pull-requests 2. 差分に対して⾏う理由はすでに規約違反のコードが⼤量に存在するためです...
こんな感じでコメントしてくれる 2020/08/05 10
もしかしてこれpushじゃ うまくいかないんじゃ... 2020/08/05 11 と思われた⽅もいると思います。
phpcsジョブを包含する ワークフローを動かすには プルリクエストが必要* 2020/08/05 12 * 2つのcommitの⽐較もできるっちゃできる
CircleCIでプルリクエストを ワークフローのトリガーとする 2020/08/05 13 1. https://circleci.com/docs/2.0/oss/#build-pull-requests-from-forked-repositories 2. ただし、デフォルトブランチだけは従来通りpushでワークフローが動く プロジェクト単位で、プルリクエスト時にワー クフローを動かす設定ができる1。
設定⽅法 Project Settings > Advanced > Only build pull requests ただし、設定を有効にすると、pushでワークフ ローが動かなくなる2。
Garoonはコミットでも ワークフローを⾛らせたい 2020/08/05 14
CIRCLE_PULL_REQUEST環境変数で PRかどうかを判断してる 2020/08/05 15 https://circleci.com/docs/ja/2.0/env-vars/ CIRCLE_PULL_REQUEST: 関連付けられたプルリクエストのURLが格納される環境変数 • プルリクエストでないなら circleci
step halt でジョブを途中で終了させる • プルリクエストなら ジョブを続⾏する
コーディング規約を継続的に確認 2020/08/05 16 PR作成 & push comment PR phpcsジョブ: PASSED
or FAILED コーディング規約を守れていない変更のマージを未然に防げる プルリクエストがあるので phpcsコマンドを実⾏できる
常にきれいなコード! みんなハッピー! 2020/08/05 17
常にきれいなコード! みんなハッピー! 2020/08/05 18 とはならなかった...
問題 2020/08/05 19
もしプルリクエスト作成後に pushしなかったら...? 2020/08/05 20
PR作成後にpushした場合 2020/08/05 21 規約違反のコードをpush comment PR プルリクエストがあるので phpcsコマンドを実⾏できる PR作成 phpcsジョブ:
FAILED
push後にPRを作成した場合 2020/08/05 22 規約違反のコードをpush プルリクエストがないので phpcsコマンドを実⾏できない PR作成 (ワークフローは実⾏されない) phpcsジョブ: PASSED
ヨシ! https://kumamine.blogspot.com/2019/12/blog-post_27.html
push後にPRを作成した場合 2020/08/05 23 規約違反のコードをpush プルリクエストがないので phpcsコマンドを実⾏できない PR作成 (ワークフローは実⾏されない) phpcsジョブ: PASSED
ヨシ! https://kumamine.blogspot.com/2019/12/blog-post_27.html 良くない
もしこれがガチのテストだったら.. 2020/08/05 24 バグを⾒過ごしてしまうかも... テストしていないのに あたかもテストが通過したと勘違いして マージしてしまう
2020/08/05 25 運⽤でカバー(PRを先に作る or Re-Runする) ➡ヒューマンエラーは避けられないし、⾯倒 マージ先ブランチを特定して⽐較する ➡特定が⼤変1 GitHub Actionsを使ってPR作成時にワークフローを動かす
➡本末転倒感がある2 etc... もちろん回避策はある 1. garoonはmasterブランチと呼べるものが複数個あるので... 2. しかも、GitHub Enterprise Serverではまだ使えない ベストな⽅法は無い...
ワークフロー単位でトリガー をPRに設定できればな〜〜 はるかに楽なのにな〜〜〜 2020/08/05 26
2020/08/05 27 • 今回はだいぶ狭いユースケースでしたが、CircleCIのコ ミュニティでも多くの需要があるようです*。 • コード上(config.yml)で設定できるようになるのが個⼈ 的な理想です。 ワークフロー単位で トリガーにPRを設定できるよう
になってほしいです!! * https://ideas.circleci.com/ideas/CCI-I-316 なので、
というわけで、 CircleCIのみなさん、 ご検討のほど よろしくお願いします!! 2020/08/05 28