---
title: コード
version: '日本語'
---

## 紹介

コードノードは、Python / NodeJSコードを実行してワークフロー内でデータ変換を行うことをサポートします。これにより、Arithmetic、JSON変換、テキスト処理などのシナリオでワークフローが簡素化されます。

このノードは開発者の柔軟性を大幅に向上させ、ワークフロー内にカスタムPythonまたはJavascriptスクリプトを埋め込んで、事前設定されたノードでは達成できない方法で変数を操作することができます。設定オプションを使用して、必要な入力変数と出力変数を指定し、対応する実行コードを記述できます。

![](/ja-jp/img/904eeba8ee23e89c189497c5fd90f499.png)

## 設定

他のノードの変数をコードノードで使用する必要がある場合は、`入力変数`で変数名を定義し、これらの変数を参照する必要があります。[変数参照](/ja-jp/guides/workflow/concepts)を参考にしてください。

## 使用シナリオ

コードノードを使用して、以下の一般的な操作を実行できます：

### 構造化データ処理

ワークフローでは、しばしば非構造化データの処理が必要です。例えば、JSON文字列の解析、抽出、変換などです。典型的な例として、HTTPノードのデータ処理があります。一般的なAPI応答構造では、データが多層のJSONオブジェクトにネストされていることがあり、特定のフィールドを抽出する必要があります。コードノードはこれらの操作を支援します。以下は、HTTPノードから返されたJSON文字列から`data.name`フィールドを抽出する簡単な例です：

```python
def main(http_response: str) -> dict:
    import json
    data = json.loads(http_response)
    return {
        # 出力変数にresultを宣言することに注意
        'result': data['data']['name'] 
    }
```

### 数学計算

ワークフロー内で複雑な数学計算を行う必要がある場合、コードノードを使用できます。例えば、複雑な数学公式の計算やデータの統計分析です。以下は、配列の平方差を計算する簡単な例です：

```python
def main(x: list) -> dict:
    return {
        # 出力変数にresultを宣言することに注意
        'result' : sum([(i - sum(x) / len(x)) ** 2 for i in x]) / len(x)
    }
```

### データの結合

時には、複数のデータソースを結合する必要がある場合があります。例えば、複数の知識検索、データサーチ、API呼び出しなどです。コードノードはこれらのデータソースを統合するのに役立ちます。以下は、2つのナレッジベースのデータを結合する簡単な例です：

```python
def main(knowledge1: list, knowledge2: list) -> dict:
    return {
        # 出力変数にresultを宣言することに注意
        'result': knowledge1 + knowledge2
    }
```

## ローカルデプロイ

ローカルデプロイのユーザーである場合、悪意のあるコードが実行されないようにするためのサンドボックスサービスを起動する必要があります。このサービスを起動するにはDockerサービスを使用します。サンドボックスサービスの詳細は[こちら](https://github.com/langgenius/dify/tree/main/docker/docker-compose.middleware.yaml)から確認できます。また、`docker-compose`を使用してサービスを直接起動することもできます：

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

> システムにDocker Compose V2がインストールされている場合は、`docker compose`を使用し；V1の場合、`docker-compose`を使用しください。`$docker compose version` でこれに該当するかどうかを確認してください。詳細は[こちら](https://docs.docker.com/compose/#compose-v2-and-the-new-docker-compose-command)をご覧ください。

## セキュリティポリシー

Python3とJavascriptのいずれであっても、その実行環境は安全性を確保するために厳密に隔離（サンドボックス化）されています。これにより、ファイルシステムへの直接アクセス、ネットワークリクエストの実行、OSレベルのコマンドの実行など、システムリソースを大量に消費する可能性がある機能を使用することはできません。これらの制限により、コードの安全な実行が保証され、システムリソースの過剰消費が防止されます。

### よくある質問

**コード ノードにコードを入力した後にコードを保存できないのはなぜですか?**

コードに危険な動作がないか確認してください。例えば：

```python
def main() -> dict:
    return {
        "result": open("/etc/passwd").read(),
    }
```

このコードには次の問題が含まれています。

* **不正なファイル アクセス:** コードは、ユーザー アカウント情報を保存する Unix/Linux システムの重要なシステム ファイルである`/etc/passwd`ファイルを読み取ろうとしました。
* **機密情報の漏洩:** `/etc/passwd`ファイルには、ユーザー名、ユーザー ID、グループ ID、ホーム ディレクトリのパスなど、システム ユーザーの重要な情報が含まれています。直接アクセスすると情報が漏洩する可能性があります。

危険なコードはCloudflare WAFによって自動的にブロックされます。ブロックされているかどうかは、「Webデバッグツール」の「ネットワーク」から確認できます。

![](/ja-jp/img/7d29e700be8e5b6dfb91ff1263624368.png)

{/*
Contributing Section
DO NOT edit this section!
It will be automatically generated by the script.
*/}

---

[このページを編集する](https://github.com/langgenius/dify-docs/edit/main/ja-jp/guides/workflow/node/code.mdx) | [問題を報告する](https://github.com/langgenius/dify-docs/issues/new?template=docs.yml)

