# 🔍 DNSweeper CLI

[![Test](https://github.com/Kazu-dnssweeper/dnssweeper-cli/workflows/Test/badge.svg)](https://github.com/Kazu-dnssweeper/dnssweeper-cli/actions?query=workflow%3ATest)
[![CI](https://github.com/Kazu-dnssweeper/dnssweeper-cli/workflows/CI/badge.svg)](https://github.com/Kazu-dnssweeper/dnssweeper-cli/actions?query=workflow%3ACI)
[![npm version](https://img.shields.io/npm/v/dnssweeper-cli.svg)](https://www.npmjs.com/package/dnssweeper-cli)
[![npm downloads](https://img.shields.io/npm/dm/dnssweeper-cli.svg)](https://www.npmjs.com/package/dnssweeper-cli)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Node.js Version](https://img.shields.io/node/v/dnssweeper-cli.svg)](https://nodejs.org/)
[![Security Policy](https://img.shields.io/badge/Security-Policy-blue.svg)](SECURITY.md)

未使用のDNSレコードを検出・分析するコマンドラインツール

## 🎯 概要

DNSweeper CLIは、CloudflareなどのDNSサービスからエクスポートしたCSVファイルを分析し、未使用の可能性が高いDNSレコードを検出するツールです。

### 主な機能

- 📊 **パターンマッチング分析**: 危険なプレフィックス・サフィックス・キーワードを検出
- 🎨 **色付き出力**: リスクレベル別に色分けされた見やすい表示
- 📋 **複数出力形式**: table、JSON、CSV形式での出力
- 🌐 **多言語対応**: 日本語・英語の両方に対応
- ⚡ **高速処理**: 大規模なCSVファイルも効率的に処理
- 🔒 **読み取り専用**: 安全な分析（レコードの削除・変更は行わない）

## 🚀 インストール

### npm経由でのインストール

```bash
npm install -g dnssweeper-cli
```

### 直接実行（npx）

```bash
npx dnssweeper-cli analyze your-dns-records.csv
```

## 📊 リスクレベル

DNSweeper CLIは以下の5段階でリスクを評価します：

| レベル | スコア範囲 | 説明 | 表示色 |
|--------|------------|------|--------|
| 🔴 Critical | 90-100 | 即座に削除を検討すべきレコード | 赤 |
| 🟠 High | 70-89 | 削除の検討を推奨するレコード | オレンジ |
| 🟡 Medium | 50-69 | 注意が必要なレコード | 黄 |
| 🟢 Low | 30-49 | 軽微な注意点があるレコード | 緑 |
| ⚪ Safe | 0-29 | 問題のないレコード | グレー |

## 📖 使用方法

### 基本的な使用法

```bash
# CSVファイルを分析
dnssweeper analyze dns-records.csv

# 詳細な出力
dnssweeper analyze dns-records.csv --verbose

# 英語モードで実行
dnssweeper analyze dns-records.csv --english
```

### 出力形式の指定

```bash
# テーブル形式（デフォルト）
dnssweeper analyze dns-records.csv --output table

# JSON形式
dnssweeper analyze dns-records.csv --output json

# CSV形式
dnssweeper analyze dns-records.csv --output csv
```

### リスクレベルフィルタリング

```bash
# 高リスク以上のレコードのみ表示
dnssweeper analyze dns-records.csv --risk-level high

# クリティカルなレコードのみ表示
dnssweeper analyze dns-records.csv --risk-level critical
```

### 結果をファイルに保存

```bash
# 分析結果を運用フロー対応CSVファイルに保存
dnssweeper analyze dns-records.csv --output-file results.csv
```

## 🛠️ オプション

| オプション | 短縮形 | 説明 | デフォルト値 |
|-----------|--------|------|-------------|
| `--output` | `-o` | 出力形式 (table/json/csv) | `table` |
| `--verbose` | `-v` | 詳細な出力を表示 | `false` |
| `--english` | `-e` | 英語モードで実行 | `false` |
| `--risk-level` | `-r` | 指定リスクレベル以上のレコードのみ表示 | なし |
| `--output-file` | `-f` | 結果をファイルに保存 | なし |
| `--help` | `-h` | ヘルプメッセージを表示 | - |
| `--version` | `-V` | バージョンを表示 | - |

## 🎨 出力例

### テーブル形式（デフォルト）

```
🔍 DNSweeper CLI - DNS レコード分析ツール

📊 分析結果サマリー
総レコード数: 150
処理時間: 0.05秒

🎯 リスク分布:
🔴 Critical: 2件 (1.3%)
🟠 High: 8件 (5.3%)
🟡 Medium: 15件 (10.0%)
🟢 Low: 25件 (16.7%)
⚪ Safe: 100件 (66.7%)

📋 詳細分析結果
┌─────────────────────────────────────┬─────────┬─────────┬────────────┬─────────────────────────────────────┐
│ Name                                │ Type    │ Risk    │ Score      │ Reason                              │
├─────────────────────────────────────┼─────────┼─────────┼────────────┼─────────────────────────────────────┤
│ old-api.example.com                 │ A       │ 🔴 Critical │ 95        │ 危険なプレフィックス「old-」が検出   │
│ test-server.example.com             │ A       │ 🟠 High     │ 80        │ 危険なプレフィックス「test-」が検出  │
└─────────────────────────────────────┴─────────┴─────────┴────────────┴─────────────────────────────────────┘

✅ 実行完了: 0.05秒
```

## 🔧 対応するCSV形式

DNSweeper CLIは以下の形式のCSVファイルに対応しています：

### Cloudflare形式（推奨）

```csv
Name,Type,Content,TTL,Proxied,Created,Modified
example.com,A,192.168.1.1,300,false,2024-01-01,2024-01-01
www.example.com,CNAME,example.com,300,true,2024-01-01,2024-01-01
```

### 必須フィールド

- `Name`: DNSレコード名
- `Type`: レコードタイプ（A、AAAA、CNAME、MX、TXT、SRV、PTR、NS）
- `Content`: レコードの値
- `TTL`: Time To Live

## 🗓️ 月次DNS棚卸しガイド

### 段階的ハイブリッド方式での運用フロー

#### Phase 1: 高リスクレコード抽出（5分）

```bash
# 1. 高リスクレコードを抽出
dnssweeper analyze cloudflare-export.csv --risk-level=high --output-file=monthly-audit.csv

# 2. 結果確認  
echo "抽出完了: monthly-audit.csv"
```

#### Phase 2: Cloudflare UI確認（30分）

1. **monthly-audit.csv**を開く
2. 各レコードについてCloudflare UIで使用状況を確認：
   - **Analytics** → トラフィック確認
   - **Security** → ファイアウォールログ確認  
   - **Caching** → キャッシュヒット状況確認
3. CSV の「使用状況確認」列に結果を記入：
   - `USED` - 使用されている
   - `UNUSED` - 使用されていない  
   - `UNCLEAR` - 判断不明

#### Phase 3: 削除判断と実行（30分）

1. 「削除判断」列に決定を記入：
   - `DELETE` - 削除対象
   - `KEEP` - 保持
   - `LATER` - 後で再確認
2. 削除対象レコードをCloudflare UIで削除
3. 「削除実行日」列に実行日を記入
4. 完了したCSVファイルを保存（監査証跡として）

### 効果測定

- **作業時間**: 従来の手動確認（2-3時間）→ 1時間に短縮
- **見落とし防止**: パターンベース自動検出で100%カバー
- **監査証跡**: CSVファイルで削除履歴を完全保持

## 🧪 開発・テスト

### 開発環境のセットアップ

```bash
# リポジトリをクローン
git clone https://github.com/your-username/dnssweeper-cli.git
cd dnssweeper-cli

# 依存関係をインストール
npm install

# 開発モードで実行
npm run dev -- analyze test-data/normal-records-50.csv
```

### テストの実行

```bash
# 全テストを実行
npm test

# テストカバレッジを確認
npm run test:coverage

# 型チェック
npm run type-check

# コードフォーマット
npm run format

# Lint
npm run lint
```

## 🤝 貢献

プルリクエストや Issue の報告を歓迎します！

### 開発ガイドライン

1. すべてのコメントは日本語で記述してください
2. TypeScript の strict モードを使用してください
3. テストカバレッジは80%以上を維持してください
4. 読み取り専用操作のみを実装してください（削除・変更機能は禁止）

## 📄 ライセンス

[MIT License](LICENSE)

## 🚨 セキュリティ

このツールは**読み取り専用**です。DNSレコードの削除や変更は一切行いません。

- APIキーや認証情報の送信は行いません
- ローカルでのファイル解析のみを実行します
- 分析結果の外部送信は行いません

## 🆘 サポート

問題やバグを発見した場合は、[GitHub Issues](https://github.com/your-username/dnssweeper-cli/issues)に報告してください。

## 📝 更新履歴

### v1.0.0 (2025-07-10)
- 初回リリース
- 基本的な DNS レコード分析機能
- パターンマッチング機能
- 多言語対応（日本語・英語）
- 複数出力形式対応

---

💡 **ヒント**: 月次のDNS棚卸しに最適です！定期的に実行してDNSレコードをクリーンに保ちましょう。