# ワークフローへのカスタムPythonスクリプトの追加

Pythonオペレーター（py>:）を使用して、Treasure ワークフローからPythonスクリプトを実行できます。Treasure コンソールまたはコマンドラインからTreasure ワークフローを使用して、ワークフロー定義を作成します。

ワークフロー定義では、Pythonスクリプトを実行するために使用するDockerイメージを指定します。ワークフロータスクが開始されると、指定されたDockerイメージに基づいて新しいDockerコンテナが作成されます。その後、Pythonスクリプトは隔離された環境内のコンテナで実行されます。

* [前提条件](#prerequisites)
* [Pythonの例](#python-examples)
* [PythonスクリプトをTreasure ワークフローに追加](#add-your-python-script-to-treasure-workflow)
* [Treasure コンソールの使用](#using-td-console)
* [td CLIの使用](#using-td-cli)
* [Dockerイメージ](#docker-images)
* [独自のPythonライブラリのインストール](#install-your-own-python-libraries)
* [ローカルラップトップでのDockerイメージの使用](#using-docker-images-on-your-local-laptop)


## 前提条件

* この機能がTreasure アカウントで有効になっていることを確認してください。
* Treasure ワークフローの構文に関する基本的な知識。
* CLIを使用する場合は、以下を行う必要があります：
  * TD ToolbeltとTD Toolbelt Workflowモジュールをダウンロードしてインストールします。
  * [ローカルマシンにDocker](https://docs.docker.com/get-started/)をセットアップします。


## Pythonの例

以下のような基本的な[例](https://github.com/treasure-data/treasure-boxes/tree/master/integration-box/python)を参照することをお勧めします：

* 関数の呼び出し方法
* 関数へのパラメータの渡し方
* 環境変数の使用方法
* 関数のインポート方法


## PythonスクリプトをTreasure ワークフローに追加

追加するスクリプトが複数ある場合は、コマンドライン方式を使用することをお勧めします。

### Treasure コンソールの使用

1. **Data Workbench** > **Workflows**に移動します。
2. Pythonスクリプトを追加するワークフローを選択します。
3. **Launch Project Editor**を選択します。
4. **Edit Files**を選択します。
5. **Add New File**を選択します。
6. digファイル名を入力します。
7. `py>`オペレーターを追加し、使用するDockerイメージを指定します。スクリプトは以下のサンプルのようになります：


```yaml
+py_custom_code:
  py>: tasks.printMessage
  docker:
    image: "treasuredata/customscript-python:3.12.11-td3"
```

最新の利用可能なイメージについては、[Custom Scripts Dockerイメージ](/products/customer-data-platform/data-workbench/workflows/customscript/custom-scripts-docker-images)を参照してください。

1. 各スクリプトを追加するか、各スクリプトのテキストを新しいスクリプトエディタウィンドウにコピー＆ペーストできます。


![](/assets/image2021-6-29_9-46-48.e4c8d76240ecee2e377e65d6af7fd63fe7c81747af6364ea2fd7d0d1d176b068.142841d8.png)
9. **Save & Commit**を選択します。

### td CLIの使用

コマンドラインを使用して、既存のワークフローにPythonスクリプトを追加できます。ただし、新規ユーザーは最初にコマンドラインを使用してワークフローを作成する必要がある場合があります。

1. ワークフローディレクトリにワークフロー定義の.digファイルとPythonスクリプトを追加します。
2. .digファイル内でpy>:オペレーターに使用するDockerイメージを指定します。
3. ワークフローdigファイルに以下のような構文を追加して、py>オペレーターを追加し、Dockerイメージを指定します。スクリプトは以下のサンプルのようになります：
4. td CLIコマンド`td wf push <project_name>`を使用して、ワークフローをTreasure Dataにプッシュします。


```yaml
+<wf_task_name>:
  py>: <script_filename>.<function_name>
  docker:
    image: "<image_name>:<version>"
```

## Dockerイメージ

Treasure ワークフロー内のPythonスクリプトは、Treasure Dataによって隔離されたDockerコンテナで管理および実行されます。Treasure Dataは、コンテナで実行するための多数のベースDockerイメージを提供しています。イメージでサポートされているPythonバージョンとライブラリに基づいて、Pythonスクリプトを実行するための適切なDockerイメージを選択できます。

```yaml
+task_name:
  py>: <script_filename>.<function_name>
  docker:
    image: "<image_name>:<version>"
```

利用可能なイメージ名とバージョンについては、[Custom Scripts Dockerイメージ](/products/customer-data-platform/data-workbench/workflows/customscript/custom-scripts-docker-images)を参照してください。

## 独自のPythonライブラリのインストール

Dockerイメージで提供されるライブラリに加えて、Pythonスクリプト内でpip installコマンドを使用して追加のサードパーティライブラリをインストールできます。

Pythonスクリプト内から、以下の構文を追加してライブラリをインストールします：

```python
import os
import sys

os.system(f"{sys.executable} -m pip install asn1==3.1.0")
```

警告：Pythonパッケージのバージョン固定
パッケージの将来のアップデートによる予期しない問題を避けるため、特定のバージョンを指定してPythonパッケージをインストールまたはアップデートすることをお勧めします。

例えば、パッケージの特定のバージョンをインストールするには、以下の構文を使用します：

```python
os.system(f"{sys.executable} -m pip install asn1==3.1.0")
```

バージョンを指定せずに以下の構文を使用しないでください。将来パッケージがアップデートされた際に予期しない問題が発生する可能性があります：

```python
os.system(f"{sys.executable} -m pip install -U pytd")
```

## ローカルラップトップでのDockerイメージの使用

Dockerイメージは[Dockerhub](https://hub.docker.com/r/digdag/digdag-python/tags?page=1&ordering=last_updated)でも公開されており、評価やテスト目的でラップトップで利用できます。

前提条件：[Dockerランタイム](https://docs.docker.com/get-docker/)がインストールされていること。

注意
以下の例では`treasuredata/customscript-python:3.12.11-td3`を使用しています。最新の利用可能なイメージについては、[Custom Scripts Dockerイメージ](/products/customer-data-platform/data-workbench/workflows/customscript/custom-scripts-docker-images)を参照してください。実行する前にコマンド内のイメージタグを置き換えてください。

ラップトップで以下のようにPythonバージョンを確認できます：

```bash
$ docker run -it --rm treasuredata/customscript-python:3.12.11-td3 python --version
```

インタラクティブセッションを実行するには、以下のように実行します：

```bash
$ docker run -it --rm treasuredata/customscript-python:3.12.11-td3 bash
$ whoami
> td-user
```

引数なしでイメージを実行すると、Pythonインタラクティブシェルが起動します：

```bash
$ docker run -it --rm treasuredata/customscript-python:3.12.11-td3
Python 3.12.11 (main, Aug 12 2025, 22:47:31) [GCC 12.2.0] on linux
>>
```

pip freezeを使用してライブラリバージョンの完全なリストを取得できます：

```bash
$ docker run -it --rm treasuredata/customscript-python:3.12.11-td3 pip freeze
> aiohappyeyeballs==2.6.1
> aiohttp==3.13.4
> aiosignal==1.4.0
> alembic==1.16.4
> …
$ docker run -it --rm treasuredata/customscript-python:3.12.11-td3 pip freeze | grep scikit
> scikit-learn==1.7.1
$ docker run -it --rm treasuredata/customscript-python:3.12.11-td3 pip freeze | grep pytd
> pytd==2.2.0
```