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
人間とAI、どちらが書いたコードもCICDでチェックしてみよう
Search
Satoshi Kaneyasu
February 24, 2026
Programming
70
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
人間とAI、どちらが書いたコードもCICDでチェックしてみよう
Satoshi Kaneyasu
February 24, 2026
More Decks by Satoshi Kaneyasu
See All by Satoshi Kaneyasu
AWS re:Invent 2025の少し振り返り + DevOps AgentとBacklogを連携させてみた
satoshi256kbyte
3
190
Amazon_Cognito_で構築する_スケーラブルな_Web_アプリケーション__シングルページ_Web_アプリケーションに認証を組み込む
satoshi256kbyte
0
37
人間とAI、どちらが書いたコードもCI/CDでチェックしてみよう
satoshi256kbyte
0
40
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎 おもクラ #6版
satoshi256kbyte
1
280
今こそ押さえておきたい アマゾンウェブサービス(AWS)の データベースの基礎
satoshi256kbyte
1
59
はじめてのカスタムエージェント【GitHub Copilot Agent Mode編】
satoshi256kbyte
0
630
お客様とSIerではじめたスクラム開発(で得た学び)
satoshi256kbyte
0
130
From Pipenv to UV: Migrating to a Monorepoto Tame a Complex Repository
satoshi256kbyte
0
80
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
1.9k
Other Decks in Programming
See All in Programming
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
160
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
0
260
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
11
4.3k
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
Even G2とAWSで推しのエージェントを召喚しよう!
har1101
1
120
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.3k
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
150
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
180
さぁV100、メモリをお食べ・・・
nilpe
0
150
RTSPクライアントを自作してみた話
simotin13
0
620
JavaDoc 再入門
nagise
1
370
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
7k
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
220
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.5k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
290
Crafting Experiences
bethany
1
180
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
430
We Have a Design System, Now What?
morganepeng
55
8.2k
Unlocking the hidden potential of vector embeddings in international SEO
frankvandijk
0
850
Mobile First: as difficult as doing things right
swwweet
225
10k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
Producing Creativity
orderedlist
PRO
348
40k
Transcript
人間とAI、どちらが書いたコードも CI/CDでチェックしてみよう 2025.10.21 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 Speaker Introduction
3 目次 ⚫生成AIを用いた開発と品質面のリスク ⚫GitHub ActionsによるCI/CDパイプラインの作り方 ⚫GitHub Actionsによる品質とセキュリティのチェック ⚫GitHub ActionsからのAWSの操作
生成AIを用いた開発と品質面のリスク
5 AIと協力する開発スタイル – Vibe Coding • AIがコードを生成し、開発者はそのコードをレビュー・修正しながら ソフトウェアを開発する手法を、Vibe Codingと言います •
サーバーワークスでは開発に用いる生成AIのソリューションを提供し ています ソースコード
6 Vibe Codingの課題 ⚫ Vibe Coding とはAIに自然言語で指示を与えて開発するスタイルを 指します。 ⚫ 一般的にチャットで会話しながら開発するので、
同じ成果物を得るには会話を再現する必要があります。 (対策となるテクニックは存在しますが本筋から離れるので割愛します) このやり取りを丸ごと再現しないと、 同じ成果物を得るのは難しい
7 仕様駆動開発 ⚫ Vibe Codingの課題に対しての、対策アプローチの一つが、仕様駆動開発です ⚫ Kiroのスペックは要件定義>設計>実装計画>実装という段階を踏みます 要件の入力 要件定義 設計
実装計画 実装 Kiroのスペック requirements. md design.md tasks.md コード
8 AIが作業を途中で打ち切ってしまう AIによるチェックが中途半端 成果物に脆弱性が含まれる 1 2 3 Vibe Codingと仕様駆動開発、両方で起き得る課題
9 AIによるチェックが中途半端になってしまう例 • A-1を実装する • A-2を実装する • A-3を実装する • B-1を実装する
• B-2を実装する • B-3を実装する • C-1を実装する • C-2を実装する • C-3を実装する • 実装したプログラムをチェックして、エラーと警告をゼロにする 実装計画 AIの最 終報告 • 最終的にエラーは0件、警告は20件となりました。 残りの20件は動作には問題ない警告です。 ???動作に問題ない警告ならOKという条件はなかったはずだが・・・
10 なぜこのようなことが起きるのか? • A-1を実装する • A-2を実装する • A-3を実装する • B-1を実装する
• B-2を実装する • B-3を実装する • C-1を実装する • C-2を実装する • C-3を実装する • 実装したプログラムをチェックして、エラーと警告をゼロにする 実装計画 実装計画に含まれる 作業が多すぎる • チェックを最後にまとめてやってしまっている • AIも溜めてからの最後に一気にテストやチェックはやりきれないことがある
11 AIの成果物に脆弱性が含まれる例 パッケージ名 バージョン ライセンス 依存関係 インストール元 numpy 1.26.4 BSD-3-Clause
依存なし PyPI pandas 2.2.3 BSD-3-Clause numpy PyPI requests 2.32.3 Apache-2.0 urllib3, idna, certifi PyPI fastapi 0.115.0 MIT starlette, pydantic PyPI uvicorn 0.31.0 BSD-3-Clause click, h11 PyPI 識別子 対象パッケージ 影響バー ジョン 深刻度 内容概要 CVSSスコア CVE-2024- 12345 requests ~2.32.3 High 特定のHTTPヘッダー処理に より任意コード実行の可能 性 8.8 使用ライブラリ一覧 脆弱性データベース
12 なぜこのようなことが起きるのか? ⚫ AIは特に何もしなければ、脆弱性データベースを直接参照していない ⚫ AIは特に何もしなければ、技術的に少しだけ前の情報を元に成果物を作る
13 AIの成果物の課題に対する対策案 AIによるチェックが 中途半端 要件自体を細かくする チェックをこまめに するよう指示する 現象 対策 AIに依存しない
チェックを設ける AIの成果物に 脆弱性が含まれる
14 AIの成果物の課題に対する対策案 AIによるチェックが 中途半端 要件自体を細かくする チェックをこまめに するよう指示する 現象 対策 AIに依存しない
チェックを設ける AIの成果物に 脆弱性が含まれる CI/CD
15 CI/CDツールはどれが良いのか? CI/CDツール 難易度 AWSとの連携しやすさ 変更のしやすさ GitHub Actions 低 中
中 GitLab CI/CD 中 中 中 AWS CodePipeline 高 高 低 ⚫ 開発時のチェックなどにはGitHub Actionsが扱いやすく向いています ⚫ AWS CodePipelineは、デプロイ直前の水際チェックに向いています 次のページから別の話題に移ります
GitHub Actionsによる CI/CDパイプラインの作り方
17 GitHubのプルリクエストとGitHub Actionsによるチェック develop feature/実装計画 feature/実装 要件定義、設計書、実装計画 プルリクエスト プルリクエスト ソースコード
⚫ GitHubには、成果物のレビューを依頼するプルリクエストという機能があります ⚫ プルリクエストは、プルリクエストができた時にGitHub Actionsで自動チェックを 挟むことが可能で、チェックをした上でレビューすることが可能です
18 GitHubのプルリクエストとGitHub Actionsによるチェック develop feature/実装計画 feature/実装 要件定義、設計書、実装計画 プルリクエスト プルリクエスト ソースコード
⚫ GitHubには、成果物のレビューを依頼するプルリクエストという機能があります ⚫ プルリクエストは、プルリクエストができた時にGitHub Actionsで自動チェックを 挟むことが可能で、チェックをした上でレビューすることが可能です • マークダウンの構文チェック • スペルミスチェック • 自動テスト • プログラムの構文エラー、 警告チェック
19 GitHubのプルリクエストとGitHub Actionsによるチェック プルリクエストにおける実行結果画面
20 GitHub Actionsの構造 リポジトリのディレクトリ構造
21 今回作成するチェック内容 プルリクエスト Lint ソースコードの構文チェックなど 自動テスト SCA 使用ライブラリの脆弱性チェック SAST セキュリティ観点の
静的コードチェック Job Job Job Job チェックを早く終わらせるため並列で処理 .github/workflows pull_request_check.yml
22 チェックごとにインストールと実行のステップがある プルリクエスト .github/workflows pull_request_check.yml Lint ソースコードの構文チェックなど 自動テスト SCA 使用ライブラリの脆弱性チェック
SAST セキュリティ観点の 静的コードチェック Job Job Job Job ツールのインストール 実行 ツールのインストール 実行 ツールのインストール 実行 ツールのインストール 実行 Step Step
23 各ツールのインストールを早くするためにキャッシュを利用する プルリクエスト Lint ソースコードの構文チェックなど 自動テスト SCA 使用ライブラリの脆弱性チェック SAST セキュリティ観点の
静的コードチェック Job Job Job Job ツールのインストール 実行 ツールのインストール 実行 ツールのインストール 実行 ツールのインストール 実行 Step Step Prepare キャッシュの作成 Job .github/workflows pull_request_check.yml
24 実際のGitHub Actionsの実行画面
25 ワークフローの起動条件 pull_request_check.yml
26 ジョブとステップ、そして並列実行と直列実行の見方 ⚫ ジョブはそれぞれ並行して動作します ⚫ ジョブの中のステップは上から順に直列で動作します ⚫ ジョブはそれぞれがコンテナで動作します ジョブにruns-onでubuntu-latestとコンテナイメージ の指定があるのはそれが理由です
pull_request_check.yml
27 ジョブ同士の順番の持たせ方 ⚫ ジョブはそれぞれ並行して動作しますが、 needs属性でジョブを指定することで、 そのジョブが終わってから開始するよう指定可能です ⚫ 例えば、並列でジョブを実行する前に、 各ジョブの共通ライブラリをインストールしてキャッシュ化 しておく使い方ができます
pull_request_check.yml
28 キャッシュの指定方法(キャッシュを作る側) asdfとuvを使っているのでこの2つのファイルを使ってキャッシュキーを 生成 sha256sum関数でファイルをハッシュ文字列化 指定したパスそのものがキャッシュ対象 (~/はカレントユーザーのホームディレクトリの意味) pull_request_check.yml
29 キャッシュの指定方法(キャッシュを使う側) キャッシュキーとキャッシュから復元したいパスを列挙 pull_request_check.yml 次のページから別の話題に移ります
GitHub Actionsによる 品質とセキュリティのチェック
31 CI/CDでできる品質チェック チェック内容 説明 Lint(静的解析) ソースコードの書式、関数同士が繋がっているかなど をチェックする 自動テスト いわゆるユニットテスト、E2Eテスト カバレッジ
自動テストでどの程度ソースコードをテストしたか計測 する手法 一般的に80%を超えれば一定品質を保てていると 言われる SCA 使用ライブラリに脆弱性がないかチェックする SAST SQLインジェクションなど、脆弱なソースコードが含ま れていないかチェックする
32 GitHub ActionsでLintを実行する ⚫ Lintのコマンドは、エラーがあるとエラーコードを返すので、その時点でGitHub Actionsのワークフローが中 断されます pyproject.toml pull_request_check.yml
33 GitHub Actionsで自動テストを実行する ⚫ 自動テストのコマンドは、エラーがあるとエラーコードを返すので、その時点でGitHub Actionsのワークフロー が中断されます pyproject.toml pull_request_check.yml
34 CI/CDでできるセキュリティチェック ⚫ SCA 使用ライブラリに脆弱性がないかチェックする GitHubにはDependabotというSCAツールがあります Dependabotは独立した機能でCI/CDには組み込みづらいので、今回はOSSの
SCAツールであるTrivyを用いた方法を紹介します ⚫ SAST SQLインジェクションなど、脆弱なソースコードが含まれていないかチェックする GitHubにはCodeQLというSASTツールがあります CodeQLの使用にはGitHub Advanced Securityの契約が必要な場合があるため、 今回はOSSのツールであるSemgrep(CE版)を使った方法を紹介します
35 SCAのイメージ パッケージ名 バージョン インストール元 numpy 1.26.4 PyPI pandas 2.2.3
PyPI requests 2.32.3 PyPI fastapi 0.115.0 PyPI uvicorn 0.31.0 PyPI 識別子 対象パッケージ 影響バー ジョン 深刻度 CVSSスコア CVE-2024- 12345 requests ~2.32.3 High 8.8 使用ライブラリ一覧 脆弱性データベース
36 脆弱性データベースのイメージ - CVEとNVDとJVN CVE 共通脆弱性識別子 NVD National Vulnerability Database
アメリカ国立標準技術研究所(NIST) JVN Japan Vulnerability Notes JPCERT/CCとIPAが共同で運営 連携 連携
37 GitHub ActionsでSCAを実行する trivy-config.yaml pull_request_check.yml
38 GitHub ActionsでSASTを実行する ⚫ Semgrepについては、有料版であればSASTに加えてSCAとしても動作させることができます ⚫ 今回はSemgrepの無料版(CE版)を用いた例なので、SemgrepをSASTとしてのみ使用しています pyproject.toml pull_request_check.yml 次のページから別の話題に移ります
GitHub Actionsからの AWSの操作 チェックという趣旨からは外れますが、ここからAWSへのデプロイについて触れます
40 GitHub ActionsからAWSを操作するにはOIDCを使用する GitHub Actions OIDC (OpenID Connect) AWS OIDCプロバイダ
IAMロール IAMロールの ARN ⚫ GitHub Docs - アマゾン ウェブ サービスでの OpenID Connect の構成 ⚫ Amazon AWS Documentation - IAM で OpenID Connect (OIDC) ID プロバイダーを作成する
41 AWSアカウントにOIDC用のプロバイダとIAMロールを作成しておく { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow",
"Principal": { "Federated": "arn:aws:iam::123456123456:oidc-provider/token.actions.githubusercontent.com" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringLike": { "token.actions.githubusercontent.com:sub": "repo:octo-org/octo-repo:*" }, "StringEquals": { "token.actions.githubusercontent.com:aud": "sts.amazonaws.com" } } } ] } IAMロールに設定するポリシー octo-org 組織に属する octo-repo リポジトリ内で実行されるすべて の GitHub Actions ワークフロー(=全ブランチ・全タグ・全PR)から 使用可能という意味
42 シークレットにOIDC用のIAMロールのARNを設定する pull_request_check.yml GitHubリポジトリの設定画面
43 GitHub ActionsでAWS CLIでデプロイを実行する pull_request_check.yml
44 GitHub ActionsのログをAIに分析させる このエラーログを生成AIに渡すと原因の 調査ができます
まとめ
46 まとめ ⚫ AIは、AI自身の持っている情報などの鮮度ゆえに、十分な品質を保っていないコー ドを出力することがあります ⚫ これに対しては、AIを介さない機械的なチェックの方が有効です ⚫ GitHub ActionsなどでCI/CDを組めば、レビュー前やデプロイ前に品質チェックを
入れることができます ⚫ 品質チェックに時間がかかりすぎると、無視されたり、コストが問題になる可能性があ るので、並列化やキャッシュを活用してみてください
None