Kibana CanvasでCanvasならではの表現をしよう

# canvasといらすとやで１つネタを

Advent Calendar 12/05分　今日は「canvasといらすとやで１つネタを」でお送りします。
タイトルが微妙なのは、駆け込みでAdvent Calendarに登録したからです。すみませｎ。

閑話休題。
Canvasって何、と言われたら従来のダッシュボードを、”さらにグラフィカルにしたもの”と考えると良いと思います。

利用イメージについては、以下の紹介が詳しいです。
[人気のカフェは!? Kibana Canvasの可能性｜Elastic{ON} 2018 より](
https://www.ntt-tx.co.jp/column/tec/elastic/elastic_on/2018/vol6/)

本家のGetting startedはこちら
https://www.elastic.co/guide/en/kibana/current/canvas-getting-started.html

Canvasは、6.5から標準でKibanaについてくるようになり、Githubのissueをみるとまだまだ成長途中ではありますが、
従来のダッシュボードでは表現できなかったようなものができる代物となっており、期待されているプロダクト？モジュール？かと思います。

前半では、Canvas全体のご紹介をし、後半ではその中でも画像を使った部分について、いらすとや画像で遊びながら触れていきます。
ネタだけ楽しみたい人は、テキストを飛ばして画像だけ見ていただければと思います。

## Canvasのデモ画面の紹介

6.5では、デモ用にサンプルデータを入れる仕組みがあるので、これを利用するとダッシュボード、Canvasともにすぐに見ることができます。

Canvasならではの表現を見ていただくために、通常のDashboardとCanvasの画面を比較できるよう、両方の画像をあげております。

### eコマースサイトの例

#### 通常のダッシュボード

![eCommerce  Revenue Dashboard   Kibana.png](https://qiita-image-store.s3.amazonaws.com/0/111676/0f17a700-7dc9-0a0b-d9d3-804c841cbb08.png)

#### Canvasでの表示例

グラフを散りばめただけの数字に埋もれたダッシュボードとは違い、ポスターのような見せ方です。

![eCommerce  Revenue Tracking   Kibana.png](https://qiita-image-store.s3.amazonaws.com/0/111676/5bcde4da-3f86-a157-2410-0d84622bcaf1.png)



# 今回やること

で、ここからが本題です。
この部分を見てください。ただの棒グラフではなく、達成度合いを絵を塗ることで表現しています。
これは従来のダッシュボードではできなかったところです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/d0bec5a5-b641-99c9-e781-4ae9fb3a7644.png)

こういうのは、どうやったらできんの？　ということを、ステップバイステップでご紹介します。

## Image reveal

この塗り絵タイプのものは、CanvasのWorkpadで「Add Element」から「Image reveal」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/6b0719b8-7b7c-3520-bc54-318edf5de910.png)

デフォルトでは、Elasticのロゴが指定されている状態で追加されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/2da2d226-7eb7-08cd-9249-a7aa9ab0ff0e.png)


### 設定方法

#### Measure

ここでは、どのぐらい塗るのかの値について、どの項目の値を使うかどうかを決めます。
Valueの左側では、Averageと見えているところは、MaxやMin,Sumなどの関数を指定します。

**表示に使われる値は、0から1の間である必要があります**
この範囲でない数値が与えられたときは、△に！マークが入ったエラーアイコンが表示されます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/50460177-d661-df82-a712-174a94de817e.png)

右側には項目名が出ていますが、これは「Data」タブで設定されている内容から項目名を拾ってきています。
上記例ではtestと表示されていますが、それはDataでこのようなデータを取得しているからです。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/b256e682-c33f-2d58-c503-8a392af3db19.png)

**Save**ボタンを押さないと、反映されないので注意してください。

**Elasticsearch SQL queryで生データを検索し、表示させるべきでしょうが、ここではSQLをCanvasでの設定方法確認を優先させるための便宜的な手段としています**

#### Reveal Image

Upload Imageで画像のURLやアップロードを行います。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/54a31db7-64be-c011-287d-087311f8c89b.png)

Reveal fromでどこから塗るかを設定できます。

- Top
- Left
- Bottom
- Right

の4種類があり、デフォルトではBottomになっています。

#### 背景画像の設定

背景となる画像を設定するには、Reveal Imageの横にあるプラスアイコンから背景の追加を選択することで、設定箇所が表示されるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/6f32399a-57bd-7786-0e71-2a4ac8e59f25.png)

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/8d44dc10-867d-c800-c667-2c82f8a13b28.png)

イラレやPhotoshopなどの技術が全くございませんので、信頼と実績のMS Paintで背景画像をこしらえ、その画像を設定します。

塗る値を0.3ぐらいに設定する（3割塗る）、左からと設定した場合、こんな感じになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/31af38cf-55fe-ebbe-ba2b-5781bf41cc6b.png)

### 組み合わせれば、こんなことも！

会議室の利用状況なんかの可視化風にもなりますね。
下地にフロア地図をベタっとはり、「使用中」の画像を上に置いています。
使用中が1, 空室の場合は0となるようなデータにしておくと、こんな感じになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/1e5367e7-550a-2cc5-9e92-759e72ef02cc.png)

何もないときは、こんな感じに。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/89338e50-45fd-9c16-17f6-108bb55fc857.png)

### 組み合わせれば、こんなことも！！！

体力ゲージの背景画像を用意しておいて、上に残存体力をRevealで表示させます。
1P側は右からReveal、2P側は左からRevealでこんな感じになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/af6c134d-123a-60cb-6b92-9bb4066265db.png)


もっと背景をちゃんと作れば、さらにインパクトがある遊びが出来るのですが、絵は描けないわ、
著作権の問題もあるわで、フリー素材で探すとこれが限界でした。

いちおう、スト２の春麗のステージがこんなんだった気がしています。

### Canvas as a Code！？

GUIで設定している操作も、最終的にはExpression Editorのところで見られるように、テキストベースで記述することもできるようです。
AutoCompleteがあるとはいえ、Timelionの書式とはまた違うし、最初はよくわからない人も多いのではないでしょうか。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/58d87abf-7771-6235-1f35-47d19c40f55c.png)


### 改めてeコマースのCanvasを見る

「Manage Assets」から確認してみますと、白い女性の画像と、色のついた女性の画像が２つあることが分かります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/90c6a761-21fa-9df9-4a1c-5a49756a598d.png)

ソバージュの髪の下絵はちょっと選択する際に邪魔だったので、横によけてReveal部分だけを見てみると、
先に確認した２枚の絵が設定されていることが分かります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/2ccd9989-4bab-5485-961d-396a61fbe74b.png)

こうやってあの絵は作られてたんですね。

## Image Repeat

画像繋がりで、もうひとつRepeatがあります。
画像を横に並べて表現するやつですね。Amazonでいうところの、評価の星のようなものができます。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/05b8e29b-63b1-2c88-5df7-a1e921c28c64.png)

これをやるには、「Add Element」から「Image Repeat」を選択します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/594ac2f8-4696-b47b-6bc0-2a9644eabcf3.png)

デフォルトでは、Elasticのロゴがリピート画像に設定されています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/a2ae7a39-21c2-3ac2-9194-6a465969c725.png)


### 設定方法

#### Measure

繰り返す数（整数）を取得する項目を設定します。
**整数**であることに注意してください。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/61b3c9ec-3f27-b5a9-59b2-2434cc6fd038.png)

3.5や3.9999のような値であった場合は、**3回のリピートになります。**

#### Repeating Image

繰り返し画像を指定します。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/b669ff28-aa9e-031b-b792-0cf9d3a17a5b.png)

プラスアイコンを押すことで、以下の設定ができるようになります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/6a46d600-c3c4-917b-e29f-72352aa64733.png)


|項目|内容|
|----|------|
| Empty Image | Max回数に満たない場合、その足りない分を埋める画像 |
| Image Size | 画像サイズの指定（％） |
| Max count | 何回繰り返すかの最大値 |


5段階評価とするので、Max Countを5、Empty Imageに灰色の星画像を設定すると、こうなります。

![image.png](https://qiita-image-store.s3.amazonaws.com/0/111676/1e41aa85-d90a-fc5d-7e56-f9bf0621e468.png)

Revealと比べて、3.5のような表現は難しいですが、☆の数の最大値を6や10に増やすなどのやりやすさに分があるように思います。

### 組み合わせれば、こんなことも！

デフォルトでは、画像は横並びになります。
パワーポイントで回転させるように、左に90度回転させてやると、縦並びにもなります。
その場合、画像を右に90度回転させておくと揃います。

先の会議室の中に、どのくらいの人が入っているのか、というような可視化のイメージです。

![1544148629Ci3JTYwFKi5AZGv1544148626.gif](https://qiita-image-store.s3.amazonaws.com/0/111676/293f9554-5842-5788-b828-f3c095e81ad1.gif)

このイメージは、こちらからInspire the next.
<blockquote class="twitter-tweet" data-partner="tweetdeck"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/containerdaysjp?src=hash&amp;ref_src=twsrc%5Etfw">#containerdaysjp</a> これ面白いなー。時間も出てると面白いかも?データとしては時間も入ってるんだろうけど。 <a href="https://t.co/XNarhvmSib">pic.twitter.com/XNarhvmSib</a></p>&mdash; Jun Ohtani (@johtani) <a href="https://twitter.com/johtani/status/1069833908194164736?ref_src=twsrc%5Etfw">December 4, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


# まとめ

長々とスクロールいただきありがとうございました。

今回のような表示形式をとる場合には、どのようなデータの持ち方をすればいいのか、という点については検討を要しますが、
無機質なダッシュボードでもなく、BI以外でのサイネージのような利用用途でも活用できるかと思います。

明日は、@yu_kawachaki さんの「[Kibana Canvasをはじめてみよう](https://qiita.com/yu_kawachaki/items/39cc037836cc8d727bf3)」です。ご期待ください。

@yu_kawachakiさんは、[NTTテクノクロス Advent Calendar 2018](https://qiita.com/advent-calendar/2018/ntt-tx)で以下も公開なさっています。あわせてごらんください。

- [Kibana Canvasでオシャレに可視化しよう](https://qiita.com/yu_kawachaki/items/b206114219d4cf184742)