Tableauの.twbファイルからOmniのSemantic LayerのyamlのコードをClaude Codeで自動生成してみた

Tableauの.twbファイルからOmniのSemantic LayerのyamlのコードをClaude Codeで自動生成してみた

2026.03.09

さがらです。

Omniのように新しいBIツールを導入することを考えた時に、一番のハードルになるのは「既存のBIツールからどのように移行するか」、だと思います。

しかし昨今の状況として、Claude CodeなどのAI技術の発展によりコード化・テキスト化されているコンテンツ間の移行であれば、やってみると意外となんとかなる状況になりつつあります。

そこで今回、TableauからOmniの移行という前提で、Tableauの.twbファイルからOmniのSemantic LayerのyamlのコードをClaude Codeで自動生成することを試してみました。その内容について本記事でまとめてみます。

前提条件

  • 使用するDWH:Snowflake(AWS東京リージョン、Enterpriseエディション)
    • TableauからSnowflakeに接続した.twbファイルから、OmniでSnowflakeとのConnectionとベースとなるModelを作成した上で、移行を試してみます。
  • Claude Code:2.1.70 (Proプラン、Opus 4.6を使用)
  • Python環境:uv 0.10.9を使用
    • 作成したSkillでPythonスクリプトを使用しているためPythonが必要です
  • Tableau Desktop:2025.3.3
  • ローカル環境:Ubuntu 24.04 LTS(WSL2を使用)

事前準備

まず、Omni、Tableau、Claude Code、それぞれで準備をしておきます。

Omni

Omniの事前準備としては、Tableauで使用しているSnowflakeとのConnection作成とベースとなるModelを作成して、Claude Codeから編集しやすくするようにModelのGit連携もしておきます。

2026-03-02_09h59_50

2026-03-02_10h01_49

2026-03-02_10h20_15

Tableau

事前に以下のような.twbファイルを用意しておきます。

  • 4つのテーブル間のリレーションシップを定義し、直近180日間の間で絞り込んだデータソースフィルターも設定

2026-03-08_09h05_14

  • 独自のディメンション・メジャー・パラメータを追加(日本語のディメンションが該当)
    • 地域別_平均フルフィル日数など、LoDを用いたフィールドもあり

2026-03-08_08h56_26

2026-03-08_08h54_52

  • ワークブック内で作成したダッシュボード

2026-03-08_11h17_11

model-local-editorのインストール

Omniは通常インスタンス内のIDEで開発を行なうツールのため、ローカルで開発したものをOmni上で検証するためにはmodel-local-editorというツールをインストールする必要があります。

このツールは、常駐起動させることで、その間に編集されたファイルが全てOmniのインスタンス上に自動で連携される仕様となっています。

以下のブログで使い方をまとめているので、参考にしてみてください。

https://dev.classmethod.jp/articles/try-model-local-editor/

Claude Code(Skillの実装)

今回、Tableauの.twbファイルからOmniのyamlを生成するためのSkillを作成しています。実装方法としては、Claude Codeのskill-creatorのSkillでベースを作成してもらい、トライ&エラーを繰り返して修正していきました。

Skillの詳細は、以下のリポジトリで公開しているためこちらをご覧ください。

https://github.com/SSchneider22/tableau-twb-to-omni-semantic-layer

Claude Codeを用いた.twbファイルからOmniのyamlファイルの自動生成

Git連携したOmni用のリポジトリをローカル環境にクローンし、ブランチを切ります。その上でtableauフォルダを作ります。

その中に、移行対象のtableauワークブックファイル(.twbファイル)を入れます。

2026-03-03_10h20_34

次に、model-local-editorを起動して、Omniのインスタンス上にローカルの編集内容が反映されるようにします。

2026-03-07_07h11_09

この上でClaude Codeを起動し、まず事前準備で作成したSkillが適切に読み込まれているかを確認するため、/skillsを実行します。下図のように表示されれば問題ありません。

2026-03-07_07h11_46

この上で、以下の内容でPlan modeで依頼してみます。 ※フォルダパスなどは、実態に合わせてください。

Skill「tableau-twb-to-omni-semantic-layer」を利用して、develop/manufacturing_dataops_test/tableau フォルダ内の.twbファイルを元に、Omni移行用の各ファイルを生成して

下図のようにプランを作成してくれたので、コード生成を依頼します。

2026-03-09_11h01_37

コード生成完了後、各種コードを確認します。以下は今回生成されたコードの一例です。

  • 既存のViewファイルにdimensions/measures/filters定義が追加されている

2026-03-09_11h16_17

2026-03-09_11h17_04

  • データソースごとにTopicを生成

2026-03-09_11h17_46

  • Tableauの各ワークシート・ダッシュボードをOmni上でどう再現するかの手順をまとめたMarkdownファイルを生成

2026-03-09_11h18_50

2026-03-09_11h19_07

2026-03-09_11h19_26

この後、Git操作を行い、mainブランチを最新の内容に更新します。

Omni上で動作確認

今回はmodel-local-editorを使用していたので、指定したブランチでOmniにもClaude Codeで生成したコードが反映されています。

2026-03-09_11h24_49

この状態でExploreを押し、Tableauで作成していたグラフが再現できるかどうかを、Claude Codeが作成したMarkdownファイルに沿って行ってみます。

各Queryでグラフを再現すると、TableauのデータソースフィルタはTopicのデフォルトフィルタとして適用されており、メジャーを切り替えるパラメータやLoDフィールドも想定通りに機能していることがわかります。

2026-03-09_11h34_49

2026-03-09_11h35_57

2026-03-09_11h27_52

最後に、ダッシュボードも作成してみます。フィルタや凡例の位置などは異なりますが、機能面としてはTableauのダッシュボードと同等の内容を網羅していると思います。

2026-03-09_11h39_54

おまけ:検証中のトラブルの一例

この記事ではうまくいったところだけ書いていますが、検証中は色んなトラブルがありましたので、都度エラーログをClaude Codeに与えてSkillを修正していきました。(少なくとも10回以上はこのコード生成⇛Skill修正のループを繰り返したはずです…)

以下、実際にあったトラブルの一例です。

  • OmniのSemantic Layerのコード上、存在しないパラメータを勝手に使ってしまい、model-local-editorのSync時にエラーログが出てしまう
    • 例1:aggregation_typeについて、存在しない値を指定してしまう
    • 例2:LoDフィールドをOmniの構文に沿って作ってくれない
  • Syncがうまくいっても、Omniの画面上でエラー・警告になる
    • 例1:LoDフィールドで使用しているフィールドをtopicで使用するフィールド一覧に入れてなかった
    • 例2:Omniのフィルター用フィールドをfilters:に定義済なのに、dimensions:でも入れてしまう
    • 例3:aggregate_type: count_distinctのメジャーなのに、sql:でCOUNT DISTINCTを行っている

最後に

Claude Codeを活用してTableauの.twbファイルからOmniのSemantic Layerのyamlコードを自動生成する取り組みを試してみました。

ダッシュボード自体の自動移行までは実現できていないものの、Semantic Layerの定義やTopicの生成、さらにはOmni上でのグラフ再現手順のMarkdown作成まで自動化できたことで、移行作業の大部分を効率化できる手応えを感じました。

特に、TableauのデータソースフィルタやLoDフィールド、パラメータといった複雑な定義も、Skillの改善を重ねることでOmni側で再現できるようになった点は大きな収穫です。

一方で、一発で完璧なコードが生成されるわけではなく、Skillの修正を何度も繰り返す必要がありました。私も今回試した.twbファイルではうまくいきましたが、別の.twbファイルでは都度調整が必要となるかもしれません…

しかし、腰が重くなりがちなBIツールの移行について、AI技術の進歩により「コード化されたもの同士の移行」は現実的な選択肢になりつつあります。

本記事がBIツール移行を考える方の一助になると幸いです。

この記事をシェアする

FacebookHatena blogX

関連記事