そこに活路を見出そうと思います。去年に比べて一味違った活動を展開できればと思っています。Tumblr1.読まなくてもいい前書き2017年の秋晴れを引き裂くように、そのお知らせは降ってきました。サイボウズLive終了のお知らせです。その直後、お客様から早速ご連絡が。代替案を検討してほしい」と。「はいっ!承知でございます」。2017の基調講演でサイボウズ青野社長からLive終了の事情説明やお詫びをいただき、ようやく事態の深刻さを悟った私。Daysで仕入れた情報では、移行ツールが提供されるとかされないとか。それはあくまでも未確定情報。リサーチして弊社でも移行できるようにしておかないと。Calendarの枠が残り少ないというご連絡を頂きまして。最後の一枠に滑り込めました。Calendarへの参加は3度目なのですが、今回はサイボウズLiveをからめればネタとして旬ではなかろうか。そんなことを、サイボウズのUっ氏~にお伺いを立てたところ、歓迎いただけまして。Calendarの4日目にアップされたのが「kintoneサイボウズLive化作戦」。やられた、と思いましたね。松田さんの記事を拝見するとkintoneへのデータ移行までは触れていない様子。これは私がやるしかないでしょう。出番まで3週間はあるし、案件の合間でも何とかなるはず。2019年の4月までしか賞味期限のない記事ですが、どなたかのお役に立てれば。長井サンタの贈り物です。目次1.読まなくてもいい前書き2.サイボウズLiveのデベロッパー登録を行い、APIキーを入手する。3.APIリファレンスを読む。4.類似の参考サイトを探す。5.グループと個人の違いを理解する。6.取り込み方法のインターフェース検討と実装。APIの制限事項と、kintoneの対応機能の検討。2.サイボウズLiveのデベロッパー登録を行い、APIキーを入手する。実は今まで、サイボウズLiveのAPIは存在こそ知っていましたが、完全スルーしていました。今回はデベロッパー登録から始めました。ここからやってみましょう。・APIの対象を選びます。グループZを選ばないと全データが取得できないのでグループZを選びます。アプリケーションの種類はクライアントにします。Secretを入手します。大切に保管しておきましょう。Secretを使います。3.APIリファレンスを読む。続いてAPIリファレンスです。これを読まねば話になりません。https://developer.cybozulive.com/doc/current/なるほどサイボウズLiveは、認証にOauthを使っているのですね。JavaScriptだけでの実装だとちょっと面倒かな。oauth.ioとか試してみればできそうな気もするけど後回しにします。PHPだとOauthの実装したこともあるし多分いけるでしょう。そんなわけで、まずPHPで実装し、時間があればJavaScriptでやってみよう、と決めました。4.類似の参考サイトを探す。ところが、サイボウズLiveってAPIがあまり活用されていなかったのか、情報があまりウェブ上にないのです。APIドキュメントページ以外で参考にさせて頂いたのは、まだプログラマーですが何か?さんのページのみです。ありがとうございました。Net_URL2、HTTP_Request2、HTTP_OAuthを使うのが良さげな感じ。私もそれにのっかりました。サーバーはさくらインターネットさんのスタンダードプランが手元にあったので使ってみようとおもいます。思ったら、ちょっとだけ手間取りました。以下は読み飛ばしてよいです。・Oauthの実装に手間取りまして。・そもそもpear自体がさくらインターネットのサーバーにインストールされていなかったり。・なのでgo-pear.phpを使ってインストールしようとして。・そしたら、ファイルだけでなくディレクトリのパーミッションも755にしないと動かない、とか。・で、pearのインストールができたと思ったら、go-pearのインストーラーからNet_URL2パッケージを入れる際、なぜか古いバージョンしか入れられず。・するとHTTP_Request2、HTTP_OAuthが要求するNet_URL2のバージョンを満たさずさあ困った。・仕方ないのでSSH接続でコマンドからインストールする羽目になりました。・しかも後ほどftpやsocketでもはまってしまい、仕方なくあとでphpのバージョンを7.1.11に上げました。これらの処理に影響はありませんでしたが。・というわけで、本記事の前提となるバージョンです。:::2017/11月アップデート版php:::7.1.11jQuery:::3.2.15.グループと個人の違いを理解する。Oauthのライブラリをインストールしたことで、サイボウズLiveへの接続はすんなり成功しました。ところが、上記のサイトでご提供されている情報は認証の部分とXMLのダウンロードまでです。取得したサイボウズLiveのデータをkintoneへ登録する部分はこちらで実装せねばなりません。実装としてはphpでXMLを解析し、要素や値をkintoneにアップすればよいはず。ここでサイボウズLiveのデータ構造をどのようにkintoneに移行するか考えないと。個人データとグループのデータをどう関連づけ、kintoneに持ってくるか、という問題です。スケジュールのデータ。グループごとに分かれています。データ構造は同一のはず。実は個人スケジュールのデータには各グループのスケジュールも全部含まれるので、それを持ってくればよいのですが、グループ単位のスケジュールで取り込めるようにしておかねばあとで困るでしょう。考えねばならないのは以下の通り。Liveグループのデータをマージさせるのか。言い換えれば、kintoneのアプリ単位にユーザーの権限を制御させるのがよいか、それとも同じアプリの中のレコード単位で権限を制御させるのがよいか、ということになります。考えた結果、kintoneのグループスケジュールアプリは一つにし、グループのデータを別々に登録するようにしました。個人スケジュールはグループスケジュールと別々にしなければ、あとでデータが混在して困るので、別にしました。ToDoも同じく個人とグループを分けています。6.取り込み方法のインターフェース検討と実装。個別にダウンロードするにあたっては、インターフェースを考えたほうがよいですね。kintoneアプリの一覧画面にダウンロードリンクを貼ることにしました。ヘッダー下のスペースにセレクトボックスを二つ配置し、それに応じてphpへのリンクを切り替えるようにしています。取り込み部分のインターフェースはこんな感じで・初期状態はこんな感じ。・左側のドロップダウンがグループです。サイボウズのアカウントが属するグループをリストアップし、先頭は個人データとしています。これらのグループは私が実際に使っている/いたものです。Liveにあったのですよ。懐かしい\(^o^)/・右側のドロップダウンが対象となるデータです。左側が個人データなので、5種類のデータを取り込み対象として出しています。(「全て」と「テーマチャット」と「ダイレクトチャット」と「コネクション」は本記事では実装していません。)・左側のドロップダウンをグループにすると、右側のドロップダウンの内容もかわります。4種類のデータを取り込み対象として出しています。(「全て」と「メンバーリスト」は本記事では実装していません)・両方のドロップダウンの選択の値に応じて、すぐ下のリンクの文字列とurlが切り替わります。ちなみに、各kintoneアプリはこの部分に同じJavaScriptファイルを読ませることで共通化しています。リンクをクリックした際も、それぞれ定められたアプリにデータを放り込む仕様にしています。そのため、各アプリのリンクから違うアプリの取り込み処理が可能にしています。いうものの、混乱はないはずです。この部分の実装について説明します。JavaScriptの部分を。・まず、アプリに対してJavaScriptを登録します。CDNからjQueryを。下にこの後説明するgetGroupList.jsを登録します。・getGroupList.jsの先頭から。ここはkintoneではお約束の記述ですね。jQueryのAjaxで他のドメインの値をとるときの呪文です。昔作ったコードを持ってきたので、今ならkintone.proxyのほうが良いと思います。kintone.proxyについてはこちらを。その下のescapeHtml関数は、サニタイズ用です。まあ今回の案件についてはそういう心配は無用なのですが。Warningが出てしまいます。optionの部品オブジェクトを代入する際に「ちょっと自分危ないんとちゃう!?」と怒られてしまいます。