giftee Tech Blog

ギフティの開発を支えるメンバーの技術やデザイン、プロダクトマネジメントの情報を発信しています。

Hey Devin! セキュリティチェックの質問に答えて

サムネイル

こんにちは、エンジニアの egurinko です。ギフティではセキュリティチェック効率化への道などで紹介したように、あの手この手でセキュリティチェックへの回答の効率化を試みています。 今回はさらに Devin を用いて回答をさせる試みをご紹介します。

課題:セキュリティチェック対応が重い

プロダクトを作っていると、取引先などからセキュリティチェックシートへの回答願いが定期的にやってきます。質問は数が多かったり、似たような質問が来たりしますが、プロダクトごとに差異がある部分もあるため慎重に書く必要があります。

結果として、エンジニアや PdM が毎回手作業で回答するためかなり大きな負担となっています。

セキュリティチェックの難しいところ

会社とプロダクト固有の事情が混ざっている

セキュリティチェックの質問には、会社全体として共通の話とプロダクト固有の実装・運用の話が混在しています。ギフティでは会社標準のセキュリティチェックシートを用意していますが、これだけでは回答しきれない質問が必ず出てきます。

曖昧な質問が多い

セキュリティチェックでは、「適切に管理していますか?」「十分な対策を行っていますか?」のような、解釈の幅が広い質問も多くあります。このような質問に、推測で答えず、一般論で逃げず、実装と過去合意に基づいて答えるというのは、意外と神経を使います。

要件整理

今回やりたかったことはシンプルで、要件は以下でした。

  • Repository ごとにコードと過去の質疑応答を参照して答える
  • 知らないことは知らないと答える
  • エンジニア / PdM のどちらでも気軽に使える

やったこと:Devin に答えさせる

そこで、上記の要件を満たすために Devin を活用しました。回答例は以下になります。

回答例

しっかりと、コードベースを参照しつつ、過去の回答も根拠として提示してくれています。

Devin を使う理由

Devin が備えている機能だけで要件をカバーできました。

  • Repository ごとにコードもナレッジも管理できる
  • Slack から気軽に使える
  • ナレッジを整備するだけで使える

実際に使っている Repository 限定のナレッジ

以下が実際に使っているプロンプトの一部で、プロンプトの骨子も生成 AI に作ってもらっています。

# セキュリティチェック質問(取引先・監査・ベンダー質問票等)への回答
この Repository のコード、設定、ドキュメントと、Knowledge にある過去のセキュリティチェック質問と回答を唯一の一次情報源として、正確で監査に耐える回答を作成してください。目的は「事実に基づき、過去に社内で合意された表現を優先し、過不足のないセキュリティ回答文」を作ることです。

====================
■ 情報の優先順位
====================
1. この repository 内のコード・設定・ドキュメント
2. この knowledge にある過去回答集


※ 回答時は、1,2 の両方を必ず確認して両方に根拠があれば両方表示して
※ 上記に存在しない内容は「未確認」とし、推測や一般論で補完しないこと。


====================
■ 厳守ルール
====================
- 推測・断定禁止
  実装や設定で確認できないことは断定しない。
- 一般論禁止
  「一般的には」「通常は」などの表現は使わない。
- 秘密情報禁止
  シークレット値、内部 URL、認証情報、顧客固有情報は出力しない。
- 過去回答の踏襲
  同様の質問が過去 Q&A に存在する場合、文言・構成を可能な限り再利用する。
- 監査視点
  第三者(セキュリティ監査人)が読んでも根拠を追跡できる文章にする。


====================
■ 回答作成の手順
====================
1. 質問を以下の観点で分類する
   - データ管理(個人情報、保存、削除、ログ)
   - 認証・認可(認証方式、権限管理)
   - 暗号化(通信・保存)
   - 脆弱性管理(依存関係、スキャン、パッチ)
   - 開発プロセス(レビュー、CI/CD)
   - インシデント対応
   - 外部連携・委託


2. 根拠を探す
   - この repository 内のコード・設定・ドキュメント
   - この knowledge の過去回答集


3. 回答を構成する
   - 結論 → 根拠 → 補足 → 未確認事項 の順で簡潔に書く


====================
■ 出力フォーマット(厳守)
====================
質問ごとに以下の形式で出力する。


【回答】
(質問に対する結論を簡潔に記載)


【根拠】
- ファイルパスや設定名を箇条書きで明示
- 過去回答集の類似した質問を質問と回答のセットで明示


【補足】
- 運用上の条件、前提、例外があれば記載


【未確認/要確認】
- 実装・設定上、確認できない点がある場合のみ記載
- 確認すべきファイルや担当範囲を明示


====================
■ 書き方のトーン
====================
- 丁寧語
- セキュリティチェックシートにそのまま転記できる文体
- 不要に長くしない(1問あたり最大でも数段落)


====================
■ 重要な注意
====================
この repository に存在しないセキュリティ対策や、
組織全体の方針・他システムの実装を前提にした回答は行わないこと。


### 過去回答集
Q: アクセスログを取得しているか, A: Webサーバーへのアクセスログを取得しています。
....その他にもたくさん

使ってみてどうだったか

ナレッジを作っただけでかなり簡単に実現できましたが、根拠となるコードや過去質問の検索の質が非常に高く良い感じです。また、質問を複数一気に出しても、1 つずつ回答してくれるので、効率も悪くないです。

一方で、セキュリティチェックシートから Devin に質問したり、その回答を転記する必要もあるのがまだまだ面倒です。また、セキュリティチェックシートごとにフォーマットが違い、単に OK/NG と回答するものもあれば、文章で回答するものもあり、そのフォーマットの違いも吸収できるとさらに嬉しいです。

まとめ

今回は Devin でセキュリティチェックシート対応を効率化する話をしました。人が毎回同じように調べて、同じように悩んでいる作業は AI との親和性が高いなと、改めて思いました。同じようにセキュリティチェック対応で消耗している方の参考になれば幸いです。

ギフティでは、様々な形で生成 AI の利用を推進しています。AI 活用やエージェント開発に関心のある方は、ぜひお気軽にご連絡ください。

ギフティ採用ページを見てみる