生成系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サーバーを作成できます。
4. GitLab Duoでテストを生成する
ユニットテストは、生成されたコードの機能を検証する上で不可欠です。GitLab Duoの/tests
コマンドを使用して、直接Web IDE内でテストの提案を生成します。このコマンドは、具体的な側面(パフォーマンス、リグレッション、特定のフレームワークの使用など)に焦点を当てるために、指示を追加してカスタマイズできます。
Web IDEでの使用例:
- テストを生成したいコードを選択します。
/tests
コマンドを使用し、必要に応じて指示を追加します。
5. GitLab Duoチャットを使用してAI生成コードの問題を特定する
GitLab Duoチャットを使用して、AIが生成したコードのレビューと修正を行います。たとえば、Flask Webサーバーのコードにセキュリティ脆弱性がないか確認する場合は、以下のプロンプトを使用します。
プロンプト:このコードをレビューして、潜在的なセキュリティ脆弱性と依存関係の問題を検証してください。
GitLab Duoチャットを使用することで、上記のコード内の脆弱性を特定しやすくなります。
6. テストレポートを生成する
テストを実行した後、GitLab Pagesを使用してデプロイするテストレポートを生成します。
プロンプト:GitLab Pagesを使用してデプロイするテストレポートを生成するPythonスクリプトを作成してください。
ここでの処理内容は以下のとおりです。
- スクリプトは、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をご利用ください。