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

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

Looker Marketplace にコンテンツを送信するには、Looker Partner Network のメンバー、または Looker のお客様である必要があります。

すでに構築され、使用可能な Looker Blocks については、Looker Blocks のドキュメントをご覧ください。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 つの異なるビジュアリゼーション タイプ(単一値、棒、線など)

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

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

marketplace.json ファイルの作成

marketplace.json ファイルを作成して、Marketplace でのリスティングの表示方法を指定します。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 BQ 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 BQ Optimization data (typically cloudaudit_googleapis_com_data_access_*)."
    }
  },
  "models": [
    {
      "name": "block_bigquery_optimization_v2",
      "connection_constant": "CONNECTION_NAME"
    }
  ]
}

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

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

LICENSE ファイルの作成

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

README ファイルの作成

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

README に関する考慮事項:

  • ユーザーが必要とするデータソースは何か定期購入の料金を支払う必要がありますか?
  • データベース ユーザーが持つ必要がある権限
  • どのような Looker 接続設定が必要か?
  • ブロック フィールド名は、ユーザーのデータセットのフィールド名と一致しますか?そうでない場合は、ユーザーが何を変更しますか。

自動生成されたファイル

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

  • マーケットプレイスのリスティング情報を含む読み取り専用の 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"
\#     }
\#

ブロック プロジェクトにアクセスできるようにする

ブロックする LookML を、一般公開されている GitHub リポジトリでホストする。

すべての Looker Blocks は、MIT オープンソース ライセンスでライセンスされ、ライセンス テキストはリポジトリのライセンス ファイルに含まれている必要があります。

ブロックを審査用に送信する

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