こんにちは!データ本部の冨田です。 私の所属するデータ本部は2025年4月に新設された部署で、全社横断的なデータ活用や、それを支えるデータ分析基盤の開発などをミッションとしています。データ本部ではメインの BI ツールとして Tableau Cloud を採用しているのですが、Tableau Cloud を本格的に運用し始めると次のような困ったことが起きてきます。 この記事では、上記のような課題を解決するために独自開発した「Tableau Tools」についてご紹介します。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 設定ツール」というツールをそれぞれ開発することにしました。 「本番環境と開発環境の切り分けの難しさ」という課題に対しては、デプロイツールと呼んでいるツールを開発しました。開発環境から本番環境へのワークブック移行に伴う参照先の書き換え作業による時間的コスト、精神的負担、そしてヒューマンエラーのリスクなどを削減することが目的です。 このツールの基本となるアイデアは単純です。Tableau Server Client や Tableau Document API といった公式ライブラリを駆使して、以下のような手順で開発環境に配置されているワークブックに適宜修正を加えた上で本番環境にデプロイをします。 設定ファイル読み込み以降の2〜4の部分の処理を図示すると、次のようになります。 デプロイツールの主な機能は以下の通りです。 デプロイの設定は、Pythonのコードとして記述します。以下に設定ファイルのイメージを示します。 この設定ファイルを用いることで、デプロイツールはワークブックの接続情報を設定通りに書き換えてくれます。弊社ではダッシュボードの開発時には何度もリリースを行いフィードバックを何度も取り込んでいくという作業が行われていますが、最初に一度だけこの設定ファイルを書いておくと、2回目以降はツールを実行するだけで開発環境から本番環境への接続情報の置き換えが行われます。 デプロイ作業の自動化と並んで、私たちが抱えていたもう一つの大きな課題が「ユーザー・権限管理の煩雑化」です。100名を超えるユーザーの追加や削除、グループへの割り当て、プロジェクトやワークブックに対する細かな権限設定をTableau Cloudの管理画面から手作業で行うのは、時間的コストだけでなく、ヒューマンエラーのリスクも常に伴います。 このようなインフラ設定や権限管理は、Terraformに代表されるIaC (Infrastructure as Code) ツールを用いてコードで管理し、変更履歴の追跡やレビューなどが行われることが多いかと思います。しかし、残念ながらTableau CloudはTerraformに公式には対応していません(2025年5月現在)。 そこで私たちは、Tableau Cloudの各種設定、特にユーザー、グループ、プロジェクト、そしてそれらに紐づく権限をコードベースで管理するためのツール、Tableau Cloud 設定ツールを開発しました。 Tableau Cloud 設定ツールの主な機能は以下の通りです。 弊社ではこれらの機能を使って、プロジェクトの構造の管理や、各プロジェクト・サブプロジェクトにアクセスできるユーザーやグループの管理をしています。 これは説明のための例ですが、例えば ProjectA と ProjectB という2つのプロジェクトがあった時、以下のようなプロジェクト構造を自動的に作成します。 それぞれのプロジェクトの下には dev と prod というサブプロジェクトが存在しています。各プロジェクトにはデータ本部のメンバーやそれぞれのプロジェクトに所属するメンバーがアクセス可能です。dev は開発中のダッシュボードを置く環境で、ダッシュボード開発者間でのレビューや、事業部の利用者に本番リリース前に問題がないかを確認してもらう際に利用しています。prod は本番環境で、実際にダッシュボードを運用する際にはこの環境を利用します。 センシティブな情報を扱う場合など、特定のプロジェクトの中でも限られた人にしか見せたくないダッシュボードというものが存在します。そのような場合は ProjectB > limited のような形で別のサブプロジェクトを作成し、そこにアクセスできるユーザーやグループを別途設定することができます。 このような形でツールを介してプロジェクトの作成や権限管理を行うことで、Tableau Cloud の管理者が1人でコンソールから作業する際にユーザーを異なるプロジェクトに割り当ててしまった!という事故を極力減らすことができます。 これまで紹介したデプロイツールと Tableau Cloud 設定ツールを組み合わせて活用することで、私たちは Tableau のダッシュボード開発を以下のように運用しています。 この運用フローの主な特徴は以下の通りです。 Tableau Toolsで利用する設定ファイルは、すべてGitリポジトリで管理しています。 Tableau Tools は単体で CLI として使うこともできますが、現在は主に GitHub Actions のワークフローから起動する形で使用しています。 この一連のフローにより、手動でのコマンド実行や設定適用の手間が省かれ、ヒューマンエラーの介在する余地が大幅に削減されます。また、万が一問題が起こった時も、どのような処理が適用されていたのかをログから遡ることが可能です。 弊社ではAIを使った開発に積極的に取り組んでおり、GitHub Copilot、Cursor、Cline、Devin などを様々なチームが導入し、どのように効率的に活用できるかを模索しています。 データ本部でもこれらのツールの一部を導入しており、Tableau Tools 周りに関しては下記のように Devin を使った効率化も実施されています。 前章で説明した通り、ユーザーの追加や変更を行うためには Tableau Cloud 設定ツール内の設定ファイルを書き換える必要がありました。せいぜい数行程度の変更なのですが、ほぼ単純作業な上に、他の作業に割り込んできて対応する必要があるので、地味に苦痛です。 そこで、データ本部では最近はこの作業を Devin に依頼しています。ユーザーを追加する時にはどのファイルをどのように編集すべきか、といったことを Devin の Knowledge に記載しておくことで、基本的な変更であれば数分で Devin が完了させてくれるようになりました。 弊社の場合は Tableau のユーザーの追加依頼などは Slack で飛んでくるので、例えば以下のようにそのまま Slack で Devin に丸投げします。数分後に上がってきたプルリクエストをレビューしてマージしたら完了です。今までメイン作業を一時的に止めて行なっていたユーザー追加作業が、ランチやちょっと休憩で離席したりしている間にスマホでもできるようになりました。 本記事では、弁護士ドットコムのデータ本部が開発・運用している「Tableau Tools」について、その開発背景、主な機能、そして導入によって得られた効果をご紹介しました。 Tableau Cloudは非常に強力なBIプラットフォームですが、その運用、特に複数環境での開発や大規模なユーザー管理においては、手作業による非効率さやヒューマンエラーのリスクといった課題が顕在化しやすい側面もあります。今回紹介した Tableau Toolsの導入により、設定やデプロイ作業が効率化されたり、ヒューマンエラーを少なくするためのレビューがしっかり行えるようになったと実感しています。 この記事が、同じようにTableau Cloudの運用に課題を感じている方々にとって、少しでもお役に立てれば幸いです。 最後までお読みいただき、ありがとうございました。
1. はじめに
2. 私たちが直面した Tableau Cloud 運用の壁
本番環境と開発環境の切り分けが難しい
ユーザー・権限管理の煩雑化
3. デプロイツール:デプロイ作業の自動化
基本的なアイデア
主要機能
設定ファイルの記述例
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",
),
)
],
)
4. Tableau Cloud 設定ツール:ユーザー・権限のコード管理
主要機能
.
├── ProjectA
│ ├── dev
│ └── prod
└── ProjectB
├── dev
├── limited # 限られた人だけがアクセスできるサブプロジェクト
└── prod
5. Tableau Toolsによる効率的で安全な運用フロー
ダッシュボード開発する場合
Tableau Cloud のユーザーの追加や権限の変更をする場合
運用フローの特徴
Gitベースの構成管理とレビュープロセス
GitHub Actionsを用いたCI/CDパイプライン
6. AI による運用の更なる効率化
ユーザーの追加・変更を Devin に依頼する
7. まとめ