Noodl2.5.X版レビュー

この記事は Noodl Advent Calendar 2021 の10日目の記事です。

## 概要
Noodl(ヌードル)はJavascript、Javascriptライブラリが使えるため各種IoT・センサーをつなぐUI/UXプロトタイピングツールとして活用できるビジュアルプログラミングツールです。
そんなNoodlですが今年のクリスマスにメジャーアップデートがアナウンスされていて。~~現在、希望者向けにプレリリース版のVer2.4.0が公開されていますので。早速試してレビューをしてみました。~~
先日、バージョン2.5.xがリリースされました。公式で[リリースノート](https://www.noodl.net/post/release-notes-noodl-2-5-soba)も公開されていますので、ぜひダウンロードして試してみてください。

![Noodl2.5.x Soba](https://assets.website-files.com/6130bd1fcd31dea5015994b7/62335863daf889d63b91f8da_2-5_release_notes.png)


---
## バージョンアップの概要
すでにNoodlを使っている方向けに新機能まとめますので、今回の記事この部分だけでいいかもしれません。

## 2.4.xでの新機能
- ノードを追加するときのパネルが整理されました。ノードの種類が増えてきて全てを表示することは難しくなったため、カテゴリ毎に詳細の表示非表示を変更できるようになりました。

**新しくなったNode選択ウィンドウ**
![70.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/75db4675-374b-8fbe-ea6b-dfd9a7c78629.png)

**カテゴリごとにNodeを表示／非表示できるようになった**
![71.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/9c41c0ed-8369-076a-9656-5f2b4a6bfd47.png)
Nodeにカーソルを合わせると説明が表示されるようになりました

- ノードのIn/Out設定のパネルが整理されました。これによりIn/Out側が明確になったこと。接続しようとしているプロパティの種類が明確になりました。
![09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/5c15f2cf-9b59-6b44-856d-7b6ae2da0b9a.png)

- ドキュメント/コミュニティ/動画(Youtube)が再整理されました
![80.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/cf106ec0-9b9f-79b1-90c3-4799fc0ab5fd.png)

![81.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/00f3bb54-a2eb-b02c-1d21-5268c43c5784.png)


ツールとして洗練されてきたので、大きな変更はなくなってきている印象です。ここ最近はGUI側の改善、基本的なUIの充実。永続データ処理部分の拡張が主な変更内容となっています。

## 2.3.1までの新機能
- コラボレーション：クラウド上のProjectを共同で開発できるようになりました
- バージョン管理との連携サイドバー（git）
- ネイティブUIノード：ボタン、チェックボックス、オプション、ラジオボタン、ラジオボタングループ、ラベル、フォーム、範囲が新しいノードとして追加されました。詳細はこちらを[チェック](https://docs.noodl.net/2.3/#/guides/design-systems)
- 日付入力モジュール：日付を選択するための新しいUIコントロールがモジュールとして追加
- 更新されたSDS：シンプルなデザインシステムであるSDS。
- レイアウトコントロール：[新しいコントロールの使用方法](https：//docs.noodl.net/2.3/#/guides/layouts)

---
## はじめてのNoodl
ここからはNoodlを触ったことがない方向けに、インストールからアプリ作成までを新バージョンで一通り行ってみます。

**サンプル「郵便番号から住所を検索するデモアプリ」**
![50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/12c96cb6-8724-2236-71f0-83c446ed4b02.png)
今回は郵便番号から住所を検索するデモアプリを作成し、デプロイまでしてみます。デプロイしたアプリは[こちら](https://ziptest.noodl.app/)。

###　作成するアプリの機能
- 郵便番号を入力する入力フィールド
- 郵便番号から住所を取得する機能(WebAPI利用)
 - 画面の入力（郵便番号）をWebAPIに渡す方法
 - 検索結果結果（住所）をWebAPIから受け取る方法
- 検索結果を表示するUI

について説明します。

### 1. Noodlのインストール
インストールについてはConnpass上の[解説:Noodl 2.x 版に参加しよう！](https://noodl-tokyo.connpass.com/event/191012/)が参考になりますので、まずはこの手順に沿ってダウンロード・インストール・起動まで行ってください。

**Noodl2.4.xの起動画面シンプルですね**
![00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/06c1c217-9ae9-8e5c-02e7-0d8e901cc808.png)


**Noodl2.4.xのスタート画面**
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/d1ec0fa5-a7c1-8073-95e9-471cbaea7890.png)

右上にバージョンが表示されていてv2.4.0という文字が見えます。
FeaturedにはNoodl公式から公開されている最新トピックス・ドキュメント・動画へのリンクが表示されれています。
YourProjectsには自分で作成したプロジェクトのプレビューが表示されています。
今回ははじめからアプリを作成するので左下の「CreateProject」を選択してプロジェクト作成から始めます。

**Create New Project画面**
![51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/234b9202-b764-38a6-59ad-bfbc4c422e2d.png)
![53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/10e1ef91-6396-ce44-960e-a423690de448.png)


するとCreateNewProjectウィンドウが開くので、
Projectnameにアプリの名前を入力します。今回は「ZipCodeAPI」としました。名称はNoodlで管理するときに使うだけなので、YourProjectsの画面でいつでも修正できます。
CloudStrage /LocalStrage はプロジェクトの保存場所としてクラウドか自身のPCか選択できます。今回はデフォルトの「CloudStrage」としました。
SelectTemplateではProjectのテンプレートとするものを選びます。今回は一番シンプルな「HelloWorld」を選択しました。ほかにもページ遷移のある「Navigatieon example」、バックエンドを使ったTodoリストデモ「TaskList」、自作のUIを使ったデモ「CustomSurvey」、本格的な旅行サイトデモとして「TravelAPP」などがあります。
すべての設定が終わったら左下のCreateProjectを押すとProjectが生成されます。

**HelloWorldテンプレート**
![54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/2102861f-a156-b43f-7c75-75fa30f6b819.png)
HelloWorldテンプレートではページのルートとなるGroupと、HelloWorldのテキストだけが定義されています。

今回のアプリ完成後はこのようなNode構成となりました。
![52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/37032ee9-b4a2-4e24-1e1d-901c099885f5.png)

## Nodeの配置

Nodeはタイトルや結果のテキストを表示するTextノード、インプットフィールドのTextInputノード、検索用のButtonノード、アイコンを表示するIconノード、WebAPIにアクセスするためのRESTノードで構成されています。
下記のようにそれぞれのNodeを配置しました。
![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/01e06078-05aa-7a26-68da-f9410d4e676b.png)

## Nodeの設定
それぞれ下記のように設定しました。

**Textノードの設定：主に文字サイズやレイアウトについての設定です**
![57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/489be90a-b47d-6ada-f8a4-cbf65d11d080.png)

**TextInputノードの設定：主にレイアウトについての設定です**
![58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/cec9257b-c3c2-3488-a6bc-da5cc8459f0a.png)

**Iconノードの設定：表示するアイコンや色の設定です**
![59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/8e064a72-b7af-7586-5b14-6f4e050de04e.png)

**Buttonノードの設定：ボタンの文字や色レイアウトについての設定です**
![60.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/d6aacd1d-fde0-261c-40cb-2dce0d476c2d.png)

**RESTノードの設定：**
![56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/5110ff89-1d7d-c1d8-f0f4-a46a56e4d856.png)
RESTノードのResourceにはWebAPIのエンドポイントを設定しています「https://zipcloud.ibsnet.co.jp/api/search」

**Nodeの構成と右の画面を比べると何となく意味が分かるかと思います**
![61.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/75a3ad28-c7e4-2e5d-40f7-9e0340031edc.png)

## RESTノードの設定2

![56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/ace6a215-e5e3-e292-c9c9-24ad54f436c4.png)
RESTノードではWebAPIにアクセスする部分をRequestとして、WebAPIからのレスポンスを受ける部分をResponseとしてJavascriptで記載します。ほとんどはデフォルトのコメント部分なので、実際に記載する部分は数行です。

```javascript:Request
//Add custom code to setup the request object before the request
//is made.
//
//*Request.resource     contains the resource path of the request.
//*Request.method       contains the method, GET, POST, PUT or DELETE.
//*Request.headers      is a map where you can add additional headers.
//*Request.parameters   is a map the parameters that will be appended
//                      to the url.
//*Request.content      contains the content of the request as a javascript
//                      object.
//
//Request.header['some-important-header'] = Inputs.ImportantHeader
Request.parameters = {
    'zipcode': Inputs.SendMe,
}
```

```javascript:Response
// Add custom code to convert the response content to outputs
//
//*Response.status    The status code of the response
//*Response.content   The content of the response as a javascript
//                    object.
//*Response.request   The request object that resulted in the response.
//
//*Inputs and *Outputs contain the inputs and outputs of the node.

  const obj = JSON.parse(Response.content);
  const adr1=obj.results[0].address1;
  const adr2=obj.results[0].address2;
  const adr3=obj.results[0].address3;
  // console.log(Response.content);
  // console.log(obj);
  Outputs.Address1 =adr1;
  Outputs.Address2 =adr2;
  Outputs.Address3 =adr3;

```

## Nodeの接続
最後に、Nodo同士のデータのやり取りをNodeの接続として設定します。オレンジ色がデータの接続。水色がイベントの接続を表します。

![05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/dd9d89c3-a994-f33e-9ddc-e357b9afb972.png)

すべてのノードにはinputとoutputがあります。2つのノードの接続は1つのノードをクリックし、接続を別のノードにドラッグして、どの出力をどの入力に接続するかを選択するします。ノードエディタで接続をクリックすると渡されているデータを視覚的に確認できます。

今回は下記のように接続しました

|Input|Output|意味|
|:--|:--|:--|
|TextInput:Text|REST:SendMe|インプットフィールドの内容をRESTノードに渡す 
|Button:Click|REST:Fetch|ボタンクリックされたらWebAPIの情報を取りに行く（Fetch）する 
|REST:Address1|Text:Text|WebAPIの出力結果をText1に表示する 
|REST:Address2|Text:Text|WebAPIの出力結果をText2に表示する 
|REST:Address2|Text:Text|WebAPIの出力結果をText3に表示する 

![55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/cd66a71f-4337-4ebd-d78f-5f862fafd0ed.png)

### デプロイ
完成したWebアプリはNoodl上でも動作家訓をすることができますが、ほかの人に使ってもらうためにはインターネット上に公開（デプロイ）する必要があります。画面右上のデプロイアイコンを押すとSandbox（試行）、Production（本番環境）、Other（その他）が選択できます。
今回はSandbox（試行）を選択してみます。

![66.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192442/5562e256-364e-270a-2e36-6bd2f971b35f.png)
SandboxにデプロイするにはSubdomainとしてURLの一部となる名称。
Descriptionとしてアプリについての説明を設定し、Deployボタンを押します。
正常にデプロイできるとExistindSandboxDeploysとして作成されたアプリのURLが表示されます。
Chrome等のブラウザから確認してみてください。

## 関連リンク
- [Noodl公式](https://www.noodl.net/)
- [Noodlコンソール(WorkSpaceの作成)](https://console.noodl.net/)
- [Noodl公式Youtube](https://www.youtube.com/channel/UCLkJ8XYV1J1RqrZKY-o1YWg)
- [Noodlプログラマ>JesperさんのGithub(追加moduleのサンプル)](https://github.com/NoodlJesper)

### フォーラム
  - [公式フォーラム(Discord)](https://discord.gg/23xU2hYrSJ)に移行しました
  - [日本語フォーラム:Slack](https://noodl-community.slack.com/)

### ドキュメント＆動画
- [Noodl2.4.xドキュメント](http://docs.noodl.net/#/)
- [Noodl1.X ドキュメント](http://docs.getnoodl.com/)
- [Noodl1.X 日本語ドキュメント](https://noodl-jp.tds-g.biz/doc/)

## まとめ
- 駆け足でしたがNoodl2.4レビューとして簡単なアプリを作成してみました
- Noodl2.4まで進み、見た目はGUIでより直感的に操作できるようデザイン寄りの強化が図られた印象です
- 進化を続けるNoodlでIoT・プロトタピング、そして本格的なアプリ開発の世界を楽しみましょう！