
ローカルでOmniのコードを開発したときにOmniのインスタンスと同期できる「model-local-editor」を試してみた
さがらです。
Omniでは、インスタンス上のGUI操作からSemantic Layerのコードを作成することができますが、昨今Claude CodeなどのAIコーディングエージェントの発達により、OmniのSemantic Layerをローカルから開発したいというケースがあると思います。
実際私もこのケースに直面して、ローカルからOmniのSemantic Layerのコードを開発してプルリクエスト発行してmainブランチへマージしたのですが、Omniのインスタンス上に最新のコードが反映されない事象に遭遇しました。(APIも検証したのですが、うまく動作せずでした。)
この状況をOmni社のエンジニアに相談した所、「model-local-editor」というパッケージが公開されていることを教えて頂きました。これを使用することで、ローカルで開発したOmniのSemantic Layerのコードの内容を、Omniのインスタンス上に反映させることができるようです。
このパッケージを試してみた内容を本記事でまとめてみます。
前提条件
- OS:Ubuntu 24.04 LTS(WSL2で動作)
- パッケージ管理:npm 11.11.0
- model-local-editor:0.2.0
Omniで開発するModelはGit連携しており、そのリポジトリをローカルにクローンして開発している状況とします。(Omniのセットアップ関係は、こちらのブログをご覧ください。)
また、このリポジトリではOmniだけでなくdbtのコードなども管理しているリポジトリであるとします。

事前準備
model-local-editorのインストール
まず、model-local-editorをインストールします。
npm install -g @omni-co/model-local-editor
環境変数設定
以下の2つの環境変数を設定します。(永続化させる場合は、~/.bashrcや.envファイルなどを検討ください。)
export OMNI_API_KEY="your-api-key-here"
export OMNI_BASE_URL="https://my-org.omniapp.co" # or your Omni instance URL
試してみる
準備は整ったので、model-local-editorを使ってOmniインスタンスへSyncしてみます。
推奨:ローカルのGitでこれからOmni側で作成するブランチと同名のブランチを作成
model-local-editorを使う前に、これからOmni側で作成するブランチと同名のブランチを作成しておくことを推奨します。
理由は、model-local-editorではOmniインスタンス側にブランチを作成するだけのため、ローカルがどのブランチであってもSync処理は設定したブランチに連携されてしまうためです。
今回は、ローカルで20260306-local-sync-testというブランチを作成して切り替えて動作検証してみます。
git switch -c 20260306-local-sync-test
初期セットアップとブランチ作成
以下のコマンドを実行して、OmniのModelを指定しつつ、--dirオプションで対象のModelを管理するフォルダパスを入れて、Omni上で新しいブランチを切ります。(model-idは、対象のModelを開いた時にURL欄から確認可能です。)
※その他のオプションについては、パッケージのドキュメントをご覧ください。
omni-sync init < model-id > --dir < Omniの対象のModelを管理するフォルダパス > --branch < Omni側で作成されるブランチ名 > --create-branch
このコマンドを実行すると、下図のように表示されます。

また、--dirオプションで指定したディレクトリにおいて、各ファイルの変更履歴を確認できる.omni-sync.jsonというファイルが作られます。(このファイルはmodel-local-editorで使用するファイルのため、ユーザーが直接編集することは基本的にありません。)

この状態でOmniで対象のModelを開きブランチ一覧を表示すると、--branch 20260306-local-sync-testと指定して、作成した20260306-local-sync-testが作られていることがわかります。

ローカルで編集した内容をOmniへ反映
続いて、ローカルで編集した内容をOmniへ反映していきます。
まず、以下のコマンドをローカルで実行して、model-local-editorによるSyncプロセスを起動し常駐させます。--dirオプションをつけないとリポジトリのルートにOmniの各フォルダとファイルが自動で移動してしまうためご注意ください。
omni-sync start < model-id > --dir < Omniの対象のModelを管理するフォルダパス > --branch < omni-sync initで指定したブランチ名 >
すると、下記のように表示されます。末尾のFile watcher readyと表示されたら、準備完了です。このプロセスを常駐させておくことがポイントです。

この状態で、適当にOmniのファイルを編集して保存すると、下図のようにログが表示されます。

この上でOmniのインスタンス上でブランチを切り替えて対象のファイルを見ると、下図のように同期されていました!(ブラウザキャッシュが原因かも知れませんが、同期に時間がかかるケースも何回かありましたのでご注意ください。)
これで、ローカルからの開発を行っていても、Omniのインスタンス上ですぐに動作確認が可能です。

おまけ:開発後のプルリクエスト作成はOmniの画面から行うことを推奨します
先程紹介した手順でmodel-local-editorを用いた、Omniのコードをローカル開発してOmniのインスタンス上で検証するイメージはついたと思います。
一方で、一通りの開発を終えてプルリクエストを発行する際ですが、Omniのインスタンス上からプルリクエストを発行することを推奨します。この理由ですが、ローカルからプルリクエストを発行してマージしても、Omniのインスタンス上のmainブランチのコードが更新されなかったためです…
以下は実際のプルリクエスト作成の流れのイメージです。先程追加したdimensionであるupdated_at_20260306がmainブランチへマージされ、Omniのインスタンス上のSharedモデル(mainブランチのコードとSyncされるOmniの共通利用するモデル)に反映されていることがわかります。




最後に
ローカルでOmniのコードを開発したときにOmniのインスタンスと同期できる「model-local-editor」を試してみました。
Omniのインスタンス上のIDEも優秀なのですが、私も最近Claude Codeの虜になってしまった人間なので、ローカルから開発してすぐにOmniのインスタンス上で検証できるこの機能は大変便利だと感じました!
ぜひ、ローカルでコーディングエージェントを使ってOmniのSemantic Layerを開発する際は、このパッケージもご活用ください。








