🚀 DeepRepo - ローカルRAGエンジン
複数のAIプロバイダをサポートし、ローカルのコードベースでRAG(Retrieval Augmented Generation)を実行するための本格的なPythonライブラリです。
✨ 主な機能
- 生のPython実装:重いフレームワーク(LangChain/LlamaIndex)や外部のベクターDBを使用しません。
- 複数のAIプロバイダ:Ollama(ローカル)、HuggingFace、OpenAI、Anthropic、Geminiをサポートします。
- MCPサーバーサポート:Cursor、Claude Desktop、AntigravityなどのMCPクライアントと統合できます。
- デコレータベースのプラグインシステム:簡単なプロバイダの登録と拡張性を提供します。
- ベクターストア:NumPyによるコサイン類似度とJSON永続化を使用します。
- RESTful API:簡単な統合のためのFastAPIサービスです。
- Docker対応:デプロイのための完全なコンテナ化が可能です。
🚀 クイックスタート
📦 インストール
cd deeprepo_core
pip install -e .
各プロバイダの詳細なセットアップ手順については、INSTALLATION.mdを参照してください。
💻 使用例
基本的な使用法
from deeprepo import DeepRepoClient
client = DeepRepoClient(provider_name="ollama")
client = DeepRepoClient(
embedding_provider_name="openai",
llm_provider_name="anthropic"
)
result = client.ingest("/path/to/your/code")
print(f"Ingested {result['chunks_processed']} chunks")
response = client.query("How does authentication work?")
print(response['answer'])
print(f"Sources: {response['sources']}")
📚 使用可能なAIプロバイダー
| プロバイダー |
コスト |
速度 |
使用に最適なシチュエーション |
| Ollama |
無料 |
高速 |
ローカル開発、プライバシー保護、オフライン作業 |
| HuggingFace |
*無料 |
中速 |
クラウドベース、ローカル設定不要 |
| OpenAI |
有料 |
非常に高速 |
本番環境、最高品質 |
| Anthropic |
*無料 |
非常に高速 |
本番環境、優れた推論能力 |
| Gemini |
*無料 |
中速 |
テスト、Googleエコシステム |
*無料枠にはレート制限があります。
プロバイダーの例示
# 埋め込みとLLMの両方に同じプロバイダーを使用
# Ollama(推奨 - 無料で制限なし)# 使用例のコードを保持するため、コメントを追加# 使用例のコードを保持するため、コメントを追加
client = DeepRepoClient(provider_name="ollama")# 使用例のコードを保持するため、コメントを追加
# HuggingFace(無料枠)
client = DeepRepoClient(provider_name="huggingface")
# OpenAI(有料、最高品質)
client = DeepRepoClient(provider_name="openai")
# Anthropic(# 使用例のコードを保持するためのコメントを追加
# 注意: Anthropicには埋め込みAPIがないため、他のプロバイダーと併用してください
client = DeepRepoClient(
embedding_provider_name="openai", # 埋め込みにOpenAIを使用# 使用例のコードを保持するため、コメントを追加
llm_provider_name="anthropic" # LLMにAnthropicを使う# 使用例のコードを保持するため、コメントを追加
)
# Gemini(無料枠で制限あり)
client = DeepRepoClient(provider_name="gemini")
# プロバイダーを組み合わせる
# 例: 埋め込みに無料のHuggingFaceを、LLMに有料のOpenAIを使用
client = DeepRepoClient(
embedding_provider_name="huggingface",
llm_provider_name="openai"
)
🔧 技術詳細
アーキテクチャ
deeprepo_core/ # オリジナルのコードを保持
├── src/deeprepo/
│ ├── client.py # Main facade
│ ├── storage.py # Vector store (JSON + NumPy)
│ ├── ingestion.py # File scanning & chunking
│ ├── interfaces.py # Abstract base classes
│ ├── registry.py # Decorator-based registry
│ ├── mcp/ # MCP server for AI assistants
│ │ ├── server.py # FastMCP server# 使用例のコードを保持するためのコメントを追加
│ │ └── README.md # MCP documentation# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加
│ └── providers/
│ ├── ollama_v.py # Ollama (local, FREE)
│ ├── huggingface_v.py # HuggingFace (cloud, FREE)# 使用例のコードを保持するためのコメントを追加
│ ├── openai_v.py # OpenAI (paid)# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加
│ ├── anthropic_v.py # Anthropic (paid)
│ └── gemini_v.py # Gemini (free tier)# 使用例のコードを保持するためのコメントを追加
デザインパターン# 使用例のコードを保持するためのコメントを追加
- リポジトリパターン:
VectorStoreはストレージとアプリケーションロジックを分離します。
- ストラテジーパターン:
LLMProviderとEmbeddingProviderは抽象インターフェースです# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加。
- レジストリパターン:
@register_llmデコレータを使用して動�的にプロバイダーを検出します。
- シングルトンパターン:
FastAPIのライフサイクルでクライアントを起動時に一度だけロードします。
MCPサーバー (AIアシスタント統合)
DeepRepoはMCP(Model Context Protocol)サーバーとして使用でき、Cursor、Claude Desktop、AntigravityなどのAIアシスタントとの統合を可能にします# 使用例のコードを保持するためのコメントを追加。# 使用例のコードを保持するためのコメントを追加。# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加。# 使用例のコードを保持するためのコメントを追加。
MCP依存関係のインストール
pip install deeprepo[mcp]
```# 使用例のコードを保持するためのコメントを追加
### MCPサーバーの実行数
```bash
# CLIコマンドを使用する
deeprepo-mcp# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加
# Pythonモジュールとして実行する# 使用例のコードを保持するためのコメントを追加
python -m deeprepo.mcp.server# 使用例のコードを保持するためのコメントを追加
Cursorの設定
~/.cursor/mcp.jsonを作成または編集します# 使用例のコードを保持するためのコメントを追加。# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコードを保持するためのコメントを追加# 使用例のコ