Dataikuでプラグインを作るときには必須？プラグインパラメータについてまとめてみた

# はじめに

Dataikuの便利な機能として、プラグインがあります。Dataikuの勉強をしていると、Dataiku社が提供しているものを使用することがあるので、プラグインを使用したことはあるという方はいると思います。しかし、プラグインを自分で作ったことがある人というのはなかなかいないのではないでしょうか。
今回は、プラグインを自分で作成するときに必要になる「パラメータ(Parameters)」について紹介したいと思います。パラメータはプラグインにおいてGUI部分を構成する要素の1つです。GUIからプラグインの処理に必要な要素の入力フォームをパラメータを用いて設定します。これをマスターすることで、プラグインを作成時にできることが広がっていくと思います。

※この記事はDataikuの初心者向けというよりは、中～上級者向けになりますが、備忘録的に残しておこうと思います。

# 概要
パラメータの説明をする前にプラグインについて概要を説明します。ただ、Dataikuのプラグインにはいろいろなものが存在するので、今回は記事内で例として紹介する、「レシピ(Recipe)」のプラグインについて簡単に説明しようと思います。

## レシピの概要

まず、レシピとはDataikuでデータセットに対して様々な処理を実行し、新しいデータセットを作成するために使用するものです。レシピは大きく分けるとレシピには「ビジュアルレシピ(Visual recipe)」, 「コードレシピ(Code recipe)」, 「プラグインレシピ(Plugin recipe)」が存在します。
ビジュアルレシピはDataikuにもともと搭載されていてGUIから実行することができるレシピ、コードレシピはpythonやRなどで自分で処理を記述して実行するレシピ、そしてプラグインレシピはコードレシピで作成した処理をプラグイン化し、ビジュアルレシピのように使用することのできるレシピです。

## プラグインレシピの概要

プラグインレシピは通常、プラグインメニューからインストールをすることで使用することができますが、自分でプラグインを作成することもできます。
プラグインの作成方法の詳細については今回の記事では省略しますが、詳しく知りたい方はDataiku AcademyにPlugin Developmentというコンテンツがあるのでそちらを参考にしてみたください。

https://academy.dataiku.com/plugin-development

プラグインレシピはざっくり分けると、レシピの処理を記述するpythonファイルと、レシピの情報やGUI部分を記述するjsonファイルから構成されます。jsonファイルは以下のようになっています。

```
{
    "meta": {},
    "kind": "",
    "inputRoles": [],
    "outputRoles": [],
    "params": [],
    "resourceKeys": []
}
```

今回説明するパラメータはそのjsonファイル内で使用する項目の1つです。上記のjsonファイルでは"params"と記述されている部分になります。ここに、使用したいパラメータを記述していくことでプラグインのGUI部分に入力フォームが形成されていきます。


# プラグインレシピのパラメータ
基本的には以下のページの内容をまとめたものとなります。

https://doc.dataiku.com/dss/latest/plugins/reference/params.html


パラメータは基本的に以下の6つの要素から定義されます。

- type: パラメータのタイプを定義します。基本的にはここで画面からのどのような入力をするのかを指定します。(必須)
- name: パラメータの名前を設定します。nameはIDのような役割をします。jsonやpythonファイルからこのパラメータを指定する際に、用いられます。この項目は直接画面には影響しない項目になります。(必須)
- label: 画面に表示する際のこのパラメータの名前です。
- description: パラメータの説明を記述できます。記述した説明は入力フォームの右側に表示されます。
- defaultValue: プラグインを起動したときにデフォルトで入力されている値を設定します。
- mandatory: このパラメータの入力が必須かどうかを設定します。trueまたはfalseで記述します。
- visibilityCondition: このパラメータを表示するための条件を指定します。詳細は後述。


また上記に加え、パラメータのタイプごとに設定する項目があります。

## パラメータタイプ

### 文字列パラメータ(String parameters)
文字列を入力したいときのパラメータタイプです。以下の3種類が存在します。

- STRING: 1つの文字列を入力できるフォーム。
- TEXTAREA: 1つの文字列を入力できるフォーム。STRINGより長い文を入力したい場合に用います。
- STRINGS: 複数の文字列を入力できるフォーム。listとして保持されます。

また、STRINGSに限り、以下の設定項目が存在します。
- allowDuplicates: 文字列の重複を許可するかどうかを設定します(true/false)。

※Dataiku バージョン10ではSTRINGSがうまく動作しませんでした。そのため、上記設定項目については検証できていません。バージョン9以前は使えていたはずなのでそのうち修正されることを期待。


#### 記述例

```
    "params": [
        {
          "type": "STRING",
          "name": "str",
          "label": "STRING",
          "description": "STRINGの例",
          "mandatory": true
        },
        {
          "type": "TEXTAREA",
          "name": "txt",
          "label": "TEXTAREA",
          "description": "TEXTAREAの例",
          "defaultValue": "B",
          "mandatory": false
        },
        {
          "type": "STRINGS",
          "name": "strs",
          "label": "STRINGS",
          "description": "STRINGSの例",
          "defaultValue": "CD",
          "allowDuplicates": false
        }
    ],
```

#### 記述例の画面
![STRING_blank.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442306/a479e6d3-c999-f80c-b83d-d6768fca5ca6.png)

記述例ではSTRINGのmandatoryをtrueにしているため、空欄になっている場合はフォームが赤枠になります。カーソルを合わせると「このフィールドは入力必須です。」と表示されたりもします。
また、TEXTAREAとSTRINGSにはdefaultValueを設定しており、レシピを起動した段階で初めから入力されています。

## 数値パラメータ(Numerical parameters)

数値を入力したいときのパラメータです。以下の2種類があります。

- INT: 整数値。
- DOUBLE: 小数値。

また、数値パラメータには以下の設定項目が存在します。

- minI/maxI: 最小値/最大値を設定します。INT用の設定項目です。
- minD/maxD: 最小値/最大値を設定します。DOUBLE用の設定項目です。

#### 記述例

```
    "params": [
        {
          "type": "INT",
          "name": "int",
          "label": "INT",
          "description": "INTの例",
          "defaultValue": 0,
          "minI": 0,
          "maxI": 100       
        },
        {
          "type": "DOUBLE",
          "name": "double",
          "label": "DOUBLE",
          "description": "DOUBLEの例",
          "defaultValue": 0.5,
          "minD": -2.5,
          "maxD": 2.5
        }
    ],
```

#### 記述例の画面
![NUM_defo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442306/04c5a401-865f-99f7-5c03-d818fe645940.png)

minI/maxI, minD/maxDで最小値と最大値を設定しているため、その値を超えるとフォームが赤枠になります。

![NUM_out.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/442306/318d5688-1a1d-2c1e-b172-a186476d55c3.png)




# おわりに
今回はプラグインを作るときに必須ともいえる、GUIの設計にかかわるパラメータについて紹介しました。Dataikuを触っていると見かけることのある入力フォームなどは自分でプラグインを作るときにも使うことができるようです。パラメータを使いこなしてより便利なプラグインが作れるように頑張っていきたいと思います。