コメント一行でUI生成。Form機能を使った一歩先のGoogle Colab活用術

## Form機能とは？

IpywidgetsはJupyterのUIライブラリとして知られていますが、[Google Colab](https://colab.research.google.com/)ではセキュリティ上の理由により現時点(2019/4/25)では使うことができません。
> [Add Ipywidgets support #60](https://github.com/googlecolab/colabtools/issues/60)

一方でColabにはFormという、コメントをわずかに書くだけでUIを自動生成する機能が用意されています。詳しくは、下記公式マニュアルをご覧頂ければと思いますが、コンボボックスやスライダー、日付選択ダイアログといったものが用意されています。
> [Forms - Colaboratory](https://colab.research.google.com/notebooks/forms.ipynb)

## 作図サンプルでForm機能を体感してみよう

このForm機能のインパクトを体感していただくために、matplotlibの作図支援ノートブックを公開しました（下記リンク参照）。スタイルの選択などをUIとして提供することで、改変できるパラメータをビジターにわかりやすく提示することができます。

> [Chart builder for matplotlib.ipynb](https://colab.research.google.com/drive/1po_kEWkmo1gSMyOEJeFSZ5whOk5EGYWo)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31788/7a3dcf8c-b1ea-980f-9f5e-c78bf9658dfb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31788/75e0173c-6d58-697f-32b6-6ba06e54bbf7.png)

## インストーラーとしてForm機能を使う

個人的に、Form機能の重要性を感じたのはTensorflowおよびTensorflow Probability（以下、TFP）のバージョン選択UIです。Colaboratoryにインストールされているモジュールは何もしなくとも上がるため、昨日動いていたはずのコードが今日動かなくなったということが普通に起こり得ます。特に、Tensorflowは仕様が大きく異なる2.xが控えており、多くの既存コンテンツが動作しなくなることが予想されます。
そんなとき、例えばTensorflowのバージョン選択機能がUIとして用意されていると心強いものです。下記は、TFPの[サンプル](https://colab.research.google.com/github/tensorflow/probability/blob/master/tensorflow_probability/examples/jupyter_notebooks/Probabilistic_Layers_Regression.ipynb#scrollTo=9clSiUTiT3G1)から抜粋したものですが、コピペ一つで実用的なバージョン選択UIをあなたのノートブックに加えることができます。

### Tensorflowのバージョン選択UI
```python
#@title Install { display-mode: "form" }
TF_Installation = 'TF2 Nightly (GPU)' #@param ['TF2 Nightly (GPU)', 'TF2 Stable (GPU)', 'TF1 Nightly (GPU)', 'TF1 Stable (GPU)','System']

if TF_Installation == 'TF2 Nightly (GPU)':
  !pip install -q --upgrade tf-nightly-gpu-2.0-preview
  print('Installation of `tf-nightly-gpu-2.0-preview` complete.')
elif TF_Installation == 'TF2 Stable (GPU)':
  !pip install -q --upgrade tensorflow-gpu==2.0.0-alpha0
  print('Installation of `tensorflow-gpu==2.0.0-alpha0` complete.')
elif TF_Installation == 'TF1 Nightly (GPU)':
  !pip install -q --upgrade tf-nightly-gpu
  print('Installation of `tf-nightly-gpu` complete.')
elif TF_Installation == 'TF1 Stable (GPU)':
  !pip install -q --upgrade tensorflow-gpu
  print('Installation of `tensorflow-gpu` complete.')
elif TF_Installation == 'System':
  pass
else:
  raise ValueError('Selection Error: Please select a valid '
                   'installation option.')
```

### Tensorflow Probabilityのバージョン選択UI
```python
#@title Install { display-mode: "form" }
TFP_Installation = "Nightly" #@param ["Nightly", "Stable", "System"]

if TFP_Installation == "Nightly":
  !pip install -q tfp-nightly
  print("Installation of `tfp-nightly` complete.")
elif TFP_Installation == "Stable":
  !pip install -q --upgrade tensorflow-probability
  print("Installation of `tensorflow-probability` complete.")
elif TFP_Installation == "System":
  pass
else:
  raise ValueError("Selection Error: Please select a valid "
                   "installation option.")
```

### UIの表示例

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31788/d3557451-1ad7-98be-35ca-84d43f10b943.png)

## まとめ

QittaでForm機能を取り上げた記事がなかったので寄稿してみました。この機能は、Jupyterの標準機能として取り入れるべき価値があると自分は思います。今後、Chainerのバージョン選択UIなど様々な用途に応用され、Form機能が広く認知されることを願っています。