AlteryxのPython SDKで複数ツールでの共通環境を作成する

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、小澤です。

みんな大好きAlteryxのPython SDKのお時間です。 Python SDKはAlteryxのワークフローを経由せずにPython(とHTML)のみでツールを実装するための仕組みでした。 今回は、ちょっとした応用編としてToolFamilyの話をします。

Alteryx Python SDKとvenv環境の復習

AlteryxのPython SDKでは作成したツールごとにPythonのvenv環境が作成されます。 Python SDKを使ったツールはyxiファイルにして配布することになりますが、 その際に依存ライブラリをrequirements.txtに記載し、インストール時にそれらが含まれるvenv環境が作成されます。

この仕組みの詳細は以下で解説しています。

この仕組みによって、何個ツールを入れようがそれぞれ個別の環境が構築されるため、 ツールの利用者側はライブラリの依存関係やバージョンの競合を気にすること無く好きなツールを好きなだけインストールして利用できるようになっています。

複数ツールとToolFamily

Python SDKでは、このようにすべてのツールが独立した環境を持つわけですが、 ToolFamilyという機能を使うことで、複数のツールに共通したvenv環境を作成することも可能です。

この仕組みを利用するには、ツールごとの設定のxmlファイルと、yxiに含めるConfig.xmlにて設定を行います。

ツールの設定のxmlでは以下のようにEngineSettignsタグにToolFamily属性を設定します。

<?xml version="1.0"?>
<AlteryxJavaScriptPlugin>
  <EngineSettings EngineDllEntryPoint="<実行するPythonファイル>.py" ToolFamily="<Tool Familiyの名前>" EngineDll="Python" SDKVersion="10.1"/>
  <GuiSettings ...>
    ...
  </GuiSettings>
  <Properties>
    ...
  </Properties>
</AlteryxJavaScriptPlugin>

属性値は何でもいいのですが、同一のvenv環境を利用したいツールすべてで、同じ値を設定します。

Config.xmlにも同様の設定を行います。

<?xml version="1.0"?>
<AlteryxJavaScriptPlugin>
  <EngineSettings EngineDll="Python" ToolFamily="<Tool Familiyの名前>" SDKVersion="10.1"></EngineSettings>
  <Properties>
    <MetaInfo>
      ...
    </MetaInfo>
  </Properties>
</AlteryxJavaScriptPlugin>

Config.xmlには、通常はEngineSettingsタグを記述していないと思いますので、それ自体を新たに追記します。 Tool Familyの名前は同じ値を設定してください。

この設定を行ったものでyxiファイルを作成してインストールすると、 %APPDATA%\Roaming\Alteryx\Tools 以下に <Tool Familyの名前>_venv という名前のvenv環境が作成されます(管理者権限でインストールした場合は %PROGRAMDATA% )。 Tool Familyの名前が同じものはこの環境が利用されることになります。

requirements.txtに記載されたライブラリはすべてこのvenv環境にインストールされますので、 どれか1つのツールに一通り記載しておくなどしておくといいでしょう。

また、上記の設定から分かる通り、異なるyxiファイルに同じ値のToolFamily属性を設定することは可能ですが、 単一のyxiで複数個にまたがるような設定はできません。

ToolFamilyの使いどころ

さて、このToolFamily属性によるvenv環境はどのような場面で便利なのでしょうか?

yxiファイルでは複数のツールを同時にパッケージ化することが可能です。 単一のyxiファイルに複数のツールを入れる主な理由としては、対になるような組み合わせがあったり、複数のツールを順に使っていくような場合でしょう。 何らかのデータソースにアクセスするツールであれば入力ツールと出力ツールが対になったりするでしょうし、機械学習系であれば学習と推論のツールが対になっていたりするでしょう。 また、Intelligence Suiteに含まれるAssisted Modelingのように複数のツールを組み合わせて使うことを想定したものもあります(なお、yxiファイルに同時に含めるツールに関しては特に制限はありませんので、ツール詰め合わせパックとして使うこともできます)。

こういった際には、対応するすべてのツールでライブラリのバージョンをそろえておくなどの管理をする際に、すべてのツールのrequrements.txtを書き直す必要がなくなります。 これによって、依存ライブラリに破壊的変更が加わっているのに、一部のツールのみバージョン指定を書き換え忘れたなどを防ぐことが可能になります。

おわりに

今回は、AlteryxのPython SDKにおけるToolFamily属性について解説しました。 「せっかくだから俺はPython SDKを選ぶぜ」派の方はぜひこちらの設定も使ってみてください。