
Omniでコンフリクトが発生した場合の修正作業をやってみた
さがらです。
OmniのモデルはGitと連携することで、ブランチを作成→PR発行→レビュー→マージのフローでモデル変更を管理できます。複数人でモデル開発を行う際、異なるブランチで同じメジャーを変更してPRを発行するとコンフリクトが発生します。今回は、このコンフリクトがどのような画面で表示され、どのように解消できるかを確認してみました。
前提条件
今回の検証は、以下の設定が完了している前提で進めます。
- Omni: Git連携済み(GitHubリポジトリと接続)
- Omniのロール: Querier以上(ブランチの作成に必要)
- 変更対象のメジャー: 以下の
satisfaction_score_averageメジャーが既に定義済み
satisfaction_score_average:
sql: ${omni_dbt_dwh__fact_support_ticket.satisfaction_score}
label: 満足度スコア Average
aggregate_type: average

事前準備
ブランチAを作成して変更を加える
Omni IDEで新しいブランチ(今回はbranch-a)を作成します。

ブランチAのIDE上で、対象のviewファイルを開き、satisfaction_score_averageメジャーのlabelをブランチaから修正に変更します。
satisfaction_score_average:
sql: ${omni_dbt_dwh__fact_support_ticket.satisfaction_score}
label: ブランチaから修正
aggregate_type: average
変更後、Omniの右上のCreate pull requestボタンを押して、GitHubリポジトリにPRを発行します。(コンフリクト検証のため、この時点ではマージしません。)

ブランチBを作成して変更を加える
次に、ブランチAのPRマージ前のmainブランチから新しいブランチ(branch-b)を作成します。

ブランチBのIDE上で、同じsatisfaction_score_averageメジャーのlabelをブランチBから修正に変更します。
satisfaction_score_average:
sql: ${omni_dbt_dwh__fact_support_ticket.satisfaction_score}
label: ブランチBから修正
aggregate_type: average
変更後、右上のCreate pull requestボタンを押して、GitHubリポジトリにPRを発行します。(コンフリクト検証のため、この時点ではマージしません。)

試してみた
1. ブランチAのPRをマージする
GitHubのPR画面からブランチAのPRをマージします。これにより、mainブランチにlabel: ブランチaから修正が反映されます。

マージ後、OmniのShared modelにも変更が反映されていることを確認します。メジャーのlabelがブランチaから修正に変わっていればOKです。

2. ブランチBのPRのマージを試みてコンフリクトを確認する
続けてブランチBのGitHubのPR画面を確認すると、コンフリクトが発生していることが表示されます。
コンフリクトが発生している理由は、ブランチAとブランチBが同じファイルの同じ行(labelパラメータ)を変更しており、mainへのマージ時に競合が生じているためです。

3. GitHubのWeb UIでコンフリクトを解消する
GitHubのPR画面でResolve conflictsボタンを押します。

コンフリクトのある箇所が以下のように表示されます。

今回はブランチBから修正を採用するため、コンフリクトマーカーと不要な行を削除して以下の状態にします。

Mark as resolvedボタンを押し、続けてCommit mergeボタンを押してコンフリクト解消をコミットします。

4. PRをマージしてOmniに変更を反映させる
コンフリクトが解消されると、PRのステータスがNo conflicts with base branchに変わります。問題なければMerge pull requestボタンを押してマージします。

GitHubでのマージ完了後、OmniのShared modelに戻ります。satisfaction_score_averageメジャーのlabelがブランチBから修正に更新されていれば完了です。

最後に
OmniのブランチモードでPRを発行した際のコンフリクト発生・解消の流れを確認しました。
ポイントとしては、コンフリクトはGitHub PR上で発生・解消するという点だと思います。他のIDE搭載のSaaSではSaaSの画面上でコンフリクトを修正するものもありますが、OmniではGitHubのPRコンフリクト解消機能を使う仕様でした。(例として、dbt platformではIDE上でコンフリクト解消できます)
コンフリクトが発生しないように開発を行っていけることが理想ではありますが、もしコンフリクトが発生した場合はこの記事の内容が参考になると嬉しいです。








