GitLab機能紹介 #10「GitLab Duo」
こんにちは。SB C&Sの佐藤です。
本連載では開発サイクル全体を管理出来るプラットフォームである「GitLab」で使用される主な機能について解説していきます。
GitLabについてご存知ない、もしくは名前は知っているけれど具体的にどんな機能があるか気になる、そんな方におすすめの連載となっております。
最終回である第10回目はAIを活用した機能である「GitLab Duo」について解説します。
※今回このブログでは2024年4月現在の情報で書かせていただいております。最新情報については【GitLab Duo公式ドキュメント】をご参照ください。
GitLab Duo
GitLabは開発ライフサイクル全体をワンプラットフォームで管理出来るツールです。そしてその中の様々な機能に対しAIを活用した機能群をまとめて「GitLab Duo」と呼称しています。
「機能群」と称している通りGitLabでのAI活用は単純なコード生成に留まらず、チーム開発の「ちょっと面倒」を解決してくれたり、いつもの作業をより質の良いものに変えてくれたりする機能が多数存在します。
今回はその中から8個の機能をご紹介させていただきます。
Code Suggestions
生成AIによるコードアシスタント機能です。自然言語によるコード生成が可能となります。「AI×開発」という話題で最初に現れ、そして現在最も普及している機能ではないでしょうか。恐らくこのブログをご覧になっている方の中でも実際に試したことがある方も多数いらっしゃると思います。
コード生成を利用するメリットとしては、プログラミングスピード向上、言語学習、ペアプログラミングを容易に開始出来る、といった様々なものがあります。
GitLabでは組み込みIDEである「GitLab Web IDE」で使用出来る他、対象IDEにプラグインを組み込むことで利用可能となります。
言語に関してもPythonやjavaからTerraformまで、幅広くカバーしています。
その他詳細については下記を参照ください。
- 使用モデル:code-gecko、code-bison
- 対象IDE:GitLab WebIDE、VS Code、JetBrains IDE、Microsoft Visual Studio、Neovim
- 対象言語:下図参照(公式ドキュメントより引用)
Suggested Reviewers
マージリクエスト作成時にレビュー担当者を対象プロジェクトのメンバーから最大5人提案してくれます。メンバーの提案は「マージされる内容」と「プロジェクトへの貢献度(*)」を利用して行われます。
レビューは品質を高めるために大変重要な工程ですが、レビュー担当者の選定については人毎に固定、もしくは「手の空いている人」等、明確な基準なく選定される場合が殆どかと思われます。
GitLabではGitLab内に蓄積されたメンバーデータやプロジェクト状況データを利用して「レビューに最適である」と判断されたメンバーをアサインすることが可能になるため、コード品質の向上はもちろん、メンバーの業務量最適化にも効果を期待できます。
(*)GitLabアナライズ機能から抽出されるデータ
Discussion Summary
Issuesに紐づいたコメントを要約し、リストで表示(最大10個)してくれます。
工数が大きいIssuesや要件が曖昧なまま始まってしまったIssues(もちろんそういった状況にならないのが最善ですが)であるほど、ディスカッションが盛んになりコメント数は増加する傾向にあります。そんな中、要件に対する重要なコメントを探し出すのは一苦労ですし、議論途中の誤った情報を正と認識してしまう、といった経験がある方もいらっしゃるのではないでしょうか。
そんな中「Discussion Summary」はボタン1つで情報を要約してくれるため、議論の要点や焦点を把握するのに役立ちます。
Merge request Summary
マージリクエスト作成時にコードの変更内容からマージリクエストのDescriptionコメントを作成してくれます。
変更内容に対するコメントは要点を抑え、且つ簡潔に記入することが大切ですが、自然言語での記述が必要なため苦手とする開発者の方も多いのではないでしょうか。その結果レビュー担当者との間で認識齟齬が発生したり、口頭で追加の説明を行ったりという無駄な工数が発生する場合も多くあります。
「Merge request Summary」を使用すれば「コードの変更内容」からコメントを作成してくれるため、要点をしっかり押さえたコメントが出来上がります。
これをひな形とし、ここにコード変更だけでは伝えきれない内容(なぜそうする必要があったか)等を追記することで、読みやすく、伝わりやすいコメントをマージリクエストに記入することが可能です。
※英語での作成となります
Vulnerability Summary
アプリケーション内の脆弱性の内容を要約し、推奨される解決策を提示してくれます。
脆弱性の問題は昨今、メジャーライブラリにおける重大な脆弱性の発覚や攻撃手法の巧妙化により、大きな注目を浴びています。
脆弱性の放置はセキュリティホールに直結し、アプリケーションへの攻撃を許可してしまいます。ですが特に長期間脆弱性対策を行ってこなかったアプリケーションや、規模が大きなアプリケーションでは「脆弱性があるかどうか」を手動で探すのは至難の業です。そして1度確認したからといって安心することは出来ません。脆弱性は日々発見されていますし、ライブラリは開発において利用必須といえるため切っても切り離すことは出来ません。定期的、理想としては自動且つ高頻度で脆弱性スキャンが行われることが望まれます。
そして更に、発覚した脆弱性に対して瞬時に対応することが大切となります。ですがこれにはセキュリティアナリストのような専門知識が少なくなく必要となります。
GitLabの「Vulnerability Summary」では、元々存在していたCICDパイプラインによる脆弱性チェックに加え、発覚した脆弱性を要約し解決策まで提案、そしてその内容によるマージリクエストまで作成してくれます。
そのためセキュリティアナリストのみでなく開発者も脆弱性、悪用方法、および修正方法を理解する手助けとなり、脆弱性発覚から対処までの時間を大幅に短縮することが可能となります。
Test Generation
GitLab Duo Chatの機能を利用し、テストコードを作成してくれます。
テストコードの作成はCICDや保守の観点でも大変重要なポイントですが、記述にはパターン網羅等様々な思考が必要なため時間が掛かってしまいます。そのため取り組みが遅れてしまっている組織も多いのではないでしょうか。
「Test Generation」を利用すれば必要な個所のテストコードが提案される他、作成したテストの内容要約や別アプローチも提案されるため、より質の高いテストコードの作成が可能となります。
またAIはパターン網羅を得意とするためテストコードの作成に向いていると言えます。これにより時間短縮のみでなく、テストカバレッジの向上/担保にも寄与することが期待できます。
※作成されたテストコード
@Test public void testCalcRectangle_withNonZeroZ_returnsVolume() { JavaTest test = new JavaTest(); int result = test.calcRectangle(2, 3, 4); assertEquals(24, result); } |
@Test public void testCalcRectangle_withZeroZ_returnsArea() { JavaTest test = new JavaTest(); int result = test.calcRectangle(0, 3, 4); assertEquals(12, result); } |
@Test public void testCalcRectangle_withNegativeDimensions_returnsNegativeVolume() { JavaTest test = new JavaTest(); int result = test.calcRectangle(-2, -3, -4); assertEquals(-24, result); } |
その他、以下のような内容も出力してくれます。
Code Explanation
選択されたコードの内容を自然言語で説明してくれます。
この機能により他者が記述した複雑なコードや、慣れない言語やフレームワークで記述されたコードの内容を理解する時間を減少することが可能です。
GitLabではプログラミング担当者によるコーディング時の利用の他に、マージリクエストでも本機能を利用可能です。そのためレビュー対象のコードで理解出来ない部分がある場合、一旦Code Explanationで確認することが可能です。
もちろんAIによる出力ではあるので完全に信用するのではなく、内容によっては実際にコードを書いた担当者に追加で口頭で説明を受けることが推奨されますが、事前に概要を理解しておくことで質問や説明の時間を短縮出来るというメリットがあります。
Chat
GitLabのチャットは解説済みの「Code Explanation」や「Test Generation」でも使用される機能であり、コード解説やテスト生成といったプログラミングをアシストする機能に加え、GitLabの使い方に関する質問を行うことも可能です。
開発ライフサイクル全体に使用可能なため、開発生産性向上に大きく貢献します。
様々な使い道がありますが、代表的な使用例には以下のようなものがあります。
- GitLabの全体的な使い方に関する質問
- Issuesの内容を解説
- Epicの内容を解説
- コードの解説、プログラミング支援
- CICパイプライン構成の作成補助
- テストの生成
チャットではこれらの機能を自然言語での質問に加え、特定のコマンドによって使用することも可能です。(例:コードの説明⇒/explain)
※日本語での質問も可能ですが、英語で質問を行った方が回答精度は向上します
まとめ
AIを開発ライフサイクルに活用した機能である「GitLab Duo」について解説させていただきました。
人材不足や技術進化が激しいIT業界、こと開発という業務において、AIの活用は切っても切れない状態となっています。複数のツールを組み合わせてAI×開発環境を整えることも可能ですが、選定や管理運用のコストが大きくかかってしまいます。
GitLabを使用すれば1つのプラットフォームで開発ライフサイクル全体にAIを組み込むことが可能なうえに、既存のデータやコードを、データ連携なしで活用することが可能です。これはセキュリティ面でも大きなメリットとなります。AIの特性上、日本語に弱い部分もありますが、これは今後のアップデートに期待です。
今回紹介した以外にもGitLab Duoには様々な機能があり、日々アップデートがせれています。ぜひ【公式サイト】をご覧いただき、最新機能をチェックしてください。
また本記記事にて「GitLab機能紹介」連載は終了となります。お読みいただきありがとうございました。
本連載を通じてGitLabにご興味関心が沸かれましたら、ぜひSB C&Sまでお問い合わせください。
GitLabの特設サイトはこちら
GitLab特設サイトでは、GitLabの製品情報や
トライアル(無償試用版)をお申込みいただけます。
ぜひ、特設サイトをご確認ください。
この記事の著者:佐藤梨花
勤怠管理システムの開発(使用言語:Java)に約8年間従事。
現在はエンジニア時の経験を活かしたDevOpsやDX推進のプリセールスとして業務に精励しています。
DevOps Hubのアカウントをフォローして
更新情報を受け取る
-
Like on Facebook
-
Like on Feedly