Node.jsを使って簡単なアプリケーションを作ろう

IT・IT製品TOP > Key Conductors > 栗村 彰吾(日本アイ・ビー・エム株式会社) > Node.jsを使って簡単なアプリケーションを作ろう
この記事をtweetする このエントリーをはてなブックマークに追加

IT現場の道先案内人 Key Conductors

Node.jsを使って簡単なアプリケーションを作ろう

開発 2017/02/06

 前回、ITをビジネス貢献のツールとして活用するにはOSSの利用が重要であることを述べた上で、OSS3大テクノロジーの1つである「Node.js」について紹介しました。

 今回は、LinuxONE Community CloudのRed Hat Enterprise Linux7.2(RHEL7.2)の仮想サーバを使って、特定の単語に対する「感情分析」を行い、その結果をデータベースに蓄積していくアプリケーションを作成してみます(図1)。

図1 アプリケーション全体像

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図1 アプリケーション全体像

 開発には、Node.jsベースのアプリケーション開発ツールである「Node-RED」を用います。特定の単語を含むTwitterのツイートに対して感情分析を行い、その結果はMongoDBに格納します。

 本連載第2回でLinuxONE Community Cloudの仮想サーバ作成方法について紹介しています。仮想マシンの作成方法はこちら(第2回)をご参照ください。

 本稿でアプリケーション開発に利用するNode-REDとは、Webブラウザ上でアプリケーションロジックを作成できる「フローエディター」です。アプリケーション作成に必要な機能が「ノード」という単位でカプセル化されているため、プログラミングの知識がなくても、ノードを線でつなぎ合わせることでロジックを簡単に作成できます。またTwitterやIoTデバイスと連携も可能です。

Node-RED:https://nodered.jp/

 アプリケーション作成に移る前に、まずは今回のアプリケーションで必要となるOSの設定やモジュールのインストールを行っておきましょう。具体的には、以下の流れで環境をセットアップします。

・その1:OSの設定、依存パッケージインストール
・その2:Node.js、Node-REDのセットアップ
・その3:MongoDBのセットアップ

 以降で順を追ってみていきましょう。なお、ここでは本稿執筆時点での最新版の環境を前提に解説を進めます。他のバージョンを導入する場合には適宜環境を読み替えてください。

アプリケーション開発環境のセットアップ

その1:OSの設定、依存パッケージのインストール

■手順(1-1)iptablesとfirewalldを停止

 今回はテスト目的なので、あらかじめ想定外のエラーなどを回避するためにiptablesとfirewalldを無効にします。操作は、sudoコマンドで管理者権限になってからsystemctlコマンドで実施しましょう。  

[linux1@rhel7 ~]$ sudo systemctl stop iptables
[linux1@rhel7 ~]$ sudo systemctl disable iptables
[linux1@rhel7 ~]$ sudo systemctl stop firewalld
[linux1@rhel7 ~]$ sudo systemctl disable firewalld
■手順(1-2)依存関係パッケージのインストール

 Node.js、MongoDBセットアップに必要なパッケージをインストールします。こちらはパッケージ管理システムであるyumのコマンドを使ってJavaとC++コンパイラを導入します。

[linux1@rhel7 ~]$ sudo yum install java
[linux1@rhel7 ~]$ sudo yum install gcc-c++  

その2:Node.js、Node-REDのセットアップ

 その1で事前準備が整ったので、いよいよNode.jsとNode-REDを導入します。

■手順(2-1) Node.jsのバイナリファイルを取得する

 LinuxOne用のNode.jsはバイナリで配布されています。こちらは、wgetコマンドを使って、下記のURLから取得してください(ここではバージョン6.6.0.0を指定しています)。

[linux1@rhel7 ~]$ sudo wget http://public.dhe.ibm.com/ibmdl/export/pub/systems/cloud/runtimes/nodejs/6.6.0.0/linux/s390x/ibm-6.6.0.0-node-v6.6.0-linux-s390x.bin
■手順(2-2) バイナリファイルに実行権限を付与する

 chmodコマンドを使ってバイナリファイルに実行権限を付与しておきます。

[linux1@rhel7 ~]$ sudo chmod +x ./ibm-6.6.0.0-node-v6.6.0-linux-s390x.bin
■手順(2-3) バイナリファイルの実行

 バイナリファイルを実行すると、Node.jsのインストールが行われます。

[linux1@rhel7 ~]$ ./ibm-6.6.0.0-node-v6.6.0-linux-s390x.bin
■手順(2-4) パス設定

 Node.jsの実行コマンドである「node」のショートカット設定を行います。

 echoコマンドを利用して、.bashrcの設定にnode.jsのPATHを追加しています。最後に、設定を確認するために「node -v」でバージョンを出力してみています。

[linux1@rhel7 ~]$ echo "export PATH=\$PATH:/home/linux1/ibm/node/bin" >> /home/linux1/.bashrc
[linux1@rhel7 ~]$ source /home/linux1/.bashrc
[linux1@rhel7 ~]$ node -v
v6.6.0
■手順(2-5) Node-REDをインストール

 Node.jsのモジュールであるNode-REDをインストールします。Node.jsのパッケージ管理ツールであるnpmを使って導入します。

[linux1@rhel7 ~]$ npm install node-red
■手順(2-6) パス設定

 Node-REDの実行コマンドである「node-red-pi」のショートカット設定を行います。

[linux1@rhel7 ~]$ echo "export PATH=\$PATH:/home/linux1/node_modules/node-red/bin" >> /home/linux1/.bashrc
[linux1@rhel7 ~]$ source /home/linux1/.bashrc

その3:MongoDBのセットアップ

 今回のアプリケーションでは、ツイートを格納するデータベースとしてMongoDBを使用します。

 MongoDBはドキュメント指向型のNoSQLデータベースです。図2にMongoDBのデータモデルを示します。MongoDBのデータベースモデルは、データベース、コレクション、ドキュメントの3つで構成され、データベース内にコレクションが存在し、コレクションの中にドキュメントが存在します。

図2 MongoDBのデータモデル

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図2 MongoDBのデータモデル

 データはドキュメントに格納されていきます。MongoDBはリレーショナルデータベースのように表形式でデータを格納せず、JSON形式のテキストで格納されるため、Twitterのツイートやログデータといったシンプルで大量のデータを格納することに向いています。

 リレーショナルデータベースのように事前にデータ型などを定義する必要がないため、新たなデータを扱ったり、それを利用して新しいアプリケーションを開発する場合にスピーティに実行できるメリットがあります。

 MongoDBを構築するためには、30GBのディスク容量が必要です。LinuxONEコミュニティクラウドで作成した仮想マシンには、/dataに容量42GB程度のディスクがマウントされているので、/dataでMongoDBをセットアップします。

 MongoDBの構築手順は以下のリンクを参考にしています。

・https://github.com/linux-on-ibm-z/docs/wiki/Building-MongoDB-3.2-on-RHEL-7-and-SLES-12

■手順(3-1) MongoDBのパッケージをダウンロード

 MongoDBを導入する前に、「scons」を入手します。wgetで次のようにrpmパッケージを取得します。

[linux1@rhel7 ~]$ cd /data/
[linux1@rhel7 data]$ sudo wget http://prdownloads.sourceforge.net/scons/scons-2.3.4-1.noarch.rpm
■手順(3-2) MongoDBのパッケージを展開

 ダウンロードしたsconsのパッケージを展開したら、いよいよGitHubからMongoDBを取得します。最後にバージョンなどを確認しています。

[linux1@rhel7 data]$ sudo rpm -i scons-2.3.4-1.noarch.rpm

[linux1@rhel7 data]$ git clone https://github.com/linux-on-ibm-z/mongo mongo

[linux1@rhel7 data]$ cd mongo

[linux1@rhel7 mongo]$ git checkout v3.2-s390

[linux1@rhel7 mongo]$ vi version.json
 { "version": "3.2.0", "githash": "b80311d7fcfaae95c434ade551949921925234e6" }

■手順(3-3) MongoDBをビルド

 sconsを使ってMongoDBをビルドします。

[linux1@rhel7 mongo]$ scons --opt --allocator=system all
※インストール完了まで数十分かかります。
■手順(3-4) パス設定

 次のように「.bashrc」に環境変数$PATHを設定しておきます。

[linux1@rhel7 data]$ echo "export PATH=\$PATH:/data/mongo " >> /home/linux1/.bashrc
[linux1@rhel7 data]$ source /home/linux1/.bashrc
■手順(3-5) データ格納用ディレクトリの作成
 [linux1@rhel7 data]$ mkdir db
■手順(3-6) Node-RED用のMongoDBノードをインストール

 Node-REDでMongoDBを使用可能にします。

[linux1@rhel7 data]$ cd /home/linux1/ibm/node/lib/node_modules/npm/node_modules
[linux1@rhel7 node_modules]$ npm install node-red-node-mongodb
■手順(3-7) MongoDBサーバを起動

 下記のコマンドを実行してMongoDBサーバを起動します。

[linux1@rhel7 node_modules]$ mongod

 「・・・I NETWORK  [initandlisten] waiting for connections on port 27017」と表示されれば、正常にMongoDBサーバが起動しています(なお、サーバを終了したい場合は「CTRL-C」を入力します)。

■手順(3-8) Mongoシェル起動

 手順(3-7)と別のセッションを立ち上げて以下のコマンドを入力します。

[linux1@rhel7 ~]$ mongo
MongoDB shell version: 3.2.0
connecting to: test
 >

 コマンドラインからMongoDBに格納されているデータを操作することができます。

■手順(3-9) データベースとコレクションを作成

 感情分析したツイートを格納するデータベースとコレクションを作成します。まずデータベースとユーザーを作成します(pwdには任意のパスワードを設定します)。

>use tweetdb
>db.createUser(
...   {
...     user: "user1",
...     pwd: "xxxxxx",
...     roles: [
...       {
...         role: "readWrite",
...         db: "tweetdb"
...       }
...     ]
...   }
... )

 コレクションを作成します。

>db.createCollection("tweetsentiment")

 なお、ドキュメントはデータを格納する際に自動で作成されるため、事前に作成する必要はありません(CTRL-Cを入力することでMongoシェルを終了できます)。

Node-REDを使ったアプリケーション作成手順

 ここまでで、アプリケーションを作成する準備が整いました。ここからはいよいよ、Node-REDを使ってアプリケーションを作成していきます。

■手順(1) Node-REDの開発環境にアクセス

 「アプリケーション開発環境のセットアップ 手順(3-8)」とは別にセッションを立ち上げて、以下のコマンドを入力してNode-REDを起動します(なお、Node-REDを終了するには、CTRL-Cを入力します)。

[linux1@rhel7 ~]$ node-red-pi

 Webブラウザから、「http://<仮想マシンのIPアドレス>:1880」にアクセスします。図3がパレットと呼ばれるNode-REDの開発環境です。

図3 Node-REDのアプリケーション開発環境

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図3 Node-REDのアプリケーション開発環境

 「twitter」「sentiment」「function」「mongodb」「debug」ノードを使用します。各ノードをつなげたものが図4です。

図4 ノードの連携

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図4 ノードの連携

■手順(2) 各ノードの設定

 まずtwitterノードで、指定した単語を含むツイートを取得します(図5)。

図5 Twitterノードの設定

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図5 Twitterノードの設定

 取得したツイートをsentimentノードで感情分析します。感情に応じて「感情スコア」が付けられます。「0」が中立の感情、「1」以上がポジティブな感情、「-1」以下がネガティブな感情に割り振られます。

 functionノードでツイートに加工します。今回は感情分析結果を分かりやすくするため、sentimentノードで付与された感情スコアを表示させるようにします(図6)。

図6 functionノードの設定

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図6 functionノードの設定

 最後に、mongodbノードでMongoDBに格納します(図7)。Debugノードはノード名の設定のみです。

図7 mongodbノードの設定

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図7 mongodbノードの設定

■手順(3) アプリケーションの実行

 パレットのDeploy(図3右上)をクリックします。Debugノードの右側をクリックすると、パレットの右側にアプリケーションの実行結果が表示されます。

■手順(4) 実行結果の確認

 では、感情分析されたツイートがデータベースに格納されていることを確認します。

 SSHクライアントのセッションを立ち上げMongoシェルを起動し、手順(17)で作成したコレクションのドキュメントを確認します。

[linux1@rhel7 ~]$ mongo
MongoDB shell version: 3.2.0
connecting to: test
 > db.tweetsentiment.find()

 サンプルとして「2016 Christmas」を含むツイートを感情分析します。ポジティブな感情と分析されたツイートには1以上の感情スコア、ネガティブな感情と分析されたツイートには-1以下の感情スコアが追加されてデータベースに格納されています。図8が実行結果の一部です。

図8 サンプル実行結果

※会員登録いただくと図をご覧いただけます。
会員登録はこちら(無料)

図8 サンプル実行結果

 データがMongoDBのドキュメントに格納される際に、自動でドキュメントが作成されます。

「"_id"」と「"payload"」はドキュメントに格納されているデータの項目です。「"_id"」はデータの識別番号、「"payload"」はデータの内容を意味します。「"_id"」はデータ格納時に自動生成され、「"payload"」にはTwitterから取得したツイートと、sentimentノードで分析した感情スコアが表示されています。

開発コミュニティと応用のアイデア

 今回作成したアプリケーションは、「Twitterのツイートを感情分析し、データベースに格納する」という簡単なものでした。例えば、これをビジネスに応用すると、自社製品/サービスに関するツイートを分析し、その評価を把握できれば、製品/サービス開発時に分析データを活用できるのではないのでしょうか。

 Node-REDにはNode-REDライブラリ(http://flows.nodered.org/)と呼ばれるコミュニティがあります。Node-REDライブラリではさまざまなノードやフローが公開されており、例えば、センサータグのデータ分析フローやチャットアプリのフローなどがあります。

 第5回、6回ではOSS 3大テクノロジーの1つ、Node.jsについて紹介しました。

 次回はApache Sparkについて紹介します。Apache Sparkはインメモリー処理で従来の分析ツールによりも高いパフォーマンスを発揮し、リアルタイム分析を可能にすることで注目されています。次回もお楽しみに!

会員限定で「読者からのコメント」が読み書きできます! 「読者からのコメント」は会員限定の機能。会員登録を行い、ログインすると読者からのコメントが読み書きできるようになります。

会員登録(無料)・ログイン

Myリストへ

この記事をtweetする このエントリーをはてなブックマークに追加


この寄稿記事に掲載している情報は、掲載日時点での情報となります。内容は変更となる場合がございますのでご了承下さい。また、「Key Conductors」の寄稿記事及び当該記事に寄せられたコメントについては、執筆者及びコメント投稿者の責任のもと掲載されているものであり、当社が、内容の最新性、真実性、合法性、安全性、適切性、有用性等を保証するものではありません。


30009470


IT・IT製品TOP > Key Conductors > 栗村 彰吾(日本アイ・ビー・エム株式会社) > Node.jsを使って簡単なアプリケーションを作ろう

このページの先頭へ

キーマンズネットとは
さまざまなオープンソースソフトウェア(OSS)に携わり、現在は「LinuxONE」を中心に、提案および構築を担当。お客さまのミッションクリティカルな業務にふさわしいシステムの提供に尽力する傍ら、LinuxONEの活用に関するセミナー講師として「メインフレームの価値」や「なぜ今メインフレームか」を啓蒙する活動にも従事する。

ページトップへ