# pip.password-gl [![PyPI Downloads](https://static.pepy.tech/badge/password-gl)](https://pepy.tech/projects/password-gl)


## 概要
パスワードを生成するコマンドラインツールです。
セキュリティ要件に応じて、文字種、長さ、除外文字、プレフィックス/サフィックスなどを細かく指定してパスワードを生成できます。また、単語リストに基づいたパスフレーズの生成もサポートしています。
生成結果は標準出力、ファイル、またはクリップボードに出力できます。

## インストール
```bash
pip install password-gl
```

## 依存関係
*   Python 3.x
*   `pyperclip` (任意): 生成結果をクリップボードにコピーする場合に必要です。
    ```bash
    pip install pyperclip
    ```
    *`pyperclip` がインストールされていない場合、`--copy` オプションは機能しませんが、他の機能は利用可能です。*

## 使い方
```bash
password-gl [オプション]
pgl [オプション]
```
*   オプションを指定しない場合、デフォルト設定（長さ12、大文字・小文字・数字・記号を含む）のパスワードが1つ生成されます。

## 機能
### 共通オプション
*   `--count <数>`: 生成するパスワード/パスフレーズの数を指定します (デフォルト: 1)。
*   `--copy`: 最後に生成されたパスワード/パスフレーズをクリップボードにコピーします (`pyperclip` が必要)。
*   `--output-format <フォーマット>`: 出力フォーマットを指定します (`text`, `json`, `csv`。デフォルト: `text`)。
*   `--output-file <ファイルパス>`: 生成結果を指定されたファイルに保存します。
*   `--separator <文字>`:
    *   パスワード生成時: `--every` と共に使用し、指定文字数ごとに区切り文字を挿入します。
    *   パスフレーズ生成時: 単語間の区切り文字を指定します (デフォルト: `-`)。
*   `--prefix <文字列>`: 生成されるパスワード/パスフレーズの先頭に追加する文字列を指定します。
*   `--suffix <文字列>`: 生成されるパスワード/パスフレーズの末尾に追加する文字列を指定します。
*   `--add-date`: 現在の日付 (`YYYYMMDD`) をプレフィックスとして追加します。
*   `--add-user`: 現在のログインユーザー名をプレフィックスとして追加します。

### パスワード生成オプション (デフォルトモード)
*   `-l <長さ>`, `--length <長さ>`: パスワードの長さを指定します (デフォルト: 12)。
*   `--no-upper`: 大文字を使用しません。
*   `--no-lower`: 小文字を使用しません。
*   `--no-digits`: 数字を使用しません。
*   `--no-symbols`: 記号 (`string.punctuation`) を使用しません。
*   `--strict`: 指定された文字種（大文字、小文字、数字、記号で使用するもの）が**必ず**最低1つは含まれるようにします。例えば `--no-symbols` を指定した場合、大文字、小文字、数字が最低1つずつ含まれます。
*   `--no-similar`: 類似文字 (`O`, `0`, `l`, `1`, `I`, `|`) を除外します。
*   `--exclude-chars <文字>`: 指定された文字をパスワード生成から除外します。
*   `--starts-with-lower`: パスワードが必ず小文字で始まるようにします。
*   `--starts-with-upper`: パスワードが必ず大文字で始まるようにします。
*   `--readable`: 読みやすいように、英数字 (`a-zA-Z0-9`) のみを使用します。
*   `--charset <文字セット>`: パスワード生成に使用する文字を直接指定します。このオプションを使用すると、`--no-upper` などの文字種指定オプションは無視されます。
*   `--every <数>`: `--separator` と共に使用し、指定された文字数ごとに区切り文字を挿入します。

### パスフレーズ生成オプション
*   `--passphrase`: パスフレーズ生成モードを有効にします。
*   `--words <単語数>`: パスフレーズに使用する単語の数を指定します (デフォルト: 4)。
*   `--wordlist <ファイルパス>`: パスフレーズ生成に使用する単語リストファイルのパスを指定します。指定しない場合は、スクリプト内のデフォルトリストまたは `words.txt` (スクリプトと同じディレクトリにある場合) を使用します。
*   `--separator <文字>`: 単語間の区切り文字を指定します (デフォルト: `-`)。

## 使用例
### 例1: デフォルトのパスワードを生成
```bash
password-gl
```
出力例: `aB1@cD2#eF3$`

### 例2: 長さ16で記号を含まないパスワードを3つ生成
```bash
password-gl -l 16 --no-symbols --count 3
```
出力例:
```
AbCdEfGhIjKlMnOp
QrStUvWxYz123456
789aBcDeFgHiJkLm
```

### 例3: 厳密モードで、大文字で始まり、類似文字を除外したパスワードを生成
```bash
password-gl --strict --starts-with-upper --no-similar
```
出力例: `PqRsTuVwXyZ2@3`

### 例4: 5単語のパスフレーズを生成し、クリップボードにコピー
```bash
password-gl --passphrase --words 5 --copy
```
出力例: `magic-zebra-island-quest-dream` (クリップボードにもコピーされます)

### 例5: カスタム単語リストを使用してパスフレーズを生成
```bash
password-gl --passphrase --wordlist my_custom_words.txt
```

### 例6: プレフィックスとサフィックスを追加し、JSON形式でファイルに出力
```bash
password-gl --prefix "web-" --suffix "!" -l 10 --count 2 --output-format json --output-file passwords.json
```
`passwords.json` の内容例:
```json
[
  "web-aB1@cD2#e!",
  "web-fG3$hI4%j!"
]
```

### 例7: パスワードを4文字ごとにハイフンで区切る
```bash
password-gl -l 16 --separator - --every 4
```
出力例: `abcd-EFGH-1234-!@#$`

### 例8: 日付とユーザー名をプレフィックスに追加
```bash
password-gl --add-date --add-user -l 8
```
出力例: `20231027yourusername-aB1@cD2` (実行日とユーザー名により異なります)

## エラーハンドリング
指定された条件（例: 長さが短すぎる、使用可能な文字がないなど）によっては、パスワード/パスフレーズを生成できない場合があります。その場合はエラーメッセージが表示されます。