xlsgrep は、指定されたディレクトリ内の Excel ファイルを検索し、特定のキーワードを含むセルを抽出するツールです。このプロジェクトは、クリーンアーキテクチャの原則に基づいて設計されています。
SRC
│ main.py
│ main.py.bak
│ requirement.txt
│
├─domain
│ └─ search_result.py
├─infrastructure
│ └─ openpyxl_excel_reader.py
├─interfaces
│ └─ excel_reader.py
└─usecases
└─ search_excel_usecase.py
- 役割: アプリケーションのエントリーポイント。
- 責務:
- ユーザーから検索ディレクトリとキーワードを入力として受け取る。
- 依存性注入(DI)コンテナを使用して、ユースケース層(
SearchExcelUsecase)を初期化。 - ユースケース層を呼び出して検索結果を取得し、結果を表示する。
- 役割: ドメイン層のエンティティを定義。
- 責務:
- 検索結果を表現するデータ構造を提供。
- 検索結果には、ファイルパス、シート名、セルの内容が含まれる。
- 役割: インターフェース層。
- 責務:
- Excel ファイルを読み取るためのインターフェースを定義。
- 具体的な実装(例:
OpenPyxlExcelReader)に依存しない抽象化を提供。
- 役割: インフラ層。
- 責務:
openpyxlライブラリを使用して Excel ファイルを読み取る具体的な実装を提供。IExcelReaderインターフェースを実装。
- 役割: ユースケース層。
- 責務:
- 指定されたディレクトリ内の Excel ファイルを検索し、キーワードを含むセルを抽出。
- ファイル検索と行データの処理を行う。
- 役割: プロジェクトで使用する Python ライブラリを定義。
- 内容:
openpyxl: Excel ファイルを操作するためのライブラリ。dependency-injector: 依存性注入を実現するためのライブラリ。
このプロジェクトは、以下のクリーンアーキテクチャの原則に従っています:
-
依存性の逆転:
- ユースケース層(
SearchExcelUsecase)は、具体的な実装(OpenPyxlExcelReader)ではなく、インターフェース(IExcelReader)に依存しています。 - これにより、Excel リーダーの実装を簡単に差し替えることが可能です。
- ユースケース層(
-
責務の分離:
- ドメイン層(
SearchResult)、ユースケース層(SearchExcelUsecase)、インフラ層(OpenPyxlExcelReader)が明確に分離されています。 - 各層はそれぞれの責務に集中しており、コードの保守性が向上しています。
- ドメイン層(
-
依存性注入(DI)の活用:
AppContainerを使用して依存関係を管理しています。- これにより、テスト時にモックを注入するなど、柔軟な設計が可能です。
- 必要なライブラリをインストールします:
pip install -r requirement.txt
- アプリケーションを実行します:
python main.py
- プロンプトに従って、検索ディレクトリとキーワードを入力します。
- 検索結果が表示されます。