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

# コード

> データ処理のためのカスタム Python または JavaScript の実行

> このドキュメントは AI によって自動翻訳されています。不正確な部分がある場合は、[英語版](/en/self-host/use-dify/nodes/code) を参照してください。

コードノードは、カスタム Python または JavaScript を実行して、ワークフロー内で複雑なデータ変換、計算、ロジックを処理します。事前設定されたノードが特定の処理ニーズに十分でない場合に使用してください。

<Frame caption="コードノード設定インターフェース">
  ![コードノード設定インターフェース](https://assets-docs.dify.ai/dify-enterprise-mintlify/en/guides/workflow/node/9969aa1bc1912aebe366f5d8f5dde296.png)
</Frame>

## サンドボックスサービス

コードノードは `sandbox` サービスに依存します。このサービスは標準の Docker Compose デプロイに定義されており、スタックの他のコンポーネントとともに自動的に起動します。

```bash theme={null}
docker compose up -d
```

サンドボックスは独立したコンテナとして動作し、コード実行をホストや他のサービスから隔離します。動作のチューニングには、`docker/envs/core-services/sandbox.env.example` の `SANDBOX_*` 環境変数（ワーカーのタイムアウト、SSRF プロキシ経由のネットワークアクセス、ポート）と、`docker/envs/core-services/shared.env.example` の `CODE_*` 変数（API が参照する出力制限）を使用します。

## 設定

**入力変数** を定義してワークフロー内の他のノードからデータにアクセスし、これらの変数をコード内で参照します。関数は、宣言した**出力変数** を含む辞書を返す必要があります。

```python theme={null}
def main(input_variable: str) -> dict:
    # 入力を処理
    result = input_variable.upper()
    return {
        'output_variable': result
    }
```

## 言語サポート

ニーズと習熟度に基づいて、**Python** と **JavaScript** から選択できます。どちらの言語も、データ処理用の一般的なライブラリにアクセス可能な安全なサンドボックス内で実行されます。

<Tabs>
  <Tab title="Python">
    Python には`json`、`math`、`datetime`、`re`などの標準ライブラリが含まれています。データ分析、数学的演算、テキスト処理に最適です。

    ```python theme={null}
    def main(data: list) -> dict:
        import json
        import math
        
        average = sum(data) / len(data)
        return {'result': math.ceil(average)}
    ```
  </Tab>

  <Tab title="JavaScript">
    JavaScript は標準の組み込みオブジェクトとメソッドを提供します。JSON 操作と文字列演算に適しています。

    ```javascript theme={null}
    function main(data) {
        const processed = data.map(item => item.toUpperCase());
        return { result: processed };
    }
    ```
  </Tab>
</Tabs>

## エラーハンドリングと再試行

失敗したコード実行に対する自動再試行動作を設定し、コードがエラーに遭遇した場合のフォールバック戦略を定義します。

<Frame caption="エラーハンドリング設定オプション">
  ![エラーハンドリング設定オプション](https://assets-docs.dify.ai/2024/12/58f392734ce44b22cd8c160faf28cd14.png)
</Frame>

**再試行設定** では、設定可能な間隔（最大 5000ms）で最大 10 回の自動再試行が可能です。一時的な処理問題の対処にこれを有効にしてください。

**エラーハンドリング** では、コード実行が失敗した場合のフォールバックパスを定義でき、コードが問題に遭遇してもワークフローの実行を継続できます。

<Frame caption="再試行設定インターフェース">
  ![再試行設定インターフェース](https://assets-docs.dify.ai/2024/12/9fdd5525a91dc925b79b89272893becf.png)
</Frame>

## 出力検証と制限

コード出力は、API コンテナに設定された制限値に対して検証されます。

* **文字列**：最大長は `CODE_MAX_STRING_LENGTH`（デフォルト 400,000 文字）で設定します。null バイトは除去されます。
* **数値**：範囲は `CODE_MAX_NUMBER` と `CODE_MIN_NUMBER`（デフォルトは int64 の範囲）で設定します。浮動小数点の精度は `CODE_MAX_PRECISION`（デフォルト 20 桁）で設定します。
* **オブジェクトと配列**：ネストの最大深度は `CODE_MAX_DEPTH`（デフォルト 5）で設定します。配列サイズは `CODE_MAX_STRING_ARRAY_LENGTH`、`CODE_MAX_OBJECT_ARRAY_LENGTH`、`CODE_MAX_NUMBER_ARRAY_LENGTH` で設定します。

デフォルト値は `docker/envs/core-services/shared.env.example` に定義されています。出力サイズを抑えたい場合は制限を厳しくし、より大きなペイロードを正当に生成するワークフローでは緩めてください。

## セキュリティ上の考慮事項

コードは、ファイルシステムへのアクセス、ネットワークリクエスト、システムコマンドを防ぐ厳格なサンドボックス内で実行されます。これにより、プログラミングの柔軟性を提供しながらセキュリティが維持されます。

セキュリティ上の理由から、一部の操作は自動的にブロックされます。システムファイルへのアクセスや潜在的に危険な操作の実行を試みることは避けてください。デフォルトでは、サンドボックス化されたコードからの外部ネットワーク呼び出しは SSRF プロキシ経由でルーティングされます。サンドボックス化されたコードからのネットワークアクセスを完全に無効にするには、`SANDBOX_ENABLE_NETWORK=false` を設定してください。

## 依存関係サポート

コードノードは、Python と JavaScript 両方の外部依存関係をサポートします：

```python theme={null}
# Python: numpy、pandas、requests などをインポート
import numpy as np
import pandas as pd

def main(data: list) -> dict:
    df = pd.DataFrame(data)
    return {'mean': float(np.mean(df['values']))}
```

```javascript theme={null}
// JavaScript: lodash、moment などをインポート
const _ = require('lodash');

function main(data) {
    return { unique: _.uniq(data) };
}
```

依存関係はサンドボックス環境に事前インストールされています。Dify インストールで利用可能なパッケージリストを確認してください。
