Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CI/CD
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
sters
February 16, 2021
Programming
2
260
CI/CD
sters
February 16, 2021
Tweet
Share
More Decks by sters
See All by sters
PHP を Go にする mercari.go #4
sters
1
3.6k
Other Decks in Programming
See All in Programming
Implementation Patterns
denyspoltorak
0
270
AI時代のキャリアプラン「技術の引力」からの脱出と「問い」へのいざない / tech-gravity
minodriven
13
3.5k
Pythonではじめるオープンデータ分析〜書籍の紹介と書籍で紹介しきれなかった事例の紹介〜
welliving
3
860
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
170
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
6.2k
余白を設計しフロントエンド開発を 加速させる
tsukuha
7
2.1k
MDN Web Docs に日本語翻訳でコントリビュート
ohmori_yusuke
0
630
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
LLM Observabilityによる 対話型音声AIアプリケーションの安定運用
gekko0114
2
410
HTTPプロトコル正しく理解していますか? 〜かわいい猫と共に学ぼう。ฅ^•ω•^ฅ ニャ〜
hekuchan
2
670
AtCoder Conference 2025
shindannin
0
1k
AIで開発はどれくらい加速したのか?AIエージェントによるコード生成を、現場の評価と研究開発の評価の両面からdeep diveしてみる
daisuketakeda
1
950
Featured
See All Featured
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
110
Code Reviewing Like a Champion
maltzj
527
40k
Between Models and Reality
mayunak
1
180
The Curious Case for Waylosing
cassininazir
0
230
Producing Creativity
orderedlist
PRO
348
40k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
1
1.3k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
How Software Deployment tools have changed in the past 20 years
geshan
0
32k
Being A Developer After 40
akosma
91
590k
Color Theory Basics | Prateek | Gurzu
gurzu
0
190
The Curse of the Amulet
leimatthew05
1
8k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Transcript
CI/CD について
自己紹介 • 猫です • 株式会社メルカリでソフトウェアエンジニアをしています • マイクロサービスをやっています • と英語を主に書いています •
もりもりコードを書いたり、環境を整備したりするのが好きです
今日の話 • についての説明、紹介 ◦ の無い世界では何が起こるか ◦ とはどういうものか、何を行うのか ◦ 実際のツールの紹介 ◦
導入や使用するときに気にすること • を使った例 • まとめ • おまけ
CI/CDについての説明、紹介
CI/CDの無い世界で何が起こるか 開発するぞ! 開発するぞ! 開発するぞ! 開発するぞ!
CI/CDの無い世界で何が起こるか できた! できた! できた! できた!
CI/CDの無い世界で何が起こるか リリースをするので データをください
CI/CDの無い世界で何が起こるか
CI/CDの無い世界で何が起こるか 動きません! 修正してください
CI/CDの無い世界で何が起こるか どうして... どうして... どうして... どうして...
CI/CDの無い世界で何が起こるか
CI/CDの無い世界で何が起こるか 確認できました リリース開始します
CI/CDの無い世界で何が起こるか 手順は...えーと...
CI/CDの無い世界で何が起こるか 〜しばらくして〜
• 自分の作業した部分は動く • 自分の作業が誰かの作業に影響しているかもしれない • 全体を見るまで かはわからない • ソフトウェアを本番環境に準備するのが大変 •
つまり、開発した機能のリリースにかかるまでの時間が長い!!! • → CI/CDで解決します ◦ ソースコード管理も必要です ◦ 人開発でもメリットがあります CI/CDの無い世界で何が起こるか
• • 大きくどどん、ではなく、小さく継続的に、ソフトウェアを結合する ◦ 継続的に 定期的、自動的 ◦ ソフトウェアを結合 ビルドやテストを行う •
頻繁にソフトウェアを結合できるので ◦ 他人との衝突に早く気づくことができる ◦ 結果としてリリースまでの時間を短縮できる CIとはどういうものなのか
CIでは何をするのか • ソフトウェアのビルド ソフトウェアを利用できるようにする • ソフトウェアのテスト ソフトウェアが正しく動作する状態を確認 • ソースコードに対する解析 ソースコードの品質を高める
• その他アイデア次第 ◦ 脆弱性診断、パフォーマンス測定など
CDとはどういうものなのか • ◦ ソフトウェアをいつでもリリース可能な状態にする ◦ リリースは手動(ビジネス的な都合がある) ◦ ソフトウェアを準備することで、リリースにかかるコストを削減 • ◦
リリースにかかる作業( デプロイ)を自動化する ◦ 全自動でリリースがされることで、リリースにかかるコストを更に削減する ◦ 今日の はこちらを指します
CDでは何をするのか • リリースするものを準備する • リリースの実施 ◦ アプリケーションなら ◦ サーバにログイン、ソフトウェアを配置する。
CI/CDとは!? 実際の動作する環境 開発者 をしてくれるもの をしてくれるもの ビルド テスト ソースコード管理 フィードバック
実際にどういうソリューションがあるか 1/2 • ソースコード管理と一体化したもの ◦ ◦ ◦ • ◦ ◦
◦
実際にどういうソリューションがあるか 2/2 • クラウドプロバイダーが提供するもの ◦ ◦ ◦ • セルフホスティング ◦
◦ ◦ ◦
CI/CDの導入や利用にあたって気にすること • コストがかかることを理解する ◦ お金がかかる ◦ 管理やメンテナンス、トラブルシューティングする人も必要 • 自動化する ◦
手動でボタンポチーは面倒なのでやらなくなる ◦ 自動化にこだわりすぎるのもダメ。構築やメンテナンスが大変 • 作業単位を小さくし、実行頻度をあげる ◦ 作業単位が大きいと時間もかかる ◦ 頻度を上げられない原因があれば解消する
特にCIの導入や利用にあたって気にすること 1/2 • 入れるなら最初から入れる ◦ 開発の超初期段階でもメリットがある ◦ 開発途中のものに入れる場合は、全部対応してからではなく 都度対応を可能となるように導入する •
の信頼性を高める ◦ がたまに失敗したり、失敗を放置したままにしない ◦ の実行時間を速める
特にCIの導入や利用にあたって気にすること 2/2 • で作成したソフトウェアがなにかに影響を出している ◦ 実行したテストが本番データを更新している、とか • で確認する内容が更新する ◦ ソフトウェアは開発を経て進化するので内容も見直す
• 恐怖駆動にしない ◦ 壊した人に罰を与えないよう各自の作業を各自が見れるようにする
特にCDの導入や利用にあたって気にすること 1/2 • コストがかかることを理解する ◦ 以上にコストがかかる場合が多い • デプロイのプロセスを正しく自動化する ◦ 途中でマニュアル操作が必要なものは継続的に実施しにくい
• デプロイを追跡する ◦ なにか問題が起きたり、大きな改善が見られたときに どのデプロイが影響したかを把握する
特にCDの導入や利用にあたって気にすること 2/2 • 本当に全自動でよいかを考える ◦ ビジネスとしての都合、ソフトウェアの利用者の性質など様々な要素が絡む ◦ カナリアリリースやロールバックといった仕組みの用意が必要 ▪ カナリアリリース
一部の利用者のみが最新のものを利用する仕組み ▪ ロールバック 問題があったときに以前のバージョンに戻す ▪ 問題が起きたとしても影響範囲を小さくすることができる ▪ もちろんこれらも全自動にできる
Github Actionsを使った例
実際にGithubActionsを使ってCIをやってみる • 空っぽのリポジトリを作る • 言語を使って、ハローワールドと簡単なテストを書く • をセットアップ • 手元で変更を作成、コミットしてプッシュ •
プルリクエストを作成して の結果を確認 • 手元で修正を作成、コミットしてプッシュ • の結果を確認
実際にGithubActionsを使ってCIをやってみる 空っぽのリポジトリを作る
実際にGithubActionsを使ってCIをやってみる Go言語を使って、ハローワールドと簡単なテストを書く package main import "fmt" func main() { fmt.Println(say("hello!"))
} func say(message string) string { return fmt.Sprintf("I'm bot, %s", message) }
実際にGithubActionsを使ってCIをやってみる Go言語を使って、ハローワールドと簡単なテストを書く
実際にGithubActionsを使ってCIをやってみる Go言語を使って、ハローワールドと簡単なテストを書く
実際にGithubActionsを使ってCIをやってみる CIをセットアップ
実際にGithubActionsを使ってCIをやってみる CIをセットアップ
実際にGithubActionsを使ってCIをやってみる CIをセットアップ
実際にGithubActionsを使ってCIをやってみる CIをセットアップ
実際にGithubActionsを使ってCIをやってみる CIをセットアップ
実際にGithubActionsを使ってCIをやってみる CIをセットアップ
実際にGithubActionsを使ってCIをやってみる CIをセットアップ
実際にGithubActionsを使ってCIをやってみる CIをセットアップ
実際にGithubActionsを使ってCIをやってみる 手元で変更を作成、コミットしてプッシュ
実際にGithubActionsを使ってCIをやってみる 手元で変更を作成、コミットしてプッシュ
実際にGithubActionsを使ってCIをやってみる 手元で変更を作成、コミットしてプッシュ
実際にGithubActionsを使ってCIをやってみる プルリクエストを作成してCIの結果を確認
実際にGithubActionsを使ってCIをやってみる プルリクエストを作成してCIの結果を確認
実際にGithubActionsを使ってCIをやってみる プルリクエストを作成してCIの結果を確認
実際にGithubActionsを使ってCIをやってみる 手元で修正を作成、コミットしてプッシュ
実際にGithubActionsを使ってCIをやってみる CIの結果を確認
実際にGithubActionsを使ってCIをやってみる CIの結果を確認
実際にGithubActionsを使ってCIをやってみる CIの結果を確認
実際にGithubActionsを使ってCDをやってみる • ディレクトリに の形で資料を置く • で にビルドし、 にブランチにコミット • を有効にする
• 結果を確認する
実際にGithubActionsを使ってCDをやってみる docsディレクトリにgitbookの形で資料を置く 最高に素晴らしいアプリケーションを開発しました。 ぜひご利用ください。 の説明は省略
実際にGithubActionsを使ってCDをやってみる docsディレクトリにgitbookの形で資料を置く
実際にGithubActionsを使ってCDをやってみる GithubActionsでHTMLにビルドし、gh-pagesにブランチにコミット を使います
実際にGithubActionsを使ってCDをやってみる GithubActionsでHTMLにビルドし、gh-pagesにブランチにコミット
実際にGithubActionsを使ってCDをやってみる GithubActionsでHTMLにビルドし、gh-pagesにブランチにコミット
実際にGithubActionsを使ってCDをやってみる GithubActionsでHTMLにビルドし、gh-pagesにブランチにコミット
実際にGithubActionsを使ってCDをやってみる GithubActionsでHTMLにビルドし、gh-pagesにブランチにコミット
実際にGithubActionsを使ってCDをやってみる GithubActionsでHTMLにビルドし、gh-pagesにブランチにコミット
実際にGithubActionsを使ってCDをやってみる GithubPagesを有効にする
実際にGithubActionsを使ってCDをやってみる GithubPagesを有効にする
実際にGithubActionsを使ってCDをやってみる 結果を確認する
まとめ
まとめ • と について説明しました ◦ をすることで、より早い段階で問題点に気づくことができる ◦ をすることで、小さいリリースを、頻繁に行うことができる • さまざまなツールを紹介した
◦ これですべてではないし、連携すれば可能性はさらに広がる • で簡単なデモを行った ◦ 始めてみることは簡単にできる。やってみよう!
おまけ
おまけ: メルカリ社での例1: バックエンドAPI 作成 静的解析 テスト ビルド マージを トリガに起動 静的解析
テスト ビルド へ連携 イメージ作成を トリガにデプロイ起動 上で ソフトウェアの運用 にデプロイ 連携 結果のフィードバック
おまけ: メルカリ社での例2: 構成管理,Terraform 作成 連携 静的解析 マージをトリガに起動 結果のフィードバック 構成の適用 結果のフィードバック