> ## Documentation Index
> Fetch the complete documentation index at: https://docs.jinba.io/llms.txt
> Use this file to discover all available pages before exploring further.

# インポートとエクスポート

> Jinba ToolboxコンソールでToolSetをZIPアーカイブとしてエクスポート・インポートし、組織間で移動したりローカルエディタで開発する

ToolSetはZIPアーカイブとしてエクスポートし、既存のToolSetへ、または新しいToolSetとして再インポートできます。ToolSetのバックアップ、別の組織へのコピー、使い慣れたエディタで書いたツールの一括アップロードに使います。

## アーカイブの構成

```
my-toolset/
├── toolset.yml
└── tools/
    ├── tool-a/
    │   ├── tool.yml
    │   └── main.py
    └── tool-b/
        ├── tool.yml
        └── main.py
```

* ルートディレクトリは任意です。`toolset.yml`をZIPの最上位に置くこともでき、その場合ToolSetのスラッグは`name`から生成されます。ルートディレクトリがある場合はその名前がスラッグになります。
* 各ツールは`tools/`配下の専用フォルダに置きます。フォルダ名がツールのスラッグです。`.`で始まるフォルダは無視されます。
* コードファイルは、PythonのToolSetでは`main.py`、TypeScriptのToolSetでは`main.ts`です。

## ファイル形式

### toolset.yml

```yaml theme={null}
name: My ToolSet
description: ToolSet description
language: python  # python or typescript
packages:
  - name: requests
    version: "2.31.0"
  - name: beautifulsoup4
env:
  - key: API_KEY
    value: "a1b2c3:...:..."  # secrets are exported in encrypted form
    secret: true
  - key: LOG_LEVEL
    value: debug
  - key: BASE_URL
    value: https://staging.example.com
    environmentSlug: staging
```

| フィールド | 必須 | 説明 |
| - | - | - |
| `name` | はい | 表示名 |
| `description` | いいえ | 説明。省略時は空 |
| `language` | はい | `python`または`typescript` |
| `packages` | いいえ | Sandboxにインストールするパッケージ。各要素は`name`と任意の`version` |
| `env` | いいえ | 環境変数。各要素は`key`と、任意の`value`・`secret`フラグ・`environmentSlug`。`value`の無い`secret: true`の要素はインポート時にスキップされます |

`environmentSlug`の無い`env`要素は`default`環境プロファイルに属します。存在しない`environmentSlug`はインポート時に作成され、スラッグがそのまま名前になります。プロファイルの仕組みは[環境変数の管理](/ja/pages/toolbox/console/toolsets#環境変数の管理)を参照してください。

### tool.yml

```yaml theme={null}
name: My Tool
description: Tool description
```

| フィールド | 必須 | 説明 |
| - | - | - |
| `name` | いいえ | 表示名。省略時はフォルダ名が使われます |
| `description` | いいえ | 説明 |
| `entrypoint` | いいえ | 呼び出す関数名。既定は`run`で、エクスポート時は`run`以外の場合のみ書き出されます |

### コードファイル

入出力スキーマはアーカイブには含まれません。インポート時にコードから抽出されるため、コードはエディタで書く場合と同じ規約に従う必要があります。

**Python (main.py)**

```python theme={null}
from pydantic import BaseModel

class Input(BaseModel):
    query: str

class Output(BaseModel):
    result: str

def run(input: Input) -> Output:
    return Output(result=input.query.upper())
```

`Input`と`Output`はpydantic v2のモデルである必要があります。

**TypeScript (main.ts)**

```typescript theme={null}
import { z } from "zod";

export const input = z.object({ query: z.string() });
export const output = z.object({ result: z.string() });

export async function run(input: z.infer<typeof input>) {
  return { result: input.query.toUpperCase() };
}
```

モジュールは`input`・`output`・`run`をエクスポートする必要があります。

スキーマを抽出できなかったツールは抽出エラーとともに**Failed**に計上され、他のツールのインポートはそのまま続行されます。

## エクスポート

ToolSetヘッダーの**Export**をクリックすると、全ツールのドラフト状態を含む`{slug}.zip`がダウンロードされます。ToolSetにツールが1つも無い間はボタンは無効です。

公開済みの各バージョンは**Versions**タブから個別にエクスポートできます。バージョンのアーカイブは`{slug}-{version}.zip`という名前で、公開時点のツールとパッケージをそのまま含み、バージョンではなくToolSetに属する環境変数は含みません。ルートディレクトリは`{slug}`のままなので、他のアーカイブと同じようにインポートできます。

> [!NOTE]
>
> シークレットの環境変数は平文ではなく**暗号化された値**のままエクスポートされ、インポート時もそのまま書き戻されます。そのため再インポートできるのは同じJinba Toolbox環境に対してだけです。アーカイブを別の環境へ移した場合は、コンソールでシークレットの値を再入力してください。シークレットでない変数は平文でエクスポートされます。

## 既存のToolSetへのインポート

**1. インポートダイアログを開く**

ToolSet詳細ページのヘッダーで**Import**をクリックします。**Import Tools**ダイアログが開きます。

**2. 上書きの可否を決める**

**Overwrite existing tools with same slug**をオンにすると、ToolSetに既に存在するツールを置き換えます。オフの場合、該当ツールは`Tool "<slug>" already exists (enable overwrite)`として**Failed**に計上されます。既に存在する環境変数を更新するかスキップするかも、同じスイッチで決まります。このオプションは取り込み元を選ぶと表示されなくなるため、先に決めてください（変更するには**Back**で戻ります）。

**3. 取り込み元を選ぶ**

**Select Folder**でルートに`toolset.yml`を含むローカルフォルダを、または**Select ZIP**でアーカイブを選択します。フォルダのルートに`toolset.yml`が無い場合は「The selected folder does not contain a toolset.yml at its root.」と表示されます。

**4. 確定する**

ダイアログに「Import this file?」と表示され、上書きがオンの場合は同じスラッグの既存ツールが上書きされる旨の警告が出ます。**Import**をクリックします。\*\*Importing...\*\*と表示された後、**Created**・**Updated**・**Failed**それぞれのツール数が表示され、成功した場合は数秒後に自動で閉じます。

既存のToolSetへのインポートで書き込まれるのは**ツールと環境変数だけ**です。ToolSetの名前・説明・言語・Sandboxプロバイダはそのまま残り、`toolset.yml`の`packages`は無視されます。スキーマ抽出は各ツールのコードをToolSetのSandboxで現在のパッケージのまま実行するため、アーカイブが必要とするパッケージはインポート**前**に**Packages**タブで追加してください。コード内のimportが失敗したツールは**Failed**に計上され、パッケージを揃えた後に再度インポートできます。

## 新しいToolSetとしてインポート

ToolSet一覧ページの**Import**ボタンは、アーカイブから新しいToolSetを作成します。ダイアログは同じですが、上書きオプションはありません。

* 名前・説明・言語・パッケージ・環境変数は`toolset.yml`から取り込まれます。`language`は`python`または`typescript`である必要があります。
* スラッグはルートディレクトリ名（ルートディレクトリが無い場合は`name`）から決まります。同じスラッグのToolSetが組織に既にある場合は`-1`、`-2`…の接尾辞が付きます。
* SandboxプロバイダはE2Bになります。

## エラー

| メッセージ | 原因 |
| - | - |
| `Invalid ZIP: toolset.yml not found` | ZIPの最上位にもルートディレクトリ内にも`toolset.yml`が無い |
| `Invalid toolset.yml: name and language are required` | `name`または`language`が無い |
| `Invalid language: ... Must be one of: python, typescript` | 新しいToolSetとしてインポートする際の`language`が未対応 |
| `Invalid ZIP: tool.yml not found for tool "<slug>"` | ツールフォルダに`tool.yml`が無い |
| `Invalid ZIP: main.py not found for tool "<slug>"` / `main.ts ...` | ツールフォルダに`toolset.yml`で宣言した`language`に対応するコードファイルが無い |
| `Tool "<slug>" already exists (enable overwrite)` | 上書きオプションがオフの場合のツール単位の失敗 |

## 関連

* [ToolSet管理](/ja/pages/toolbox/console/toolsets) -- パッケージ、環境プロファイル、ToolSetヘッダー
* [ツール開発](/ja/pages/toolbox/console/tool-development) -- スキーマ抽出が前提とするコード規約
* [REST API](/ja/pages/toolbox/developer/api) -- 自動化のためのインポート・エクスポートルート


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.