# CLIコマンドリファレンス

アプリの選択、チャネル管理、ネイティブビルド登録、更新パッケージ作成と配信に使うCLIコマンドを説明します。

[最初のリリース](/docs/publish)を完了してから、このコマンド リファレンスを使用してください。アプリのルートからコマンドを実行します。バックスラッシュの継続は Bash / zsh 用です。 PowerShell で 1 行を使用します。

## CLI をインストールする {#install}

```bash
npm install -g rn-update-cli
```

インストール後は `pakta <command>` でコマンドを実行します。Node.js 18.17以上が必要です。ログインと初期設定は[最初の更新を配信する手順](/docs/publish#setup)を参照してください。

## コマンドクイックリファレンス {#commands}

|目的 |コマンド |
| --- | --- |
|アカウント | `login`、`logout`、`me` |
|アプリ | `createApp`、`apps`、`selectApp`、`deleteApp` |
|チャンネル | `channels`、`createChannel`、`updateChannel`、`deleteChannel` |
|ネイティブパッケージ | `uploadApk`、`uploadAab`、`uploadIpa`、`uploadApp`、`packages`、`deletePackage` |
|解析 | `parseApk`、`parseAab`、`parseIpa`、`parseApp`、`extractApk` |
|太田 | `bundle`、`publish`、`versions`、`update`、`updateVersionInfo`、`deleteVersion` |
|差分 | `hdiff`、`hdiffFromApk`、`hdiffFromIpa`、`hdiffFromApp`、`registerPdiff` |
|診断 | `symbolicate`、`cache`、`cache clean` |

`pakta list` は、使用可能なコマンドを出力します。以下の正規のオプション名を使用してください。

## バンドル {#bundle}

`.ppk` 更新パッケージを生成します (JS バンドルとアセットのみ)。

```bash
pakta bundle --platform android --output .pakta/output/android.ppk --no-interactive
```

主なオプション:

- `--platform ios|android|harmony` — ターゲット プラットフォーム。
- `--output` — `.ppk` 出力パス。タイムスタンプ付きのファイル名を避けるために固定します。
- `--entryFile` — エントリ スクリプト (デフォルトでは、index.js。Expo 用に推論されます)。
- `--dev true` — 開発バンドルを構築します。
- `--sourcemap` / デフォルトで生成 — エルメス プロジェクトは、最終的なマッピングを自動的に構成します。
- `--hermesBase auto|none|<path>` — ヘルメスのベースライン戦略。 `auto` は履歴ベースラインを再利用してパッチを縮小し、`none` を無効にするか、明示的な `.hbc/.ppk/.apk/.ipa` を渡します。
- `--expo` — Expo プロジェクトのバンドル。
- `--name` — 存在する場合、バンドル直後に公開が開始されます。

## 更新を公開する {#publish}

```bash
pakta publish <ppk-path> \
  --platform android --name fix-001 \
  --channel default --packageVersion 1.0.0 --rollout 10 \
  --sourcemap .pakta/intermedia/android/index.bundlejs.map
```

- ターゲット フォームを 1 つ選択します: `--targets targets.json` (マルチチャネル)、`--packageId` (ネイティブ パッケージ ID からターゲットを解決)、または `--channel + --packageVersion` (単一ターゲット)。
- `--rollout` を省略すると 100% を意味します。 `targets.json` の行ごとの `rollout` はグローバル値をオーバーライドします。
- `--dryRun` プリフライト: 何も書き込まずにターゲットとパーセンテージを解決します。
- `--deploymentIds id1,id2`: 失敗した展開を正確に再試行します。
- `--sourcemap`: 後の `symbolicate` のためにソースマップをアーカイブします。

パブリッシュでは 2 つの独立したオブジェクトが生成されます。アップロード時に登録された **スリム ネイティブ ベースライン** と、現在アップロードされた **`.ppk`** です。完全なストア バイナリがそのままアップロードされることはありません。公開後、プラットフォームは、チャネル × ネイティブ バージョン グループ内の正確なビルドごとに 1 つのトランザクションで差分ジョブを作成します。ジョブが終了するまで、`checkUpdate` は完全なパッケージに戻ります。

## バージョンと差分 {#versions-diff}

```bash
pakta versions                     # list versions
```

ローカル `hdiff`/`hdiffFromApk`/`hdiffFromIpa`/`hdiffFromApp` はパッチ ファイルのみを生成します。正確なネイティブ ビルドにパッチをアタッチするには、後で `registerPdiff` 経由で登録します (`deploymentId + nativeVersionId` によって正確にバインドされ、同じバージョンの別のビルドに誤って配信されることはありません)。

## 診断 {#diagnostics}

```bash
pakta symbolicate stack.txt --platform android --hash <UPDATE_HASH>
```

`hash` はSDKの `getUpdateMetadata().currentVersion` から取得します。`--versionId` も指定できます。`-` を指定すると標準入力からスタックを読み込みます。`cache clean` はローカルのHermes基準バイトコードキャッシュを削除します。

## 環境変数 {#env-vars}

|変数 |目的 |
| --- | --- |
| `RNU_SERVICE_URL` |セルフホステッド サービス アドレス (`/admin/api/v1` 自動的に追加) |
| `PAKTA_API_TOKEN` | CI 用の個人アクセストークンです。[API キー](/docs/api-token)を参照してください。 |
| `NO_INTERACTIVE=true` |すべてのプロンプトを無効にする |
| `RNU_LANG` | `zh` (デフォルト) または `en` |
| `RNU_DEBUG=1` |エラースタックを出力する |
| `HTTPS_PROXY` / `HTTP_PROXY` / `NO_PROXY` |プロキシ設定 (小文字を受け入れます) |
| `PAKTA_CACHE_DIR` | hermes ベースライン キャッシュ ディレクトリ |
| `PAKTA_HERMES_PROBE_TIMEOUT_MS`と兄弟 |ヘルメスのプローブ/検証/コンパイル期限 (ミリ秒) |
| `RNU_AUTO_UPDATE=0` | CLI バックグラウンド自己更新を無効にする |

## プログラム API {#provider-api}

ビルド スクリプトはコマンド ラインをスキップして、エクスポートされたプロバイダーを直接使用できます。

```typescript
import { CLIProviderImpl } from 'rn-update-cli';

const provider = new CLIProviderImpl();
const bundle = await provider.bundle({
  platform: 'android',
  output: '.pakta/output/android.ppk',
  sourcemap: true,
});
if (!bundle.success) throw new Error(bundle.error);

const release = await provider.publish({
  filePath: '.pakta/output/android.ppk',
  sourcemap: '.pakta/intermedia/android/index.bundlejs.map',
  platform: 'android',
  name: 'fix-001',
  targets: 'targets.json',
});
if (!release.success) throw new Error(release.error);
```

結果は `CommandResult` オブジェクトです。`data` を使用する前に、`success` を確認してください。

## 似ている ID {#identifiers}

`publish --packageId` 入力は、ターゲットを解決するために使用されるネイティブ パッケージ ID です。返された `packageId` は、更新パッケージを識別します。出力 ID をそのオプションに入力しないでください。複数のターゲットの場合は `targets.json` を優先し、再試行の場合は `deploymentIds` を返します。
