Cybozu Days 2022のブース出展でソラカメとkintoneの連携にチャレンジしました。


SORACOM Advent Calendar 2022の21日目の記事です。

  Topへ↓

今年のCybozu Days 2022(幕張メッセ 11/10-11)で弊社は3年連続のブース出展をしました。

弊社ブースは、昨年に続いてIoTとkintoneの連携をテーマに打ち出しました。
しかも今年はSORACOMさんのデバイスを中心に据え、さらに業種を絞ってみました。あえて農業に特化した農夫/農婦ルックのわれらがブースは全くの異世界。
毎年、出展するごとに増すばかりの手応えを嬉しく思います。異彩・異色・尖っている・変態。どれもありがたいお言葉です。

今年のSORACOMさんにとって大きなトピックの一つはソラカメの発表でしょう。七月のSORACOM Discoveryでの発表も聞いていました。SORACOMさんのイベントにもいくつか参加し、その掲げる理念や風通しの良さに共感しました。SORACOMエバンジェリストであるMaxさんとも複数の場所でともに登壇しました。
そのご縁をきっかけとし、弊社もSORACOMとkintoneをつなげてみよう、と思ったのも今回の出展の原動力です。

会場ではこんなご縁も仲立ちできました!kintone界とSORACOM界の「会」がスパークして次のイベントへ!嬉しいですね~

今年の弊社ブースは全部で五つの出展物を出していました。他の四つは、SORACOM UGではおなじみの前嶋さん(@anysonica)にご協力をお願いしました。
前嶋さんはSORACOM UGの今年のMVPにも選ばれたすごい方です。前嶋さんにお手伝いいただいた四つの出展内容については前嶋さんのブログをご覧いただくのが良さげです。


2.前書きその2

  Topへ↑

本稿ではソラカメの動画をkintoneの画面に出した方に絞って書いてみます。
実装はシンボ技研の山崎さん(@ryoyamazakiwork)にお願いしました!

実は、この出展で苦労したのは、ソラカメの動画を連携させる部分ではなく、動画をkintone内でストリーミング再生を行う実装です。そっちのほうが苦労しました。

kintone内で動画ストリーミングを再生する件については、kintone界隈が舌なめずりしそうなネタなので、このブログの前の日にkintone Advent Calendar 2022にアップしてしまいました(ブログ)。
すみません。
というわけで本稿ではソラカメとの連携についてを書きます。

ソラカメのAPIレファレンスはとても見やすく使いやすいと感じます。
弊社はkintoneがメインなので、kintoneとさまざまなSaaS/PaaSをつなぎます。APIの構造やドキュメントの見やすさはとても重視します。良いですね。


3.認証の実装

  Topへ↑

コードも簡潔に実装できます。
まず、認証方法。
SORACOMダッシュボードにアクセスし、認証キーを生成します。
以下に五つの画像を連続で出します。




4.コードの説明(認証)

  Topへ↑

ここからはコードの実装(kintoneなのでJavaScriptを例に挙げます)について説明します。kintoneからSORACOMに認証をおねがいする部分はたったこれだけです。

まず、SORACOMダッシュボードで得た
・認証キーID
・認証キーシークレット
の二つをまとめたJSONを作ります。
こんな風に。

authKeyIdが認証キーID。
authKeyが認証キーシークレット

この時、SORACOMから入手した認証キーIDと
認証キーシークレットの値はkintoneのレコードのフィールドに値として保存しておきましょう。JavaScriptに値を直書きしちゃだめですよ(^_^)。

このJSONやその他の情報をkintone.proxyの各パラメーターに渡してあげます。
こんな風に。

上で設定したauthdata(変数名はお好みで)は4番目のパラメータとして渡しましょう。
3番目のパラメーターにはヘッダ情報を作成します。前もってauthhdという名前の変数に格納しています。2番目のパラメーターはメソッドです。’POST’にしてあげましょう。
そして1番目のパラメーターはUrlです。これは SORACOMの認証エンドポイントである https://api.soracom.io/v1/authを指定すればばっちりです。

これで実行すれば、https://api.soracom.io/v1/authに対してkintoneからリクエストが渡せてしまいます。

認証のエンドポイントのリクエストについて、より詳しく知りたい方はレファレンスを見るとマスターへの道の第一歩です。

ここまでの流れをもう一回おさらい。

くれぐれも、認証キーIdと認証キーシークレットはJavaScript内に直書きしないでくださいね。
該当するkintoneアプリのフィールド「認証キーID」「認証キーシークレット」に入力した値を呼び出しています。
sessionStorageに入れるよりもkintoneのアプリに保存すると夜の寝つきがよくなります。

つづいて、kintone.proxyを使ったリクエストに対してSORACOMから返される値は、argsの中に入ってきます。
argsの中に入っている値については、
レファレンスのレスポンスの項に書かれています。これも読むとマスターへの道がなだらかになります。

この中から
・apiKey
・Token
を変数に保存しておきましょう。

5.コードの説明(動画)

  Topへ↑

さて、次にするのは該当するソラカメ端末(デバイス)に対して、動画ファイルをくださいと懇願することです。
先ほどと同じくkintone.proxyを使ってソラカメ様にお願いしましょう。

kintone.proxyの各パラメーターに渡してあげます。
こんな風に。

4番目のパラメータはソラカメに対して何か追加するのではなく、単にデータをいただくだけなので、空のオブジェクトとして渡してあげてください。
3番目のパラメーターにはヘッダ情報を作成します。これもhdという名前の変数で作成しています。
この時、X-Soracom-API-Keyには上の処理で変数に格納したapiKeyを使います。
また、X-Soracom-tokenには上の処理で変数に格納したTokenを使います。
2番目のパラメーターはメソッドです。今回は取得するだけなので’GET’にしてあげましょう。
そして1番目のパラメーターはUrlです。これは ソラカメの動画データを扱うエンドポイントである ’https://api.soracom.io/v1/sora_cam/devices/{devicesID}/stream’ です。

これで実行すれば、https://api.soracom.io/v1/sora_cam/devices/{devicesID}/streamに対してkintoneからリクエストが成立します。
なお、もちろん{devicesID}にはデバイス番号を事前に取得しておきましょうね。上の例ではkintoneのアプリのフィールド「デバイスID」に事前に値を入力してあります。

このリクエストに必要な値は レファレンスを見るとより賢くなれます。

ちなみにデバイス番号を調べるには、
ダッシュボードのメニュー→ソラコムクラウドカメラサービス→デバイス管理


の右端に書かれていますよ。

さて、リクエストをすると、返ってきた値はargsの中に書かれています。

このargsはJSONですが、その中には複数のplayListというキーが配列で含まれています。
その0番目の値が最新なので、その中にあるurlキーの値こそが、ソラカメの動画を再生するためのUrlになるわけです。

どうですか?
ソラカメ様にお願いすれば、簡単に値が取れますよね。
ソラカメ様は時間単位でも切り出してくれます。先日実装されたイベントAPIを活用すれば、必要な部分だけの動画も切り出してくれるはずです(ブログ)。

あとは、そのurlをkintoneの任意フィールドの値として更新すればよいのです。

そのUrlの動画をkintoneで再生するには、最初に申し上げた kintone Advent Calendar 2022の記事をご覧いただければ!

すると、Cybozu Days 2022の弊社ブースのように、お子様が興味を持ってもらえます!

皆さんも、IoTとkintoneをつなげて遊んでみてくださいね!


Cybozu Days 2022のブース出展でkintoneにメディアプレーヤーを設置しました。


kintone Advent Calendar 2022の20日目の記事です。

  Topへ↓

今年もこの季節がやってまいりました。Advent Calendarです。
11月のkintone月間が終わると、間髪を入れずに師走のAdvent Calendarです。
そのkintone月間に行われたのがCybozu Days 2022でした。弊社は3年連続のブース出展をしました。

弊社メンバーが書いた振り返りブログはこちら。
Cybozu Days 2022の今年のテーマはDX(デジタルトランスフォーメーション)でした。
Cybozu Days 2022を終えて[ブースで交流]
Cybozu Days 2022を終えて[出展までの準備]
Cybozu Days 2022を終えて[まとめ]

今年の弊社ブースは、昨年に続いてIoTとkintoneの連携をテーマに打ち出しました。
しかも今年はSORACOMさんのデバイスを中心に据え、さらに業種を絞ってみました。農業!

今年の弊社ブースは全部で五つの出展物を出していました。他の四つは、SORACOM UGではおなじみの前嶋さん(@anysonica)にご協力をお願いしました。
前嶋さんはSORACOM UGの今年のMVPにも選ばれたすごい方です。前嶋さんにお手伝いいただいた四つの出展内容については前嶋さんのブログをご覧いただくのが良さげです。

本稿ではソラカメの動画をkintoneの画面に出す。つまり、メディアプレーヤーの出し方に絞っています。
その実装はシンボ技研の山崎さん(@ryoyamazakiwork)にお願いしました!


これはCybozu Days 2022の弊社ブースの一コマです。動くソラカメの動画がkintoneに映る様子を興味深げに見ているのは瀧村さん(@kinbozuu)のお子さんたちです。とてもかわいらしかった。


2.完成したコード

  Topへ↑

実は、この出展で苦労したのは、ソラカメの動画を連携させる部分ではなく、動画をkintone内でストリーミング再生を行う実装です。そっちのほうが苦労しました。
本稿ではその部分を取り上げてみようと思います。
ただし、苦労したといっても、結果として落ち着いたコードのステップ数はとてもシンプルです。

たったこれだけ。

ただし、以下のライブラリをCDNから呼んでいます。
https://cdn.dashjs.org/latest/dash.all.min.js


3.コードの説明

  Topへ↑

上に挙げたコードを要約すると、
スペースフィールドに対してinnerHTMLでhtmlとして描画し、videoタグで動画を表示する領域を確保しています。あとはdashjsに備わっているオブジェクトやメソッドを呼び出します。
たったこれだけです。

    kintone.app.record.getSpaceElement('dash').innerHTML =
     '<video data-dashjs-player="" autoplay="" width="800" height="600" src=" + url + " controls="true"> ';

続いて読み込んであるdashjsのMediaPlayerオブジェクトのcreateメソッドを呼びます。

 const player = dashjs.MediaPlayer().create();

すると、ストリーミングプレーヤーが使えるように内部で設定されます。
あとはinitializeメソッドで描画するvideoタグや対象となるurlを呼び出せば、ストリーミングが呼び出せます。

 player.initialize(video, url, false);

この時、video要素はdocument.querySelectorを使って変数に格納しておきましょう。

 const video = document.querySelector('video');

すると、こんな感じでkintone上でメディアプレーヤーが使えるようになるのです。

4.dashjsの説明

  Topへ↑

このdashjsはメディアプレーヤーとしての機能をほぼ備えています。たとえば早送りや巻き戻し、テキストの埋め込みなど。
このdashjsを使えば、簡単にkintoneの各項目の値を使ったさまざまな動画へのアプローチが可能になると思われます。
例えば、IoTデバイスで得た動画を基に、動的にkintoneでアクションをつなげることができます。
また、オンラインミーティングをしながら、画面上でkintoneの画面から動的にアクションを起こすこともできるはずです。

dashjsのライブラリの中身やドキュメントは
https://github.com/Dash-Industry-Forum/dash.js
をご覧いただくことをお勧めします。

また、dashjsはBSDライセンスなので、そのライセンスに従っていればほぼ自由に使えます。
kintone内に組み込むことも自由。

5.kintoneでメディアを再生できればさらなる可能性が!

  Topへ↑

動画を起点としたアクション。それはkintoneに限らず、まだ他のシステムやプラットフォームでもそれほど盛んではないようです。(長井意見)
ということは、kintone上で動画を使った業務改善の手法が確立できれば、新たな業務改善の手法として脚光を浴びるかもしれません。
例えば作業マニュアルの動画をkintoneにアップし、その動画内のテキストテロップでコメントを入れる機能をkintone内で行ってしまうなど。
それは、kintoneの業務改善ツールとしての優位性を示す機会になりそうです。

Cybozu Days 2022では弊社にさまざまな可能性を開いてくれました。
IoTとkintoneの可能性。さらには、動画とkintoneのコラボレーションにおいても、
この記事では動画を撮影するためのデバイスにSORACOM社のソラカメを使っています。
ソラカメで撮った動画をkintoneに表示する実装。実はこの実装はすでに案件として進んでおり、来年度に着手することになりそうです。

そのソラカメから動画を取得し、kintoneにUrlとして連携する部分。
その実装については、明日アップする予定のSORACOM Advent Calendar 2022の記事内で書く予定です。
あわせてご覧いただければと思います。


弊社のアドベントカレンダー歴


弊社代表の長井が参加してきたアドベントカレンダーもだいぶ年数がたちました。
何を書いたか忘れつつあるので、ここに残しておきます。

2022年
Adventar 「すごくない」kintone Advent Calendar 2022
・kintoneの機能をコミュニティに例えてみた
Qiita kintone Advent Calendar 2022
・Cybozu Days 2022のブース出展でkintoneにメディアプレーヤーを設置しました。
Qiita SORACOM Advent Calendar 2022
・Cybozu Days 2022のブース出展でソラカメとkintoneの連携にチャレンジしました。


2021年
Qiita kintone Advent Calendar 2021
・私、Mac方面については素人なのですが、、、


2020年
Qiita kintone Advent Calendar 2020
・kintoneにシステム移したいんや
Qiita kintone 2 Advent Calendar 2020
・パート2は痛恨の欠席。
Adventar カレンダーPlus Advent Calendar 2020
・Cybozu OfficeのスケジュールをCalendar Plusで(だいぶ)再現!


2019年
Qiita kintone Advent Calendar 2019
・ワーキングツリーにはkintoneとboxをお飾り!
Qiita kintone 2 Advent Calendar 2019
・コーチングのグラフってkintoneで出せるんやって!


2018年
Qiita kintone Advent Calendar 2018
・ライフログのkintone盛り alasql仕込みのGoogle Chart添え


2017年
Qiita kintone Advent Calendar 2017
・Save The Live!~サイボウズLiveを救え~


2016年
Qiita kintone Advent Calendar 2016
・kintoneとWordPressの連携ネタ三題噺


2015年
Qiita kintone Advent Calendar 2015
・年賀状の宛名書きをkintoneにお願いする。WordとAccessを和えて