
# CLI

`./vendor/bin/tailwindphp`は **[@tailwindcss/cli](https://github.com/tailwindlabs/tailwindcss/tree/next/packages/%40tailwindcss-cli)** のPHP移植版で、Node.jsは不要です。ソースマップ（`--map`）を除き、同じビルドオプションを使いますが、コンテンツのスキャン方法は異なります。[CLIがスキャンする内容](#what-the-cli-scans)を参照してください。`composer require tailwindphp/tailwindphp`後、バイナリは`vendor/bin/`にリンクされます。

PHPから実行時にCSSだけを使いたい場合は、代わりに[API](https://tailwindphp.inline0.dev/ja/docs/api)を使ってください。CLIは、スタイルシートをディスクに書き出すビルド工程で使います。

## クイックスタート

```bash
# Build CSS from an input file
./vendor/bin/tailwindphp -i ./src/app.css -o ./dist/styles.css

# Watch for changes and rebuild
./vendor/bin/tailwindphp -i ./src/app.css -o ./dist/styles.css --watch

# Build minified for production
./vendor/bin/tailwindphp -i ./src/app.css -o ./dist/styles.css --minify
```

## オプション

```bash
tailwindphp [-i input.css] [-o output.css] [--watch] [options…]
```

ロングオプションに値を指定するには`=`を使います：`--input=./src/app.css`、`--output=./dist/styles.css`、`--cwd=/path/to/project`。ロングオプションの後にスペース区切りで値を置く形式（`--input ./src/app.css`）は現在エラーにならず無視され、ビルドは既定値に戻ります（[#13](https://github.com/inline0/tailwindphp/issues/13)）。ショートオプションでは次の引数として値を指定します（`-i ./src/app.css`）。

| オプション | 説明 | 既定値 |
|---|---|---|
| `-i, --input` | 入力CSSファイル。`--input=-`の場合はstdinから読み込みます | `@import "tailwindcss"` |
| `-o, --output` | 出力ファイル | `-`（stdout） |
| `-w, --watch` | 変更を監視し、必要に応じて再ビルドします | — |
| `-m, --minify` | 出力を最適化して圧縮します | — |
| `--optimize` | 「圧縮せずに最適化」と説明されていますが、現在は`--minify`と同様に圧縮します（[#9](https://github.com/inline0/tailwindphp/issues/9)） | — |
| `--cwd` | 現在の作業ディレクトリ | `.` |
| `-h, --help` | 使い方を表示します | — |
| `-V, --version` | バージョンを表示します | — |
| `-v, --verbose` | ビルド失敗時にスタックトレースを表示します | — |

`--output`が`-`（既定値）の場合、コンパイル済みのCSSはstdoutに書き出されるため、ほかの場所へパイプできます。進行状況のメッセージ（バージョン表示と`Done in …ms`）はstderrに出力されます。

`@tailwindcss/cli`とは異なり、`--map`オプションはありません。TailwindPHPはソースマップを生成しません。

## 入力CSS

Tailwindのimport、theme、ディレクティブを含む`app.css`を作成します。

```css
@import "tailwindcss";

@theme {
    --color-brand: #3b82f6;
}
```

## CLIがスキャンする内容

CLIのコンテンツスキャンは、現時点では`@tailwindcss/cli`と同じ方法で`@source`に従いません（[#8](https://github.com/inline0/tailwindphp/issues/8)）。現在のリリースでは、次のように動作します。

- 入力CSSに **`@source`ファイルディレクティブがない場合**、CLIは作業ディレクトリ（`--cwd`）を再帰的にスキャンします。`vendor/`と`node_modules/`も対象ですが、`.gitignore`は参照されません。
- **`@source`ファイルディレクティブが1つ以上ある場合**、CLIは**入力ファイルのディレクトリ**を再帰的にスキャンします。ディレクティブ内のパスやglobは適用されません。`src/app.css`と同じ場所にある`@source "../templates"`は`src/`をスキャンし、`templates/`はスキャンしません。
- **`@source not "…"`** ディレクティブはスキップされ、何も除外しません。
- コンパイラー自身が処理するため、**`@source inline("…")`** と **`@source not inline("…")`** は説明どおりに動作します。

次の拡張子を持つファイルのみ読み込まれます：`php`、`html`、`htm`、`twig`、`blade.php`、`vue`、`jsx`、`tsx`、`svelte`、`astro`、`mdx`。クラス名は[`tw::extractCandidates()`](https://tailwindphp.inline0.dev/ja/docs/api#twextractcandidates)と同様に、`class`および`className`属性から取得されます。そのため、PHPまたはJavaScript文字列にしかないクラスは見つかりません。そのようなクラスは`@source inline("…")`で明示的に指定してください。

修正されるまでは、スキャン対象ディレクトリの最上位に入力CSSファイルを置くのが確実です。

```css
/* templates/app.css: scans templates/ recursively */
@import "tailwindcss";
@source "./";
```

`not`と`inline()`形式を含むディレクティブ構文については、[@source](https://tailwindphp.inline0.dev/ja/docs/usage/source)を参照してください。

## 例

```bash
# Build from an input file
tailwindphp -i ./src/app.css -o ./dist/styles.css

# Build minified for production
tailwindphp -i ./src/app.css -o ./dist/styles.css -m

# Watch mode with minification
tailwindphp -i ./src/app.css -o ./dist/styles.css -w -m

# Run against a different working directory
tailwindphp -i app.css -o dist/styles.css --cwd=/path/to/project
```

CLIは出力ディレクトリが存在しない場合に作成します。入力ファイルがない場合や入力パスと出力パスが同じ場合は、エラーで終了します。ウォッチモードでは入力ファイルとスキャン対象ファイルを500 ms間隔で確認し、変更または新しいファイルの出現があれば再ビルドします。

## グローバルインストール

グローバルにインストールすると、どこからでも`tailwindphp`を使えます。

```bash
composer global require tailwindphp/tailwindphp

# Now available globally
tailwindphp -i ./src/app.css -o ./dist/styles.css
```

プロジェクトの設定については[はじめに](https://tailwindphp.inline0.dev/ja/docs/getting-started)を、PHPから実行時にCSSを生成する方法については[API](https://tailwindphp.inline0.dev/ja/docs/api)を参照してください。
