コマンドライン(jpgboost-cli)
jpgboost-cliはグラフィカルインターフェースを開かずに画像を圧縮します。スクリプト、定期実行タスク、継続的インテグレーションに適したツールです。
jpgboost-cliは、jpgboost.comで直接販売されているJPGBoostの版にのみ含まれています。Mac App Store版にはどのライセンス階層でも含まれておらず、今後のアップデートで追加されることもありません。Storeアプリに課されるAppleのサンドボックスは、コマンドライン実行ファイルの同梱やインターフェースなしでの動作を完全に禁止しています。Mac App Store版をお使いの場合は、代わりにローカルAPI、監視フォルダ、ショートカットとAppleScriptとの連携で、多くのスクリプトや自動化のニーズをカバーできます。
お使いのライセンスは、個人的に使用する最大2つのインストールをカバーします。アプリとCLIは、同じMac上にインストールされていても、それぞれ別のインストールとしてカウントされます。これらは設定 > ライセンスにデバイスとして表示されます。
継続的インテグレーションや定期実行タスクなど、自動化のためだけにCLIを実行するサーバーは、追加のライセンスを必要とせず、この2つの枠のうち1つを占有できます。詳しくはサーバーでのライセンスとユーザーあたり1ライセンスのセクションをご覧ください。
コマンドラインの用途
jpgboost-cliはJPGBoost.appに含まれる独立した実行ファイルです。ローカルAPIにもアプリの実行中インスタンスにも依存せず、同じデコード・エンコードエンジンを直接使用するため、グラフィカルインターフェースとまったく同じファイルを生成します。
これは、インターフェースを一切開くべきでない場合に適したエントリーポイントです。シェルスクリプト、定期実行タスク、継続的インテグレーション、大量のファイルの処理などに向いています。
jpgboost-cliはJPGBoost.appに含まれています。アプリにすでに統合されたコンポーネントを使用するため、コンパイルもライブラリのインストールも必要ありません。
コマンドをアクセス可能にする
バイナリはアプリのパッケージ内にあります。フルパスを使って直接呼び出せます:
/Applications/JPGBoost.app/Contents/MacOS/jpgboost-cli --help
どのフォルダからでもjpgboost-cliを実行できるように、シンボリックリンクを一度作成します:
sudo ln -s /Applications/JPGBoost.app/Contents/MacOS/jpgboost-cli \
/usr/local/bin/jpgboost-cli
jpgboost-cli --help
このリンクはパッケージを指しているため、アプリを更新した後も有効なままです。このページの例では、このインストールを前提としています。行っていない場合は、jpgboost-cliを上記のフルパスに置き換えてください。
PATHに含まれていれば、/usr/local/binの代わりに~/binのような個人用フォルダを使うこともできます。簡単な代替方法として、~/.zshrcにエイリアスを追加することもできます。
サーバーでのライセンス
グラフィカルインターフェースのないサーバーなど、CLIのみを実行するマシンは、JPGBoost.appを使わずに有効化・管理できます。
# CLIからこのマシンの識別子を取得
jpgboost-cli --machine-id
# 購入後にメールで届いたトークンを使った初回有効化
jpgboost-cli --activate ACT-XXXX-XXXX-XXXX-XXXX-XXXX
# すでに有効化済みのこのサーバーから、別のデバイスを追加するためのコードを生成
jpgboost-cli --add-device
# 他の場所(アプリや別のCLI)で生成したコードでライセンスに参加
jpgboost-cli --pair XXXX-XXXX
# サーバーにより新しいライセンスのバージョンがあれば取得する
jpgboost-cli --sync
# 使用中のインストール数/上限と、その一覧 — ローカル読み取り、ネットワーク呼び出しなし
jpgboost-cli --devices
アプリとCLIは、同じMac上で使用されていても別々の2つのインストールとみなされます。それぞれが独自のインストール識別子を持ち、Proライセンスで許可された2つの枠のうち1つを占有します。
そのため、お使いのMacにアプリ、サーバーにCLIを配置したり、同じMacにアプリとCLIの両方を配置したり、2台の異なるMacにアプリを配置したり、あるいはアプリを一切開かないサーバーにCLIのみを配置したりと、さまざまな方法でライセンスを活用できます。
構文とオプション
jpgboost-cli <file...> --output <folder> [options]
| オプション | 機能 | デフォルト値 |
|---|---|---|
--output <folder> | 書き出し先フォルダ。存在しない場合は作成される | 必須 |
--quality <1-100> | 圧縮品質 | 75 |
--format <format> | png、jpeg、heic、avif、webp、jxlのいずれか | jpeg |
--profile <name> | 名前付きの書き出しプロファイルを適用 | なし |
--jobs <N> | 並列処理するファイル数 | コア数 |
--json | 読みやすいテキストの代わりに構造化されたJSON出力 | 無効 |
--help | ヘルプを表示 | — |
最初の例
# 2つのファイルをWebP、品質60に変換
jpgboost-cli foto1.jpg foto2.png --quality 60 --format webp --output ./compressed
# foto1.jpg: 4.2 MB -> 890 KB (-79%) -> ./compressed/foto1.webp
# foto2.png: 1.8 MB -> 620 KB (-66%) -> ./compressed/foto2.webp
#
# 2件のファイルを処理、失敗0件。
# フォルダ全体をAVIFに変換
jpgboost-cli ~/Pictures/export/*.png --format avif --quality 65 --output ~/Pictures/web
バッチ処理と並列化
数百から数千のファイルの場合、--jobsオプションで複数の画像を同時に処理できます。各ファイルは独立してデコード・エンコードされた後に解放されるため、メモリ消費は待機中のファイル数ではなく--jobsの値によってのみ増加します。
# 8ファイルを同時に処理
jpgboost-cli ~/Photos/batch/*.jpg --jobs 8 --format webp --output ~/Photos/web
# 共有マシンの負荷を抑えるために1つずつ処理
jpgboost-cli ~/Photos/batch/*.jpg --jobs 1 --format webp --output ~/Photos/web
12ファイルのバッチで、--jobs 8は--jobs 1より約4倍高速であることが確認されました。実際の効果は、お使いのMacのコア数と出力フォーマットによって異なります。AVIFとJPEG XLは、JPEGやHEICと比べてエンコードに明らかに時間がかかります。
書き出しプロファイルを使う
--profileオプションは、アプリまたはAPI経由で作成したプロファイルを再利用します。明示的に指定していない項目のみを補完します。
# フォーマット、品質、フォルダはすべてプロファイルから
jpgboost-cli --profile "Web JPEG" *.png
# 明示的なフォルダが優先され、残りはプロファイルから
jpgboost-cli --profile "Web JPEG" --output ./de/livery *.png
CLIは、設定やローカルAPIを経由せずに、プロファイルを直接作成・更新することもできます:
jpgboost-cli --create-profile "Web JPEG" --format jpeg --quality 70 --output ./compressed
--formatと--qualityは必須で、--outputは任意です(指定するフォルダはすでに存在している必要があります)。すでに使われている名前は、複製を作成するのではなく既存のプロファイルを置き換えます — これはアプリのプロファイルタブとローカルAPIでも同じ動作です。CLIの他の部分と同様、JPGBoost Proが必要です。
JSON出力
--jsonを使うと、出力は処理された各ファイルがJSONオブジェクトに対応するJSON配列となり、ローカルAPIのレスポンスと同じ形式になります。これによりjqや他のツールとの連携が容易になります。
jpgboost-cli *.png --format webp --output ./output --json
# jqと連携:エラーがあるファイルだけを残す
jpgboost-cli *.png --format webp --output ./output --json \
| jq '.[] | select(.error != null)'
利用可能なフィールド:path、originalSizeBytes、compressedSizeBytes、ratio、destination、error。
終了コード
| コード | 意味 |
|---|---|
0 | すべてのファイルが正常に処理された |
77 | このマシンに有効なProライセンスがない |
| 0以外 | 少なくとも1つのファイルが失敗。スクリプトや継続的インテグレーションで直接利用可能 |
同名のファイル
ベース名が同じ2つの入力ファイルは、当然ながら同じ出力を指します。a/foto.jpgとb/foto.pngをWebPに変換すると、どちらもfoto.webpになります。
JPGBoostはこれらを上書きしません。2つ目のファイルには別の名前が付けられます。
a/foto.jpg -> foto.webp
b/foto.png -> foto-2.webp
名前は--jobsによる実行順序に関わらず、引数の順序に従って割り当てられるため、結果は再現可能です。同じルールがアプリ、ショートカット、AppleScript、監視フォルダでも適用されます。
このルールは異なるファイル間の衝突にのみ関係します。同じファイルを同じフォルダに再度書き出すと、以前の出力を置き換えるだけで、foto-2、foto-3のように蓄積することはありません。
インストールの確認
コマンドが正しく応答することを、いつでも確認できます:
jpgboost-cli --help