はじめに
2023年10月にGoogleが提供するBIツール「Looker」が政府認定クラウドサービス(通称 ISMAP) に認定されてから、早1年と半年程が経ちました。
もしかすると、「Lookerを導入してみた」「まずはトライアルを試してみた」という方もいらっしゃるかと思います。
以前投稿した紹介記事にも記載をしていますが、Lookerは他のBIツールにはない特徴や魅力が詰まっているサービスとなっています。
そんなLookerですが、触れる中で必須となる存在がいます。
その名も「LookML」と呼ばれる独自言語です。
このLookML、Lookerを利用していく上で大切な存在ではあるのですが、他のBIツールに慣れた方からすると「よくわからない」「LookMLのメリットがあるのか?」と思われるかもしれません。
そこで今回は、LookMLについて基本的な概要や要素、そして「なぜLookMLという存在が大切なのか?」について紹介をしていきたいと思います。
LookMLとは
Lookerで使用される独自言語で、正式名称は「Looker Modeling Language」と呼びます。
このLookMLは、Looker上でデータモデルの定義(BigQuery等のデータソースの情報をLookerに渡すための定義)をするものになります。
Lookerは、LookMLで記載された定義に基づき、接続先のデータベースからデータを取得する為のクエリを発行したり、ダッシュボード上での表記名をユーザー任意のものに変更したりします。

LookMLの学習難易度自体は高いものではなく、過去にプログラミング言語(pythonやRuby等)、特にSQLを触ったことがあれば比較的スムーズに理解することが出来ます。
また、独自言語であるためプログラミング言語の経験・知識がない方でもここから学習して利用する事が可能です。
なぜLookerでデータモデル定義があるのか? 何が嬉しいのか?
まず、Looker Studio等の他BIツールではデータモデル定義を設定する機能はないものが多いです。
そのため、ユーザーごとに参照するデータや追加するデータの違いにより、「同じデータベースからデータを出力しているのに値が違うグラフが出力されてしまう」という事が起こってしまいます。
次の図を例として説明します。
A部署・B部署では営業利益を各所属メンバーが計算しています。
しかし、部署によって営業利益の計算方法が異なっており、名前は同じグラフですがその値や見せ方が違います。
このままでは、どちらのグラフが正しいのかがわからず、この後の施策や方針の検討がしにくい状態となってしまいます。

この問題に対して、LookerはLookMLを利用してデータモデル定義を行い、データの表現や定義を統一、どんなユーザーが利用しても同じグラフを出力することが出来るようになります。

LookMLの基本的な概念
LookMLはプロジェクトを起点とした複数の概念によって成り立っています。

この概念の中で、特に触れる機会が多いものは以下になります。
項目 | 説明 |
プロジェクト(Project) | LookMLを開発する際、モデルやビューなどを置いておくための箱。 |
モデル(Models) | データベースの接続情報を持つ。Explorerで利用できるViewファイルの情報を保存している。 |
ビュー(Views) | データベース内のテーブルやビューに関する情報を保存している。 |
ディメンション(Dimensions) | データを分類する要素。 基本は、フィルターやGROUP BYの基準として利用される。 |
メジャー(Measures) | 数値データ。合計や平均と言った計算をする際に利用される。 |
次に、それぞれの概念について簡単に解説をしていきます。
LookMLプロジェクト(Project)

LookMLを開発する際に最初に作る箱のことをプロジェクトと呼びます。
プロジェクトは複数のLookMLファイルで構成されており、主なものはモデルファイルとビューファイル(後述)になります。
モデル・モデルファイル(Model)
LookMLプロジェクトを構成するファイルの1つで、「どのデータベースと接続するか」を指定するファイルになります。
モデルファイルは1つのプロジェクト上で複数作成することが出来、データベース毎に分けて作ることもできます。
ビューファイル(View)
データベースのテーブルをLookMLオブジェクトにしたものです。
データベースに物理的に存在しているものもあればLookML上に論理的に作成する事もできます。
一般的な構文
以下はビューファイルの記載例です。
各ビューの{}内はフィールド定義であり、テーブルの列またはLooker上での計算情報を記載します。
Lookerでは主にディメンションまたはメジャーを記載します。
view: orders {
sql_table_name: demo_db.orders ;;
drill_fields: [id]
dimension: id {
primary_key: yes
type: number
sql: ${TABLE}.id ;;
}
dimension: status {
type: string
sql: ${TABLE}.status ;;
}
dimension: user_id {
type: number
# hidden: yes
sql: ${TABLE}.user_id ;;
}
dimension_group: created {
type: time
timeframes: [
raw,
time,
date,
week,
month,
quarter,
year
]
sql: ${TABLE}.created_at ;;
}
measure: count {
type: count
drill_fields: [id, users.id, users.first_name, users.last_name, order_items.count]
}
}
ディメンション(Dimension)
テーブルの列をLookMLオブジェクトにしたものです。
ディメンションはLookerの生成するSQLのGROUP BY句やSELECT句になります。
type(データ型)
とsql(データソースから取得する値)
を書くことによって、データソースのカラム情報を表現することができます。
dimension: id {
primary_key: yes
type: number # データ型
sql: ${TABLE}.id ;; # データソースから取得するカラム名
}
dimension: status {
type: string
sql: ${TABLE}.status ;;
}
ディメンションのデータ型一覧については、以下のGoogleCloud公式ドキュメントを確認ください。
Dimension, filter, and parameter types | Looker
メジャー(Measure)
メジャーは、ディメンションに対して計算を実行し、新しいカラムを作成します。
COUNTやSUM、Lookerが接続しているデータベースでサポートされている集計関数・演算子を定義することが可能です。
また、メジャーに対してピボットすることも可能です。
合計や平均を計算する値の場合には、このメジャーを設定しておくのがおすすめです。
measure: count {
type: count # データ型
drill_fields: [id, users.id, users.first_name, users.last_name, order_items.count]
}
メジャーのデータ型一覧については、以下のGoogleCloud公式ドキュメントを確認ください。
LookMLファイルのバージョン管理
LookML(ビューファイル・モデルファイル)は、Gitリポジトリと連携することで、ファイルの変更や削除といった「バージョン管理」を行うことができます。
LookMLプロジェクト内では、Developer以上の権限を持つアカウント毎にGitブランチが用意されており、Git運用と同じようにユーザー毎にLookMLを編集・変更内容を反映することができます。
以下の図を例とすると、次のような形でLookMLのバージョン管理をする事ができます。
①ユーザーAがビューファイルを新規追加
②ユーザーBが既存のビューファイルを編集し、mainブランチにPush
③ユーザーAはユーザーBの変更を自身のブランチ(Aブランチ)に取り込み、ビューファイルを編集
ユーザーAとしてはここからこの変更をmainブランチにPushすることも、そのままブランチ上で作業を続けることも可能です。

まとめ
今回はLookerで利用される独自言語「LookML」について、簡単にですが紹介しました。
「BIツールでありながら専門言語を使う」と聞くと敷居が高く感じるかと思われます。
Lookerを利用するにはLookMLが必須であり、これを学習・運用ができるメンバーが必要となります。「ただ導入すればすぐに解決できる」というわけではありません。
しかし逆を言えば、LookMLを使いこなすことができればデータの見せ方や整備を整える事ができ、組織内におけるデータ活用の幅を大きく広める事ができます。
また、LookMLの学習難易度自体は比較的低く、過去にプログラミング言語やGit運用をされたことがある方であればスムーズに理解することができます。
そうでなくとも、LookMLから学習し活用できるレベルになるのは十分可能です。
「Lookerというサービスは聞いたことはあったが、詳しくは知らなかった」、「LookMLの存在を初めて聞いた」という方も、この記事をきっかけにLooker・LookMLについて少しでも知るきっかけになりましたら幸いです。