SORACOM Fluxとkintoneをつないでみた


  Topへ↓

今年(2024年)の7/17に開催されたSORACOM Discovery 2024でSORACOM社が新サービスのSORACOM Fluxを発表しました。(サービスサイト
SORACOM Discovery 2024サイト
本稿では、SORACOM Fluxとkintoneをつないだ事例を説明します。

私は用事があり、SORACOM Discovery 2024には参加できませんでした(前夜にはSORACOM UserGroupの皆さんと会場の近くで飲んでましたが)。
そのため、私はSORACOM Fluxについてよく知らずにいました。デバイスから得た情報をAIを用いて加工・チェックが可能。それが私のSORACOM Fluxについて持つあいまいな知識でした。

本稿をアップした9月中旬の時点では、kintoneの標準機能にはAIによる補助機能は備わっていません。
この11月に開催が予定されているCybozu Days 2024の中で、ひょっとしたらAIに関する何らかの発表がサイボウズ社からあるのかもしれません。が、今の時点ではkintoneの中でAIを使いたい場合は、サードパーティによるプラグインを選ぶか、自分でコーディングする必要があります。
一方で、SORACOM FluxはSORACOM Discovery 2024の発表によってSORACOMのサービスの一つとしてラインナップに加わりました。kintoneにないAIの標準機能をSORACOMは標準機能として持っている。となれば、一度SORACOM Fluxを使ってみるべきではないかと思いました。

ちょうど折良く、SORACOMのSPSパートナー会でSORACOM Fluxの説明会があると言う連絡をいただきました。私は瞬時に申し込みました。
8/9の説明会の場では、SORACOM Fluxの機能の大枠を学びました。それとともに、SORACOM FluxについてSPSパートナー会でLT登壇しないかというか応募のお誘いをいただきました。LT用に2000クレジットを使わせてもらえるというので、私は説明会が終わってすぐに申し込みました。

そのあと、お盆休暇の中の一日を使ってSORACOM Fluxの機能を理解し、LTの内容や方向性と資料を作成しました。後日、作業の合間に修正を加えたあと、SORACOMさんに対してLTの内容を説明したのが8/27です。

8/27の時点でほぼLTで話す内容は完成していて、画像の扱いだけが若干の課題でした。
画像の連携も無事にできるようになり、9/12にSORACOM社本社で行われたSPSパートナー会では、配信ルームからLT登壇いたしました。事前の録画収録ではなくリアルタイム配信なので、配信ルームに不慣れな私は少し緊張しましたが、無事に終了。
LTの資料の中で詳細はブログで発表しますと書きました。そのブログこそが本稿です。
LT資料はこちら

2.企画

  Topへ↑

SORACOM Fluxとは、どういうサービスでしょうか。

説明会を受けての私の理解によれば、SORACOM Fluxの設定画面では複数のAIサービスに呼び出しをかけられます。その結果をつなぐことで、様々な画像やAIからのインプットをもとに、用途に応じたアウトプットが行えます。

最近、AIエージェントの世界ではLangChainがとても脚光を浴びており、私も少し触っています。
LangChainはCUI、つまりコードベースで動きます。一方のSORACOM Fluxは、各プロセスをGUIでつなぐことができます。かつ、SORACOMの多種多様なデバイスからの画像データなどが簡単に扱える点がSORACOM Fluxを使うメリットではないかと考えます。

であるならば、私がSORACOM FluxのLTで取り上げるべきは、本来はSORACOMの多様なデバイスを用いた画像分析でしょう。実際、SORACOMさんから提示いただいたサンプル事例でも、倉庫内で所定の規則に定められた装備を着用していない人を画像検出し、アラートを出すユースケースが想定されていました。

私も最初はソラカメから受け取った画像を分析し、アラートを出す実装を考えました。ですが、ここで私の天邪鬼の衝動がむくむくと牙をむきました。あえてkintone使ってみたら面白いんじゃねーかと。

AI機能が標準装備されていないkintoneのデータをSORACOM Fluxを使ってkintoneに書き戻すことで、よりkintoneのAI活用の可能性が拡がるのではないか。kintone界隈にもSORACOMのソリューションの紹介ができるのではないか。SORACOM界隈の人、特にデータの蓄積にSORACOM Lagoonだけを使う方にも、kintoneの世界を紹介できるのではないか。
それが私の着想でした。

早速、脳内で実装を始めてみました。考えてみたことろ、SORACOM側の認証などを突破する必要があるのと同時に、kintoneの添付ファイルの扱いを考える必要もあります。
そして今回は、JavaScriptを使わずノーコードで実装を完結することも私の中の制約として課していました。

そこでkintoneとSORACOMをつなぐ部分は全てzapierで実装しました。今回はzapierを採用しましたが、おそらく同じ事はmakeでも他のiPaaSでも可能ではないかと思います。よかったら試してみてください。

3.zapierの設定

  Topへ↑

zapierとは、何でしょうか?
簡単に言うと複数のウェブサービスを簡単につなぐためのツールです。Integration Platform as a Service (iPaaS)の一種とも言われます。
複数のウェブサービスとは、kintoneとかSORACOM Fluxを指しています。今回の事例では画像をUrl化して扱うためにGoogle Driveも使っています。Google Driveもウェブサービスの一つと見做して良いでしょう。

zapierの使い方は解説サイトの説明を参考にして頂くとして、まずはzapierの設定結果をアップします。

上から順に説明します。最初のフローはkintoneのwebhook機能で出力した結果(JSON形式)を受け取るフローです。kintoneのウェブフックは、追加、更新、ステータス変更など、複数の処理の結果に応じてzapierのような外部サービスにデータとして出力できます。コードを書く必要がないので楽ですね。ここでフローを設定すると、自動的にzapierのUrlが生成されますので、そのURLをkintoneのWebhookの設定画面に登録します。


2番目は、kintoneのwebhookから、zapierなどの外部ウェブサービスに処理を投げる際に必ず行います。永久ループを防ぐために必要な処理です。
具体的には、kintoneのレコードが手動で更新されたか、それともこの一連のフローによって更新されたかを判断します。もしkintoneのレコードがzapierによって更新された場合は、ここで後続の処理をストップします。そうしないとzapier/SORACOM Fluxでkintoneを更新→kintoneは更新された結果をwebhook送信→/SORACOM Fluxでkintone更新と永久ループが発生してしまいます。
より詳しく説明すると、kintone側で手動更新した場合は、edit.submitなどkintone側で実装するJavaScript内の処理の中で、任意の項目の値を「手動」にセットします。zapierでは、この値(kintoneのwebhookの結果としてJSONで受け取っている値)が「手動」の場合、後続の処理を実行します。この判断を行うのが当フローです。Filter by zapierを使っています。
この後、SORACOM Fluxの中でkintoneに対して更新をかける際は、この任意の値は「手動」以外の値にセットします。この処理を怠ると永久ループが発生しますので注意してください。


3番目は、kintoneで出力した添付ファイルフィールドに格納されているFileKeyをもとにkintoneのファイルダウンロードAPIを実行し、ファイルの中身を取得する処理です。
kintoneは仕様として、kintoneのレコードに格納されている添付ファイルの値を外部から取得できません。URLも取れません。
ファイルを使いたければFileKeyをもとに、ファイルダウンロードAPIにリクエストを投げ、ファイルの実体をダウンロードし、受け取ったblob形式の値を扱うしかありません。これはセキュリティー上、必要な処理です。


4番目は、上で取得したファイルの実体をGoogle Driveにアップロードする処理です。アップロードした結果レスポンスには複数のキーと値のペアが含まれています。その中には複数のUrlも含まれていますが、その中でSORACOMが権限の制約を乗り越えて扱えるUrlはThumbnail Linkのみでした。


5番目は、SORACOMに対してアクセストークンを取得する処理です。
いうまてもありませんが、SORACOMはクラウドサービスですのでセキュリティーは堅牢です。認証なしでSORACOMにリクエストを投げても全て跳ね返されます。ここで取得したアクセストークンを含めて、次の処理でSORACOMにリクエストを投げないと、意図した結果が返ってきません。


6番目は、お待ちかねのSORACOM Fluxに対してリクエストを投げる処理です。ここで投げる先のURLはSORACOM Flux側で生成されたものを使います。後で生成された値の表示場所はお伝えします。

4.SORACOM Fluxの設定

  Topへ↑

はい、まずはSORACOM Fluxのフローをペタっと貼っておきましょう。以下にフローの作り方を最初からご説明します。


まずはメニューからSORACOM Fluxを選択しましょう。


続いては「新しいFluxアプリを作成する」を選びます。既に作ったアプリは下に表示されていますね。


作成するFluxアプリの名前と適用を入力しましょう。


SOARCOM Flux Studioの画面が表示されるので、チャネルを作成するを選びましょう。


最初のチャネルの種類を選ぶ必要があります。ここではAPI/マニュアル実行を選びます。これを選ぶことによって、zapierからの値を受け取れます。


新しく作成するチャネルの名前と適用を入れましょう。kintoneから来たものなので、そのように名付けています。


作成したチャネルでAPI/マニュアル実行を選んだので、URLが表示されています。これをzapierの最後のフローに設定します。


続いてアクションを作成します。アクションを追加を押しましょう。


ここで何を選ぶかが肝です。今回はAIを選びました。もちろん他のアクションを選ぶと、よりSORACOM Fluxの世界が広がります。


ここからがこの記事の本丸です。AIに対する指示を設定する部分です。


AIに投げるプロンプトはここで設定します。


AIからの回答をどうつなげるかをここで設定します。


私はここで図のように設定しています。AIのモデルは複数が選べます。私はAzure OpenAI (GPT-4o)を選びましたが、他にも本稿執筆時点では、以下の候補が選べるようです。


ここでプロンプトを設定します。好みに応じて「あなたはプロの店舗運営者です〜」云々の呪文を唱えておくとより幸せになれるかもしれません。
また、ここでは画像を選択できます。zapierからとってきたjsonにはGoogle DriveでUrl変換したThumbnail LinkのUrlを設定します。
なお、ここでzapierの最後のフローで設定したjsonのキーを全て英語にしていました。本当なら日本語キーの方が可読性が高くなるのですが、日本語キーに設定して、例えばここで(${event.payload.お客様人数})と設定すると読んでくれません。これは、SORACOMさんには改善をお願いしています。それまではお手間をかけるかもしれませんが、英語のキー名でお願いします。
また、その後のアクションは、その結果をkintoneに飛ばす処理なので、Webhookを選んでください。


次のチャネルではWebhookを選びました。ここでkintoneへのリクエストを組み立てます。kintone側のREST APIについては、こちらをご覧ください。


ここで設定する際は、kintone側のフィールドコードとjsonのキーは一致させてくださいね。


5.kintoneのデータをもとにAIに改善提案してもらった

  Topへ↑

私はこのようなkintoneアプリを作りました。


レコードを保存すると、zapierを経由してSORACOM FluxがAIに問い合わせた結果をkintoneを書き戻してくれます。

参考として、アプリのフィールド一覧も載せておきます。

6.他の運用上のご注意

  Topへ↑

注意点として現時点で挙げるべきは、jsonのキーに日本語が使えないことです。
それまではzapier側で英語のキーに変換してあげましょう。kintone側のフィールドコードは日本語のままでよいです。

ここには書いていませんが、AIに改善画像を生成させることもできるはずです。その画像をkintoneのファイルアップロードAPIを用いて、kintoneの該当レコードにAIによる改善案としてアップロードすれば、より実用的なソリューションが実装できることでしょう。
もちろん、出力先をLINEやSlackにしてもよいです。それは皆様次第です。

本稿がSORACOM Fluxを試してみようと思う方。kintoneと組み合わせてみたいと思った方にとってご参考になれば幸いです。


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を和えて