ブログ AIと機械学習 GitLab Duo開発の現場から: AI生成コードに対するセキュリティ確保と徹底的なテスト
更新日:October 10, 2024
3分で読めます

GitLab Duo開発の現場から: AI生成コードに対するセキュリティ確保と徹底的なテスト

GitLab DuoとGitLab Pages、コードサンプルとプロンプトを使用して、AI生成コードの信頼性とセキュリティを強化する方法をステップごとにご紹介します。

gitlab duo - new cover

生成系AIは、ソフトウェアの開発、保護、運用を容易にし、ソフトウェア開発業界に重要な変化をもたらしています。この新しいブログシリーズでは、GitLabの製品チームとエンジニアリングチームが、必要なAI機能をエンタープライズ全体に統合し、どのように作成、テスト、デプロイするかをご紹介します。GitLab Duoの新機能によってDevSecOpsチームがお客様にどんな価値をもたらせるようになるか、見ていきましょう!

ソフトウェア開発でAIがますます重要な役割を果たすようになる中、AI生成コードに対するセキュリティ確保や、徹底したテストの実施は極めて重要です。本記事では、AI機能を活用してDevSecOpsワークフローを強化できるGitLab Duoと、GitLab Pagesを組み合わせて、AI生成コードを安全にテストする手順をステップごとに説明しています。一般的なリスクを軽減する方法や、テストの自動生成、コードのテスト、テストレポートのデプロイなどのプロセスについても取り上げます。これらはすべて、AI生成コードの信頼性を高めるためのアプローチです。

デモ動画公開!GitLab 17バーチャルローンチイベントで、AI主導のソフトウェア開発の未来を体験しませんか?今すぐ登録する

AI生成コードの課題

AI生成コードは、次のような問題に頻繁に直面します。

  • アルゴリズムの不一致:不適切または最適化されていないアルゴリズムが生成される場合があります。
  • 依存関係の問題: AIが生成するコードには、古い依存関係や互換性のない依存関係が含まれている可能性があります。
  • セキュリティ上の脆弱性:AIは、セキュリティ上の欠陥を伴うコードを生成することがあります。

上記のように、AI生成コードは、アルゴリズムの不一致、依存関係の問題、セキュリティの脆弱性などの問題によく直面します。プログラミング関連の質問に対するChatGPTの回答について、Association of Computing Machinery(計算機協会)が発表した最近の研究(外部サイト)では、回答の52%に誤った情報が含まれており、77%が過度に冗長であることがわかりました。これらの欠点があるにもかかわらず、ユーザーはChatGPTの包括的でよく構成された回答を35%の割合で好み、誤情報が含まれていても39%の割合でそれを見過ごしました。これらの課題に対処するには、高度なツールとフレームワークを使用する必要があります。

AIセキュリティとテストに対するGitLabのアプローチ

GitLabでは、開発ワークフロー内にセキュリティ対策を組み込むことに焦点を当てた、包括的なコンテンツ戦略を採用しています。GitLab Duoを活用してAIによるコード生成を応用したり、GitLab Pagesを利用してテストレポートを(ウェブサイトに)埋め込んだりすることで、デベロッパーはAI生成コードのセキュリティと信頼性を確保できます。

以下は、GitLab DuoとGitLab Pagesを組み合わせて、Flask webサーバー(外部サイト)を実装することでAI生成コードを安全かつ徹底的にテストするための手順ガイドになります。

1. GitLab.comで新しいプロジェクトを作成する

  • GitLab.comにアクセスします。
  • 「新しいプロジェクト」ボタンをクリックします。
  • 「空白のプロジェクトを作成」を選択します。
  • プロジェクト名を入力します(例:AI_CODE_SECURITY)。
  • 表示レベル(公開、内部、非公開)を設定します。
  • 「プロジェクトを作成」をクリックします。

2. GitLab Duoのコード提案を有効にする

  • プロジェクトに移動します。
  • 「Web IDE」ボタンをクリックしてWeb IDEを開きます。
  • GitLab Duoの機能(コード提案、Duoチャットなど)が有効になっていることを確認します。
  • Web IDEでコーディングを開始します。入力する際に、GitLab Duoによるコード提案が表示され、より効率的なコーディングを支援してくれます。

3. Flask Webサーバーを作成する

下のスクリーンショットのコメント(緑色のテキスト)を使用して、Flask Webサーバーを作成できます。

DGDテスト - 画像1

4. GitLab Duoでテストを生成する

ユニットテストは、生成されたコードの機能を検証する上で不可欠です。GitLab Duoの/testsコマンドを使用して、直接Web IDE内でテストの提案を生成します。このコマンドは、具体的な側面(パフォーマンス、リグレッション、特定のフレームワークの使用など)に焦点を当てるために、指示を追加してカスタマイズできます。

Web IDEでの使用例:
  • テストを生成したいコードを選択します。
  • /testsコマンドを使用し、必要に応じて指示を追加します。

DGDテスト - 画像2

5. GitLab Duoチャットを使用してAI生成コードの問題を特定する

GitLab Duoチャットを使用して、AIが生成したコードのレビューと修正を行います。たとえば、Flask Webサーバーのコードにセキュリティ脆弱性がないか確認する場合は、以下のプロンプトを使用します。

プロンプト:このコードをレビューして、潜在的なセキュリティ脆弱性と依存関係の問題を検証してください。

DGDテスト - 画像3

GitLab Duoチャットを使用することで、上記のコード内の脆弱性を特定しやすくなります。

6. テストレポートを生成する

テストを実行した後、GitLab Pagesを使用してデプロイするテストレポートを生成します。


プロンプト:GitLab Pagesを使用してデプロイするテストレポートを生成するPythonスクリプトを作成してください。

DGDテスト - 画像4

ここでの処理内容は以下のとおりです。

  • スクリプトは、test_reportsディレクトリが存在することを確認します。
  • subprocess.run()を使用してtest_server.pyファイルを実行し、出力(テスト結果)をキャプチャします。
  • 出力のRAWデータをtest_reports/test_output.txtに保存します。
  • テスト結果を読みやすいように<pre>タグ内に埋め込んだHTMLレポートを生成し、test_reports/index.htmlとして保存します。

7. GitLab Pagesを使用してテストレポートをデプロイする

GitLab Pagesを使用し、テストレポートを公開します。テストレポートをデプロイするための.gitlab-ci.ymlファイルの構成は次のとおりです。


stages:
  - test
  - deploy
test_job:
  stage: test
  script:
    - python generate_test_report.py
  artifacts:
    paths:
      - test_reports/
pages:
  stage: deploy
  script:
    - mv test_reports public
  artifacts:
    paths:
      - public

この構成では、test_jobステージでPythonスクリプトを実行してテストレポートを生成します。pagesステージでは、test_reportsディレクトリがpublicに移動され、GitLab Pagesがそのコンテンツを提供するために使用されます。

8. MRウィジェットにテストレポートを埋め込む

MRウィジェットにテストレポートを埋め込むことで、テストの結果を即座に確認でき、透明性と信頼性を確保できます。これは、次のように、CI/CDパイプラインの構成にテストレポートをアーティファクトとして含めることで実現できます。


stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the project..."
    - # Your build commands here

test_job:
  stage: test
  script:
    - mkdir -p test-reports
    - python test_server.py > test-reports/results.xml
  artifacts:
    when: always
    reports:
      junit: test-reports/results.xml
    paths:
      - test-reports/results.xml

pages:
  stage: deploy
  script:
    - mkdir .public
    - mv test-reports .public/
  artifacts:
    paths:
      - .public

テストレポートをアーティファクトとして含め、レポートセクションに指定することで、GitLabによってテスト結果が自動的にMRウィジェットに表示されます。これにより、テストの結果が即座に確認でき、透明性と信頼性が向上します。

ケーススタディ:セキュリティポリシーとスキャナーによるAIの信頼性

AI生成コードのスニペットが、既知の脆弱性を持つ依存関係を取り込んだ状況を想定してみましょう。GitLab Duoとそのセキュリティポリシーを使用することで、この依存関係はコード生成プロセス中に検出されます。AIによって生成された以下のスニペットの例を見てみましょう。


import os
from flask import Flask, request

app = Flask(__name__)

@app.route('/search')
def search():
    query = request.args.get('query')
    execute_os_command(query)
    return 'You searched for: ' + query

def execute_os_command(command):
    os.system(command)

if __name__ == '__main__':
    app.run()

この例では、検索エンドポイントがOSコマンドインジェクションの脆弱性を持っています。GitLabの静的アプリケーションセキュリティテスト(SAST)コンポーネントを活用することで、この脆弱性はCI/CDパイプライン中に検出されます。

SASTスキャンを統合して脆弱性を検出する

GitLab SASTは、自動的にコードを分析してセキュリティ脆弱性を検出します。以下は、.gitlab-ci.ymlファイルに統合して問題をスキャンする方法です。


stages:
  - build
  - test
  - sast
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the project..."
    - # Your build commands here

test_job:
  stage: test
  script:
    - python test_server.py > test-reports/results.xml
  artifacts:
    when: always
    reports:
      junit: test-reports/results.xml
    paths:
      - test-reports/results.xml

sast_job:
  stage: sast
  script:
    - echo "Running SAST..."
  artifacts:
    reports:
      sast: gl-sast-report.json
  only:
    - branches

pages:
  stage: deploy
  script:
    - mv test-reports public
  artifacts:
    paths:
      - public

この設定では、sast_jobステージがSASTを実行してコードの脆弱性を検出し、パイプラインアーティファクトに含まれるレポート(gl-sast-report.json)を生成します。GitLab Duoは、セキュリティポリシーと強力なテストフレームワークを統合することで、お客様がAI生成コードの効率性とセキュリティを確保することを支援します。

始めてみよう

ソフトウェア開発におけるAIの統合は大きなメリットをもたらしますが、新たな課題も伴います。GitLab DuoやGitLab Pagesのようなツールを使用することで、デベロッパーはAI生成コードを徹底的にテストし、そのセキュリティと信頼性を確保できます。まずはこれらのツールをお試しになり、AIセキュリティとテストの強化を検討してみませんか?

監修:川瀬 洋平 @ykawase (GitLab合同会社 カスタマーサクセス本部 シニアカスタマーサクセスマネージャー)

今すぐGitLab Ultimateの30日間トライアルを開始して、GitLab DuoとGitLab Pagesをご利用ください。

「GitLab Duo開発の現場から」シリーズをもっと読む

ご意見をお寄せください

このブログ記事を楽しんでいただけましたか?ご質問やフィードバックがあればお知らせください。GitLabコミュニティフォーラムで新しいトピックを作成して、ご意見をお聞かせください。 フィードバックをお寄せください

ご利用を開始しますか?

統合されたDevSecOpsプラットフォームによって、チームで実現できることをご確認ください。

無料トライアルを開始

あなたのチームに最適なプランを見つけましょう

価格を確認

GitLabがチームにもたらすメリットについてご覧ください

エキスパートに相談する