PikPak CLI操作スキル は何をしますか?
pikpak コマンドラインツールを使用してPikPakクラウドストレージを操作します。
pikpakのインストール
お使いのOSに応じてインストール方法を選択してください:
macOS / Linux:
curl -fsSL https://download.mypikpak.com/cli/install.sh | bash
Windows (PowerShell):
irm https://download.mypikpak.com/cli/install.ps1 | iex
Homebrew:
brew install pikcloud/tap/pikpak-cli
インストール後、pikpak version を実行して確認してください。
招待コードを使用する場合 — インストーラーは招待APIに問い合わせずに、このマシンで次回の pikpak auth register のためにコードを記録します:
curl -fsSL https://download.mypikpak.com/cli/install.sh | bash -s -- --affiliate <code>
$env:PIKPAK_AFFILIATE="<code>"; irm https://download.mypikpak.com/cli/install.ps1 | iex
brew install pikcloud/tap/pikpak-cli && pikpak auth register --affiliate <code>
インストーラーはコードを別のプレーンテキスト affiliate ファイルに保存します。PythonやJSONパーサーは不要で、settings.json が読み取りまたは変更されることはありません。書き込みに失敗した場合は警告が出ますが、インストールは失敗せず、以前のコードも上書きされません。その場合は、pikpak auth register --affiliate <code> でコードを渡してください。
pikpak skill install は、このドキュメントをマシン上のすべてのAIコーディングエージェント(Claude Code、Codex、Gemini CLI、opencode、Cursor、goose、iFlow、Qwen Codeなど)のスキルディレクトリに書き込みます。このドキュメントがインストール済みバイナリと一致しなくなった場合は、pikpak update の後に実行してください。pikpak skill ls でインストール場所と最新状態を確認できます。
環境変数
| 変数 | 説明 | デフォルト |
|---|---|---|
PIKPAK_DIR | 認証情報ディレクトリ | ~/.pikpak |
PIKPAK_CREDENTIALS | OAuth認証情報ファイルのフルパス | ~/.pikpak/.credentials.json |
PIKPAK_TOKEN | パーソナルアクセストークン。保存された認証情報よりも優先されます | 未設定 |
PIKPAK_PAT_PATH | auth token で保存されたPATファイルのフルパス | ~/.pikpak/.pat.json |
PIKPAK_VERSION | インストール時に指定されたバージョン | 最新 |
PIKPAK_INSTALL_DIR | インストールディレクトリ | ~/.local/bin (macOS/Linux), %USERPROFILE%\.pikpak (Windows) |
PIKPAK_NO_UPDATE_NOTIFIER | 1 に設定すると自動更新チェックと通知を無効化。明示的な version --check と update は引き続き動作 | 未設定 |
PIKPAK_NO_LOG | 空でない値(例:1)に設定すると config log を上書きし、診断ログを記録しない | 未設定 |
PIKPAK_NO_SKILL_SYNC | 空でない値に設定すると pikpak update がインストール済みエージェントスキルを更新しないようにする | 未設定 |
PIKPAK_AFFILIATE | インストール時に install.sh / install.ps1 によって読み取られる招待コード(CLI自体は読み取りません) | 未設定 |
認証情報の優先順位:PIKPAK_TOKEN → pikpak auth token で保存されたPAT → pikpak auth login からのOAuth認証情報。
デバイス識別情報:CLIはインストールごとに安定したデバイスIDを1つ ~/.pikpak/.device.json に保持します(X-Device-Id)。すべてのログイン方法で再利用され、トークンのローテーションや auth logout 後も維持されます。削除すると、そのマシンはPikPakのリスク管理にとって新しいデバイスのように見えます。
認証
ほとんどのコマンドは事前にログインが必要です。認証情報は ~/.pikpak/.credentials.json に保存されます。
pikpak auth login # ログイン方法を自動検出(ブラウザが利用可能な場合はブラウザ、それ以外はデバイスフロー)
pikpak auth login -m browser # ブラウザOAuthログイン(ブラウザを開く、30秒応答なし→デバイスフローにフォールバック)
pikpak auth login -m browser --no-launch-browser # ブラウザOAuthログイン(URLを表示、自動開封なし)
pikpak auth login -m device # デバイスフロー(QRコード + 確認URL + 自動ポーリング)
pikpak auth login -m device -F json # デバイスフロー:認証情報をJSONで出力して終了(ポーリングなし、AI向け)
pikpak auth login --continue <device_code> # デバイスコードのステータスを1回ポーリングして終了(-F jsonと併用)
pikpak auth login --force # 既に認証済みでも再ログイン
pikpak auth login -l "my-session" # カスタムセッションラベルを設定
pikpak auth login --scope files:manage,cloud_download # OAuthスコープを事前選択(カンマ区切り)
pikpak auth register # 新しいアカウントを登録(ログインと同じブラウザ/デバイスフロー)
pikpak auth register --affiliate <code> # アフィリエイト/招待コードを使って登録
pikpak auth register --affiliate= # この登録ではインストーラーの保存コードをスキップ
pikpak auth register -m device # 登録にデバイスフローを強制
pikpak auth token <token> # 非対話型使用のためにパーソナルアクセストークンを保存
pikpak auth logout # ローカルセッションをクリア。オフラインや壊れた/期限切れの認証情報でも動作(環境変数PIKPAK_TOKENは削除できません)
pikpak auth status # ログインステータス + アカウントパネル:ID、VIP、ストレージ容量(スクリプト用に -F json を追加)
対応 --scope 識別子:files:read, files:write, files:manage, files:purge、cloud_download、share、invite、account。--scope を省略するとスコープを送信せず、認証サーバーのデフォルトが適用されます。
AIエージェントのログインガイド: パスワードログインはサポートされなくなりました。非対話型/AI環境では、デバイスフローを使用してください:
pikpak auth login -m device -F jsonを実行してdevice_code、verification_uri、user_code、expires_in、intervalを取得- ユーザーに確認URLとコード(またはQRコード)を表示
pikpak auth login --continue <device_code> -F jsonをstatusがsuccessになるまでポーリング環境がブラウザをサポートしている場合(GUI付きmacOS/Linux)、
pikpak auth login(自動検出)またはpikpak auth login -m browserがフラグなしで動作します。ログインは既存の認証情報を最初に確認します。新しいセッションを作成するには--forceを使用してください。完全非対話型の代替手段:
pikpak auth token <PAT>、またはPIKPAK_TOKEN=<PAT>をエクスポート。登録に関する注意:
pikpak auth register -F jsonはsignup_uri、handoff_code、qr_png_path、expires_in(およびコードが関係している場合はaffiliate— フラグまたは記録済み)を表示して終了します。device_codeを返さないため、--continueでポーリングできません。AI主導の登録には、pikpak auth registerを-Fなしで実行(対話的にポーリング)、またはユーザーがブラウザで登録してからpikpak auth loginを使用してください。
コマンドリファレンス
ファイル参照
ルートディレクトリのIDは空文字列 "" であり、/ や /root ではありません。
pikpak ls # ルートディレクトリを一覧表示
pikpak ls <folderID> # 指定したフォルダを一覧表示(位置引数)
pikpak ls -p <folderID> # 同じく、フラグを使用(両方指定した場合は位置引数が優先)
pikpak ls --type file # ファイルのみ表示(サーバーサイドの種類フィルター、--rawでも動作)
pikpak ls --type folder # フォルダのみ表示(サーバーサイドの種類フィルター、--rawでも動作)
pikpak ls -l 50 # 1ページあたりのアイテム数(--limit、デフォルト100。サーバーは10未満の値を10に切り上げ)
pikpak ls -t <token> # ページネーション(--token、前回のls出力から取得)
pikpak ls -F json # JSON出力(AI推奨:id、parent_id、name、kind、size、mime_type、file_category、modified、hash。mime_type/file_category はフォルダやサービスが分類しなかったファイルでは省略)
pikpak ls --raw # 一覧全体の未加工API JSON:params.duration/width/height、params.url、audit、thumbnail_link、spell_name、apps、size(バイト)を追加
ゴミ箱に入っていない、完全に処理されたファイルのみが表示されます。1回の ls は1ページです。出力から next_page_token を読み取り、-t で渡して続行します。-l はページサイズのリクエストであり、ハードキャップではありません。サービスはより小さい値に対して10アイテムを返し、フォルダの終端に達すると -l より少ないページが返されることもあります。
ファイル検索(利用不可)
search コマンドは、サーバーサイドの検索APIが利用できないため、このリリースでは無効になっています。pikpak search を提案したり実行したりしないでください。代わりに pikpak ls(必要に応じて -F json)でフォルダをたどってファイルを見つけてください。
ファイル詳細
pikpak get <fileID> # 基本情報
pikpak get <fileID> --url-type download # ダウンロードURLを含める
pikpak get <fileID> --url-type play # 再生URLを含める
pikpak get <fileID> --url-type all # すべてのURLを含める
pikpak get <fileID> --raw # 未加工API JSON(usage=ALL、url_typeは無視)
get -F json のフィールド:id、name、type(file/folder)、size、mime、hash、created、modified、phase、さらに --url-type で要求した場合の download_url、play_url、play_resolution。ls と名前が異なることに注意:ここでは type/mime、ls では kind/mime_type。URLはファイルに対してのみ返されます。フォルダに --url-type を指定してもメタデータのみが返ります。
--raw はこの縮小された形状を完全にバイパスします—以下のRaw API出力を参照してください。
Raw API出力 (--raw)
pikpak ls --raw と pikpak get <fileID> --raw は、PikPakドライブAPIのレスポンスボディをそのまま(再インデントのみ)出力します。上記の縮小された ls/get 形状に必要なフィールドがない場合は、これらを使用してください。
pikpak ls --raw # APIが返すすべてのフィールドを含む一覧全体
pikpak ls --raw -p <folderID> -l 500 # 通常のlsと同じフィルター/ページングフラグ
pikpak get <fileID> --raw # 1ファイル、usage=ALL
pikpak ls --raw -F yaml # 同じボディをYAMLに変換
--raw が追加するもの(ls -F json の9フィールドを超えて、ファイルごと):
| Rawフィールド | 意味 | 重要な理由 |
|---|---|---|
params.duration | 再生時間(秒、文字列 "1420") | 動画の長さの唯一の情報源—ls と get のデフォルト出力にはない |
params.width / params.height | ピクセル寸法、文字列("1920" / "1080") | 解像度フィルタリング:get --url-type play は 1080p のようなラベルのみを提供 |
params.url | ファイルの取得元:トレントの場合は magnet:?xt=urn:btih:…、リンクダウンロードの場合は http(s) URL | オフラインダウンロードのソースを記録する唯一の場所 |
params.task_id | ファイルを生成したオフラインタスクのID | ファイルを pikpak task get <taskID> に結び付ける |
params.db_modify_time、params.platform、params.platform_icon、params.original_share_id | サービス側のメタデータ。すべてのアイテムに存在 | 出所情報 |
size | 生のバイト数(文字列 "392927574") | デフォルト出力はフォーマット(375 MB)し、数値比較できない |
created_time / modified_time / user_modified_time | オフセット付きRFC3339 | デフォルト出力は切り詰められたローカル YYYY-MM-DD HH:MM テキスト |
medias[] | 完全な配列:media_id、media_name、resolution_name、link.url、video.{width,height,duration,bit_rate,frame_rate,video_codec,audio_codec,hdr_type}、audio.{artist,album,sample_rate,…} | play が選ぶ1つだけでなく、すべての再生可能なバリアントと実際のコーデック/HDRメタデータ |
audit | {status, message, title} | ブロック/審査中のリソースを検出 |
apps、spell_name、tags、reference_events、thumbnail_link、icon_link、web_content_link、phase、starred、trashed、writable、folder_type、revision、user_id | 残りのAPIフィールド | 縮小された形状が落とすすべてのもの(将来のAPIバージョンで追加されるフィールドを含む) |
セマンティクス — 使用前にこれらを読んでください:
- そのまま。 ボディは再エンコードされません:フィールドの順序はAPIのもので、署名付きリンクの
&はリテラルの&のままです(\u0026にはなりません)。jqに直接渡しても安全です。 - 常に構造化。
--rawは-FがなくてもJSON出力を意味します。-F yamlは同じボディを変換します。このモードには人間が読めるテーブルはありません。 ls --rawはファイルごとではなく、ページごとに1リクエストです。 通常のlsと同じ-p/-l/-t/--typeフラグと同じサーバーサイドフィルター(ゴミ箱に入っていない、PHASE_TYPE_COMPLETE)です。ページネーションは変わりません:生のボディからnext_page_tokenを読み取り、-tで渡します。大きなフォルダをgetでループする代わりに1回の呼び出しでカバーするには、-l(例:-l 500)を上げてください。--typeは--rawと組み合わせ可能です。 これはサーバーサイドのkindフィルター(drive#file/drive#folder)であり、パススルーボディには要求された種類のみが含まれ、1ページは最大-lアイテムを保持します。クライアントサイドのjqフィルタリング(.files[] | select(.kind == …))はもう必要ありません。get --rawは常にusage=ALLをリクエストします。 最も完全なレスポンスであるため、--url-typeは無視され、もはや必要ありません。medias[].link.urlとweb_content_linkはすでにボディに含まれています。また、ダウンロードURLの生存確認プローブをスキップするため、単一の読み取りリクエストのままで、派生したdownload_url/play_url/play_resolutionキーを追加することはありません。- 名前は縮小された形状とは異なります。 RawはAPI自身のキーを使用します:
kindはdrive#file/drive#folder(file/folderではない)、modified_time(modifiedではない)、starred(starではない)。 - フィールドの存在は保証されません。
paramsはフォルダや非メディアファイルでは存在しないか部分的である可能性があり、mediasはサーバーがトランスコードを完了するまで空配列[]であることがよくあります。select(.params.duration != null)や// "0"デフォルトでガードしてください。 - Raw出力を
file_categoryでフィルタリングしたり、mime_typeに依存したりしないでください。 APIは動画でもfile_categoryを頻繁に省略し(縮小されたls -F json形状はそれを導出します)、mime_typeはかなりの割合のメディアファイルで""として返されるため、select(.file_category == "video")とselect(.mime_type | startswith("video"))の両方が実際の動画を静かにドロップします。Raw出力での信頼性のある動画テストはparams.durationの存在です。
レシピ:
# 1時間より長い動画(1回のAPI呼び出し—フォルダ上で `get` をループしない)
pikpak ls --raw | jq -r '.files[] | select((.params.duration // "0" | tonumber) > 3600)
| "\(.name)\t\(.params.duration)s"'
# 4Kファイル、l
…
[切り詰められました]