# クラウドストレージ

クラウドストレージは、MoreLogin の自動化フローで繰り返し使うファイルを置くためのチーム単位のファイル領域です。一度アップロードしてタグで整理し、後から検索し、不要になったら削除できます。

これはクラウドフォンのファイル転送 API とは別物です。クラウドフォンのファイル API は特定の端末インスタンスにファイルを出し入れします。クラウドストレージ API は、ファイルが端末、スケジュール、RPA テンプレート、その他の自動化ロジックで使われる前の共有ファイルライブラリを管理します。

## できること

| 機能 | 用途 | 関連 API |
|  --- | --- | --- |
| ストレージ概要 | ファイルのアップロードや整理の前に、総容量、使用容量、有効期限、容量ステータスを確認します。 | クラウドストレージ情報の照会 |
| ファイル検索 | クラウドストレージのファイルをページ単位で一覧し、ファイル名、ファイル種別、タグ、ファイル ID で絞り込みます。 | クラウドストレージファイルのページ照会 |
| ファイルアップロード | 署名付きアップロード URL を取得し、ファイル本体をオブジェクトストレージへアップロードし、その後 MoreLogin で完了を確認します。 | 署名付きアップロード URL の一括取得、アップロード完了の確認 |
| ファイル整理 | 共有ストレージライブラリから 1 つ以上のファイルを削除します。 | クラウドストレージファイルの一括削除 |
| ファイルのタグ付け | ファイルのタグを置き換えまたは追加し、プロジェクト、顧客、用途、フローごとに整理します。 | ファイルタグの設定、ファイルタグの追加、ファイルタグの照会 |
| タグ管理 | 再利用可能なファイルタグを作成、編集、一覧、削除します。 | 全タグの照会、タグ作成、タグ編集、タグ削除 |


## よくあるユースケース

- APK、メディアファイル、ドキュメント、テスト素材を一度アップロードし、自動化で再利用します。
- 顧客、キャンペーン、アプリバージョン、環境、フローごとにファイルを整理します。
- ファイル名とタグのフィルターを付けてファイルページ API を呼び出し、社内ツールにファイルピッカーを作ります。
- フロー完了後に、期限切れや未使用のファイルをまとめて整理します。
- タグを作成してアップロード済みファイルに付けることで、外部の素材管理システムと MoreLogin を連携させます。


## API の利用方法

| 方式 | Base URL | パスの接頭辞 | ユースケース |
|  --- | --- | --- | --- |
| **Open API** | `https://api.morelogin.com` | `/cloudstorage` | サーバー間アクセス、リモートツール、CI/CD、バックエンドサービス |
| **Local API** | `http://127.0.0.1:40000` | `/api/cloudstorage` | MoreLogin クライアントと同じマシンで動くスクリプトやデスクトップツール |


認証の詳細は[認証](/ja/api-reference/getting-started/authentication)を参照してください。

## アップロードの流れ

クラウドストレージのアップロードは署名付き URL 方式です。あなたのコードがバイナリファイルを直接 MoreLogin API へ送ることはありません。

1. ファイル名（拡張子付き）の一覧を渡して**署名付きアップロード URL の一括取得**を呼び出します。
2. 返された各項目について、HTTPS `PUT` でバイナリファイルを `presignedUrl` へアップロードします。
3. 返されたファイルの `id` を使って**アップロード完了の確認**を呼び出します。
4. **クラウドストレージファイルのページ照会**または**ファイルタグの照会**で、アップロードされたファイルを確認・表示します。


```bash
# 1. Request a presigned upload URL
curl -X POST "https://api.morelogin.com/cloudstorage/upload/init" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "fileNames": ["example.jpg"]
  }'

# 2. Upload file content to the returned presignedUrl
curl -X PUT "PRESIGNED_URL_FROM_RESPONSE" \
  -H "Content-Type: image/jpeg" \
  --data-binary "@example.jpg"

# 3. Confirm upload completion (id from step 1 response)
curl -X POST "https://api.morelogin.com/cloudstorage/upload/complete" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1800000000000001
  }'
```

Local API では同じリクエストボディのまま、パスを `http://127.0.0.1:40000/api/cloudstorage/...` に置き換えてください。

## クラウドフォンの RPA でクラウドストレージのファイルを使う

ファイルのアップロードと確認が済むと、クラウドフォン RPA テンプレートのパラメーターからクラウドストレージのファイル ID でそのファイルを参照できます。外部の公開ダウンロード URL ではなく、MoreLogin のクラウドファイルプロトコルを使ってください：

```text
morelogin://cloudfile?ids=1,2
```

`ids` はクラウドストレージのファイル ID をカンマ区切りで並べたものです。半角カンマのみを使い、空白は入れません。ファイル ID はアップロード完了のレスポンス、または**クラウドストレージファイルのページ照会**から取得できます。

単一ファイル：

```text
morelogin://cloudfile?ids=1800000000001001
```

複数ファイル：

```text
morelogin://cloudfile?ids=1800000000001001,1800000000001002
```

RPA のパラメーターがメディアまたはファイル型の場合は、必須の `__Extra__` メタデータを残したまま、パラメーター値をクラウドファイルプロトコルの URI に設定します：

```json
{
  "__Extra__": {
    "videoDownloadUrl": { "name": "video.mp4", "size": 204800000 }
  },
  "videoDownloadUrl": "morelogin://cloudfile?ids=1,2"
}
```

これはクラウドフォン RPA のスケジュールタスク、マーケットプレイスのテンプレート、個人テンプレート、そして再利用可能なアップロード済みファイルを受け取るあらゆる RPA ノードパラメーターで役立ちます。RPA ランタイムが MoreLogin クラウドストレージからファイルを解決するため、ファイルを公開 HTTPS URL として公開する必要はありません。

## 完全な例：クラウドストレージの動画でクラウドフォン RPA を実行する

この例では `video.mp4` をクラウドストレージへアップロードし、タグを付け、そのファイルを `videoDownloadUrl` テンプレートパラメーターで使う単発のクラウドフォン RPA タスクを作成します。

例では Local API のパスを使っています。Open API の場合はリクエストボディをそのままにして、次を置き換えてください：

- `http://127.0.0.1:40000/api/cloudstorage/...` を `https://api.morelogin.com/cloudstorage/...` に
- `http://127.0.0.1:40000/api/cloudphone/...` を `https://api.morelogin.com/cloudphone/...` に


### 1. RPA 素材用のタグを作成する

```bash
curl -X POST "http://127.0.0.1:40000/api/cloudstorage/tag/create" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "tagName": "RPA Assets"
  }'
```

返されたタグの `id`（例：`1800000000000101`）を保存します。

### 2. 署名付きアップロード URL を取得する

```bash
curl -X POST "http://127.0.0.1:40000/api/cloudstorage/upload/init" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "fileNames": ["video.mp4"]
  }'
```

返されたファイルの `id` と `presignedUrl` を保存します。

### 3. ファイル本体をアップロードする

ファイル本体を `presignedUrl` へアップロードします。このリクエストは前の手順で返されたオブジェクトストレージの URL に向かい、MoreLogin API には向かいません。

```bash
curl -X PUT "PRESIGNED_URL_FROM_RESPONSE" \
  -H "Content-Type: video/mp4" \
  --data-binary "@video.mp4"
```

### 4. アップロード完了を確認する

```bash
curl -X POST "http://127.0.0.1:40000/api/cloudstorage/upload/complete" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "id": 1800000000000001
  }'
```

返されたクラウドストレージのファイル ID（例：`1800000000001001`）を保存します。

### 4.1 ファイルにタグを付ける

```bash
curl -X POST "http://127.0.0.1:40000/api/cloudstorage/file/tag/add" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "fileId": 1800000000001001,
    "tagIds": [1800000000000101]
  }'
```

アップロード完了のレスポンスにファイル ID が直接含まれていない場合は、ページ照会でファイルを検索します：

```bash
curl -X POST "http://127.0.0.1:40000/api/cloudstorage/file/page" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "pageNo": 1,
    "pageSize": 20,
    "fileName": "video",
    "tagIds": [1800000000000101]
  }'
```

### 5. RPA テンプレートパラメーターを組み立てる

MoreLogin のクラウドファイルプロトコルでクラウドストレージのファイル ID を使います：

```text
morelogin://cloudfile?ids=1800000000001001
```

`videoDownloadUrl` という名前の RPA テンプレートパラメーターには、次のように JSON オブジェクトを組み立てます：

```json
{
  "__Extra__": {
    "videoDownloadUrl": {
      "name": "video.mp4",
      "size": 204800000
    }
  },
  "videoDownloadUrl": "morelogin://cloudfile?ids=1800000000001001"
}
```

続いて、それを `templateParameter` 用に JSON 文字列としてエスケープします：

```json
"{\"__Extra__\":{\"videoDownloadUrl\":{\"name\":\"video.mp4\",\"size\":204800000}},\"videoDownloadUrl\":\"morelogin://cloudfile?ids=1800000000001001\"}"
```

### 6. 単発のクラウドフォン RPA タスクを作成する

タスクを作成する前に、クラウドフォン一覧 API から `cloudPhoneId` を、マーケットプレイスまたは個人テンプレート一覧 API から `templateId` を取得します。

```bash
curl -X POST "http://127.0.0.1:40000/api/cloudphone/rpa/onceTask/save" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "cloudPhoneId": 1678331966138097,
    "scheduleName": "Upload video from Cloud Storage",
    "templateId": 1678347487160256,
    "templateParameter": "{\"__Extra__\":{\"videoDownloadUrl\":{\"name\":\"video.mp4\",\"size\":204800000}},\"videoDownloadUrl\":\"morelogin://cloudfile?ids=1800000000001001\"}",
    "description": "Use a Cloud Storage video file in a one-time Cloud Phone RPA task"
  }'
```

### 7. タスクを検証する

クラウドフォン RPA のタスク一覧またはサブタスク一覧を照会して、実行状況を確認します：

```bash
curl -X POST "http://127.0.0.1:40000/api/cloudphone/rpa/task/page" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "pageNo": 1,
    "pageSize": 20,
    "taskName": "Upload video from Cloud Storage"
  }'
```

重要なのは、RPA タスクが `videoDownloadUrl` を `morelogin://cloudfile?ids=...` として受け取る点です。MoreLogin が実行時にクラウドストレージからファイルを解決するため、あなたの連携側でファイルを公開 URL に置く必要はありません。

## タグの運用

タグはクラウドストレージのファイル向けの再利用可能なメタデータです。1 つのファイルに複数のタグを付けられます。

- **クラウドストレージファイルタグの作成**で `Invoices`、`APK`、`Customer A`、`RPA Assets` のようなタグを作ります。
- ファイルのタグをすべて置き換えたいときは**ファイルタグの設定**を使います。
- 既存のタグを消さずに追加したいときは**ファイルタグの追加**を使います。
- UI にタグフィルターを作るには**全クラウドストレージファイルタグの照会**を使います。
- 選択したファイルにどのタグが付いているかを表示するには**ファイルタグの照会**を使います。


例：既存のタグを消さずに、ファイルへタグを 1 つ追加します。

```bash
curl -X POST "https://api.morelogin.com/cloudstorage/file/tag/add" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "fileId": 1800000000001001,
    "tagIds": [1800000000000103]
  }'
```

## API 対応表

| タスク | Open API のパス | Local API のパス |
|  --- | --- | --- |
| ストレージ情報の照会 | `GET /cloudstorage/info` | `GET /api/cloudstorage/info` |
| ファイルのページ照会 | `POST /cloudstorage/file/page` | `POST /api/cloudstorage/file/page` |
| 署名付きアップロード URL の取得 | `POST /cloudstorage/upload/init` | `POST /api/cloudstorage/upload/init` |
| アップロード完了の確認 | `POST /cloudstorage/upload/complete` | `POST /api/cloudstorage/upload/complete` |
| ファイルの一括削除 | `POST /cloudstorage/file/delete/batch` | `POST /api/cloudstorage/file/delete/batch` |
| ファイルタグの設定 | `POST /cloudstorage/file/tag/set` | `POST /api/cloudstorage/file/tag/set` |
| ファイルタグの追加 | `POST /cloudstorage/file/tag/add` | `POST /api/cloudstorage/file/tag/add` |
| ファイル上のタグの照会 | `POST /cloudstorage/file/tag/query` | `POST /api/cloudstorage/file/tag/query` |
| 全タグの照会 | `GET /cloudstorage/tag/all` | `GET /api/cloudstorage/tag/all` |
| タグの作成 | `POST /cloudstorage/tag/create` | `POST /api/cloudstorage/tag/create` |
| タグの編集 | `POST /cloudstorage/tag/edit` | `POST /api/cloudstorage/tag/edit` |
| タグの削除 | `POST /cloudstorage/tag/delete/batch` | `POST /api/cloudstorage/tag/delete/batch` |


## API リファレンス

| API | 説明 |
|  --- | --- |
| [Cloud Storage Open API](/ja/api-reference/cloud-storage/open-api) | `https://api.morelogin.com` 経由のリモートアクセス、OAuth2 認証 |
| [Cloud Storage Local API](/ja/api-reference/cloud-storage/local-api) | `http://127.0.0.1:40000` 経由のローカルアクセス |


> **注意**：Local API のパスには `/api/` 接頭辞が付き、Open API のパスには付きません。