💡
Code by ZapierのPythonコードをGitHubで管理する
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 という変数名で作成します。
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