はじめに

Qlik Deployment Framework(以下QDF)は海外でのプロジェクトでの経験を集約し、QlikViewの開発やデプロイメントのベストプラクティスを取り纏めたフレームワークになります。

image

QlikViewでは、例えばアプリを管理するディレクトリ構成をどうするか?変数やスクリプトをどのように管理し再利用するか?アプリなどのリソースをDTAP(開発、テスト、受入テスト、本番)間でどのように移送するか?などについては方法に自由度がありますが、特に大規模での展開やシステムが複雑になるケー

スでは「標準化」や「ベストプラクティスの活用」がキーとなります。

このQDFこのようなニーズに対応するために、ベストプラクティスをベースに標準化を促進するために作成されたツールとなります。

QDFは当初QlikView向けに作成され、Qlik Senseへの対応も拡張されていますが、ここではQlikViewでの利用にフォーカスしてQDFの利用方法を解説していきたいと思います。

環境の準備

ダウンロード

QDFはコミュニティベースで開発されたツールで、以下のQlik CommunityのGroupで公開されています。(事前にグループメンバーの登録が必要です。)

https://community.qlik.com/docs/DOC-5302

メンバー登録後、QDFのファイルは以下のサイトからダウンロードすることができます。

image

https://community.qlik.com/groups/qlikview-deployment-framework

インストール

ダウンロードして解凍したZIPファイルに含まれる「QlikDeploymentFramework.exe」のファイルを実行します。

image

解凍先のフォルダを指定し、「Deploy」をクリックします。

image

以下の様なフォルダが解凍先のフォルダに作成されたことを確認します。

image

リソース・コンテナ

リソース・コンテナ・アーキテクチャーとは?

QDFでは、アプリ、QVD、スクリプト、接続定義などの各種リソースを「リソース・コンテナ」と呼ばれる単位で纏めて管理します。インストール直後の初期状態では以下のコンテナが含まれており、必要に応じて追加していきます。

  • 0.Administration : QDFの構成を管理するVariable Editorや、QlikViewのモニタリングに利用されるSystem Monitor/Governance Dashboardなどが含まれるコンテナになります。
  • 1. Example : QDFの利用方法を理解するためにサンプルとして提供されているコンテナになります。
  • 99. Shared Folders : 企業全体や全プロジェクトで共通して利用するQVWやQVDなどを格納するコンテナになります。利用は任意で、必ずしも利用する必要はありません。

このリソース・コンテナを利用することには以下の様なメリットがあります。

  • アプリ、QVD、スクリプト、接続定義などのリソースを、標準化された方法で独立した単位で管理が可能
  • コンテナをプロジェクト単位、部門単位、管理単位、目的単位などで作成・管理することが可能
  • DTAP(開発、テスト、受入テスト、本番)の環境間の移行をより容易にすることが可能

リソース・コンテナの作成

まず、新規アプリを作成するプロジェクトを開始することを想定して新たなリソース・コンテナを作成します。「0.Administration」コンテナを開き、「Variable Editor Shortcut」をクリックします。

image

Variable EditorのQlikViewアプリケーションが開かれます。

image

QlikView 12を利用している場合には[設定]>[ユーザープロパティ]>[セキュリティ]から「スクリプトからのデータベースへの書き込み/実行ステートメントの実行を許可する」をONにして下さい。

image

「Container Map Editor」をクリックします。

image

以下の形で新たな「2.MyPrj」を追加します。行の追加は最後尾の空白行のカラムにポインタをフォーカスすると左矢印が表示されますので、クリックするとカラムを編集することができます。キーボードの「Enter」を押すと編集が完了されます。

image

左上の「Update Map and create Containers」ボタンをクリックします。

image

「Update Container Map」をクリックします。

image

「Create New Containers」をクリックします。

image

新たなリソース・コンテナが作成されたことを確認します。Variable Editorを保存して閉じます。

image

リソース・コンテナ内の標準フォルダ構成

作成された「2.MyPrj」コンテナの中身を確認すると、以下のフォルダ構成になっていることが分かります。

image

これはQlikViewで管理するフォルダ構成を標準化することが意図されており、それぞれのフォルダは以下の形で用途が決められています。

  • 1.Application : QVWを保存  (vG.ApplicationPath)
  • 2.QVD : QVDファイルを保存 (vG.QVDPath)
  • 3.Include : インクルードファイル(スクリプト)を保存  (vG.IncludePath) 
    • 1.BaseVariable : QDFの利用に必要な変数を保存  (vG.BaseVariablePath) 
    • 2.Locale : ロケール関連の変数を保存  (vG.LocalePath)
    • 3.ConnString : 接続ストリングの定義を保存  (vG.ConnStringPath)
    • 4.Sub : サブルーチンを保存  (vG.SubPath)
    • 5.ColorScheme : 企業の標準カラースキームを保存  (vG.ColorSchemePath)
    • 6.Custom : カスタムスクリプトなどを保存  (vG.CustomPath)
  • 4.Mart : QlikMart (データモデルのみを保存したQVW)を保存  (vG.MartPath)
  • 5.Config : 構成情報、言語ファイルなどを保存  (vG.ConfigPath)
  • 6.Script : QlikView Publisherやスケジューラーのタスクにより起動されるスクリプトを保存  (vG.ScriptPath) 
  • 7.Export : QVWからエクスポートされたファイルを保存  (vG.ExportPath)
  • 8.Import : QVWにインポートする外部システムのデータなどを保存  (vG.ImportPath)
  • 9.Misc : ドキュメントやエクステンションなどその他に必要なファイルを保存

また、それぞれのフォルダには変数を使ってアクセスが可能となっており、$(vG.QVDPath)とQlikViewのスクリプトで指定すると、上記の「2.QVD」フォルダ以下を指す形となります。

変数の利用

変数の命名規則

QDFでは変数の命名規則として以下に従うように定められています。以下の命名規則に従わない名称で変数を作成することは可能ですが、変数の有効なスコープを管理上分かり易くするためのルールとなります。

  • vL.xxxx : 特定のアプリケーション(QVW)の中のみで利用される変数 (ローカル変数)
  • vG.xxxx : コンテナ内の複数アプリで共有可能な変数 (グローバル変数)
  • vU.xxxx : コンテナを跨いで全てのコンテナに含まれるアプリで利用可能な変数 (ユニバーサル変数)

ここでは、コンテナ内で共有可能なグローバル変数の利用・作成方法をご説明します。尚、ローカル変数は一般的なQlikViewの開発の手順に従ってスクリプトや変数一覧で追加が可能です。また、ユニバーサル変数の説明はここでは省略しますが、QDFに同梱されている「Qlik Deployment Framework-Education Exercises」のドキュメントに作成方法の説明が記載されています。

QDFの初期化とグローバル変数の利用

まず、QlikViewのアプリケーションでQDFで管理されているグローバル変数を利用するための初期化の方法をご説明します。「2.MyPrf」>「1.Application」配下に「1.Sales」フォルダを作成します。

image

「1.Sales」フォルダ配下で[右クリック]>[新規作成]>[QlikViewドキュメント]を選択して新たなQVWを作成し、名前を「Sales Analysis.qvw」に変更してアプリを開きます。

image

ロードスクリプトエディタを開きます。

image

「相対パス」をチェックします。

image

[挿入]>[Includeステートメント]をクリックします。

image

「\2.MyPrj\3.Include\1.BaseVariable\1.Init.qvs」を選択します。

image

以下のステートメントが追加されたことを確認し、リロードを実行します。

image

[設定]>[変数一覧]を選択します。

image

「1.Init.qvs」をインクルードすることで、グローバル変数がロードされていることが確認できます。

image

尚、Includeステートメントは、QVWの配置パスが変更されても影響を受けないようにするため、以下の様に複数のパスをサーチするように指定しておくことも可能です。


$(Include=..\..\..\..\3.include\1.basevariable\1.init.qvs);
$(Include=..\..\..\3.include\1.basevariable\1.init.qvs);
$(Include=..\..\3.include\1.basevariable\1.init.qvs);
$(Include=..\3.include\1.basevariable\1.init.qvs);

グローバル変数の作成

次に、QDFで新たなグローバル変数を作成する方法をご説明します。「2.MyPrf」>「6.Script」>「2.VariableEditor」配下のVariableEditor.qvwを開きます。

image

「Variable Editor」をクリックします。

image

以下の2つの変数を追加して「Update Variables」をクリックします。

image

「Update Variables」をクリックします。

image

「2.MyPrf」>「3.Include」>「1.BaseVariable」配下の「Custom.Variables.csv」をエディタで開きます。

image

先ほど追加した2つの変数が含まれていることを確認します。変数の実体はこのファイルで管理され、初期化スクリプト(1.Init.qvs)内でこのファイルもインクルードされます。

image

先ほど作成したSales AnalysisアプリのQVWのリロードを再度実行し、変数一覧に変数が追加されていることを確認します。

image

接続ストリングの管理

データベースへの接続を定義する接続ストリングは、セキュリティの観点や移行の観点(DTAP環境での移行の際に接続先が変わる為、接続情報を集中管理する)などから、個別のファイルで管理することがプラクティス上推奨されます。

ここでは、この接続ストリングをQDF上で個別に管理する方法をご説明します。

接続ストリングの作成

「1.Example」>「5.Config」配下の「0.Example_Northwind」フォルダを「2.MyPrj」>「5.Config」配下にコピーします。このフォルダには「Northwind.mdb」という名称のAccess Databaseファイルが含まれており、ここではこのデータベースをサンプルとして利用します。

image

同様に、「1.Example」>「3.Include」>「3.ConnectString」配下の「0.Example_Access_Northwind-vG.ConfigPath.qvs」を「2.MyPrj」>「3.Include」>「3.ConnectString」配下にコピーします。

image

コピーしたファイルを開くと、先ほどコピーした「Northwind.mdb」のデータベースに対する接続ストリングが含まれていることが確認できます。

image

QVD Generatorでの接続ストリングの利用

ここでは、Exampleコンテナに含まれるQVD Generatorのアプリを使って接続ストリングの利用方法を確認します。「1.Example」>「1.Application」>「1.QVD-Generator-example」配下の「QVD-Generator-Example.qvw」を「2.MyPrj」>「1.Application」>「1.Sales」配下にコピーしてコピーしたQVWを開きます。

image

ロードスクリプトエディタを開きます。

image

一つ目のタブの先頭には、初期化スクリプトをIncludeする処理が追加されていることが確認できます。ここでは16行目のCallから始まる処理をコメントアウトします。

image

2つめのタブの28行目には、先ほどコピーした接続ストリングのファイルをIncludeする処理が記述されていることが確認できます。このように接続ストリングのファイルをインクルードすることで利用が可能となります。32行目の処理は今回不要なためコメントアウトします。

image

「Product」から「OrderDetail」の4つのタブにはそれぞれテーブルからデータを呼び出す処理が実装されていることが確認できます。(「Example」タブにこれらの雛形が含まれており、この雛形を元にテーブルからデータを取り込む処理を追加することが出来ます。)確認が終わったらリロードを実行します。

image

リロードが完了すると、以下の様に取り込んだテーブルの行数、列数、リロード時間の集計情報が表示されます。

image

「2.MyPrj」>「2.QVD」フォルダ配下にQVDファイルが作成されていることを確認してQVD Generatorのアプリを閉じます。

image

QVDからのデータの読み込み

先ほど作成したQVDファイルをSales Analysisのアプリから読み込みたいと思います。以下のロード文を追加してリロードを実行します。「2.MyPrj」>「2.QVD」フォルダへは「vG.QVDPath」の変数でアクセスが可能となっています。


Load * From [$(vG.QVDPath)\Orders.qvd](qvd);

image

テーブルビューアを開き、「Orders」テーブルが追加されたことを確認します。

image

サブルーチンの利用

QDFではサブルーチンを共有することが可能です。また、「2.MyPrj」>「3.Include」>「4.Sub」配下に事前定義のサブルーチンが複数用意されており、これらを呼び出して利用することができます。

image

事前定義のサブルーティンとして、 ファイルが存在するの確認、フォルダの作成、マスターカレンダーの作成、QVDのロードやマイグレーション、インデックスの管理などを行う各種ルーチンが用意されています。

ここでは先ほどSales Analysisのアプリに取り込んだOrdersテーブルのOrderDateをキーとしてマスターカレンダーを作成するために、「CalendarGen」のサブルーチンを試しに利用してみたいと思います。

アプリのロード文に以下を追加してリロードを実行します。追加した1行目でCalendarGenのサブルーチンを呼び出すためのファイルをIncludeし、2行目でキーとするOrderDateを引数としてCalendarGenを実行しています。


$(Include=$(vG.SubPath)\7.CalendarGen.qvs);
Call CalendarGen('OrderDate');

image

テーブルビューアを開き、マスターカレンダーのテーブルが追加されたことを確認します。

image

以上、事前定義のサブルーチンの利用方法をご説明しましたが、作成したサブルーチンを追加・共有することも可能です。

コンテナ・マップ

コンテナ・マップにより、他のリソース・コンテナに対するグローバル変数のリンクを取得することができます。これにより、例えば「2.MyPrj」内のアプリで、「1.Example」内に含まれるQVDやサブルーチンを利用するといったことが可能になります。

それには「LocalContainerGlobalVariables(略してLCGV)」のルーチンを利用します。以下の形で引数を一つで指定すると、指定したリソース・コンテナの全てのグローバル変数のリンクを取得します。


Call LCGV('Example');

また、以下の様に2つ目の引数に対象のリソースを設定することができ、以下の場合にはQVDとIncludeへのパスのリンクのみを取得します。


Call LCGV('Example','QVD;Include');

では、ここで上記の処理を実際に実行してみたいと思います。Sales Analysisのロードスクリプトを開き、以下の処理を追加してロードを実行します。

image

変数一覧を確認すると「vG.<コンテナ名><パス名>」の形式でグローバル変数が追加されたことが確認できます。このパスを利用して他のコンテナのリソースを利用することが可能です。

image

モニタリング用アプリの利用

QDFの「0.Administration」コンテナにはQDFを管理するツールが含まれているとともに、一般的に利用されるQlikViewサーバーのモニタリングツールが含まれており、これらを利用することが可能です。また、これらのモニタリングツールの設定に必要なシステム情報をQDFで集中して管理することもできます。

システム変数の設定

まず、システム情報を定義したシステム変数の設定を確認したいと思います。「0.Administration」コンテナを開き、「Variable Editor Shortcut」をクリックします。

image

「Variable Editor」をクリックします。

image

「Select Container」で「Admin」が選択されている状態で、「Variable Files」で「System Variables」を選択します。サーバー名やログのパス等の情報が変数として一覧に纏められており、ここでシステム情報を集中して管理することが可能です。初期状態ではスタンドアロンの構成となっており、複数ノード構成などでは設定の変更して「Update Variables」で変更の反映が必要となります。

image

System Monitorの設定

QDFの「0.Administration」コンテナにはSystem Monitorが含まれています。System Monitorは接続ユーザー数やサーバーのリソース利用状況などをモニタリングできるツールでサーバーのシステム情報入力などの設定が必要ですが、QDFで利用する場合には個別に設定は不要でQDFのシステム変数を利用することができます。

「0.Administration」>「1.Application」>「1.QlikViewSystemMonitor」配下の「QVSystemMonitor_x.qvw」を開きます。

image

リロードを実行します。

image

モニタリングの情報がアプリに表示されたことを確認します。

image

「Setup」タブを開くと、右下に「Deployment framework is used! Change settings in Variable Editor.」のメッセージが表示されていることを確認します。

image

QlikView Publisherでの利用

ここでは、QlikView Publisherが存在する構成でのQDFの利用方法をご紹介します。(Publisherが存在しない場合の設定についてはQDFに同梱の「Operations Guide for QlikView」に説明があります。)

QlikView ServerのQMC(管理コンソール)から「System」>「Setup」>「Distribution Service」を選択し、「General」タブを開きます。ここでソースフォルダのパスを設定することができ、リソース・コンテナ単位でパスを追加します。また、各フォルダ単位で管理を行うDocument Administratorを割り当てることも可能です。

image

QlikView Serverでもコンテナに対応したマウントフォルダを作成しておくことが推奨されます。

image

QlikView Publisherのソースドキュメントは、以下の形でコンテナ単位で表示されます。「1.Application」フォルダ以下に保存されているQVWに対してタスクを定義し、QlikView Server側の対応するフォルダに対して公開の処理を行います。

image

まとめ

以上、Qlik Deployment Framework(QDF)のメリットや利用方法についてご紹介しました。QDFはQlikViewの開発やデプロイメントのベストプラクティスを取り纏めたフレームワークであり、これを活用することによって「標準化」や「ベストプラクティスの活用」を促進することができます。