弁護士ドットコム株式会社 Creators’ blog

弁護士ドットコムがエンジニア・デザイナーのサービス開発事例やデザイン活動を発信する公式ブログです。

Tableau の運用の改善のために独自開発した Tableau Tools の紹介

1. はじめに

こんにちは!データ本部の冨田です。

私の所属するデータ本部は2025年4月に新設された部署で、全社横断的なデータ活用や、それを支えるデータ分析基盤の開発などをミッションとしています。データ本部ではメインの BI ツールとして Tableau Cloud を採用しているのですが、Tableau Cloud を本格的に運用し始めると次のような困ったことが起きてきます。

  • 本番環境と開発環境を切り分けて運用するのが難しい
  • 利用者数が増えてくると、ユーザー・グループ・権限などの管理を Tableau Cloud の管理画面から実施するのは時間がかかる上に、ヒューマンエラーも起きやすい

この記事では、上記のような課題を解決するために独自開発した「Tableau Tools」についてご紹介します。Tableau Cloud を利用・運用している方々にとって、何かしらのヒントとなれば幸いです。

2. 私たちが直面した Tableau Cloud 運用の壁

先に触れた本番環境と開発環境の切り分けユーザー・権限管理の煩雑化といった課題が、私たちの日々の運用において具体的にどのような問題を引き起こしていたのか、順にご紹介します。

本番環境と開発環境の切り分けが難しい

私たちの開発するデータ基盤では、データストレージとして Google BigQuery、データ変換ツールとして dbt Cloud を採用しています。dbt による変換を介して、最終的に BigQuery のデータマート用のプロジェクトの下に前処理済みのデータが配置されます。

dbt Cloud では3つの環境を用意しており、1つは本番環境、2つ目が全員で共通の開発環境、そして3つ目が個々人が自由に開発できる個人環境です。これら3つの環境では、それぞれ異なる Google Cloud のプロジェクトにテーブルが作成されます。これを図にまとめると以下の通りです。

本番環境、開発環境、個人環境の構成
本番環境、開発環境、個人環境の構成

Tableau のダッシュボードも、人数が増えてきて運用が始まると、本番環境と開発環境を切り分ける必要が出てきます。最初は各人が Tableau Desktop でローカルで開発を行いますが、あるときそれを開発環境にパブリッシュして関係者のレビューを受けます。フィードバックを受けて改善というプロセスを繰り返したのち、本番リリース可能な水準に達したらダッシュボードを本番環境にパブリッシュする、という手順を踏みます。

このプロセスを真面目に実現しようとすると、開発時にはデータマートも開発環境を参照し、本番リリース時に参照先を本番環境のデータマートに切り替える必要が生じてきます。そして、この作業が Tableau Desktop では結構厄介なのです。

本番環境へのリリースの際には参照テーブルの切り替えが必要となる
本番環境へのリリースの際には参照テーブルの切り替えが必要となる

気を遣いながらデータソースの置換をしたり、カスタムSQLに含まれているテーブルの参照先を書き換えたり……といった煩雑でミスも起きやすい作業を本番リリースのたびに行う必要が出てきます。一部のテーブルを置き換え忘れたまま本番リリースしてしまったり、この煩雑な作業に耐えかねて本番環境のデータマートを参照してダッシュボードの開発を行う人が出てくるのは想像に難くありません。

ユーザー・権限管理の煩雑化

弊社では既に100人を超える Tableau ユーザーがいますが、利用者数の増加に伴い、ユーザーアカウントの追加、グループへの割り当て、プロジェクトごとの細かな権限設定といった作業を Tableau Cloudの管理画面上で実施するのは限界がありました。一つ一つの操作は単純でも、数が増えればヒューマンエラーのリスクは格段に高まります。例えば、誤った権限を意図せず付与してしまい、本来アクセスできてはいけないデータが見えてしまうといった事態は、データガバナンス上の重大なインシデントに繋がりかねません。

もっと効率的に、もっと安全に、そしてもっと楽に Tableau Cloud を運用したいという現場の切実な思いから、Tableau Tools の開発はスタートしました。先ほど説明した2つの課題解決のため、「デプロイツール」と「Tableau Cloud 設定ツール」というツールをそれぞれ開発することにしました。

課題と課題を解決するために開発するツールのまとめ
課題と課題を解決するために開発するツールのまとめ

3. デプロイツール:デプロイ作業の自動化

「本番環境と開発環境の切り分けの難しさ」という課題に対しては、デプロイツールと呼んでいるツールを開発しました。開発環境から本番環境へのワークブック移行に伴う参照先の書き換え作業による時間的コスト、精神的負担、そしてヒューマンエラーのリスクなどを削減することが目的です。

基本的なアイデア

このツールの基本となるアイデアは単純です。Tableau Server Client や Tableau Document API といった公式ライブラリを駆使して、以下のような手順で開発環境に配置されているワークブックに適宜修正を加えた上で本番環境にデプロイをします。

  1. 開発環境や本番環境のワークブックの場所や、置き換えるべき接続情報などが記載された設定ファイルを読み込む
  2. Tableau Server Client を使い、Tableau Cloud の開発環境からワークブックをダウンロードする
  3. Tableau Document API を使い、ワークブックの接続情報等を書き換える
  4. Tableau Server Client を使い、接続情報が置き換えられたワークブックをパブリッシュする

設定ファイル読み込み以降の2〜4の部分の処理を図示すると、次のようになります。

ワークブックを開発環境から本番環境へデプロイする仕組み
ワークブックを開発環境から本番環境へデプロイする仕組み

主要機能

デプロイツールの主な機能は以下の通りです。

  • 設定ファイルに基づく接続情報の置換: Tableauワークブック (.twb/.twbx) ファイル内のデータソース接続情報を、ダッシュボードごとに定義された設定ファイルに基づいて自動的に置換します。
  • カスタムSQL内のテーブル参照の置換: カスタムSQLクエリに含まれるデータベース名やスキーマ名、テーブル名などを、同様に設定ファイルに基づいて環境ごとに適切なものに置換します。
  • Tableau Cloudへの自動パブリッシュ: 接続情報やカスタムSQLを置換したワークブックを、指定されたTableau Cloudのプロジェクトへ自動的にパブリッシュします。
  • ワークブックの設定変更: ワークブックに含まれるシートをの一部を非表示にするなど、デプロイ時にワークブックの細かな設定変更ができます。

設定ファイルの記述例

デプロイの設定は、Pythonのコードとして記述します。以下に設定ファイルのイメージを示します。

config = DeployConfig(
    # デプロイ元のワークブック
    source=TableauObject(
        project=["Awsome Project", "dev"],
        name="Awsome Monitoring Dashboard",
    ),
    # ワークブックのデプロイ先
    destination=TableauObject(
        project=["Awsome Project", "prod"],
        name="Awsome Monitoring Dashboard",
    ),
    # 接続情報を置換するルール
    # `development-project` への参照を全て `production-project` に置き換えた上で、接続に使うユーザー情報も `production@foobar.iam.gserviceaccount.com` に置き換える
    connection_replacement_rules=[
        ConnectionRule(
            target_datasource="*",
            target_connection=BigQueryConnection(
                project="development-project",
                username="*",
            ),
            new_connection=BigQueryConnection(
                project="production-project",
                username="production@foobar.iam.gserviceaccount.com",
            ),
        )
    ],
)

この設定ファイルを用いることで、デプロイツールはワークブックの接続情報を設定通りに書き換えてくれます。弊社ではダッシュボードの開発時には何度もリリースを行いフィードバックを何度も取り込んでいくという作業が行われていますが、最初に一度だけこの設定ファイルを書いておくと、2回目以降はツールを実行するだけで開発環境から本番環境への接続情報の置き換えが行われます。

4. Tableau Cloud 設定ツール:ユーザー・権限のコード管理

デプロイ作業の自動化と並んで、私たちが抱えていたもう一つの大きな課題が「ユーザー・権限管理の煩雑化」です。100名を超えるユーザーの追加や削除、グループへの割り当て、プロジェクトやワークブックに対する細かな権限設定をTableau Cloudの管理画面から手作業で行うのは、時間的コストだけでなく、ヒューマンエラーのリスクも常に伴います。

このようなインフラ設定や権限管理は、Terraformに代表されるIaC (Infrastructure as Code) ツールを用いてコードで管理し、変更履歴の追跡やレビューなどが行われることが多いかと思います。しかし、残念ながらTableau CloudはTerraformに公式には対応していません(2025年5月現在)。

そこで私たちは、Tableau Cloudの各種設定、特にユーザー、グループ、プロジェクト、そしてそれらに紐づく権限をコードベースで管理するためのツール、Tableau Cloud 設定ツールを開発しました。

主要機能

Tableau Cloud 設定ツールの主な機能は以下の通りです。

  • プロジェクト構造の管理: プロジェクトの作成、親子関係の設定、説明の付与などを設定ファイルで行えます。例えば、新しいプロジェクトを作成する際に、その配下に本番環境用のワークブックを配置するサブプロジェクトや、開発中のワークブックを置くためのサブプロジェクトなどをルールに基づいて自動的に生成することも可能です。
  • ユーザーグループの管理: グループの作成、ユーザーのグループへの割り当てを設定ファイルで定義できます。
  • 権限設定の管理: プロジェクトやワークブック、データソースに対するグループやユーザーごとの細かな権限(表示、保存、ダウンロードなど)を設定ファイルで一元管理できます。

弊社ではこれらの機能を使って、プロジェクトの構造の管理や、各プロジェクト・サブプロジェクトにアクセスできるユーザーやグループの管理をしています。

これは説明のための例ですが、例えば ProjectA と ProjectB という2つのプロジェクトがあった時、以下のようなプロジェクト構造を自動的に作成します。

.
├── ProjectA
│   ├── dev
│   └── prod
└── ProjectB
    ├── dev
    ├── limited  # 限られた人だけがアクセスできるサブプロジェクト
    └── prod

それぞれのプロジェクトの下には dev と prod というサブプロジェクトが存在しています。各プロジェクトにはデータ本部のメンバーやそれぞれのプロジェクトに所属するメンバーがアクセス可能です。dev は開発中のダッシュボードを置く環境で、ダッシュボード開発者間でのレビューや、事業部の利用者に本番リリース前に問題がないかを確認してもらう際に利用しています。prod は本番環境で、実際にダッシュボードを運用する際にはこの環境を利用します。

センシティブな情報を扱う場合など、特定のプロジェクトの中でも限られた人にしか見せたくないダッシュボードというものが存在します。そのような場合は ProjectB > limited のような形で別のサブプロジェクトを作成し、そこにアクセスできるユーザーやグループを別途設定することができます。

このような形でツールを介してプロジェクトの作成や権限管理を行うことで、Tableau Cloud の管理者が1人でコンソールから作業する際にユーザーを異なるプロジェクトに割り当ててしまった!という事故を極力減らすことができます。

5. Tableau Toolsによる効率的で安全な運用フロー

これまで紹介したデプロイツールと Tableau Cloud 設定ツールを組み合わせて活用することで、私たちは Tableau のダッシュボード開発を以下のように運用しています。

ダッシュボード開発する場合

  1. Tableau Desktop でダッシュボードを開発し、手動で開発環境にパブリッシュする
  2. 開発環境から本番環境にデプロイするための設定ファイルを実装し、プルリクエストを作成する
  3. チームメンバーのレビューとCIの通過を必須とすることで、設定ミスが起きる可能性を極力減らす
  4. プルリクエストをマージしたら、デプロイツールを GitHub Actions を手動でトリガーしてダッシュボードを本番環境にデプロイする
  5. [改善フェーズ] ダッシュボードの提供先のユーザーからフィードバックをもらい、変更を開発環境に反映→デプロイツールで本番環境にデプロイを繰り返す

Tableau Cloud のユーザーの追加や権限の変更をする場合

  1. Tableau Cloud 設定ツール内のユーザー・グループ・権限等が記載されている設定ファイルを編集しプルリクエストを作成する
  2. GitHub Actions Tableau Cloud 設定ツールの dry-run の結果が自動的にプルリクエストのコメントに追加される(下図参照)
  3. 設定ファイルや dry-run の結果、およびCIの結果を元にチームメンバーに変更をレビューしてもらう
  4. プルリクエストをマージすると、Tableau Cloud 設定ツールが GitHub Actions で自動で実行され、ユーザーの追加や変更等が完了する。

GitHub Actions によって dry-run の結果が自動的に通知される様子
GitHub Actions によって dry-run の結果が自動的に通知される様子

運用フローの特徴

この運用フローの主な特徴は以下の通りです。

Gitベースの構成管理とレビュープロセス

Tableau Toolsで利用する設定ファイルは、すべてGitリポジトリで管理しています。

  • バージョン管理: 全ての設定変更がGitのコミット履歴として残るため、「いつ、誰が、何を変更したのか」が明確になります。
  • レビュープロセス: 設定変更をプルリクエストベースで行うことで、チームメンバーによるレビューが可能になります。これにより、設定ミスや意図しない変更が本番環境に適用されるリスクを大幅に低減できます。

GitHub Actionsを用いたCI/CDパイプライン

Tableau Tools は単体で CLI として使うこともできますが、現在は主に GitHub Actions のワークフローから起動する形で使用しています。

  1. 設定変更のPR作成とdry-runの自動実行: 設定ファイルを修正しプルリクエストを作成すると、GitHub Actionsが自動的にdry-runを実行し、その結果をPRにコメントします。
  2. 承認とマージ、本番環境への自動適用: レビューで問題がなければPRをマージし、マージをトリガーに本番環境への設定適用が自動的に行われます。
  3. 詳細なログの出力: ツール実行時に GitHub Actions には実施した操作のログがすべて保存されます。例えば追加・削除したユーザーの一覧や、置き換えた接続情報の一覧、書き換えたカスタムSQLの diff なども表示されます。

この一連のフローにより、手動でのコマンド実行や設定適用の手間が省かれ、ヒューマンエラーの介在する余地が大幅に削減されます。また、万が一問題が起こった時も、どのような処理が適用されていたのかをログから遡ることが可能です。

6. AI による運用の更なる効率化

弊社ではAIを使った開発に積極的に取り組んでおり、GitHub Copilot、Cursor、Cline、Devin などを様々なチームが導入し、どのように効率的に活用できるかを模索しています。

データ本部でもこれらのツールの一部を導入しており、Tableau Tools 周りに関しては下記のように Devin を使った効率化も実施されています。

ユーザーの追加・変更を Devin に依頼する

前章で説明した通り、ユーザーの追加や変更を行うためには Tableau Cloud 設定ツール内の設定ファイルを書き換える必要がありました。せいぜい数行程度の変更なのですが、ほぼ単純作業な上に、他の作業に割り込んできて対応する必要があるので、地味に苦痛です。

そこで、データ本部では最近はこの作業を Devin に依頼しています。ユーザーを追加する時にはどのファイルをどのように編集すべきか、といったことを Devin の Knowledge に記載しておくことで、基本的な変更であれば数分で Devin が完了させてくれるようになりました。

弊社の場合は Tableau のユーザーの追加依頼などは Slack で飛んでくるので、例えば以下のようにそのまま Slack で Devin に丸投げします。数分後に上がってきたプルリクエストをレビューしてマージしたら完了です。今までメイン作業を一時的に止めて行なっていたユーザー追加作業が、ランチやちょっと休憩で離席したりしている間にスマホでもできるようになりました。

ユーザー追加の依頼を Devin に丸投げする様子
ユーザー追加の依頼を Devin に丸投げする様子

7. まとめ

本記事では、弁護士ドットコムのデータ本部が開発・運用している「Tableau Tools」について、その開発背景、主な機能、そして導入によって得られた効果をご紹介しました。

Tableau Cloudは非常に強力なBIプラットフォームですが、その運用、特に複数環境での開発や大規模なユーザー管理においては、手作業による非効率さやヒューマンエラーのリスクといった課題が顕在化しやすい側面もあります。今回紹介した Tableau Toolsの導入により、設定やデプロイ作業が効率化されたり、ヒューマンエラーを少なくするためのレビューがしっかり行えるようになったと実感しています。

この記事が、同じようにTableau Cloudの運用に課題を感じている方々にとって、少しでもお役に立てれば幸いです。

最後までお読みいただき、ありがとうございました。