Looker Marketplace 用のカスタム ブロックの開発

このページでは、Looker Marketplace に追加して他の Looker ユーザーからアクセスできるようにすることが可能なカスタム ブロックを作成する方法について説明します。

Looker Marketplace にコンテンツを送信するには、Looker パートナー ネットワークのメンバーまたは Looker のお客様である必要があります。

すでに構築済みで使用可能な Looker Block については、Looker Block のドキュメント ページをご覧ください。Marketplace からインストールしたブロックのカスタマイズについては、Looker Marketplace ブロックのカスタマイズのドキュメントをご覧ください。

ブロックを開発し、Looker Marketplace 経由ですべての Looker ユーザーに提供するには、このページで説明する手順で作業を進めます。

  1. データソースを設定して Looker に接続する
  2. プロジェクトを作成し、必要なファイルを追加する
  3. ブロックをアクセス可能にする
  4. Looker レビュー用にブロックを送信する

データソースの設定と Looker への接続

ブロックはデータモデルであるため、簡単に反復可能な特定のデータセット向けに設計されている場合に最も効果を発揮します。ブロック インストール エラーのほとんどは、ユーザーのデータセットがブロック内のスキーマ名、テーブル名、フィールド名と一致しない場合に発生します。

  • Google アナリティクスのデータなど、特定のデータセット用にブロックを作成する場合は、データセットの設定やカスタマイズをメモしておきます。可能であれば、そのようなカスタマイズは最小限に抑え、ユーザーのインストールを効率化してください。具体的な手順は、README ファイルに記載します。
  • コホート保持など、一般的な分析パターンのブロックを構築する場合は、ユーザーのデータセットに含めることが想定されるフィールドをメモします。ほとんどの場合、ユーザーのスキーマ名、テーブル名、フィールド名は、データセットのものと異なります。テーブル名とフィールド名に LookML 定数を使用し、更新が必要なフィールドについて README ファイルでユーザーに通知します。

データソースを決定したら、モデリングを開始できるようにデータソースを Looker に接続します。デフォルトの接続設定を変更する必要がある場合は、README ファイルにメモしてください。

プロジェクトの作成と必要なファイルの追加

ブロックを表すプロジェクトを作成します。block-<database_dialect>-<role> などの命名規則を使用することをおすすめします(例: block-redshift-admin)。

次に、プロジェクト内に以下のファイルを作成します。

  • プロジェクト名、接続名、その他の定数を定義するマニフェスト ファイル
  • 各ビューのビューファイル
  • 各 Explore の Explore ファイル
  • プロジェクト内のすべてのビューファイル、Explore ファイル、LookML ダッシュボード ファイルを含むモデルファイル
  • 少なくとも 3 つの LookML ダッシュボード ファイル
  • このブロックの Marketplace リスティングに表示される情報を含む marketplace.json ファイル
  • MIT のオープンソース ライセンスのテキストを含む LICENSE ファイル
  • 設定手順とオプションを詳しく説明した README ファイル

ブロックをインストールしたユーザーは、別の refinements.lkml ファイル内の基盤となる Explore、ビュー、ダッシュボードを絞り込むことができます。以降のセクションでは、必要な各ファイルの種類について詳しく説明します。

マニフェスト ファイルの作成

プロジェクトのマニフェスト ファイルを作成します。マニフェスト ファイルは、プロジェクト名で始めて、ユーザーが変更できるようにいくつかの LookML 定数を定義する必要があります。たとえば、Looker 接続名を export: override_required で定数として定義し、ユーザーが独自の接続名でオーバーライドできるようにする必要があります。

マニフェスト ファイルの例を次に示します。

project_name: "block-ga-360"

################# Constants ################

## Used in google_analytics_block.model connection param
constant: CONNECTION_NAME {
  value: "looker-private-demo"
  export: override_required
}

## Used in ga_sessions.view sql_table_name
constant: SCHEMA_NAME {
  value: "bigquery-public-data.google_analytics_sample"
  export: override_optional
}

constant: GA360_TABLE_NAME {
  value: "ga_sessions_*"
  export: override_optional
}

ビュー ファイルと Explore ファイルの作成

ビューごとに view.lkml ファイルを作成します。ユーザーのスキーマ名およびテーブル名が異なる場合は、マニフェスト ファイルでスキーマと名テーブル名を定数として定義し、ブロックをダウンロードするユーザーが自動生成されたマニフェスト ファイルでスキーマ名とテーブル名を更新できるようにします。次に、ビューの sql_table_name パラメータでこれらの定数を参照します。

ブロック view.lkml ファイルの例を示します。

view: user_facts {

  # SCHEMA_NAME and GA360_TABLE_NAME are constants
  sql_table_name: @{SCHEMA_NAME}.@{GA360_TABLE_NAME} ;;

  dimension: clientID {
    type: string
    sql: ${TABLE.clientId}
  }

}

次に、1 つ以上の explore.lkml ファイルを作成します。各データ Explore ファイルに、その Explore に必要なビューが含まれていることを確認します。Explore を、論理結合、ドリル、厳選された Explore ページを含めるよう慎重に設計します。別のユーザーが Marketplace からブロックをインストールしたら、ビジネス ユーザーがすぐにデータ分析に取り掛かることができます。

一般的なモデリングのベスト プラクティスについては、コミュニティ フォーラムおよび Looker のベスト プラクティスベスト プラクティス: LookML の推奨事項と禁止事項ベスト プラクティス: 持続性と管理性に優れた LookML の記述など)をご覧ください。

explore.lkml ファイルの例を次に示します。

include: "/Google_Analytics/Sessions/*.view.lkml"

explore: future_input {
  view_label: "Audience Traits"
  label: "BigQuery ML Customer Likelihood to Purchase"
  description: "This explore allows you to slice and dice likeliness to purchase scores by different customer traits to see how they differ. The default range of data you are looking at is in the past 30 days"
  join: future_purchase_prediction {
    type: left_outer
    sql_on: ${future_purchase_prediction.clientId} = ${future_input.client_id} ;;
    relationship: one_to_one
  }
}

モデルファイルの作成

プロジェクト内のすべてのビュー、Explore、ダッシュボード ファイルを含むモデルファイルを作成します。接続名がマニフェスト ファイルLookML 定数として参照されていることを確認します。

キャッシュ ポリシーを設定するには、少なくとも 1 つのデータグループを定義します。

モデルファイルの例を次に示します。

connection: "@{CONNECTION_NAME}"

include: "/views/*.view.lkml"
include: "/explores/*.explore.lkml"
include: "/dashboards/*.dashboard.lookml"

datagroup: nightly {
  sql_trigger: SELECT TIMEZONE('US/Pacific',GETDATE())::DATE;;
}

LookML ダッシュボード ファイルの作成

Looker Marketplace に含めるには、意味のある有用な分析を提供する少なくとも 3 つの LookML ダッシュボードが各ブロックに含まれている必要があります。ダッシュボードは視覚的、機能的、包括的である必要があります。曖昧なデータは含めないでください。

LookML ダッシュボードに厳格な設計要件はありませんが、Looker では次の一般的な設計のベスト プラクティスをおすすめします。

  • ダッシュボード全体で一貫したカラーパレット
  • 少なくとも 7 つのタイル
  • 少なくとも 3 つの異なるビジュアリゼーションのタイプ(単一の値、バー、線など)

ブロック用のダッシュボードを開発する場合、カスタムのビジュアリゼーションはサポートされていません。代わりに、Looker のネイティブなビジュアリゼーションのタイプを使用してください。

LookML ダッシュボードのカスタマイズと LookML ダッシュボード内でのビジュアリゼーションの詳細については、ダッシュボード パラメータダッシュボード要素パラメータに関するドキュメント ページをご覧ください。LookML ダッシュボード ファイルの例については、Redshift 管理ブロックの Redshift Admin LookML ダッシュボード ファイルをご覧ください。

marketplace.json ファイルの作成

marketplace.json ファイルを作成して、マーケットプレイスでリスティングをどのように表示するかを指定します。Looker Marketplace の各ブロックには、ユーザーがニーズに最適なブロックを選択できるように、この追加情報を含める必要があります。marketplace.json ファイルには以下の項目が含まれます。

  • Marketplace の labelcategory_labelbranding の各フィールド
  • モデル LookML を入力するためにユーザーが入力する必要がある LookML 定数のリスト(接続名など)

Google BigQuery パフォーマンス ブロックの marketplace.json ファイルの例を次に示します。

{
  "label": "Google BigQuery Performance",
  "category_label": "Models",
  "branding": {
    "image_uri": "https://marketplace-api.looker.com/block-icons/google-cloud.png",
    "tagline": "This Block provides a comprehensive overview of all cost and performance data for one or multiple BigQuery projects, enabling users to effectively monitor BigQuery usage down to a per user level. It can be used to set up alerts to long running or high cost queries."
  },

  "constants": {
    "CONNECTION_NAME": {
      "label": "Connection Name",
      "value_constraint": "connection"
    },
    "SCHEMA_NAME": {
      "label": "Schema Name"
    },
    "AUDIT_LOG_EXPORT_TABLE_NAME": {
      "label": "Audit Log Export Table Name",
      "description": "The table name of your BigQuery Optimization data (typically cloudaudit_googleapis_com_data_access_*)."
    }
  },
  "models": [
    {
      "name": "block_bigquery_optimization_v2",
      "connection_constant": "CONNECTION_NAME"
    }
  ]
}

次のスクリーンショットは、この marketplace.json ファイルによって生成される Marketplace のリスティングを示しています。

Marketplace リスティングのサンプル。

  • "label" フィールドは、ブロックのタイトルを制御します。この例では、「Google BigQuery Performance」がそうです。
  • "tagline" フィールドは、Marketplace リスティングの最初の段落を制御します。
  • "image_uri" フィールドは、Marketplace リスティングの左上に表示されるイメージを制御します。この例では、Google Cloud のロゴがそうです。
  • "constants" フィールドにより、ユーザーはインストール中に Marketplace UI で定数の入力を求められます。この例では、marketplace.json ファイルに 3 つの定数(CONNECTION_NAMESCHEMA_NAMEAUDIT_LOG_EXPORT_TABLE_NAME)がリストされているので、ユーザーはインストール前にこの 3 つのフィールドの値を指定するように求められます。

LICENSE ファイルの作成

すべての Looker Blocks は、MIT オープンソース ライセンスでライセンス付与されている必要があります。このライセンスのテキストを LICENSE という名前のファイルに含めます。LICENSE ファイルの例については、Redshift 管理ブロック LICENSE ファイルをご覧ください。

README ファイルの作成

README ファイルには、ブロックを実装するすべての手順を含め、自動生成されたマニフェスト ファイル(#the_autogenerated_manifest_file)や絞り込みファイルなど、カスタマイズが必要な箇所を明示する必要があります。README ファイルの例については、Redshift 管理ブロック README ファイルをご覧ください。

README に関する検討事項:

  • ユーザーが必要とするデータソース。サブスクリプションの料金を支払う必要があるかどうか
  • データベース ユーザーに付与する必要がある権限
  • どのような Looker の接続設定が必要か
  • ブロック フィールド名が、ユーザーのデータセットのフィールド名と一致するか。一致しない場合、ユーザーは何を変更すべきか

自動生成されたファイル

ユーザーがブロックをインストールすると、Looker インスタンスによって、プロジェクトのファイルを読み取り専用ファイルとして新しい Looker プロジェクトが作成されます。また、ユーザー用に次のファイルが自動生成されます。

  • Marketplace のリスティング情報を含む読み取り専用の marketplace_lock.lkml ファイル
  • marketplace_lock.lkml からリスティングを参照するマニフェスト ファイル
  • ブロックからのすべてのビューと Explore を含む refinements.lkml ファイル
  • ブロックのモデルファイルrefinements.lkml ファイルの両方を含む読み取り専用のモデルファイル

Looker Marketplace からブロックをインストールしたユーザーは、refinements.lkml ファイルを使用して LookML を絞り込むことができます。さらに、新しい LookML ファイルを追加することもできます。ユーザーがブロックをカスタマイズする方法の詳細については、Looker Marketplace ブロックのカスタマイズのドキュメントをご覧ください。

自動生成されたマニフェスト ファイル

自動生成されたマニフェスト ファイルを使用すると、ブロックをインストールするユーザーは接続名などの変数を設定できます。ブロック マニフェスト ファイルで定義された LookML 定数は、自動生成されたマニフェスト ファイルで編集することも、ブロック ダウンロードのユーザー インターフェースでユーザーが設定することもできます。

絞り込みファイル

自動生成された refinements.lkml ファイルを使用すると、ブロックをインストールするユーザーが、ブロックが定義されているビューと Explore を絞り込むことができます。ここでは、ブロックをダウンロードするユーザーが、ユースケースに合わせて LookML のカスタマイズの大部分を行います。

自動生成された refinements.lkml ファイルの例を次に示します。

include: "//ga360-v2/**/*.view.lkml"
include: "//ga360-v2/**/*.explore.lkml"

\# Use LookML refinements to refine views and explores that are defined in the remote project.
\# Learn more at: https://docs.looker.com/data-modeling/learning-lookml/refinements
\#
\#
\# For example we could add a new dimension to a view:
\#     view: +flights {
\#       dimension: air_carrier {
\#         type: string
\#         sql: ${TABLE}.air_carrier ;;
\#       }
\#     }
\#
\# Or apply a label to an explore:
\#     explore: +aircraft {
\#       label: "Aircraft Simplified"
\#     }
\#

ブロック プロジェクトをアクセス可能にする

一般公開の GitHub リポジトリでブロック LookML をホストします。

すべての Looker Block は、MIT のオープンソース ライセンスにより使用許諾を受ける必要があります。また、ライセンス テキストをリポジトリのライセンス ファイルに含める必要があります。

確認用ブロックの送信

ブロックを送信する準備が整ったら、Looker Marketplace へのコンテンツの送信の手順に沿って、ブロックの補足ドキュメントを作成し、Looker チームにブロックを送信して審査を受け、Looker Marketplace にブロックを公開します。