```mdx
---
title: "コード"
description: "データ処理のためにカスタムPythonまたはJavaScriptを実行"
icon: "code"
---

コードノードは、ワークフロー内で複雑なデータ変換、計算、およびロジックを処理するためにカスタムPythonまたはJavaScriptを実行します。プリセットノードでは特定の処理ニーズに十分でない場合に使用してください。

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

## 設定

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

```python
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
    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
    function main(data) {
        const processed = data.map(item => item.toUpperCase());
        return { result: processed };
    }
    ```
  </Tab>
</Tabs>

## エラーハンドリングとリトライ

失敗したコード実行のための自動リトライ動作を設定し、コードがエラーに遭遇した際のフォールバック戦略を定義します。

<Frame caption="エラーハンドリング設定オプション">
  <img src="https://assets-docs.dify.ai/2024/12/58f392734ce44b22cd8c160faf28cd14.png" alt="コードエラーハンドリング" />
</Frame>

**リトライ設定**では、最大10回の自動リトライと最大5000msの間隔を設定できます。これは一時的な処理問題を扱うために有効にします。

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

<Frame caption="リトライ設定インターフェース">
  <img src="https://assets-docs.dify.ai/2024/12/9fdd5525a91dc925b79b89272893becf.png" alt="リトライ設定" />
</Frame>

## 出力の検証と制限

コード出力は厳格な制限で自動的に検証されます:
- **文字列**: 最大80,000文字の長さ、ヌルバイトは削除されます
- **数値**: -999999999から999999999までの範囲、浮動小数点数は小数点以下10桁に制限
- **オブジェクト/配列**: 複雑なネスト構造を防ぐために最大5レベルの深さ

これらの制限は、パフォーマンスを確保し、ワークフローでのメモリ問題を防ぎます。

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

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

一部の操作はセキュリティ上の理由から自動的にブロックされます。システムファイルへのアクセスや潜在的に危険な操作を試みるのを避けてください:

<Frame caption="Cloudflare WAFによるセキュリティフィルタリング">
  <img src="https://assets-docs.dify.ai/2024/12/ad4dc065c4c567c150ab7fa7bfd123a3.png" alt="Cloudflare WAFによるブロック" />
</Frame>

コードが保存されない場合、ブラウザのネットワークタブを確認してください - セキュリティフィルターが潜在的に危険な操作をブロックしている可能性があります。

## 依存関係のサポート

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

```python
# 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
// JavaScript: lodash、momentなどをインポート
const _ = require('lodash');

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

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

## 自己ホスト型セットアップ

自己ホスト型Difyインストールの場合、安全なコード実行のためにサンドボックスサービスを開始します:

```bash
docker-compose -f docker-compose.middleware.yaml up -d
```

サンドボックスサービスはDockerを必要とし、セキュリティのためにコード実行をメインシステムから分離します。

## 一般的なユースケース

**データ解析** - APIや他のノードから返される複雑なJSON構造から特定の値を抽出します。

**数学的操作** - 計算、統計解析、またはプリセットノードでは対応できないデータ集計を行います。

**データ変換** - データ形式を変換し、複数のデータソースを結合するか、下流の処理のために情報を再構築します。

**条件付きロジック** - 単純なif-else条件を超えた複雑な意思決定ロジックを実装します。
```