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
GitHubとGitLabとAWS CodePipelineでCI/CDを組み比べてみた
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Satoshi Kaneyasu
September 09, 2025
Programming
1.6k
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitHubとGitLabと AWS CodePipelineで CI/CDを組み比べてみた
Satoshi Kaneyasu
September 09, 2025
More Decks by Satoshi Kaneyasu
See All by Satoshi Kaneyasu
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
3
200
Amazon_Cognito_で構築する_スケーラブルな_Web_アプリケーション__シングルページ_Web_アプリケーションに認証を組み込む
satoshi256kbyte
0
39
人間とAI、どちらが書いたコードもCI/CDでチェックしてみよう
satoshi256kbyte
0
41
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
280
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎
satoshi256kbyte
1
61
人間とAI、どちらが書いたコードもCICDでチェックしてみよう
satoshi256kbyte
1
76
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
630
お客様とSIerではじめたスクラム開発(で得た学び)
satoshi256kbyte
0
140
From Pipenv to UV: Migrating to a Monorepoto Tame a Complex Repository
satoshi256kbyte
0
81
Other Decks in Programming
See All in Programming
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.5k
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
1
600
Contextとはなにか
chiroruxx
1
380
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
180
Datadog LLM Observabilityで実現する 安全なLLM Usage 管理
3150
0
130
AIキャラアプリkaiwaの低遅延音声通話基盤をどう作ったか - AWS Gravitonで支える低遅延・低コストAI Agent基盤
mogamit
0
140
AI駆動開発を妨げる技術的負債の解消アプローチ / ai-refactoring-approach
minodriven
15
8.1k
Hunting Vulnerabilities in Symfony with LLMs
vinceamstoutz
0
570
Performance Engineering for Everyone
elenatanasoiu
0
240
はてなアカウント基盤 State of the Union
cockscomb
1
1.2k
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
920
Spec Driven Development | AI Summit Lisbon
danielsogl
PRO
0
220
Featured
See All Featured
Navigating Team Friction
lara
192
16k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.8k
Agile that works and the tools we love
rasmusluckow
331
22k
Darren the Foodie - Storyboard
khoart
PRO
3
3.4k
Un-Boring Meetings
codingconduct
0
330
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
210
[SF Ruby Conf 2025] Rails X
palkan
2
1.1k
Transcript
GitHubとGitLabと AWS CodePipelineで CI/CDを組み比べてみた 2025.09.10 Satoshi Kaneyasu
2 発表者自己紹介 氏名:兼安 聡 所属:株式会社サーバーワークス アプリケーションサービス部 在住:広島(フルリモート) 担当:DevOps、技術支援、PM、SM SNS(X):@satoshi256kbyte •
2025 AWS Community Builders • 2025 Japan AWS Top Engineers (AI/ML Data Engineer) • 2025 Japan AWS All Certifications Engineers • 認定スクラムマスター • PMP
3 目次 ⚫今回検証したかったこと ⚫AWS CodePipelineでの実装例 ⚫GitHub Actionsでの実装例 ⚫GitLab CI/CDでの実装例 ⚫まとめ
4 今回検証したかったこと デプロイ前にセキュリティ含めたチェックをするCI/CDパイプラインを組んで みようと思いました 品質・セキュリティに課題があるコードをデプロイしないことが目的です これを実現するにはどのツールでどのように組んだらいいか検証してみました ソース Lint ソースコードの構文チェックなど Unit
Test SCA 使用ライブラリの脆弱性チェック SAST セキュリティ観点の静的コードチェック デプロイ
5 今回検証したかったこと、補足 ⚫ソース管理自体はGitHubで行っています ⚫検証に用いたコードはPython3.13、パッケージ管理はuvです 次のページから話題が変わります
AWS CodePipelineでの実装例
7 AWS CodePipelineでの実装例
8 並列実行と直列実行 直列実行 並列実行 並列実行
9 並列実行と直列実行 アクションを小分けにして並列実行 buidspec も分割
10 キャッシュの活用 キャッシュを作った上で、 並列実行 ここでキャッシュを作る
11 キャッシュの活用 キャッシュタイプを「Amazon S3」にした上で、 buildspecでキャッシュキーを指定することで ビルドプロジェクト(=コンテナ)を跨いだキャッシュが使用 可能になる asdfとuvを使っているのでこの2つのファイルを使ってキャッシュキーを生成 パスの指定の仕方が、GitHub・GitLabとは異なるので注意 パスそのものではなく、パスパターンに合致するものがキャッシュ対象
12 SCAとSASTの実装方法 Amazon Inspector Amazon CodeGuru Security
13 SCAとSASTの実装方法 ⚫Amazon InspectorによるSCAはCodePipelineに組み込むことができます ⚫一点だけ注意 Pythonの場合Inspectorはrequirements.txtをチェックするので、 uv exportしてuv.lockからrequirements.txtを出力しておく必要があります ⚫Amazon InspectorはSASTもできますが、
同期処理にする方法が見つからないため、CI/CDに組み込めませんでした ⚫それ故にSASTにCodeGuru Securityを使用していましたが、 CodeGuru Securityは2025年11月のサービス終了となってしまいました ⚫CodePipelineだけでやりたいことは実現できていたのに残念です
14 AWS CodePipelineで実装してみた所感 ⚫Code系・S3・IAMロールの知識などを総動員しないと使いこなせな いため、とっつきにくく一番難しいと思います ⚫今回の検証では一番時間かかりました(一番触っているはずなのに) ⚫ 検証期間二週間中約半分がCodePipeline ⚫パイプラインをIaCでも手動でも作成・編集できてしまうのが厄介 次のページから話題が変わります
GitHub Actionsでの実装例
16 GitHub Actionsでの実装例
17 並列実行と直列実行 GitHub Actionsはジョブ同士は並列実行が可能 ジョブの中のステップは直列実行となります 参考:GitHub Actions の構造と変数を整理して、AWSのデプロイ先を分岐させてみよう
18 GitHubでの実装例 並列実行
19 並列実行と直列実行 cicd.yml ジョブを分けることで並列実行にしつつ、 needsで順番を指定
20 キャッシュの活用 asdfとuvを使っているのでこの2つのファイルを使って キャッシュキーを生成 sha256sum関数でファイルをハッシュ文字列化 パスの指定の仕方はCodePipelineとは異なる 指定したパスそのものがキャッシュ対象
21 AWSの操作 - AWS SAMによるデプロイ OIDCでAWSアカウントに接続して 操作します OIDCを使用するのにパーミッションが必要です 事前に用意したOIDC用のIAMロールのARNを シークレットで設定しておき、使用します
参考:アマゾン ウェブ サービスでの OpenID Connect の構成
22 AWSの操作 - Amazon EC2へのデプロイ① EC2へのデプロイは、 事前にCodeDeployでアプリケーションと デプロイメントグループを作っておき、それを呼び出す 形を取っています。 S3へコード一式をアップしてから、
新規デプロイを作成するコマンドを発行します。
23 AWSの操作 - Amazon EC2へのデプロイ② EC2へのデプロイは非同期処理なので、 待機処理が必要
24 SCAとSASTの実装方法① ⚫GitHubはSCAはDependabot、SASTはCodeQLが使用できますが、 どちらもCI/CDに組み込むのがかなり難しいと感じました ⚫CodeQLはGitHub Actionsから起動はできましたが、 結果をGitHub Actionsの中で受け取るところまで至れませんでした また、使用料金もプラン次第なところがあるので、SIerとしてCI/CD に組み込むのは難しいと感じます
⚫Dependabotの方はGitHub Actionsからの能動的に起動する方法自体 が見つかりませんでした。
25 SCAとSASTの実装方法② ⚫代替としてOSSのTrivyとSemgrep CEでSCA、SASTを使用しました ⚫SemgrepはCE版だとSAST機能しか利用できないので、SCAはTrivyに任せます ⚫SASTにSemgrepを選んだのは、GitLabのSASTのコードを確認したとこ ろ、Semgrepが使われていたからです
26 GitHubで実装してみた所感 ⚫設定ファイルの書き方に癖がなく書きやすい ⚫今から始めるならこちらが楽だと思います ⚫AWSの操作にOIDCを使う部分が一つの壁 ⚫そこを乗り越えればいろんなことができると思います ⚫GitHub ActionsからのAWSの操作は作り込みが必要ですが、 設定が分散したりはしないのでそこまで気にはなりません ⚫自分としては、SCA・SASTを経てのデプロイがやりたかったのだが
DependabotとCodeQLはそれとは考え方が違うように思えます 次のページから話題が変わります
GitLab CI/CDでの実装例
28 GitLab CI/CDでの実装例 全体的に操作感がGitHub Actionsによく似ている
29 並列実行と直列実行 stagesという概念があるものの、 GitHubと同じようにジョブを分ければ並列となり、 needsで順番を作ることができる
30 AWSの操作 GitHub同様OIDCが使用できる 参考: Configure OpenID Connect in AWS to
retrieve temporary credentials
31 キャッシュの活用 GitLabでファイルをキーの一部とする場合は、filesが使用で きる 参考:Caching in GitLab CI/CD パスの指定の仕方はGitHubと同じだが、ディレクトリ構成 が違う模様
GitHubのように~/.cargoなどと指定するとキャッシュが空 振りするので、何かインストールするなら作業ディレクトリ直 下に置くようにし、そこをキャッシュ対象にすると効きやすい ※コンテナベースイメージも同じOSだが他と異なるようで、 GitHub・CodePipelineに比べ動かすのに多数のインストールが必要
32 SCAとSASTの実装方法 ⚫GitLab謹製でSCAとSASTがあるが、Ultimateプランが必要です ⚫検証した限りではSCAはUltimateでなくとも動かすことができたが、 実運用で使うならちゃんとUltimateプランにした方がよいでしょう ⚫ 参考:各プランのGitLab機能の比較 ⚫ 流石にUltimateは個人の検証レベルでは契約できないです・・・ ⚫なお、検証時した限りでは、GitLabのSCAは呼び出しはできるけど、結果のチェッ
クは本来CI/CDでやるものではないらしく、チェック処理を自分で作る必要がありま した
33 GitLabで実装してみた所感 ⚫GitHub同様設定ファイルの書き方に癖がなく書きやすいが、 ネット上にそこまで情報が多くないのがネックです ⚫その他の感想はGitHubと同じです 次のページから話題が変わります
まとめ
35 各ツールの所感 ⚫ 実装のしやすさは、GitHub>GitLab>>>AWS CodePipeline ⚫ 今からCI/CDを始めるならGitHub Actionsが一番やりやすいと思います ⚫ CodeGuru
Securityが使用可能ならやりたかったことはCodePipelineで完 結したのに、EOLが発表されるとは思っていませんでした・・・
36 今自分が考えるCI/CDの組み合わせ デプロイ時は CodePipeline プルリクエスト作成時は GitHub Actions
37 組み合わせの理由 ⚫ CodePipelineはAWSで完結できる上、 InspectorによるSCAがCI/CDに 組み込めるのが大きい ⚫ CodeGuru SecurityがEOLになったのは残念で代替は探しますが、 よくよく考えたらライブラリと違ってソースコード自体は時間が経っても勝手に脆弱
性が増えたりはしないので、SASTは他に逃すなどの回避策を取ってもよいと思い ました ⚫ 開発中のチェックは、チェック自体にも試行錯誤することがあるので、変更にデプロ イが必要なCodePipelineよりもGitHub Actionsでやった方が効率がよいと 思います 以上です、ありがとうございました
None
39 Appendix - 参考資料 ⚫ CodePipeline End of support
for CodeGuru Security ⚫ GitHub GitHub Actions の構造と変数を整理して、AWSのデプロイ先を分岐させてみよう アマゾン ウェブ サービスでの OpenID Connect の構成 ⚫ GitLab Configure OpenID Connect in AWS to retrieve temporary credentials Caching in GitLab CI/CD 各プランのGitLab機能の比較 ⚫ Trivy ⚫ Semgrep