2026年1月16日

【Looker】ガバナンスの要、LookMLこそ美しく!静的解析ツールLook at me sideways(LAMS)のすすめ【CI/CD】


Content
データの可視化をするツールは数多くありますが、Googleが提供するLookerは利用者全体で「データ定義にずれのない」「ガバナンスの効いた」データが使える点が、他と一線を画す魅力です。
そのコアとなるのが独自のモデリング言語、LookMLです。LookMLは自由度が高い分、安定稼働させるには運用ルールが不可欠です。
本記事では、LookML開発での強い味方、look-at-me-sideways(LAMS)を紹介します!

look-at-me-sideways(LAMS)とは?

look-at-me-sideways(LAMS)って何?

look-at-me-sideways(LAMS)はLookMLの静的解析ツールです。
こんなことができます↓

  • 定義ミス、使われてないfieldの検出、依存関係のチェック などの検出
  • プロジェクトの特性に合わせて、解析ルール無効化、自作のルール適用
  • コマンドのパラメータで対象や出力形式を調整(例:特定のファイルだけルール無効化)
  • GitHubActionsやJenkinsに組み込んで、ルール違反のソースは本番環境に反映しないように制御

どんな人のためのツール?

LookMLを開発している人なら誰でも嬉しい機能です。とくに以下のような環境でLAMSの効果が発揮されます。

  • LookMLを複数人で開発している
  • 本番環境が稼働中で、ステージングや本番反映でトラブルを起こしたくない
  • CI環境が整っている

まずはローカルで動かしてみよう!

LAMSがどんなことをしてくれるのか、ローカル環境で試してみましょう!

事前準備

検証対象のLookMLの構成をローカル環境に準備します。
Looker開発で利用しているGitのリモートリポジトリからクローンして、ローカルリポジトリにLookML構成一式を用意します。
※Lookerがデフォルトで用意しているBare Repositoryはオプションに制限があり、直接クローンすることは出来ません。プルリクエストにも制限があります。もしBare Repositoryを使って管理している場合は、LAMSを試す前に外部Gitサーバでの管理を検討することをおススメします。
参考)
Looker-Git接続の設定
Looker-ベアGitリポジトリの設定

実行手順

LAMSのインストール

LAMSはNode.js製です。npmを用いてインストールします。npmが入っているかを確認します。
コマンドプロンプトを起動し、以下のコードを実行します。


npm -v

npmのバージョンが出ればOKです。
もし”npmが見つからない”といったメッセージが出た場合は、Node.js公式ページにて、Node.jsとnpmをインストールしてください。

続いてLAMSをインストールします。最新のV3を入れたいため、末尾に”@5″を指定します。


npm install -g @looker/look-at-me-sideways@5

マニフェストファイル(manifest.lkml)の作成

LAMSをインストールしたら、続いてマニフェストファイルを作成しましょう。
マニフェストファイルは「どんな内容を検証するか?」を記載したファイルです。LAMSが用意したbuilt-inのルールを利用できるほか、自分でカスタマイズしたルールを適用することもできます。
1. マニフェストファイルを作成します。
事前準備の章で用意したLookMLのフォルダを開き、”manifest.lkml”ファイルを作成します。
2. マニフェストを定義します。
ここではLAMSで公開されているbuilt-inのルールを利用します。
マニフェストファイルをテキストエディタで開き、built-inルールを貼り付け、2行目以降の各ルールの行頭の#を消し、コメントアウトを解除します。


#LAMS
rule: K1{} # Primary key naming
rule: K3{} # Primary keys first
rule: K4{} # Primary keys hidden
rule: K7{} # Provide one `primary_key`
rule: K8{} # `primary_key` uses PK dims
rule: F1{} # No cross-view fields
rule: F2{} # No view-labeled fields
rule: F3{} # Count fields filtered
rule: F4{} # Description or hidden
rule: E1{} # Join with subst'n operator
rule: E2{} # Join on PK for "one" joins
rule: E6{} # FK joins are m:1
rule: E7{} # Explore label 25-char max
rule: T1{} # Triggers use datagroups
rule: T2{} # Primary keys in DT
rule: H1{} # Hoist identifiers
rule: H2{} # Group fields
rule: H3{} # Sort-group groups
rule: H4{} # Group more
rule: H5{} # Hoist main view
rule: H6{} # Sort-group views
rule: W1{} # Block indentation

LAMSの実行

マニフェストファイルが準備出来たらLAMSコマンドを実行します。
コマンドプロンプトでcdコマンドを実行し、事前準備の章で用意したLookMLのフォルダへ移動します。
その後、LAMSを実行します。


lams

lams実行_その1
lams実行_その2
lams実行_その3

静的解析が行われ、ルール違反の項目が洗い出されました!
E2は”View同士の結合にプライマリキーが利用されていない”、F4は”非表示ではないフィールドに説明がついていない”という指摘です。
無事、LookMLの静的解析が行われました。しかしルール違反のファイル名が途切れていたり、ルール適用したくないファイルもあります。実運用に向けてカスタマイズしましょう!

指定を変えてみよう!

変更したい点

1.出力形式を変えたい

LAMSのデフォルトの出力形式は”lines”です。LAMSコマンドを実行したコンソールに、1指摘1行で出力されます。フォルダの階層が深いと、検出されたファイルのパスが省略されるのが難点です。
ファイルパス全て閲覧したいです。

2.検出したくないファイルがある

検証対象のLookMLは、refinementsを用いて変更に強い設計にしています。


+- {lookml_root}
+- model/
+- views/
| +- t_users.view.lkml
| +- ...
+- ref_views/
| +- t_users.view.lkml
| +- ...
+- manifest.lkml

・viewsフォルダ配下のviewファイルは、データベースのテーブルから動的に生成します。
・ref_viewsフォルダ配下のviewファイルは、viewsフォルダ配下のviewをrefinementで再定義します。
viewを分けることで、DBテーブルの追加変更があるときは、viewsフォルダ配下の再作成で済みますし、可視化のために追加した指標はref_viewsフォルダ配下のviewで維持されます。
modelで結合したり、exploreに表示するref_views配下はLAMSで解析したい一方で、自動生成のviews配下は解析対象から外したいです。

3.解析するルールを変更したい

LAMSのbuilt-inルールには、”モデルの結合フィールド”や”プライマリキーの名称”等、仕組みに深く根差した解析ルールが含まれます。
今回のケースではすでにダッシュボードを作成済で大きくルールを変更するのはリスクがあるため、フィールドに説明がついているかのチェックに留めようと思います。

修正方法

1.出力形式を変えたい

LAMSの出力形式(–output)は”lines (default), github-job-summary, markdown, markdown-developer, jenkins, legacy-cli, (BETA) add-exemptions”が用意されています。markdown形式で出力してみます。

2.検出したくないファイルがある

LAMSで検出を抑制する方法は2つ、ベータ版も含めると3つあります。
修正方法1) lamsを実行するコマンドの引数で、対象をref_viewsに限定する
LAMSコマンドの検出対象(–source)で、検出対象を指定します。viewsフォルダ配下のviewファイルの代わりに、ref_viewsフォルダ配下のviewファイルを探索する場合は、以下のように書きます。

lams --source="**/{*.model,*.explore,ref_views/*.view,manifest}.lkml"

修正方法2) lookMLファイルに対象外であることを埋め込む
対象外にしたいファイルに、” #LAMS exempt: “を指定すると、そのルールが無視されます。


view: t_users {
#LAMS exempt: W1 {why: "This file is raw data"}
sql_table_name: `sample_dataset.t_users` ;;

柔軟にファイルごとに制御できる一方で、無視したいviewsフォルダの配下を作り直すと指定が消えてしまうので、今回のケースでは不向きな方法です。

修正方法3) ※ベータ版※ lams-exemptions.ndjsonファイルを作り、除外したいファイルを記載する
ここでは紹介のみとします。

3.解析するルールを変更したい

manifest.lkmlをエディタで開き、今回残したいルールF4以外のルールを削除して保存します。

実行結果:修正版

全ての修正を加えると、コマンドは以下のようになります。実施してみましょう。


lams --reporting=yes  --output=markdown --source="**/{*.model,*.explore,ref_views/*.view,manifest}.lkml"


LAMSコマンドを実行したフォルダの配下に、issues.mdファイルが出来上がりました。

issues.mdを開いてみると、期待通りF4のみのチェックが、ファイル名途切れることなく出力されています。
エラーとなっていたのは”非表示ではないディメンションにdescriptionの指定が無い”です。descriptionを追加してLAMSコマンドを実行すると、エラーが消えたことも確認できました。

GitHubアクションに組み込んでみよう

LookML開発の保守性を高めるため、GitHubアクションにLAMSの検証を組み込みましょう。GitHubを使うので、output形式はgithub-job-summaryを使用します。
1.LookMLを保存しているGitHubリポジトリを開きます。
2.GitHub > Actions yourselfを選び、”CI.yaml”を作成します。
3.以下の内容を入力して保存します。


name: CI
on: [push]
jobs:
lams_job:
runs-on: ubuntu-latest
name: LAMS LookML Linter Job
steps:
- name: Checkout your LookML
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '22.x'
- name: Install LAMS
run: npm install -g @looker/look-at-me-sideways@5
- name: Run LAMS
run: lams --reporting=yes --output=github-job-summary --source="**/{*.model,*.explore,ref_views/*.view,manifest}.lkml"

これで解析ルールを守っていないファイルがGitHubにプッシュされると、LAMSの静的解析が走り、Actionsでエラー内容を確認することができるようになりました。
※スクリーンショットは別プロジェクトのものです

システムサポートでは、Google CloudやLookerの導入や活用を支援しております。
Lookerを導入したい・導入したけど使いこなせていない…という方は、お気軽にご相談ください!

Google Cloud 導入・活動支援に関するご相談はこちら

2026年1月16日 【Looker】ガバナンスの要、LookMLこそ美しく!静的解析ツールLook at me sideways(LAMS)のすすめ【CI/CD】

Category Google Cloud

ご意見・ご相談・料金のお見積もりなど、
お気軽にお問い合わせください。

お問い合わせはこちら