フロントばっかりやってた人だけどNode-REDでなんとかAPI作った
(Node-REDアドベントカレンダー 12/6分)
この前、iOSコンソーシアムという集まりのハッカソンに参加してきました。
そこで、雰囲気メガネをビーコンとiOSを組み合わせたものを作ったのですが、その中でふと「サーバーサイドってまともにやったこと無いし、やってみようかな」と思って「サーバーサイドやりまーす」と手を挙げ、APIを作ってみることにしました。
そのイベントの中で「Node-RED」の説明があり、同じチーム人から「簡単にAPI作れるよ」と言われて「簡単ならそれを使うに決まってんじゃん!」とそれを使うことにしました。
そこでNode-REDの説明をして、「どこで困ったか」という点と「ここが良かった」という点、そして「ここがこうなるといいのになー」という点をまとめて書こうと思います。
そもそもNode-REDってなんだ?
Node-REDは、IBMのBluemixで使えるフロー式のロジック作成ツールのようなもので、ノードを繋いでロジックを作り、コードを書かなくてもそこそこ動くものが作れちゃうツールです。
↓こんなの
サーバーサイドのサの字くらいは知ってる、っていう僕でもなんとなーくで使えるツールです。
以前UnrealEngine4のBluePrintを使っていたので、なんとなーく使い方はわかる感じでした。
APIをどんな風に作るのか?
上の絵で説明すると、左上に[get]/user_new ってのがありますが、あんな風にアクセスのURLを指定して、そこにアクセスがあったらどのように動作させるか?というのを、ノードで処理を繋いでいくという感じです。
使ってみてどう思ったか?
困った所
Cloudantを使うとAPIネタがぐっと減る
データベースを、とりあえずそこにあったCloudantを使いました。そしてNode-REDのAPIについて調べていくと、大体がMySQLを使ってるんですよね。「CloudantってJsonで保存してくれるんでしょ?だったらそれに突っ込めばいいや」ってかんじでCloudantを使ったんですが、もうちょっと考えるべきだったかな、と思いました。
JSを書いた場合、どこでデバッグすればいいの?
中身はnode.jsなので、コードはJSで書くわけですが、そうすると「あれ?このオブジェクトの構造みたいけどどうしたら良いんだ?」とか「ここのロジックのconsole.logとかどうやって見るの?」とか分からなくって、でもハッカソンだから時間がなくて、とりあえずエイヤーで動かしたんですが、実際の所どうするのが効率的なのか分からなかった。
フォーム送信した後の送信完了画面の出し方
ある程度の最低限機能ができて、完了画面くらい出すかー、と思ってノードを繋いでたら思った以上にできなくって、チューターの人に聞いてもわかんなくて、、と結構時間を食った。
結局、ノードをつなぐポイントが誤っていた、というのが原因だったんだけど、ノードを繋いでいても実行されない、ということが起こるとは思わなくて混乱した。
ちなみに、コレだと動いて
コレだと動かなかった
クエリのあとにDoneをやろうとすると動作しないんです「クエリ完了したからDone出すだろ!」ってイメージだったんだけど、その常識は通じなかった。
良かった所
楽!
環境つくって、コードの種類を覚えて、書き方覚えて…と考える必要なく、手順を作っていけばとりあえずはなんとかなるのが良いところ。
最初のその学習ハードルを超えて、とりあえずサクッと動かせるのは「作りたい」の気持ちを満たせるという点でとても良い。
先の興味へつながる
ただ、動かしていると「ここでエラーが出た場合は分岐したくて」とかの気持ちが出てくる。
頭のなかで「ここでswitchなりifが使えれば…」と思うけど、それってどう作るんだ?そもそもエラーコードはどう返ってくる??とかその辺が想像がつきにくくなっている。
それ故に「やっぱちゃんとコードで書けるようになりたい」という、知る動機付けにもなるなーと感じた。
これらをNode-RED上で実装できないのは僕がNode-REDのことをちゃんと知らないからかもしれないけど「全部コレでいいや」にならない分、良い影響を持っていると思う。
コピペしやすい
UnrealEngine4を使っていた頃は、ウェブ上で実装方法を調べても、そのノード構成をコピペで持ってくることは不可能でした(今はどうか知らないけど)。
それに対してNode-REDはノードの配置や内容をJsonデータをエクスポート・インポートが可能になっていることから、とても他の人のノードを参考にしやすい。これは良い。
こう改善されるといいなー
JSの実行コンソールがほしい
上でも書いたけど、js部分の動作が見えないから確認できるようになって欲しい
HTML部分でもifとかforとか使いたい
せっかく変数を受け取れるんだから、それを利用してhtmlの表示の制御がやりたい。手軽に。
チューターの人に聞いたら「JSでなんとかするしか無い」って言われて「えー」って思った。
Macの場合、カーソルがずれてて使いにくい
使った人みんな思っただろうけど、これほんと困る。
まとめ
学びはじめのハードルを低く、手軽に実装できるところはとっても良いと思います。
これって最終的に何を目指すものなんだろ?プロトタイピングツール?サービス実装までのレベルを目指すものなのかな?それによって今後の期待も変わるけど、モックを作るとか、とりあえず見せるものを作るのにいいなーって思います。