💡

Code by ZapierのPythonコードをGitHubで管理する

2022/01/14に公開

Zapierの Code by Zapier を使うと、PythonかJavaScriptの任意のコードを実行できます。

コードはZapの設定の中に記述しますが、チームで運用する上では少し不便です。Pull Requestで更新したり、CIでテストを実行したり、コード生成したりしたいですね。

Code by Zapier とGitHubとの連携機能は用意されていませんが、GitHubリポジトリにファイルを置いてそれを実行する形で実処理をリポジトリ管理する方法を紹介します。

Pythonでしか試せていませんが、JavaScriptでも同じようなやり方ができると思います。

1. GitHubリポジトリにPythonコードを置く

Zapierで動かしたいコードをリポジトリに置きます。

以下の例は、input_dataとして name が渡され、outputとして message をセットするコードです。
後述する実装上の都合で、input_data は args 、 output は result という変数名で作成します。
https://github.com/konifar/zapier-python-code-run/blob/main/hello.py

name = args['name']

message = "Hello " + name + "!"
print(message)

result = {
    'message': message
}

2. Code by Zapier の Code

Zapier側には、1のファイルに記述したコードを実行するコードだけを書きます。

import requests

# input_data の `script_file_url` には、1で作成したファイルのraw urlをセットします
# https://raw.githubusercontent.com/konifar/zapier-python-code-run/main/hello.py
url = input_data['script_file_url']
# GitHub上のコードの変更を即時反映させるためにno-cacheを指定します
code = requests.get(url, headers={"Cache-Control": "no-cache"}).text

# exec()で実行するコード内での変数のスコープをglobalで定義しておきます
global args
global result
# Code by Zapierで定義されたinput_dataを、global変数のargsにセットします
args = input_data
exec(code, globals())

# Code by Zapierで定義されたoutputに、exec()の中でセットされたresultをセットします
output = result

以上です。
もしもっとよいやり方があれば是非教えてください :pray:

Discussion