Communitygithub.com

PikPak CLI操作スキル

PikPakクラウドストレージをコマンドラインで操作:ファイルの参照・検索、マグネット/トレント/リンクのクラウドダウンロード、タスク管理、動画ストリーミング、ファイルのアップロード/ダウンロード、共有、アカウント管理など。

PikPak CLI操作スキル とは?

このスキルは、PikPakクラウドストレージをCLIから完全に操作できるようにします。ユーザーがPikPakに関する操作(ダウンロード、アップロード、ファイル管理、共有、アカウント管理など)を依頼した際に自動的にトリガーされます。「PikPak」という単語が明示されていなくても、「このリンクをダウンロード」「ファイルをアップロード」「クラウドを見て」「動画を再生」「ファイルを共有」といった指示からも起動します。macOS、Linux、Windows、Homebrewに対応しており、Claude Code、Codex、Gemini CLI、CursorなどのAIエージェントから直接利用可能です。認証はブラウザOAuth、デバイスフロー、またはアクセストークンに対応し、非インタラクティブ環境でも動作します。コマンド体系はファイル操作(ls, get)、ダウンロードタスク管理(task)、アップロード(upload)、ダウンロード(download)、共有(share)、アカウント管理(auth)などに分かれており、`--raw`オプションでAPIの生データを取得することもできます。

対応✓Claude Code✓Codex CLI✓Cursor✓Gemini CLI✓OpenCode
npx skills add https://github.com/pikcloud/skills/tree/HEAD/skills/pikpak-cli

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

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_CREDENTIALSOAuth認証情報ファイルのフルパス~/.pikpak/.credentials.json
PIKPAK_TOKENパーソナルアクセストークン。保存された認証情報よりも優先されます未設定
PIKPAK_PAT_PATHauth token で保存されたPATファイルのフルパス~/.pikpak/.pat.json
PIKPAK_VERSIONインストール時に指定されたバージョン最新
PIKPAK_INSTALL_DIRインストールディレクトリ~/.local/bin (macOS/Linux), %USERPROFILE%\.pikpak (Windows)
PIKPAK_NO_UPDATE_NOTIFIER1 に設定すると自動更新チェックと通知を無効化。明示的な 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環境では、デバイスフローを使用してください:

  1. pikpak auth login -m device -F json を実行して device_code、verification_uri、user_code、expires_in、interval を取得
  2. ユーザーに確認URLとコード(またはQRコード)を表示
  3. 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

…

[切り詰められました]

関連スキル