先日行われたメタフェス2023で、kintoneブースではエンジニア向けに『kintone API体験キャンペーン』を開催しました。いくつかのタスクにチャレンジしてフォームに答えを入力することで、正解者には抽選でiPad Mini (1名) 又は BOOTHの好きな商品が10,000円分 (2名) が当たるキャンペーンを実施しました。
この記事ではkintone API 体験キャンペーンの答え合わせを紹介します。キャンペーンに応募したエンジニア、応募の機会を逃してしまったエンジニア、プログラミングに興味があるVRChatterは是非読んでください!
なお、メタフェスの開催レポートに関しては下記の記事から読むことが出来ます。 kintone-geeks.hatenablog.com
kintone API体験キャンペーンの答え合わせ
kintone API 体験キャンペーンにチャレンジするためには、メタフェスのkintoneブース内にある青いポスターのリンクから、チャレンジが記載されたウェブページにアクセスする必要がありました。
まずはkintoneの環境とアプリの準備
リンク先にはチャレンジ内容が案内され、kintone 開発者ライセンスのページから無料の開発者ライセンスを申し込むところからはじまりました。
メールで開発者ライセンスの案内が届いたら、ブラウザからkintoneの環境にログインし、自分で考えたデータベースをドラッグ・アンド・ドロップで作成していきます。
アプリが完成したら、手動でデータを入力していきます。
データを入れ終わったら、今度はkintoneアプリからAPIトークンを生成します。このAPIトークンを使って、外部のシステムからkintoneアプリにデータを追加するのが最後のタスクです。プログラミングの知識を駆使して、実装する方法を考える必要がありました。
外部システムからkintoneアプリと連携する
外部システムからkintoneアプリにデータを登録する方法を案内します。
外部からデータを登録するには、何かしらのシステムからHTTPリクエストを使って、kintoneのREST APIを使う必要があります。kintoneのAPIドキュメントサイト『cybozu developer network 』を確認すると、kintoneアプリにデータを登録するAPIが2種類あることがわかります。『1 件のレコードを登録する』APIと『複数のレコードを登録する』APIです。比較的に使いやすい『1 件のレコードを登録する』APIを使いましょう。
まずはこのAPIのドキュメントを確認すると、HTTPリクエストには下記の情報が必要だということがわかります:
情報の種類 | 値 |
---|---|
リクエスト先URL | https://{サブドメイン名}.cybozu.com/k/v1/record.json |
HTTPメソッド | POST |
ヘッダー | { "X-Cybozu-API-Token": "API_TOKEN", "Content-Type": "application/json" } |
リクエストボディ | app とrecord を含めたkintoneアプリとレコードの情報 |
リクエストボディに必要なapp
とrecord
はkintone特有の情報なので、少し調べる必要があります。
まずapp
は、情報を登録するためのアプリIDを指します。kintoneアプリをブラウザで開いてる状態でURLを確認すると、末端に数字があるのですが、こちらがアプリIDです。下記の場合、アプリIdは『58』です。
次は、record
です。こちらはkintoneアプリのフィールド情報と、登録したい値をセットして、JSONフォーマットで準備する必要があります。一見フィールドの表示名と値をセットにするように見えますが、実はそうではありません。
kintoneアプリの各フィールドには、ユーザに見える『表示名』以外にも、識別IDとして機能する『フィールドコード』という設定を持っています。HTTPリクエストのボディではこちらの『フィールドコード』を指定する必要があります。フィールドを配置したときにフィールドコードは自動的に生成されますが、フィールドの設定画面から、ご自身で任意の文字列に変更することが出来ます。
各フィールドのフィールドコードが確認出来たら、リクエストボディを作ります。本記事の例では、app
とrecord
は下記のような形になりました。
{ "app": 58, "record": { "status": { "value": "未購入" }, "name": { "value": "イリオ1.0 ワイルドキャットコーデ" }, "creator": { "value": "アバターショップ コトブキヤ" }, "price": { "value": 6000 }, "type": { "value": "VRアバター" }, "link": { "value": "https://avatarchan.booth.pm/items/3188683" } } }
これでHTTPリクエストの準備が出来ました!あとはどこからどうやってHTTPリクエストをするかを決めます。大まかに、3種類の方法があります。
- cURL/Postman を使う方法
- プログラミング言語 を使う方法
- iPaSS を使う方法
方法1: cURL/Postman を使う
パソコンから簡単にHTTPリクエストを行う方法です。
今回のようなHTTPリクエストを叩くだけのチャレンジの場合、一番早く実装することが出来ます。OS環境の影響を受けにくく、視覚的に見やすいのが特徴です。PostmanでkintoneにPOSTリクエストをする場合、このような項目をセットします。
今回のチャレンジで頂いた解答の20%はcURLやPostmanを使った実装でした。
方法2: プログラミング言語 を使う
自分の慣れているプログラミング言語で実装する方法です。
Python、C#やNodeなどの言語はHTTPリクエストを行うためのライブラリを使うことが出来ます。言語によってコードの書き方は違ってきますが、ここではPythonを例としてサンプルコードを紹介します。
Pythonの場合は、まずコマンドラインからpip install requests
でrequests
ライブラリをインストールします。
その後、下記のPythonコードを準備して実行します。
import requests url = "https://{サブドメイン名}.cybozu.com/k/v1/record.json" headers = { "Content-Type": "application/json", "X-Cybozu-API-Token": "iZ6SCEjXazIZOQ7eQp7JxYUWCLlUFz86ZV951ZXF", } data = { "app": 58, "record": { "status": { "value": "未購入" }, "name": { "value": "イリオ1.0 ワイルドキャットコーデ #サバンナストリート" }, "creator": { "value": "アバターショップ コトブキヤ" }, "price": { "value": 6000 }, "type": { "value": "VRアバター" }, "link": { "value": "https://avatarchan.booth.pm/items/3188683" }, } } response = requests.post(url, headers=headers, json=data) print(response.status_code) print(response.json())
今回のチャレンジで頂いた解答の80%はプログラミング言語を使った実装でした。 その中でも半数がPythonで実装され、続いて多かったのはC#とNodeで、他にはVBAやPHPでの実装がありました。
方法3: iPaSS を使う
今回のチャレンジで頂いた解答にはこの方法は含まれていませんでしたが、Zapier、MAKEやIFTTT等のクラウドサービスを使った実装方法もあります。これらのサービスのkintoneコネクタを使ったり、無かった場合はHTTPリクエストを行うコネクタで対応する手段があったりします。
どの手段を使ってもOK
3種類の方法を紹介しましたが、どの手法を選んでも、制限として記載されていた『APIトークンを使って』というルールを守りさえすれば、キャンペーンに応募することが出来ました。
応募内容のピックアップ
多くの応募の中で、様々な種類の実装方法を頂きました。せっかくなので、3つ紹介したいと思います*1。
イベント管理システム (粉雪さん)
粉雪さんは、Xをみて「お、楽しそう」と思ったイベントを気軽にkintoneアプリに登録できるようなシステムを作ってくれました。C#のアプリケーションからkintoneのAPIを叩き、kintoneアプリに情報が登録される仕組みです。
また、kintoneアプリに登録されたデータはカレンダービューで表示することが出来るため、登録されたイベントのデータが見やすくなります。
シナリオが分かりやすく、kintoneの機能を良く理解した上での実装でした。この環境に他のユーザがログインして、ユーザ同士がkintoneアプリ上でイベント情報を共有したり、カレンダーには自分に関係するイベントしか表示しないような設定が出来たりする、といったところまで発展出来そうな内容でした。
VRChatアバターの移動データ収集するアプリ (DenShoGumaさん)
作成者:DenShoGumaさん (@DenShoGuma)
DenShoGumaさんはOSC(オスシ)を使い、VRChat内のアバターの座標データをリアルタイムでkintoneに登録する連携を作ってくれました。
勝手ながらこちらで簡単なシステム構成図を作りました。
今回kintoneブースのテーマがOSCとかけてお寿司屋にしていたので、このような連携ソリューションが投稿されて我々はとても嬉しかったです。この座標データを使ってどうするかまでは記載されていませんでしたが、例えばフレンドとマップで位置の共有をするといったことが出来そうです。
ただ、リアルタイムのデータはkintoneを介さなくても、別の手段でハンドリングしても良いかなと思っています。というのも、kintoneアプリに溜まるデータは、その後『人間が確認して処理を行う』といったデータの活用方法が実用的だからです。また、以下、BOOTHで好評発売中のVRChat x kintone の技術本 から一部抜粋します。
・・・短期間の大量リクエストには気をつけましょう・・・!
とはいえ、応募内容としては間違ってはいなかったので、当然抽選の対象とはなりました。どんどんVRChat連携を研究してみてください!
UnityからTodoを追加できるUnityEditorツール (Azukimochiさん)
作成者:Azukimochiさん (@azukimochi25)
最後に紹介するのはAzukimochiさんの応募内容です。AzukimochiさんはUnityEditorを使い、Unity上のGUIからTodoをkintoneアプリに登録出来るUnity用のツールを作ってくれました。
ツール上ではkintone環境の設定を入れることが出来ます。Unityの作業中、ふとToDoを思いついたら、Unityから離れずkintoneアプリにToDoを登録出来るところが魅力的でした。
登録する先のアプリIDが設定出来たり、締切や優先度のフィールドも登録出来たら、より活用の幅が広がりそうな内容でした。さらに発展すると、別タブでkintoneアプリからToDoを取得して表示する連携もできそうと想像が膨らみました。
終わりに
今回のキャンペーンのために取得したkintone開発者ライセンスはそのまま1年間利用することが出来ます。また、キャンペーンに参加しなくても普段からエンジニアは無料でkintoneの開発者ライセンスを取得することが出来ますので、是非この機会に申し込んではいかがでしょうか。
kintone 開発者ライセンス(開発環境) - cybozu developer network
普段使用している技術をkintoneのウェブデータベースと連携することで、モノづくりの幅を広げたり、身の回りの課題解決に繋げて欲しいと思っており、VRChat、ChatGPT、ラズパイ、Obniz、React、Vueといった技術とkintoneを連携する技術本も販売しています。kintoneの開発者ライセンスを使って実装することが出来るので、ご興味があれば是非手にとってみてください。
*1:応募者からは掲載の許可を頂いています