シンクロ・フード開発部の小室です。
シンクロ・フードの開発部には、チームをまたいで特定テーマに取り組む「横串チーム」と呼ばれるプロジェクトチームの仕組みがあります。各チーム2週間に1度・2時間程度のペースでコツコツと改善活動に取り組んでおり、CI改善やマークアップの品質向上など、さまざまなテーマのチームが活動しています。IT統制チームもその1つで、輪読会を通じたIT統制の知識習得や、監査作業の効率化に取り組んでいます。
今回はこのIT統制チームでの取り組みとして、IT統制監査の対応の中で「証跡(エビデンス)収集」の作業を自動化した事例を紹介します。Webページのスクリーンショットを撮り、設計書をダウンロードし、所定のフォルダにアップロードする。1件1件は単純な作業ですが、件数が多いと地味に手間がかかります。この証跡収集作業をClaude Code(AIエージェント)とMCP(Model Context Protocol)を組み合わせて自動化しました。
IT統制監査と証跡収集
なぜ証跡収集が必要なのか
上場企業はJ-SOX法(金融商品取引法における内部統制報告制度)に基づき、内部統制の有効性について外部監査を受ける義務があります。このうちIT全般統制(ITGC)は、「システムの開発・保守」「システムの運用・管理」「アクセス管理」「外部委託管理」といった領域を対象とし、ITに関わるリスクが適切に管理されているかを評価するものです。
IT全般統制の監査では、大きく「整備評価」と「運用評価」の2段階があります。
整備評価は、リスクを低減するためのルールや仕組みが整備されているかを確認する段階です。たとえば、システム開発フローの規程が存在するか、本番データの変更に承認プロセスが定義されているかといった点を確認し、該当する規程やセキュリティ設定画面などのスクリーンショットを証跡として提出します。
運用評価は、整備されたルールが実際に守られているかを検証する段階です。評価対象期間中に実施された作業(開発案件や本番データ変更など)から母集団を特定し、そこからサンプルを抽出して、定められたプロセスに沿って運用されていたかを1件ずつ確認します。
サンプリングでは実在性・網羅性・期間帰属の適切性といった観点から適切に抽出する必要があり、現状は人の手で行っています。抽出した対象はExcelファイルにまとめ、これをもとに証跡を収集していきます。
たとえば、ある開発案件について「コードレビューが実施されていたか」「テストが完了しているか」「承認を経てリリースされたか」を確認するために、案件管理画面のスクリーンショット、設計書、Pull Requestのレビュー記録などを収集し、監査法人に提出します。
つまり、監査対応にはそれなりの数の証跡を正確に収集・整理する作業が必要になります。
証跡収集の課題
収集対象は多岐にわたります。
- 社内規程類のスクリーンショット
- 案件管理画面のスクリーンショット
- 設計書(Google Slides等)
- Pull Requestのスクリーンショット
- 本番データ変更管理画面のスクリーンショット
これらを1件ずつ「ページを開く → スクリーンショットを撮る → 所定のフォルダにアップロードする」という手順で処理していきます。単純作業の繰り返しですし、手作業では以下のようなリスクもあります。
- スクリーンショットの撮り忘れ
- ファイル名の付け間違い
- アップロード先フォルダの間違い
- 撮影時刻の記録漏れ
この定型的な作業を効率化できないか、というのが今回の取り組みのきっかけです。
Claude Code + MCPによる自動化
Claude CodeとMCPについて
今回の自動化で中心となっているのがClaude CodeとMCPです。
Claude Codeは、Anthropicが提供するAIエージェントツールです。ターミナル上で自然言語の指示を与えると、ファイルの読み書きやコマンドの実行を自律的に行ってくれます。たとえば「このExcelを解析して対象の案件を一覧にして」と指示すれば、適切なスクリプトを実行して結果を返してくれる、というイメージです。
MCP(Model Context Protocol)は、Claude Codeのようなツールに外部の機能を追加するための仕組みです。MCPに対応した「サーバー」を接続することで、Claude Code単体ではできない操作が可能になります。
今回はChrome DevTools MCPというMCPサーバーを利用しています。これを接続することで、Claude Codeからブラウザを直接操作できるようになります。ページを開く、JavaScriptを実行する、スクリーンショットを撮る、といった操作をAIが自動で行えるわけです。
全体としては、Claude Codeを中心に、ブラウザ操作はChrome DevTools MCP経由で、Excel解析やGoogle Driveへのアップロードといったファイル処理はPythonスクリプト+Docker経由で実行する構成です。
AIへの指示から証跡がGoogle Driveにアップロードされるまでの流れは、以下のとおりです。
sequenceDiagram
actor User as 作業者
participant CC as Claude Code
participant MCP as Chrome DevTools<br/>MCP
participant Py as Pythonスクリプト<br/>(Docker)
participant GD as Google Drive
User->>CC: スラッシュコマンド実行
CC->>Py: サンプリング結果のExcel解析
Py-->>CC: 収集対象の情報
loop 対象ごとに繰り返し
CC->>MCP: ページ表示・スクリーンショット取得
CC->>Py: 画像結合(ImageMagick)
opt 設計書リンクあり
CC->>Py: 設計書ダウンロード
end
end
CC->>Py: Google Driveへアップロード
Py->>GD: 証跡ファイル
具体的な実装
CLAUDE.mdとスキルによる作業手順の定義
今回のツールでは、Claude Codeの2つの仕組みを使って作業手順を定義しています。
CLAUDE.mdは、リポジトリ内に配置するとClaude Codeが自動的に読み込むマークダウンファイルです。ここにはスクリーンショットの撮影方式やGoogle Driveへのアップロード手順など、証跡収集全体に共通する作業手順を記述しています。
スキルは、よく使う作業フローをスラッシュコマンドとして定義する機能です。プロジェクトの .claude/skills/ ディレクトリ配下にスキルごとのディレクトリを作成し、その中にスキル定義ファイル(SKILL.md)を配置すると、Claude Code上で /スキル名 と入力するだけで定義済みの作業を開始できます。統制手続きの種類ごとに異なる部分(対象のExcel解析方法やファイル命名規則など)はスキルとして分離しています。
つまり、共通手順は CLAUDE.md に集約し、個別の手順はスキルに分けるという構成です。今回は以下のスキルを作成しました。
/gather-evidence-dev:開発案件の証跡収集
ソフトウェアの開発・変更手続きに関する統制の証跡を収集するスキルです。以下の一連の作業を自動で実行します。
- サンプリング結果のExcelファイルから収集対象の案件情報を読み取り
- 案件管理画面のスクリーンショットを取得
- 設計書(Google Slides)をダウンロード
- テスト記録ページのスクリーンショットを取得
- 案件の分類に応じてサブフォルダを分けてGoogle Driveにアップロード
/gather-evidence-data-change:本番データ変更の証跡収集
システム運用に関する統制の証跡を収集するスキルです。
- サンプリング結果のExcelファイルから収集対象のデータ変更情報を読み取り
- データ更新依頼の詳細画面のスクリーンショットを取得
- GitHub上のPull Requestレビュー記録のスクリーンショットを取得
Pull Requestページのスクリーンショットでは、折りたたまれたコメントを自動で展開したり、相対日時(「3 months ago」等)を絶対日時に変換するJavaScriptを実行してから撮影するなど、証跡として必要な情報を漏れなく記録する工夫もスキル内に組み込んでいます。
// GitHub Pull Requestの相対日時を絶対日時に変換するスクリプト () => { const nodes = [ ...document.getElementsByTagName("relative-time"), ...document.getElementsByTagName("time-ago"), ]; nodes.forEach((node) => { const datetimeAttr = node.getAttribute("datetime"); if (!datetimeAttr) return; const date = new Date(datetimeAttr); const datetimeStr = date.toLocaleString("ja-JP", { timeZone: "JST" }); node.innerHTML = datetimeStr; if (node.shadowRoot) { node.shadowRoot.innerHTML = datetimeStr; } }); return "datetime converted: " + nodes.length + " elements"; };
いずれのスキルも、ターミナルでスラッシュコマンドを実行するだけで一連の証跡収集が開始されます。
スクリーンショット取得の工夫:分割キャプチャ方式
証跡のスクリーンショットは、ページ全体を1枚の画像として保存する必要があります。Chrome DevTools MCPには fullPage オプションによる一発撮影の機能がありますが、iframe内のコンテンツ(社内サイトに埋め込まれた表など)がビューポート外でレンダリングされず空白になる問題がありました。また、Chromeには高さが16384pxを超えると正常にキャプチャを取得できない制限があり、長いページではこちらも問題になります。viewportをページ全体のサイズに設定する方式も試しましたが、同じ制限に該当するため対応できませんでした。
最終的に採用したのが 分割キャプチャ方式です。ページを一定の高さごとに分割し、各セグメントにスクロールしてからスクリーンショットを撮り、Docker上のImageMagickで1枚の画像に結合します。
lazy loading画像がスクリーンショットに含まれない問題はどの方式でも発生するため、事前にページ全体をスクロールして画像の読み込みをトリガーする処理を入れています。分割キャプチャ方式では、これに加えてスクロールに伴うヘッダー等のfixed/sticky要素の重複防止も必要になります。こうした対処の手順もすべて CLAUDE.md に含めています。
証跡としての信頼性を担保するため、撮影前にJavaScriptで撮影日時のオーバーレイをページ上に挿入する処理も組み込んでいます。
Google Driveへの自動アップロード
スクリーンショットの取得後、Google Driveへのアップロードも自動化しています。各証跡フォルダ内に設定ファイル(.drive_config.json)を配置し、アップロード先のGoogle DriveフォルダIDを管理しています。この設定ファイルはスキルの実行時にClaude Codeが自動で生成します。監査作業の管理Excelからアップロード先のフォルダIDを読み取り、証跡フォルダの作成と同時に .drive_config.json を配置する流れです。
導入の効果
このツールの導入により、以下の改善が得られました。
- 作業の効率化:1つの統制手続きの証跡収集(複数件のスクリーンショット取得からアップロードまで)を、AIへの1回の指示で完結できるようになった
- ヒューマンエラーのリスク低減:ファイル名の付与やアップロード先の振り分けといった細かい作業をAIが処理し、人間は最終確認に集中できるようになった
- 属人化の解消:作業手順がコードとして定義されており、スラッシュコマンド1つで実行できるため、担当者が変わっても同じ品質で証跡を収集できる
まとめ
IT統制監査の証跡収集は、正確さが求められる一方で作業内容は定型的であり、AIエージェントによる自動化と相性のよい業務です。
今回の取り組みのポイントを整理すると、以下のとおりです。
- Claude Code + Chrome DevTools MCPで、ブラウザ操作を含む証跡収集を自動化
- CLAUDE.mdとスキルで作業手順を定義し、再現性と保守性を確保
AIエージェントの活用というと大がかりな仕組みを想像するかもしれませんが、今回のケースではPythonスクリプトとMCPを組み合わせることで、比較的シンプルに実現できました。また、これらのPythonスクリプトやCLAUDE.md、スキル定義といったツール自体の構築にもClaude Codeを活用しています。やりたいことを自然言語で伝えながらコードや手順書を生成・修正していくことで、ツールの開発も効率的に進められました。
今回は証跡収集の自動化に取り組みましたが、今後、他の作業についてもClaude Codeを活用して効率化を検討していきたいと思っています。
定型的な業務の自動化を検討されている方の参考になれば幸いです。