Slide 1

Slide 1 text

IoTLT vol.65 GraphQLをIoTで使う

Slide 2

Slide 2 text

自己紹介 ● 名前 ○ 松永勇太(@ufoo_yuta) ● 出身地 ○ 滋賀県 ● やってること ○ スポーツIoTLT主催 ● 最近の趣味 ○ VRゲーム

Slide 3

Slide 3 text

GraphQLとは ● WEB APIのためのクエリ・スキーマ言語 ○ クライアントアプリのためのクエリ ○ データのモデル定義のためのスキーマ ● Facebookの開発チームが提案 ○ 公開は2015年 ● 個人的に好きなWEBの規格

Slide 4

Slide 4 text

GraphQLを用いた開発 かなりざっくりとしたイメージ↓ ● クエリ ○ クライアントアプリからのリクエスト ○ GETやPOSTのようなもの ● リゾルバ ○ リクエストに対するレスポンス処理と同じイメージ クエリ構文解析 リゾルバ実行

Slide 5

Slide 5 text

GraphQLをIoTで使うとは? IoTデバイスから送られたデータを GraphQLサーバで受け止めてみる

Slide 6

Slide 6 text

データ送信にMQTTを用いる ● IoTでよく使われている通信規格 ● 軽量なプロトコル ● pub/subモデル ● 今回のイメージ↓ IoTデバイス (publisher) MQTTサーバー GraphQLサーバー (subscriber)

Slide 7

Slide 7 text

今回の発表について こちらの記事を参考にしました↓ Live IoT Data Subscription with Apollo GraphQL and MQTT

Slide 8

Slide 8 text

IoTデバイスはM5StickCを使用 コードは以前に記事にまとめた「M5StickCで歩数計を作る」の内容のものを流用 やりたいことは、 1. M5StickCの内蔵センサを用いて歩数を計測 2. 歩数データをJSON化 3. MQTTサーバーへ送信

Slide 9

Slide 9 text

サーバー側の開発環境 ● GraphQLサーバー ○ 言語 ■ Node.js ○ ライブラリ(主要なものだけ) ■ express ■ apollo-server-express ■ graphql-mqtt-subscriptions ● MQTTサーバー ○ Eclipse Mosquittoのテスト用ブローカー

Slide 10

Slide 10 text

デバイス側の開発環境 ● マイコン ○ M5StickC ● 言語 ○ Arduino ● ライブラリ ○ PubSubClient ○ ArduinoJson

Slide 11

Slide 11 text

GraphQLサーバーのためのスキーマ type SensorData { steps: Int! // 歩数 time: String! // タイムスタンプ } type Subscription { subscribe2sensor(topic: String!): SensorData! } schema { subscription: Subscription }

Slide 12

Slide 12 text

センサーデータを受信するクエリ subscription { // GraphQLとリアル通信を行うためのクエリ subscribe2sensor(topic: "test/+/env") { steps // 歩数 time // タイムスタンプ } }

Slide 13

Slide 13 text

動画

Slide 14

Slide 14 text

さいごに ● GraphQLをIoT開発に使うことができた ● MQTTはsubscribeと組み合わせることができる ● 実際にクライアントアプリを作ってみるとGraphQLの恩恵に授かれそう ● 記事を書いてくださったShan Desai氏に感謝