---
title: tools/
icon: phosphor-duotone:wrench
summary: tools/ の下にある @AITool 注釈付き関数はすべて、呼び出し可能なツールになります。
description: tools/ の下にある @AITool 注釈付き関数はすべて、呼び出し可能なツールになります。
tags: [conventions, tools]
---

# tools/

`tools/` の下にある `.bx` ファイル (`tools/nested/Search.bx` のようなサブフォルダも動作するよう、**再帰的に**検索されます) のうち、`@AITool` 注釈付きの関数を宣言しているものは、エージェントにとって呼び出し可能なツールになります。

```javascript
// tools/Greeter.bx
class {

	@AITool( "Say hello to someone by name." )
	function sayHello( name ) {
		return "Hello, " & arguments.name & "!";
	}

}
```

BX Agents は `@AITool` 注釈自体をスキャンしたり解釈したりはしません - (名前の衝突チェックのために) `.bx` ファイルごとに 1 エントリを発見し、その後 `tools/` フォルダ全体を**そのまま**生成されたアプリにコピーします。起動時に、生成されたアプリは bx-ai 自身のスキャナーを呼び出します。

```javascript
aiToolRegistry().scan( "tools" )
```

これが (コピーされたファイルを走査し、各クラスをインスタンス化し、`@AITool` 関数を見つける) 実際のリフレクション作業を行います。この文は、プロジェクトが実際に中身のある `tools/` フォルダを持っている場合にのみ出力されます。

## 命名

発見されたエントリ名は、ファイル自身のベース名です (`Greeter.bx` → `Greeter`)。同じベース名を持つ 2 つのツールファイル (発見はベース名によるフラットなものなので、異なるサブフォルダにあっても) は、重複名エラーで検証に失敗します。

## 除外されるもの

- ドットファイル (`.` で始まるもの) は発見から除外されます。
- `tools/` の中の `.env`/ドットファイルは、存在していてもビルド出力には決してコピーされません - コピー処理が明示的にそれらを除外します。

## 再ビルド

`tools/` は消去してから書き直す方式でコピーされます - 生成されたアプリ自身の `tools/` ディレクトリは、`build` のたびに削除されて書き直されます。そのため、あなたのプロジェクトの `tools/` フォルダから削除されたファイルが、以前のビルドの残骸として居残ることはありません。
