広告は消しゴムで消すべし

そろそろ更新しようと思う(やる気)

Node.js+Socket.io+p5.jsで双方向通信ペイントをつくる-プログラミングはYouTube動画で学ぶ-

今回はNode.jsとSocket.ioを使ってサーバーとクライアントの双方向通信を可能にしたペイントを作ります。WindowsでNode.jsを始めてやったのですが右も左も分からない状況で、エラーが出ずに動くようになるまで大変でした。参考にした記事も載せておくのでWindowsの方は参考にしてみてください。

 

完成品するとこんな感じに


 

今回の教材

チャンネル登録者数20万人を超えるThe Coding Trainの第12シリーズ「Web Sockets and p5.js Tutorial」です。メインは12.2の後半から12.4までで、前半はNode.js+Socket.ioのインストール方法などについて触れています。動画ではMacを使っているようです。

Node.jsを動かすまでにやったこと

Windows の Node.js 開発環境構築 最小手順 - Qiita

この記事に書いてあることを全部実行しました。そうすると「npm install」でのエラーが出なくなりました。

さて、作業フォルダを新しくつくったら、次はpackage.jsonを作ります。package.jsonでプロジェクトの内容や依存性が分かります。

余談:コマンドプロンプトはフォルダ内で「Shift + 右クリック」から開けます。

package.jsonを記述する

ここは教材の動画のように「npm init」で作成すると簡単です。結果はこのようになります。

後からdependenciesの場所にExpressとsocket.ioについて追記します。すると作業フォルダ内でコマンドプロンプトを開き、「npm install」をするだけで勝手にフォルダ内に「node_modules」が作成され、依存関係にあるパッケージがインストールされます。これでSocket.ioとExpressの準備もできました。

フォルダの構造

<作業フォルダ>

  |---- package.json

  |---- server.js

  |----< node_modules >

  |----< public >

           |---- index.html

           |---- sketch.js

           |----< libraries >

                    |---- p5.js

                    |---- p5.dom.js

                    |---- p5.sound.js

最終的にはこんな感じになります。

サーバー側の記述(server.js)

いちおう日本語でコメントを付けてみました。サーバーはクライアントから受け取ったdataを全員に送信しています。

ソケットの部分が今回のポイントです。分かりやすい例えがあったので紹介します。

現実世界の例とSocket.IOの比較

管理人 Socket.IOサーバ
建屋 Socket.IOモジュールまたはSockets
部屋 Socket
クライアントまたは接続Id
入室 Connect
会話 Emit
特定の人 Socket(Id)
部屋の全員 Socket.Broadcast
館内放送 Sockets.Emit
話題 On, Emitのイベント名

引用:Socket.IOでリアルタイム双方向通信(その1)

クライアント側(index.html)

index.htmlにはクライアント用のSocket.ioのJSファイルを参照するように<script>を記述するだけで完了です。p5.jsのライブラリはこちらからダウンロードできます。

p5.jsでペイントプログラムを書く(sketch.js)

マウスがドラッグされたときに、色がついた円を描画するプログラムです。同時にソケットを通じて、マウスの座標と色の情報をもつオブジェクトをサーバーに送信することで、サーバーがブロードキャストしてくれます。また、サーバーから受け取った座標と色をもとに円の描画もしています。

以上ができたら、コマンドプロンプトで「node server.js」と入力し、いくつかのブラウザから「localhost:3000」にアクセスしてみましょう。

f:id:yosinex:20170218112254j:plain

こんなんが描けました。

まとめ

やってみたらSocketの使い方は案外理解しやすかったです。他のプログラムにも簡単に応用できそうですね!

関連記事