> ## 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コンソールでMonacoコードエディタを使ったツール作成、入出力スキーマの定義、AI Copilotによるコード生成

ToolSet内の各ツールは、定義された入力スキーマ、出力スキーマ、コードを持つ個別の実行単位です。コンソールは、ブラウザから離れることなくツールの作成、テスト、反復を行えるフル機能の開発環境を提供します。

## ツールの作成

<Steps>
  <Step title="ToolSetを開く">
    ツールを追加したいToolSetに移動します。**Tools**タブが選択されていることを確認してください。
  </Step>

  <Step title="Add Toolをクリック">
    **Add Tool**をクリックします。以下の項目を入力するモーダルが表示されます：

    * **Slug** -- URL用の識別子（例：`post-message`）。APIエンドポイントで使用されます。
    * **Name** -- 人間が読みやすい名前（例：「Post Message」）。
    * **Description** -- ツールの機能の説明。
  </Step>

  <Step title="エディタを開く">
    作成後、言語に適したスターターテンプレートが事前に入力された**ツールエディタ**ページにリダイレクトされます。
  </Step>
</Steps>

## ツールエディタ

ツールエディタは、リサイズ可能なマルチパネルのワークスペースです：

<CardGroup cols={2}>
  <Card title="コードエディタ" icon="code">
    Monacoベースのエディタ（VS Codeと同じエンジン）で、TypeScriptとPythonのシンタックスハイライト、自動補完、エラーマーカーを備えています。
  </Card>

  <Card title="テストパネル" icon="play">
    JSON入力を入力し、ライブSandboxでツールを実行します。エディタを離れることなく、出力、エラー、ログを確認できます。
  </Card>

  <Card title="設定パネル" icon="gear">
    ツールのSlug、名前、説明を編集します。コードからメタデータの自動生成をトリガーできます。
  </Card>

  <Card title="AI Copilot" icon="robot">
    コードの生成、実行出力に基づく修正の提案、テスト入力の更新が可能な組み込みのチャットアシスタントです。
  </Card>
</CardGroup>

### キーボードショートカット

| ショートカット            | アクション                |
| ------------------ | -------------------- |
| `Cmd/Ctrl + S`     | ツールを保存               |
| `Cmd/Ctrl + Enter` | 現在のテスト入力でツールを実行      |
| `Cmd/Ctrl + B`     | AI Copilotサイドバーの表示切替 |
| `Cmd/Ctrl + ,`     | 設定パネルの表示切替           |
| `Cmd/Ctrl + .`     | APIパネルの表示切替          |
| `Escape`           | アクティブなパネルまたはモーダルを閉じる |

## TypeScriptでのツール作成

TypeScriptのツールはスキーマ定義に**Zod**を使用します。`input`と`output`のスキーマ、および非同期の`run`関数をエクスポートします：

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

// Define the input schema
export const input = z.object({
  name: z.string().describe("The user's name"),
  greeting: z.string().optional().describe("Custom greeting prefix"),
});

// Define the output schema
export const output = z.object({
  message: z.string().describe("The greeting message"),
});

// Implement the tool logic
export async function run(data: z.infer<typeof input>) {
  const prefix = data.greeting ?? "Hello";
  return { message: `${prefix}, ${data.name}!` };
}
```

**TypeScriptツールの主な規約：**

* `"zod"`から`z`をインポートします。Sandboxにプリインストールされています。
* `input`と`output`をZodスキーマとしてエクスポートします。バリデーションとAPIのJSON Schema生成に使用されます。
* `run`をエントリーポイントとしてエクスポートします。検証済みの入力を受け取り、出力スキーマに一致するオブジェクトを返す必要があります。
* ToolSetの**Packages**タブに登録されているパッケージを`import`できます。
* 環境変数は`process.env`経由でアクセスできます。

## Pythonでのツール作成

Pythonのツールはスキーマ定義に**Pydantic**を使用します。`Input`と`Output`モデル、および`run`関数を定義します：

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

class Input(BaseModel):
    name: str = Field(description="The user's name")
    greeting: str = Field(default="Hello", description="Custom greeting prefix")

class Output(BaseModel):
    message: str = Field(description="The greeting message")

def run(input: Input) -> Output:
    return Output(message=f"{input.greeting}, {input.name}!")
```

**Pythonツールの主な規約：**

* `Input`と`Output`をPydanticの`BaseModel`サブクラスとして定義します。
* `run`をエントリーポイントとして定義します。検証済みの入力を受け取り、`Output`モデルのインスタンスを返す必要があります。
* ToolSetの**Packages**タブに登録されているパッケージを`import`できます。
* 環境変数は`os.environ`経由でアクセスできます。

## 入力・出力スキーマ

スキーマには2つの目的があります：

1. **バリデーション** -- Sandboxは実行前に入力を、実行後に出力を検証します。
2. **ドキュメンテーション** -- スキーマはAPIおよびMCPエンドポイントを通じて公開され、AIエージェントがツールの期待する入出力を理解できるようにします。

各フィールドに`.describe()`（Zod）または`Field(description=...)`（Pydantic）を使用して、明確な説明を提供してください。これらの説明はAPIドキュメントに表示され、AIエージェントがツールの呼び出し方法を理解するために使用されます。

## メタデータの自動生成

設定パネルの**Auto Generate**をクリックすると、以下が自動的に抽出されます：

* **Slug** -- コード内の関数名やスキーマ名から導出されます。
* **Name** -- コードから推定される人間が読みやすい名前。
* **Description** -- ツールの機能の要約。

この機能はAIを使用してコードを分析し、実装済みのコードからメタデータを設定する時間を節約します。

## AI Copilot

AI Copilotサイドバーは、ツールのコード、言語、実行出力をコンテキストとして認識するチャットインターフェースを提供します。以下の用途に使用できます：

* **コード生成** -- ツールに行わせたい処理を記述すると、Copilotが実装を作成します。
* **エラーのデバッグ** -- テスト実行が失敗した後、Copilotにエラーの分析と修正の提案を依頼できます。
* **コードの適用** -- Copilotが生成したコードをエディタに直接反映し、自動保存できます。
* **テスト入力の更新** -- Copilotがテストパネルに適用するJSONテスト入力を提案できます。

Copilotの表示切替は`Cmd/Ctrl + B`またはサイドバーのボットアイコンで行います。

## APIパネル

APIパネル（`Cmd/Ctrl + .`）を開くと、以下を確認できます：

* このツールを実行するためのREST APIエンドポイントURL。
* MCPエンドポイントURL（ToolSetでMCPが有効な場合）。
* `curl`コマンドとSDK使用例のサンプル。
* JSON Schema形式のツールの入力スキーマ。

エディタ内にいながら、外部アプリケーションにツールを素早く統合する際に便利です。

## 保存と削除

* **保存** -- Saveボタンをクリックするか、`Cmd/Ctrl + S`を押します。変更はドラフト状態に保存され、公開済みバージョンには影響しません。
* **削除** -- ヘッダーのDeleteボタンをクリックします。確認ダイアログが表示されます。ツールを削除するとドラフト状態から削除されます。公開済みバージョンに含まれていた場合、それらのスナップショットは変更されません。

## ベストプラクティス

* **ツールを単機能に保つ。** 各ツールは1つのことを適切に行うべきです。関連するツールをグループ化するにはToolSetを使用します。
* **分かりやすいスキーマを書く。** 適切なフィールド説明は、AIエージェントがツールを正しく呼び出すのに役立ちます。
* **公開前にテストする。** 新しいバージョンを公開する前に、テストパネルでさまざまな入力による動作を確認します。
* **シークレットには環境変数を使用する。** APIキーやトークンをツールコードにハードコードしないでください。ToolSetのEnvironmentsタブに保存します。
* **反復にCopilotを活用する。** テスト実行が失敗した後、Copilotはエラー出力にアクセスでき、的確な修正を提案できます。
