「Kinoma Create ミートアップ」に参加してきました
昨日11月26日に催された「Kinoma Create ミートアップ」に参加してきました。
「Kinoma Create」はアメリカMarvel Technology Groupがリリースした「JavaScriptで作れるInternet of Thing( IoT)キット」です。クラウドファウンディングIndiegogoで資金調達し、アメリカでは支援者へ出荷されているとのことです。日本ではSWITCHSCIENCEさんから発売されることが先日発表されていました。
このKinoma Create、日経コンピュータや下北沢でのミートアップ等、日本でも度々取り上げられていたようで、日本での発売を前に、11月23、24日で開催された「Maker Faire Tokyo 2014」への出展、そして今回のミートアップとイベントが続いたようです。
前置きはこの辺にして、今回の中身に入っていきましょう。会場は外神田の「アーツ千代田 3331」です。このアートセンターに関する詳しい説明はこちらをご覧ください。
今回の会場はその一番奥のラウンジ。落ち着いた空間です。
テーブルの上には「Kinoma Create」とセンサーキットが置いてあります。
「Kinoma Studio」と呼ばれる開発ツールをインストールしながら、開始時間を待ちます。続々と集まってくる参加者の皆さんですが、今回は定員50人で満員でした。おおよそ3人で1台を触る感じです。
時間になると、Marvell Technology Group Kinoma Vice PresidentのPeter Hoddieさんのイントロダクションからスタートしました。なぜ、JavaScriptなのかというお話です。ちなみに、この方AppleのQuickTimeを作られたことで有名な方だそうです(比較的Apple好きの私ですが、恥ずかしながら存じておりませんでした)。
(以下、私の拙いリスニングと通訳の方を介したことによる若干のズレがあるかもしれませんが、悪しからずお読み頂ければと思います)どんなPCでもプログラミング言語を考えるものだということで、ベストではないと思うが、Kinoma Createにはパワフルで広く使われるようになってきたJavaScriptを選択したとのことでした(昔のJavaScriptは酷かったけど、今日ではNodo.js等で使われるところまで来たと)。更に、ポイントを4点挙げられていました。
- Manage the hardware(JSによるハードウェア制御)
- Operate the user interface(HTML5レスのJSによるUI制御)
- Coordinate communication(JSによるデバイスやクラウドの間の接続)
- Digital media(JSによるマルチメディア制御)
通常であれば、異なるレイヤを結合するのに様々な言語を使い分けながら最終的にはCをリコンパイルしたりするところを、全てJavaScriptでやってしまおうという訳です。またそれ故に簡単だと。「Node.jsがソフトウェアを作るフレームワークなら、Kinoma JSはハードウェアを作るフレームワークだ。」、「WebだけでなくIoTにもJavaScriptが必要になってくる。」と仰っていました。なるほど、Webの方々がハードを難なくさわれるところまでの親和性をいきなりもたらせるかはこれからだと思いますが、楽しみな試みだと思います。
そして、ハンズオンなのですが、最初は入れたばかりの開発ツールは使わずにディスプレイのタッチ操作で設定していきます。
なんと、ピンアサインをタッチで決めていくんですね。しかも種別ごとに色が決まっていて、アサインすると四角の番号の所が色づき、Nullの部分が割り当てられた種別の名前に変わります。これだけで3色LEDを点灯させられます。結構な衝撃です。ここまでは一切プログラムレスな訳ですから。プログラミングせずに視覚的にハードをコントロール出来るというのは確かにモノづくりの敷居が下がります。まさに、スマホやリモコン感覚です。
次に、サンプルコードをダウンロードして開発ツールからコードを流し込んでいきます。今度はRGBのスライダーが現れ、色合いをコントロールできるようになったではありませんか。サンプルを見ると厳密にはプログラミングとしてJavaScriptとXMLでの記述が必要のようです。ここからUIを鍛えようとすると本末転倒な感じもしましたが、そういったUIセットは一通り準備されているとのことでした。
そして、ピザやビールが振る舞われながら、最後になってしまったのがカメラです。シリアル通信するカメラとボタンをアタッチして、先程と同様サンプルコードを流し込みます。ディスプレイが緑色でスタンバイ状態になり、ボタンを押すと白くなった次の瞬間ディスプレイに静止画が現れます(70ミリ秒でボタンを押すイベントを監視している作りでした)。なかなか面白いです。
今回は2時間であっという間でしたが、他にもサンプルが公式サイトやGitHubにもありますので、色々と試せそうです。WAN側は無線LAN経由での接続を基本にしながら、センサー側はデジタルのI/O、アナログ入力、I2C、PWM等豊富なインターフェースを備えているので、組み合わせも様々いけそうです。今回はクラウドとの接続がなかったので、サンプルを眺めてみたいところです。
ハードとソフトとどちらもかじっている私としては、なかなか楽しみな試みですので、今後もフォローしていきたいと思います。
「kintone Café 福岡 Vol.3」が開催されました
先日、kintone等サイボウズプロダクトの開発者コミュニティサイト「cybozu.com developer network」が開設半年で遂に登録メンバー数1,000ID超えを達成し、全国での「kintone Café」開催も16件、参加者数が延べ250人に達したとのニュースがサイボウズさんからプレスリリースされていました(「kintone Café 福岡 Vol.1」の様子も掲載頂いていました)。
(「cybozu.com developer network」登録メンバー数の推移:サイボウズプレスリリースより)
そんな発表の翌日10/24(金)、福岡では「kintone Café 福岡 Vol.3」が開催されました。前回7/11のVol.2から約3ヶ月振りの開催となりました。
今回も関係者含めて20名ほどのご参加を頂きました。事前情報からエンジニアの方が半数程度と想定していましたが、会場での挙手によると1/3くらいだったと思います(みなさん、遠慮されたのかと)。また、これからkintoneを活用/提供したいという、どちらかというとビギナーよりの方が多い印象でした。ご参加頂きました皆様、ありがとうございました。
(今回は、勉強会の利用も多いコワーキングサロンOnRAMPでの開催)
今回は、前回に続き本家サイボウズさんの協賛に加え、東京のkintoneエバンジェリストの四宮さん(ジョイゾー)、福岡のエバンジェリストである久米さん(AISIC)と山下が参加し、kintone RubyGemsの作者である川上さん(ニシム電子工業)にもLTでお話頂き、バラエティーに富んだ内容となりました。
【今回のメニュー】
-
こんな案件でkintone導入してきました!(AISIC 久米さま)
-
完全定額!kintoneだからできる新しいSIビジネス(ジョイゾー 四宮さま)
-
kintone JavaScriptカスタマイズハンズオン(山下)
- Ruby用REST APIクライアントの紹介(ニシム電子工業 川上さま)
※イベントページ → http://kintone-cafe.doorkeeper.jp/events/15820
山下から簡単にご挨拶させて頂いた後に、kintone Café最多出席を誇るサイボウズ佐藤さんの安定のイントロパートでスタートです。
「kintone Café 松山」と同様に、サイボウズプロダクトの簡単な説明に続けて、kintoneの基本機能である
- データベース
- ワールフロー
- コミュニケーション
によって実現される「PDCAフレームワーク」についてのお話に、kintoneがフィットする/している市場、活用ニーズの高いアプリ群についてご紹介頂きました。
続く2番手として、8月からkintoneエバンジェリストになられたAISICの久米さんの登場です。「こんな案件でkintone導入してきました!」ということで、「体操教室」、「物流」、「不動産」等適用分野も多岐に渡っていましたが、MindMeisterでkintoneの導入事例を「導入前の課題」と「導入後の改善効果」を示しながら分かりやすく解説頂きました。挙げられたkintone活用ポイント(事例を通しての共通点)は、
- 拠点や人が分散する状況下で、なかなか統一化が出来ないフォーマット、同時入力も難しく、つまり業務形態・共有に向かないExcelからの脱却
- 共有しながらも、必要に応じて適切なアクセス権限管理
- モバイルと写真等の添付ファイルによる高速な情報共有
- 紙情報の電子化
- 要件定義不要・ユーザーと対面で話しながらのアプリ作り
- kintoneという枠組み(ある一定の条件とトレードオフ)を生かした提案
という感じだったと思います。締めのスライドで「こんな会社にkintoneは刺さる!」と表現されていた項目に幾つか補足されていた点を私が覚えている範囲で追記させて頂きました。
「IT自立支援」を掲げられている久米さんですが、ユーザーさんの声を聞き、一緒に業務設計やアプリ作成を進め、ユーザーさんのITへの敷居を下げ容易に活用できるように、というような久米さんの思いに触れさせてもらえるような、非常に共感できるポイントばかりで、頷きながら聞かせて頂けた内容でした。また、現在進行中の案件も幾つかあられるそうで、今後の展開が楽しみです。
次に3番手、kintoneエバンジェリストの中でアウェイのkintone Caféへの出席率No.1を誇るジョイゾーの四宮さんへバトンタッチです。
実際のkintoneの画面(データはデモ用)による事例紹介では太陽光インテグレータの「カナディアンソーラージャパン」さんとゲームで有名な「ワンオブゼム」さんの2件をご紹介くださいました。前者では申請書類のフォーマットであるExcelとの連携、後者では折れ線とガントチャートによる事業管理とkintoneのカスタマイズ機能を活用した「業務プロセスのファストなシステム化」の好事例だったと思います。
更に内容は「完全定額!kintoneだからできる新しいSIビジネス」というタイトルの核心に迫り、「納品のない受託開発」、「システム・インテグレーション崩壊」等、最近のSI・受託に関するトピックに触れつつ、ご自身の視点・実践のポイント(ノウハウ)として、
- 「人月単価」から「技術力・ノウハウ重視」へ(納期をかけなくても認めてもらえる価値のあるシステムの提供)
- 対象部門が「情シス部門」から「業務部門」へ(クラウドなのでサーバ不要)
- 「ウォーターフォール」から「アジャイル」へ
- 「ボリューム満載なドキュメント納品」から「ドキュメントのオプション化」へ
を挙げられ、kintoneを活用した「来店型」で「39万円ポッキリ」の中小企業向けの定額業務システム開発サービス「システム39」(コンセプトムービー)やBCNセミナー 等最近の取り組みをお話し頂きました。より詳しいお話は「cybozu.com conference 2014(東京・大阪)」でお聞きできると思いますので、kintoneやSIビジネスの潮流に興味をお持ちの方は、足を運ばれてはいかがでしょうか。
ここまでは割とkintoneを活用したビジネスといったトピックでしたが、ここから技術よりのトピックに移っていきました。
まずは、「kintone RubyGems」の作者であるニシム電子工業の川上さんです。
kintoneのRuby用REST APIクライアントである「kintone RubyGems」について、現状の対応状況とこれからの開発展望についてお話頂きました。kintone公式SDKとしてJava、iOS、Goがあり、有志サードパーティのSDKがRuby、.NET、Rと幾つかありますが、アップデート・メンテナンス頻度の高さとRubyならではのコンパクトさを PRされていました。kintone Café 松江(動画)でサイボウズの浅賀さんもRaspberry Piからのkintoneへのアクセスに利用され「わずか4行でkintoneにアクセスできる」と紹介されていました。
また、目玉機能としてRubyでクエリが記述できる「Query Helper」の紹介がありました。便利そうな機能だなぁと思っていたら、後ろから久米さんの「あつい」という心の声が漏れてきたような囁きが聞こえてきました。最後に、現状の課題としても挙げられていましたが、ファイルAPIの実装を含め今後更に便利な関数群が実装されることを期待したいと思います。
最後に山下ですが、今回こそはハンズオンをと思っていましたが、やはり時間が足りずデモまでとなってしまいました。ハンズオンのためにPCをお持ち頂いた方、申し訳ございませんでした。お詫びと言ってはなんですが、当日お話できなかった分スライドも追記して、サンプルアプリ(GitHub)も公開させて頂きましたので、ご覧頂ければと思います。
山下からはJavaScriptカスタマイズの例として、「kintone Café 松山」の延長でもある「kintone.proxy()を活用したkintoneによるサーバレスマッシュアップのコツ」のようなものをご紹介しました。kintoneのカスタマイズ用JavaScriptから外部サービスに向けたAPI連携を可能としているkintone.proxy()という仕組みを利用しています。通常クロスドメインを許さないJavaScriptからREST APIを叩けるという、フィットすれば本来サーバーが必要になるような開発がサーバーレスで出来てしまう優れ機能の活用例でもあります。
今回のCaféでは、なんだかんだで問い合わせも多いメール送信のサンプルをSendGridのAPIで実現する例をご紹介しました。GaroonやサイボウズOfficeにある電話メモをkintoneでもというシナリオです。kintoneであれば、APIを使い分けてメール・音声メッセージ・SMS等メディアを選択できるような「"拡張"電話メモ」アプリなんかもいいかもしれません(無駄に不要な機能を追加する必要はありませんので、必要に応じて)。
今回も内容盛り沢山の長丁場となりましたが、前回と参加者の顔ぶれも少し変わったりと、福岡でのkintoneのコミュニティも広がりつつあるのかなぁと感じました。また、今回は懇親会にも多数ご参加頂き、夕方のCaféの話の続き等kintone談義は絶えることなく、夜の部でも親交を深めることができました。
最後に、次回もまた更にkintoneやCaféに興味を持って頂ける方が増えることを願いながら、益々進化し続けるを、福岡・九州からも皆で盛り上げていきたいと思っていますので、今後ともよろしくお願い致します!
今回のカフェスイーツ
今回は、サイボウズさんより東京スカイツリークリスピーショコラをご提供頂きました。
ありがとうございました。
kViewerのカスタマイズ例 其の弐(TimelineJS)
さて、今回も前回に引き続き、「kViewer」のカスタマイズ例をご紹介したいと思います。今回は、ダイナミックなタイムライン(年表)表示を可能にするJavaScriptライブラリ「TimelineJS」を用いたカスタマイズ例です。対応するkintoneアプリもこちらに公開させてもらっています。
早速、出来上がりイメージです。
(実際の公開ページはこちら)
TimelineJS公式ページや(私の)kintoneアプリのGitHubページにありますが、タイムラインに取込めるメディアは、YouTube、Vine、Flickr、Picasa等バリエーション豊かですので、豪華に作り込むことが出来ます。今回のサンプルコードもGitHubに公開させてもらっていますが、こちらにも貼付けておきます。
今回のポイントは、・・・基本的に前回と同様です。ただ、TimelineJSのライブラリがHTTPS環境でホストされているCDN情報はなかなか稀少で、kintoneアプリでもそうですが、HTTPS通信しか許可されていないページの作り込みの際には役に立つので、参考にして頂ければと思います(一応公式ヘルプに問合せて入手した情報ですが、少し遅いような気がしています)。
前回に比べると、kintoneやkViewerをCMSライクに使う方法として、より分かりやすく実践的な事例だったのではないかと思います。kViewerで同様の用途を検討中の方の参考になれば幸いです(サンプルのご利用に際しては自己責任でお願い致します)。
kViewerのカスタマイズ例(Google Map)
会社の隣の人には意外にも不評なこのブログですが、最近はRaspberry Pi関連のトピックへのアクセスが多いようで、嬉しい限りです。ご覧頂いている皆さま、ありがとうございます。
さて、今回はサイボウズスタートアップスさんからリリースされているkintone連携サービス「kViewer」のカスタマイズ例をご紹介したいと思います。
kViewerは、kintoneのデータやグラフを外部に公開できるサービスです。 kintoneと同じように30日間の無料トライアルも可能です。
(公式サイトより)
完全公開から、アクセス制限(パスワード認証、IPアドレス)、公開期間等の設定に加え、kintoneと同じようにJavaScriptやCSSの埋め込みによるカスタマイズまでできるようになっています。ですので、CMS、掲示板的な使い方が向いているように感じますが、見た目等は自在に作り込むことが出来ます。
今回は、kintoneのサンプルにある「顧客訪問リストを地図にピン表示する」でも使われているGoogle Maps APIを用いたkViewerカスタマイズをご紹介したいと思います。データとしては、kintoneの勉強会「kintone Café」の開催情報を利用し、地図上の開催地にピンを立てていきたいと思います。対応するkintoneアプリもこちらに公開させてもらっています。
まずは出来上がりイメージです。
【Before:従来のkViewerの画面】
従来のkViewerの画面は、kintoneの通常の画面に似たようなものですね。
【After:JavaScriptとCSSによるカスタマイズ】
(実際の公開ページはこちら)
やはり、地図が入ると豪華に見えますね。今回はピンをクリックするとバルーンが出るオマケをつけています。早速ですが、サンプルコードは次の通りです(GitHubで公開中)。
JavaScriptもベタに書くことになりますが、kintoneでJavaScriptカスタマイズをやったことがある方は、同じ要領でカスタマイズできると思います。kViewerならではのポイントを挙げるとすれば、ページやライブラリの読み込みを待つ処理を入れる必要があるところだと思います。window.addEventListener("DOMContentLoaded", function() {
から数行ですね。また、サンプルではよく使うjQueryを取込んでいますが、今回は使っていません。
ちなみに手こずったのは、データバインドです。kViewerでは現状kintoneのようにデータバインドする関数・APIがありませんので、表から取り出すことにしました。ここでクロスブラウザ(innerText
とtextContent
)に紐つく問題の顕在化です。getElementText()
で項目名前後の改行と空白を取り除くようにして解決しています。
最後に、kViewerはホームページへ埋め込むためのiframeタグのコードを発行してくれます。このブログの横幅の制約上、ちょっと苦しい配置ですが実際に張り込んでみました。
ちょっと長くなりましたが、kViewerでのページカスタマイズを考えられている方の参考になれば幸いです(サンプルのご利用に際しては自己責任でお願い致します)。
「kintone Café 松山 #1」に参加してきました
今月は「kintone Café」ラッシュとなっていますが、昨日9月22日、サイボウズ創業の地である松山での初開催となった「kintone Café 松山 #1」に参加させて頂きました。
(サイボウズ松山オフィスはオシャレで落ち着けるたたずまいです)
今回は、株式会社アイムービックさんの主催で、場所はサイボウズ松山オフィスでの開催でした(アイムービックさんの開催レポートも公開されましたので、是非ご覧ください)。松山では初回からいきなり約20名の参加者が集いました。流石地元です。
「kinotne Caféの理念」についての簡単な説明の後、いつも通り?サイボウズ佐藤さんのイントロパートでスタートしていきました。基本に忠実にkintoneの基本機能である
- データベース
- ワールフロー
- コミュニケーション
によって実現される「PDCAフレームワーク」についてのお話に、kintoneがフィットする/している市場、活用ニーズの高いアプリ群についてご紹介頂きました。なんでも、一位のニーズはSFCと同じく案件管理で以降の傾向もほぼ同じ、それでいながらSFCからの乗換も多いとか。
続いて、kintoneエバンジェリストである「kintone Café 土佐 Vol.1主催」タイムコンシェル片岡さんと「道後温泉旅行中」の山下もお話しさせて頂きました。私はイベントページから普通に申し込んで、聴衆の皆さんに紛れ込むつもりだったのですが・・・。
山下からはkintoneの基礎ハンズオンの前にも関わらず、「kintoneカスタマイズのコツ」とタイトルもやや大げさに、割と技術的に突っ込んだkintoneのJavaScriptカスタマイズの可能性について深めることを試みました。
今回のデモアプリの一部をアプリテンプレートやサンプルコードを含めてGitHubに公開させて頂いていますので、ご覧頂ければと思います。
(追記)「kintone Café 福岡 Vol.3」にてSendGrid APIによる電話メモアプリ(メール送信アプリ)のサンプルを紹介させて頂きましたので、スライドと合わせて参照頂ければと思います。
また、片岡さんからはタイムコンシェルさんでkintoneを取り扱うようになった経緯から現在の取り組みについてのお話がありました。およそ2年前のkintoneに出会った頃にはkintoneへの注力について半信半疑だったそうですが、昨年7月のJavaScriptカスタマイズ機能のリリース等を受け、案件をこなされる中でkintoneを事業の主軸にしていくことになったとのことでした。エンジニア視点からkintoneの機能構成はまさに秀逸であり、ユーザーライクなUI/UXから高度なカスタマイズ機能までを具備していることからお客さまの目の前でのアプリ作り/修正をできることが大きな強みであると仰っていました。
タイムコンシェルさんはkintoneアプリストアにもアプリを公開されていますので、そちらも参考にして頂ければと思います。
そして、kintoneと言えば実際に触れてみることで、そのメリット・ファスト感を体感できるということで、kintone Caféではお馴染みのハンズオンのパートに移っていきました。今回のメンターであるサイボウズの西尾さんからは、Excelファイルを用いたアプリ作成からスタートし、フィールドやルックアップ等の設定を含めたkintoneでのアプリ作りの基本が紹介されました。
最後に、kintone開発プロダクトマネージャであるサイボウズの門屋さんから「kintoneが変えるSIビジネス」というテーマでのお話でした。「今回、挑戦的内容を含みます」と前置きされた上で、
といったトピック・命題を取り上げられつつ、ご自身の見解を展開されました。詳しくはスライドが公開されましたので、こちらをご覧ください。
先日のBCNセミナーと共通するような見解・予見だったと思いますが、クラウド・エコシステムがもたらすであろう革新・可能性を感じさせてもらえるお話でした。この種の議論は今年の「cybozu.com conference 2014」でも大きなテーマとなってくるのは間違いなく、パイオニア達の動きからも目が離せないところです。
今回、このような内容で「kintone Café 松山 #1」も盛会のうちに終了しました。そして、Caféのあとは出口で金色のボウズマンに見送られ、恒例の懇親会で・・・
皆さん交流を広げられていたようでした(^^)
おまけ
松山と言えば「道後温泉」です(個人的には元々こちらが目的)。今朝10時頃に道後温泉本館に足を運び、懇親会で教えて頂いた通り「坊ちゃん団子」も食せる個室コースで入湯してきました。「霊の湯(たまのゆ)」、「神の湯(かみのゆ)」と2種類の温泉につかった後は、「坊ちゃんの間」の向かいの五号室でゆったりとした時を過ごさせてもらいました。
坊ちゃん団子を食してゆっくりした後は、皇室専用の湯殿「又新殿」の見学に案内されます。2億円にもなる高級な石で出来た風呂には、浴衣姿のまま立って入られていたとのことでした。また、ご利用は大正天皇と昭和天皇による合計3回で、現在では温泉を閉じてしまい利用されることはなくなったとのことでした。
次は今回改装中だった「トンカツパフェ」も頂きに、また来させてもらいたいと思います。
kintoneで学ぶREST APIのリクエスト方法(テスト/デバグ用)
今回は「REST API」のリクエスト方法について、APIのテストやデバグで活用出来るように、サイボウズkintoneを題材に自分の備忘録的な情報をまとめておきたいと思います。
kintoneを題材にしているのは、「REST API」、「JSON形式」といったトレンドの設計にのっかていること、ファイルのアップロード/ダウンロードを扱っていることから、網羅的に整理出来ることが大きいです。「kintone REST API」が扱えれば他のWebサービスのリクエストも扱えるという考えです。
※「kintone REST API」の公式リファレンスはこちらです
【curlコマンド】
まずはcurlコマンドです。メソッドを一通り網羅することを目的とすることから、次のリクエスト例はkintone REST APIの一部になりますので、ご了承ください。
なお、{subdomain}
、{apiToken}
、{authToken}
は、各自置き換えてください。認証については、要件に応じてX-Cybozu-Authorization
、X-Cybozu-API-Token
を使い分けてください。
- GET/record(クエリ利用)- 「レコード取得」公式リファレンス
-
curl -X GET "https://{subdomain}.cybozu.com/k/v1/record.json?app=610&id=1" \
-H "X-Cybozu-API-Token: {apiToken}"
- GET/record(ボディ利用)- 「レコード取得」公式リファレンス
-
curl -X GET "https://{subdomain}.cybozu.com/k/v1/record.json" \
-H "X-Cybozu-API-Token: {apiToken}" \
-H "Content-Type:application/json" \
-d "{"app": 610,"id": 1340}"
- POST/record - 「レコード登録」公式リファレンス
-
curl -X POST "https://{subdomain}.cybozu.com/k/v1/record.json" \
-H "X-Cybozu-API-Token: {apiToken}" \
-H "Content-Type:application/json" \
-d "{"app": 610,"record": {"tempC":{"value":210}}}"
- PUT/record - 「レコード更新」公式リファレンス
-
curl -X PUT "https://{subdomain}.cybozu.com/k/v1/record.json" \
-H "X-Cybozu-API-Token: {apiToken}" \
-H "Content-Type:application/json" \
-d "{"app": 610, "id":1344, "record": {"tempC":{"value":21}}}" - DELETE/records(ボディ利用) - 「レコード削除」公式リファレンス
-
curl -X DELETE "https://{subdomain}.cybozu.com/k/v1/records.json" \
-H "X-Cybozu-API-Token: {apiToken}" \
-H "Content-Type:application/json" \
-d "{"app": 610, "ids":[1344, 1343]}" - POST/file - 「ファイルアップロード」公式リファレンス
-
curl -X POST "https://{subdomain}.cybozu.com/k/v1/file.json" \
-H "X-Cybozu-Authorization: {authToken}" \
-F "file=@sample.txt"
しれっと書き並べましたが、・・・少し考察しましょう。
送信するデータ形式について、通常、-d
がついた時にはフォーム形式のデータを送信するのですが、JSON形式にも対応しています。フォーム形式の場合には、データを{key}={value}
の形式で記述することになり、Content-Type:application/x-www-form-urlencoded
がヘッダとして自動付加されます。一方JSON形式の場合には、上記の通りデータは文字列での記載となり、Content-Type:application/json
をヘッダで指定する必要があります。
また、ファイルをデータ送信する際には、-d
に代わって-F
を利用します。対応するMIMEタイプはContent-Type:multipart/form-data
ですが、明示は不要(自動付加)のようです。
更に、curlコマンドの特徴の一つは、GETやDELETEのメソッドでボディを送信出来ることではないでしょうか。開発言語やライブラリ次第かと思いますが、これが出来ないものは結構多いです。後述のPOSTMANでも唯一これはできないといったような機能です。ここで合わせて注意しておきたいのは、kintoneのGETメソッドではオプションパラメータをURIクエリもしくはボディで指定する方法がありますが、ボディ利用時にはJSONで記述されることを明示するため、Content-Type:application/json
をヘッダで指定する必要がある一方で、クエリ利用時にはMIMEタイプの指定は不要(エラー)になる点です。
ちなみに、コマンドラインでkintoneを使い倒すためには「kintone-ci」が公開されていますので、こちらをご利用ください。
【POSTMAN(ブラウザHTTPクライアント)】
次にchrome extentionで提供されるHTTPクライアント、POSTMANです。POSTMANは、JSON形式からファイルの取扱いまで、あらゆるAPIの試験が可能で、コレクションとして個々のリクエストを保存出来ますので、非常に便利です。出来ないことがあるとすれば、唯一GETやDELETEのメソッドでボディが送信出来ないくらいです。
kintoneの基本的なAPIリクエストのコレクションはこちら(文字コードUTF−8)で共有させて頂いていますので、参考にして頂ければと思います。
なお、ここでは記述方法とリクエストの中身を見る方法に重きを置きます。
- まずは、記載方法とリクエスト方法です
- 次にデバグに役立つリクエストの中身を見る方法です
- リクエストの中身が展開されると次のようになります
展開されたリクエストの中身を拡大してみましょう。
当然のことですが、リクエスト内容が露わになっていることが確認出来ます。
HTTP/REST API/JSONのリクエスト方法を2通り見てきましたが、POSTMANで示したリクエストの中身を展開する方法はデバグ時に有効です。実際のプログラム開発で上手くいかない時には、まずこれを成功させて、リクエスト内容の違いを見比べながらこれと等価なリクエストになるように詰めていくと上手くいきます。
kintoneに限らず、Web-APIを利用した開発時にお役立て頂ければ幸いです。
I2Cセンサー取扱いのコツ
これまでにも触れてきましたが、Raspberry PiのGPIOにはI2Cと呼ばれるシリアル通信用端子が準備されており、I2C対応センサーの実装に利用可能です(I2CはArduino等でも対応しています)。
I2C温度センサーは、「TMP102(データシート)」や「ADT7410(データシート)」あたりが有名どころかと思います。今回は、以前からよく使っているADT7410を例にI2Cセンサーの取扱いについてご説明します。
データシートで「データを格納しているレジスタのバイト(ビット)長」と「換算式や分解能」を確認しましょう。
(ADT7410のデータシート P12)
読んでみると、ADT7410は標準13bit(2バイト)で、その際の分解能は1/16(0.0625)とあり、換算式も記載されています。さらに13bitの際には出力対応表(代表値)まで掲載されています。これらを書き下すと、次のようになります。
ここで、前回のPythonでのI2Cセンサーの値を読み出している部分の記述を見直しながら計算過程を追っていきましょう。
# 以下、センサーの値読み出し部分の抜粋
data = smbus.SMBus(self.channel).read_i2c_block_data(0x48, 0x00, 2)
temp = (data[0] << 8 | data[1]) >> 3
if(temp >= 4096):
temp -= 8192
value = temp * 0.0625
はじめにread_i2c_block_data(0x48, 0x00, 2)
関数の第3引数の2は読み出すデータバイト長を表しています。今回は13bitですので、2バイト必要です(3ビット余計ですが)。
次に、data[0] << 8
とdata[0] << 8 | data[1]
、さらに(data[0] << 8 | data[1]) >> 3
の部分を見て行きましょう。
日本語で書くと、「①data[0]
をまるっと8ビット左シフトして、②data[1]
とOR演算で繋いで、13ビットを取り出すために、③3ビット右シフトして不要部分を削る」ということになります。絵で描くと次のような感じです。
最後に、最上位ビットが1すなわち4096以上の場合には、負数となるので8192との差をとり、13bit設定時の分解能である1/16(0.0625)との積をとれば、データシートにあるように摂氏温度(真値)を得ることが出来ます。
いかがだったでしょうか?センサーのデータシートには換算式が示されることが多く一見分かった気になりますが、サンプルコードにおけるビット演算と分解能の計算部分のフォローが少なく、ここででつまずくことも少なくないのではないかと思います。これを押さえておけば、他のセンサーでも怖いもの無しですので、参考にして頂ければと思います。