Upgrade to Pro — share decks privately, control downloads, hide ads and more …

人間とAI、どちらが書いたコードもCICDでチェックしてみよう

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

 人間とAI、どちらが書いたコードもCICDでチェックしてみよう

Avatar for Satoshi Kaneyasu

Satoshi Kaneyasu

February 24, 2026
Tweet

More Decks by Satoshi Kaneyasu

Other Decks in Programming

Transcript

  1. 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
  2. 6 Vibe Codingの課題 ⚫ Vibe Coding とはAIに自然言語で指示を与えて開発するスタイルを 指します。 ⚫ 一般的にチャットで会話しながら開発するので、

    同じ成果物を得るには会話を再現する必要があります。 (対策となるテクニックは存在しますが本筋から離れるので割愛します) このやり取りを丸ごと再現しないと、 同じ成果物を得るのは難しい
  3. 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という条件はなかったはずだが・・・
  4. 10 なぜこのようなことが起きるのか? • A-1を実装する • A-2を実装する • A-3を実装する • B-1を実装する

    • B-2を実装する • B-3を実装する • C-1を実装する • C-2を実装する • C-3を実装する • 実装したプログラムをチェックして、エラーと警告をゼロにする 実装計画 実装計画に含まれる 作業が多すぎる • チェックを最後にまとめてやってしまっている • AIも溜めてからの最後に一気にテストやチェックはやりきれないことがある
  5. 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 使用ライブラリ一覧 脆弱性データベース
  6. 15 CI/CDツールはどれが良いのか? CI/CDツール 難易度 AWSとの連携しやすさ 変更のしやすさ GitHub Actions 低 中

    中 GitLab CI/CD 中 中 中 AWS CodePipeline 高 高 低 ⚫ 開発時のチェックなどにはGitHub Actionsが扱いやすく向いています ⚫ AWS CodePipelineは、デプロイ直前の水際チェックに向いています 次のページから別の話題に移ります
  7. 17 GitHubのプルリクエストとGitHub Actionsによるチェック develop feature/実装計画 feature/実装 要件定義、設計書、実装計画 プルリクエスト プルリクエスト ソースコード

    ⚫ GitHubには、成果物のレビューを依頼するプルリクエストという機能があります ⚫ プルリクエストは、プルリクエストができた時にGitHub Actionsで自動チェックを 挟むことが可能で、チェックをした上でレビューすることが可能です
  8. 18 GitHubのプルリクエストとGitHub Actionsによるチェック develop feature/実装計画 feature/実装 要件定義、設計書、実装計画 プルリクエスト プルリクエスト ソースコード

    ⚫ GitHubには、成果物のレビューを依頼するプルリクエストという機能があります ⚫ プルリクエストは、プルリクエストができた時にGitHub Actionsで自動チェックを 挟むことが可能で、チェックをした上でレビューすることが可能です • マークダウンの構文チェック • スペルミスチェック • 自動テスト • プログラムの構文エラー、 警告チェック
  9. 21 今回作成するチェック内容 プルリクエスト Lint ソースコードの構文チェックなど 自動テスト SCA 使用ライブラリの脆弱性チェック SAST セキュリティ観点の

    静的コードチェック Job Job Job Job チェックを早く終わらせるため並列で処理 .github/workflows pull_request_check.yml
  10. 22 チェックごとにインストールと実行のステップがある プルリクエスト .github/workflows pull_request_check.yml Lint ソースコードの構文チェックなど 自動テスト SCA 使用ライブラリの脆弱性チェック

    SAST セキュリティ観点の 静的コードチェック Job Job Job Job ツールのインストール 実行 ツールのインストール 実行 ツールのインストール 実行 ツールのインストール 実行 Step Step
  11. 23 各ツールのインストールを早くするためにキャッシュを利用する プルリクエスト Lint ソースコードの構文チェックなど 自動テスト SCA 使用ライブラリの脆弱性チェック SAST セキュリティ観点の

    静的コードチェック Job Job Job Job ツールのインストール 実行 ツールのインストール 実行 ツールのインストール 実行 ツールのインストール 実行 Step Step Prepare キャッシュの作成 Job .github/workflows pull_request_check.yml
  12. 31 CI/CDでできる品質チェック チェック内容 説明 Lint(静的解析) ソースコードの書式、関数同士が繋がっているかなど をチェックする 自動テスト いわゆるユニットテスト、E2Eテスト カバレッジ

    自動テストでどの程度ソースコードをテストしたか計測 する手法 一般的に80%を超えれば一定品質を保てていると 言われる SCA 使用ライブラリに脆弱性がないかチェックする SAST SQLインジェクションなど、脆弱なソースコードが含ま れていないかチェックする
  13. 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版)を使った方法を紹介します
  14. 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 使用ライブラリ一覧 脆弱性データベース
  15. 36 脆弱性データベースのイメージ - CVEとNVDとJVN CVE 共通脆弱性識別子 NVD National Vulnerability Database

    アメリカ国立標準技術研究所(NIST) JVN Japan Vulnerability Notes JPCERT/CCとIPAが共同で運営 連携 連携
  16. 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 プロバイダーを作成する
  17. 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)から 使用可能という意味