Tableauのアプリをコマンドライン実行して作業を自動化する

Tableau OnlineやServerを使えない場合の代替策として、Tableauパッケージドワークブックを渡すことがあります。実体験として、日々メールで送付されてくるサーバー利用情報のCSVを加工し、Tableauパッケージドワークブックを作成してクラウドストレージに格納していたことがありました。現在はTableau Serverを利用してデータ抽出を定時実行できるようになっていますが、そのときに行っていたやり方が有用な場合もあると思いますので、記事にまとめておきます。

## 処理の流れ

処理は大まかに以下のようになっています。この記事では、2と3をコマンドライン実行して自動化する方法を説明します。

1. メールに添付されたCSVを所定のフォルダにダウンロード
2. Prep Builderのフローを実行してデータソースを更新
3. Tableauワークブックをパッケージ化
4. クラウドストレージに格納

メールはGmailを使っているので1はGoogle App Scriptを定期実行したりもしましたが、人手で送信されてくるため時刻が不定期で2以降の自動実行がうまく機能せず、結局は手作業でダウンロードするやり方に戻りました。
4はRPAも考えましたが、Googleドライブにパッケージドワークブックを1つコピーするだけなので、CSVが送信されてきている間は手作業で行っていました。

## Prep Builderのコマンドライン実行

Prep Builderは、Windows版、Mac版ともコマンドライン実行ができます。

### Windows版Prep Builderの場合
[コマンド ラインからフロー出力ファイルを更新](https://help.tableau.com/current/prep/ja-jp/prep_run_commandline.htm#%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B3)

tabeleau-prep-cli.batというバッチファイルが用意されており、-hオプションを指定して実行すると、使い方が表示されます。
```
C:\Program Files\Tableau\Tableau Prep Builder 2022.1\scripts>tableau-prep-cli.bat -h
JAVA_HOME is set to : C:\Program Files\Tableau\Tableau Prep Builder 2022.1\scripts\..\Plugins\jre temporarily
usage: tableau-prep-cli [-c <arg>] [-d] [-dsv] [-h] [-inc] [-p <arg>] [-t
       <arg>]
 -c,--connections <arg>        Path to a file with all connection
                               information
 -d,--debug                    This option is for debugging
 -dsv,--disableSslValidation   Disable SSL validation
 -h,--help                     Print usage message
 -inc,--incrementalRefresh     Run incremental refresh for all outputs
                               that are configured to support it
 -p,--parameters <arg>         The file name for the .json file used to
                               override optional and required parameters.
                               If no file name is specified, the default
                               values for any defined parameters will be
                               used.
 -t,--tflFile <arg>            The Tableau Prep flow file
C:\Program Files\Tableau\Tableau Prep Builder 2022.1\scripts>
-tオプションでフローファイルを指定すればよいことが分かります。
```
### Mac版Prep Builderの場合
MacアプリはFinderでは1つに見えていますが、コンテキストメニューから「パッケージを開く」を選択するとフォルダーとして開くことができます
tableau-prep-cliというシェルスクリプトが用意されていて、Windows版と同様に-hオプションを付けて起動すると、Mac版も-tオプションでフローファイルを指定すればよいことが分かります。
```
% /Applications/Tableau\ Prep\ Builder\ 2022.1.app/Contents/scripts/tableau-prep-cli -h
usage: tableau-prep-cli [-c <arg>] [-d] [-dsv] [-h] [-inc] [-p <arg>] [-t
       <arg>]
 -c,--connections <arg>        Path to a file with all connection
                               information
 -d,--debug                    This option is for debugging
 -dsv,--disableSslValidation   Disable SSL validation
 -h,--help                     Print usage message
 -inc,--incrementalRefresh     Run incremental refresh for all outputs
                               that are configured to support it
 -p,--parameters <arg>         The file name for the .json file used to
                               override optional and required parameters.
                               If no file name is specified, the default
                               values for any defined parameters will be
                               used.
 -t,--tflFile <arg>            The Tableau Prep flow file
%
```
## パッケージ化のコマンドライン実行
フローのコマンドライン実行ができると、Tableau Desktopでしか開けないワークブック（twb）からTableau Readerで開けるパッケージドワークブック（twbx）を書き出す手順（パッケージ化）が億劫になってきます。

### Windows版Tableau Desktop
WindowsでTableauワークブック（twb）を選択すると、コンテキストメニューに「パッケージ化」というメニューが現れます。
そこでレジストリを調べてみると、.twbは以下のようになっています。
```
HKEY_CLASSES_ROOT.twb
Tableau.Workbook.2
```
コンテキストメニューは、以下の通りです。

```
HKEY_CLASSES_ROOT\Tableau.Workbook.2\shell\package\command
"C:\Program Files\Tableau\Tableau 2022.1\bin\tableau.exe" /package "%1"
```

Tableau DesktopのEXEファイルに/packageオプションとファイル名を指定すればよいことが分かります。パスに空白を含んでいるため、コマンドラインから実行する際は引用符で括るなどの対応が必要です。

注意点は、コマンドライン実行するとき**twbファイルは絶対パスで指定すること**です。

### Mac版Tableau Desktop
Mac版もWindows版と同様に、/packageオプションとファイル名を指定します。やはりtwbは絶対パスで指定する必要があります。実行ファイルのパスに空白が含まれるため、エスケープするなどの対応が必要です。
```
/Applications/Tableau\ Desktop\ 2022.1.app/Contents/MacOS/Tableau
```
## まとめ
* Windows、Macとも、Prep Builderのフローをコマンドラインから実行できる
* Windows、Macとも、Tableauワークブックのパッケージ化をコマンドラインから実行できる
* Tableau Prep BuilderとTableau Desktopのコマンドライン実行により、ルーチンワークの効率化が可能である