[Looker]別ProjectのGitリポジトリからLookMLをインポートする

ハブアンドステーキ
2020.06.29

奈良県でリモートワーク中の玉井です。

大規模組織でLookerを適切に運用するための手法・考え方の一つにHub and Spokeというものがあります。

ネットワークの世界とかでも使われる名称ではありますが、LookerにもHub and Spokeという考え方が存在します。といっても、考え方の根本は同じで、ハブとなるProjectで組織全体で使用できるLookMLを開発・集中管理し、それを関係各部署毎に配布する形をとります(スポーク)。各部署はハブの上に部署特有の要素だけを追加開発すればよいうという形になります(スポークからハブへ何かを書き換えるということはしません。あくまでハブ→スポーク)。

ハブとなるProjectからスポークとなるProjectへLookMLを届けるためには、インポート機能を知っておく必要があります。というわけで、実際にインポート機能を使ってみました。

とりあえずやってみた

環境

  • Looker 7.8.26
  • Google Chrome 83.0.4103.116

インポート元のProject側を確認しておく

ProjectにGitリポジトリが正しく連携されていることを確認します。ちなみに今回インポート元して使用するのはGithubのプライベートリポジトリです。

別Projectを作成してGitリポジトリからインポートする

普通にProjectを作成する

インポート先となるProjectを作成します。このProjectはインポートして使用する前提のため、Blankで作成してみました。

マニフェストファイルを作成する

別ProjectからLookML群をインポートしたい場合、そのProjectに「マニフェストファイル」なるものを作成する必要があります。そのマニフェストファイル内に、インポート元のGitリポジトリ情報を記述する形になります。

Projectを開いて、左部メニューからマニフェストファイルを生成することができます。

空のマニフェストファイルを生成したら、下記のように記述します。

remote_dependency: 名前 {
  url: "リポジトリのURI"
  ref: "インポートしたいバージョンのコミットのSHA-1"
}

「インポートしたいバージョンのコミットのSHA-1」というのが、Git素人の私には、最初は何のことだかサッパリだったのですが、ひとまずGithubの場合は下記が該当します(インポートしたバージョンのこれを使用する)。

別のGitサービスについては未確認ですので、各々調べてみてください。

インポート元Gitリポジトリへのアクセス設定を行う

Gitリポジトリをインポートしてくるためには、そのリポジトリに対するアクセス権限が必要です。

マニフェストファイルを作成すると、Project Settings画面に、Gitリポジトリ(マニフェストファイル内に記述したもの)に対するSSH鍵が準備されるので、それをGitリポジトリに公開鍵としてアップロードします。

最初は未設定なので、当然ながらアクセスエラーが出ています。

Editを選択すると鍵が表示されるので、これをGithub側にDeploy Keyとして登録します。

正常に設定が完了すると、アクセステストが通るようになります。

インポートできてるかどうか確認する

これまでの設定が一通り完了すれば、下記のようにインポート元のLookMLがRead-Only状態で表示されます。

インポートしたLookMLの利用例

View

インポートしたViewファイル等は下記のような形で利用(再利用)することができます。

include: "//desire_block/views/desire_pattern_1.view"

view: import_sample_desire {
  extends: [desire_pattern_1]
}

これだけで、インポート元のdesire_pattern_1というViewを継承することができます。ここに項目を加えていって、Viewを拡張していくことも可能です。

インポートしたLookMLは別Project扱いになりますが、別ProjectのLookMLファイルをincludeする場合、先頭をダブルスラッシュにします。その後に続くフォルダ名は、マニフェストファイルに記述したremote_dependencyの名前になります。

Explore

下記のような感じでModelファイルを記述すると、上記で継承したViewを使用したExploreを定義することができます。

include: "//desire_block/models/cm_tamai_spotify.model"
include: "*.view.lkml"

explore: import_sample_desire {}

もちろん、インポート元にあるExploreをextendsで持ってくることも可能です。

おわりに

Lookerをゴリゴリ使えるチーム(社内横断型)が「ハブ」となるLookMLをゴリゴリ開発して、各部署(チーム)は、ハブにあたるProject(リポジトリ)をインポートし、追加分だけ拡張していく…という使い方が理想なのかなと思いました。

参考