😎
機密情報や個人情報を流出させずに生成AIのアウトプットのコピペ判定ができる簡易チェックツールのMVPをVibeCodingして用意してみる
機密情報や個人情報を流出させずに生成AIのアウトプットのコピペ判定ができる簡易チェックツールのMVPをVibeCodingして用意してみる
ClaudeCode、Codex、GeminiCLIなどで社内向けコピペチェックツールを開発するためのプロンプト準備してみました。
このプロンプトで、機密情報を外部に送信しない安全な社内コピペチェックツールを開発できるかも知れないです。
後ほど各ツール毎で生成されたコードの使用感などを確認してGitHubでの公開を目指したいと思います
デモ環境も用意できれば要検討
主な機能
1. ElasticSearch統合
- 日本語形態素解析(kuromoji)によるキーワード抽出
- ファジー検索・類似文書検索
- 高速インデックス検索とスコアリング
2. 将来のRAG対応準備
- ベクトル化対応インターフェース
- sentence-transformers統合準備
- セマンティック検索基盤
3. MCP対応アーキテクチャ
- プラグイン可能な判定エンジン
- 外部LLM統合インターフェース
- 拡張可能な分析機能
主なセキュリティ対策のポイント
1. 完全内製化
- 入力されたテキストは一切外部APIに送信しない
- 社内サーバーでの完結処理
2. ITリテラシー対応
- 直感的なUI/UX設計
- わかりやすい結果表示
- 詳しいヘルプ機能
3. 段階的開発
- まずMVP(最小機能版)で開始
- 運用しながら機能を拡張
補足提案
外部検索の代替案:
- 社内の過去文書データベース構築
- 業界標準文書・テンプレートのローカルデータベース
- 段階的にデータを蓄積し精度向上
運用フェーズ:
- 小規模部署でのテスト運用
- フィードバック収集・改善
- 全社展開
このアプローチで、セキュリティを保ちながら実用的なツールが構築できます。
開発開始方法
ClaudeCodeを利用する場合は以下のコマンドをターミナルで実行してください:
claude-code "ElasticSearchを統合した高度な社内コピペチェックツールを開発してください。Docker Compose環境、kuromoji日本語解析、キーワード自動抽出機能を含めて実装してください。まずは基本環境のセットアップから開始してください。"
技術的メリット
- セキュリティ: 完全社内完結
- 精度: ElasticSearchによる高速・高精度検索
- 拡張性: RAG/MCP対応の将来性
- 運用性: Docker環境による簡単デプロイ
将来の発展可能性
- 6ヶ月後: RAG統合でセマンティック検索
- 1年後: MCP統合で高度な自然言語判定
- 継続: 社内文書蓄積による精度向上
この構成により、現在の機密性要件を満たしつつ、最新のAI技術との統合も可能な、長期的に価値のあるシステムが構築できます。ElasticSearchによるキーワード検索は即座に大きな価値を提供し、RAG/MCP統合により将来的にはより高度な判定が可能になります。
【注意】 ここから先はClaude.mdなどのpromptです
強制的にMarkdownが閉じられてしまうので、後ほどVibeCodingの成果公開を含めた提供方法の見直し更新を行います(週末以降になりそう…)
# 社内コピペチェックツール開発用ClaudeCodeプロンプト
## 概要
機密情報を外部に送信せずに済む、社内向けコピペチェックツールを開発してください。
## 基本要件
### 1. アプリケーション構成
- **フロントエンド**: React + TypeScript
- **バックエンド**: Node.js + Express
- **データベース**: SQLite(メタデータ管理)
- **検索エンジン**: ElasticSearch + Kibana(キーワード検索・分析)
- **コンテナ**: Docker Compose(アプリ + ElasticSearch環境)
- **将来拡張**: RAG/MCP対応アーキテクチャ
### 2. セキュリティ要件
- **データの外部送信禁止**: 入力されたテキストは一切外部APIに送信しない
- **ログ管理**: チェック履歴の適切な管理(必要に応じて削除機能)
- **アクセス制御**: 社内ネットワークからのみアクセス可能
- **データ暗号化**: データベース内のテキストは暗号化保存
### 3. 機能要件
#### 3.1 基本機能
- テキスト入力フォーム(最大20,000文字)
- リアルタイム文字数カウント
- 文章の自動分割(句読点ベース、80文字以内)
- 手動分割指定(カンマ区切り)
- ファイルアップロード対応(.txt, .docx, .pdf)
#### 3.2 チェック機能
- **社内文書データベースとの照合**
- **以前にチェックされた文書との照合**
- **ElasticSearch による高速キーワード検索**
- **類似度判定アルゴリズム**(Levenshtein距離、N-gramベース)
- **結果の色分け表示**(完全一致:赤、高類似:オレンジ、中程度:黄色)
#### 3.3 キーワード抽出・検索機能
- **自動キーワード抽出**(TF-IDF、固有名詞、専門用語)
- **ElasticSearch インデックス作成**
- **ファジー検索**(誤字・表記ゆれ対応)
- **類似文書検索**(セマンティック検索準備)
- **検索結果スコアリング**
#### 3.4 管理機能
- 文書履歴管理
- 類似度しきい値設定
- 除外辞書設定(定型文、テンプレート除外)
- 統計レポート(月次、部署別)
### 4. UI/UX要件
- **直感的操作**: ITリテラシーが低くても使いやすい
- **レスポンシブデザイン**: PC・タブレット対応
- **処理状況表示**: プログレスバーと推定完了時間
- **結果の見やすさ**: 問題箇所のハイライト表示
## 実装指示
### Phase 1: 基本機能開発
```bash
# プロジェクト構成を作成してください
# - フロントエンド(React + TypeScript)
# - バックエンドAPI(Node.js + Express)
# - データベース設計(SQLite)
# - 基本的なUI/UX実装
Phase 2: ElasticSearch・キーワード抽出機能
# 高度な検索・分析機能を実装してください
# - ElasticSearch クラスター設定
# - 日本語形態素解析(kuromoji)
# - キーワード自動抽出エンジン
# - ファジー検索・類似文書検索
# - 検索結果スコアリング・ランキング
Phase 3: コピペチェック機能強化
# 文字列比較アルゴリズムを実装してください
# - 文章分割ロジック
# - 類似度計算(複数アルゴリズム対応)
# - データベース検索最適化
# - 結果表示ロジック
Phase 3: コピペチェック機能強化
# 複数アルゴリズムによる高精度チェックを実装してください
# - 文章分割ロジック(改良版)
# - ハイブリッド類似度計算
# - ElasticSearch統合検索
# - 結果統合・重み付けロジック
Phase 4: RAG/MCP対応準備
# 将来拡張のための基盤を実装してください
# - プラグインアーキテクチャ設計
# - ベクトル化準備(sentence-transformers対応)
# - MCP プロトコル対応インターフェース
# - 拡張可能な判定エンジン設計
Phase 5: セキュリティ・管理機能
# セキュリティ機能を実装してください
# - データ暗号化
# - アクセスログ
# - 管理画面
# - データ保持ポリシー設定
技術仕様
ElasticSearchスキーマ設計
// documents インデックス
{
"mappings": {
"properties": {
"id": {"type": "keyword"},
"title": {"type": "text", "analyzer": "kuromoji"},
"content": {"type": "text", "analyzer": "kuromoji"},
"keywords": {"type": "text", "analyzer": "kuromoji"},
"extracted_terms": {"type": "keyword"},
"department": {"type": "keyword"},
"created_at": {"type": "date"},
"document_hash": {"type": "keyword"},
"content_vector": {"type": "dense_vector", "dims": 384} // 将来のRAG対応
}
},
"settings": {
"analysis": {
"analyzer": {
"kuromoji": {
"tokenizer": "kuromoji_tokenizer",
"filter": ["kuromoji_baseform", "kuromoji_part_of_speech"]
}
}
}
}
}
データベーススキーマ
-- 文書テーブル
CREATE TABLE documents (
id INTEGER PRIMARY KEY,
title TEXT,
content_hash TEXT,
encrypted_content BLOB,
created_at DATETIME,
user_id TEXT,
department TEXT
);
-- チェック履歴テーブル
CREATE TABLE check_history (
id INTEGER PRIMARY KEY,
document_id INTEGER,
similarity_results JSON,
created_at DATETIME,
FOREIGN KEY (document_id) REFERENCES documents(id)
);
類似度判定アルゴリズム
# 実装すべきアルゴリズム例
1. 完全一致チェック
2. Levenshtein距離による類似度
3. Jaccard係数(N-gramベース)
4. コサイン類似度(TF-IDF)
5. ElasticSearch BM25スコア
6. ベクトル類似度(将来のRAG対応)
RAG/MCP対応アーキテクチャ設計
// 拡張可能なプラグインアーキテクチャ
interface DocumentProcessor {
extract(content: string): ExtractedData;
vectorize?(content: string): number[]; // RAG対応
analyze(content: string, context?: MCPContext): AnalysisResult;
}
interface MCPContext {
modelEndpoint?: string;
contextWindow?: number;
retrievalStrategy?: 'similarity' | 'keyword' | 'hybrid';
}
// 将来の拡張ポイント
class AdvancedCopyChecker {
async checkWithRAG(content: string): Promise<RAGResult> {
// 1. ベクトル化
// 2. 類似文書取得
// 3. LLM による判定
}
async checkWithMCP(content: string, mcpConfig: MCPContext): Promise<MCPResult> {
// MCP プロトコルによる高度な判定
}
}
キーワード抽出エンジン
// 実装すべき機能
class KeywordExtractor {
// 1. 形態素解析(kuromoji.js)
extractMorphemes(text: string): MorphemeResult[];
// 2. TF-IDF計算
calculateTFIDF(documents: Document[]): TFIDFResult[];
// 3. 固有名詞抽出
extractNamedEntities(text: string): NamedEntity[];
// 4. 専門用語抽出
extractTechnicalTerms(text: string, domain?: string): TechnicalTerm[];
// 5. ElasticSearchへの登録
async indexToElasticsearch(document: ProcessedDocument): Promise<void>;
}
設定可能なパラメータ
- 類似度判定しきい値(デフォルト:0.8)
- 文章分割の最大文字数(デフォルト:80)
- データ保持期間(デフォルト:1年)
- 除外する定型文パターン
デプロイメント要件
Docker構成
# docker-compose.yml
version: '3.8'
services:
app:
build: .
ports:
- "3000:3000"
environment:
- ELASTICSEARCH_URL=http://elasticsearch:9200
- DATABASE_PATH=/data/app.db
volumes:
- ./data:/data
depends_on:
- elasticsearch
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- discovery.type=single-node
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- xpack.security.enabled=false # 社内環境用
ports:
- "9200:9200"
volumes:
- es_data:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
ports:
- "5601:5601"
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
depends_on:
- elasticsearch
# 将来のRAG対応
vector-db:
image: qdrant/qdrant:latest
ports:
- "6333:6333"
volumes:
- qdrant_data:/qdrant/storage
# コメントアウトしておき、RAG実装時に有効化
volumes:
es_data:
qdrant_data:
本番環境向けセキュリティ設定
# マルチステージビルドでの最適化
# ElasticSearch セキュリティ設定
# 環境変数による設定管理
運用要件
- バックアップ: 日次自動バックアップ
- ログローテーション: 月次ログアーカイブ
- モニタリング: システム使用状況監視
- アップデート: 段階的デプロイ機能
追加考慮事項
1. パフォーマンス最適化
- 大量文書検索の高速化
- インデックス最適化
- キャッシュ機能
2. 拡張性
- 部署別権限管理
- 外部システム連携API
- プラグイン機能
- RAG統合準備(ベクトルDB、エンベッディング)
- MCP対応(Model Context Protocol)
- LLM統合インターフェース
3. 高度な検索・分析
- ElasticSearch アナリティクス
- キーワードトレンド分析
- 文書類似性ネットワーク
- セマンティック検索準備
3. ユーザビリティ
- ヘルプ機能
- チュートリアル
- ショートカットキー対応
開発の進め方
- 要件確認: 上記仕様で開発開始してよいか確認
- MVP開発: 基本機能のみで最小viable product作成
- 段階的機能追加: フィードバックを受けて機能拡張
- セキュリティ監査: 外部専門家による安全性確認
- 本番デプロイ: 段階的ロールアウト
想定される課題と対策
課題1: 外部検索なしでの精度
対策: 社内文書データベースの充実、継続的な学習機能
課題2: 大量データの処理速度
対策: 分散処理、インデックス最適化、キューイングシステム
課題3: ElasticSearchのリソース管理
対策: 適切なインデックス設計、定期的なメンテナンス、クラスター監視
課題4: 将来のRAG/MCP統合
対策: プラグインアーキテクチャ、疎結合設計、段階的機能追加
課題5: 日本語処理精度
対策: kuromoji形態素解析器、専門用語辞書、継続的チューニング
課題6: ユーザー教育
対策: 直感的UI、ヘルプ機能、定期的な使い方説明会
開始コマンド例:
# ClaudeCodeでの実行例
claude-code "ElasticSearchを統合した高度な社内コピペチェックツールを開発してください。キーワード自動抽出、ファジー検索、将来のRAG/MCP対応を見据えたプラグインアーキテクチャで実装してください。まずはDocker Compose環境とElasticSearchクラスターのセットアップから始めてください。"
# 段階的開発の場合
claude-code "Phase 1: Docker Compose + ElasticSearch + 基本UIの環境構築から開始してください。日本語対応のkuromoji設定も含めてください。"
将来のRAG/MCP統合ロードマップ
Phase A: RAG統合(6ヶ月後)
# 実装予定機能
- sentence-transformers による文書ベクトル化
- Qdrant/Weaviate ベクトルデータベース
- セマンティック類似検索
- 類似文書自動検出・分類
Phase B: MCP統合(1年後)
# 実装予定機能
- Claude/GPT との MCP接続
- 高度なコンテキスト理解による判定
- 自然言語による検索・分析
- インテリジェントな重複判定
Discussion