ゲストスペースとは?
そもそもkintoneのゲストスペースとは何なのか、まずはそこから解説していきましょう。kintoneのヘルプにはこのように説明されています。
ゲストスペースは、kintoneの利用ユーザー以外の人が、ゲストとして参加できるスペースです。社外のメンバーとの共同プロジェクトなどに、連絡の場として使用できます。
kintoneでは、社外の人と情報共有できるように、社内のスペースとは隔離したスペースを作成することができます。これがゲストスペースと呼ばれており、招待されたゲストアカウントでは、ゲストスペース内のアプリおよびそのレコードしか参照・使用ができません。
隔離したスペースを作成することで、社外秘の情報が漏洩することなく、社外の人と円滑にコミュニケーションを取ることができるので、業務改善に繋がる非常に便利な機能です。
ただし、ゲストスペースを使ってアプリを作成する場合、ちょっとした”クセ”があるんですね。今回は筆者がハマったゲストスペースの落とし穴を3つご紹介します!
1. ゲストスペースを跨いだデータの参照ができない
顧客情報や商品情報など、マスタデータを管理するアプリを作成し、商談管理や発注管理のアプリからデータを参照しにいく、という構成はkintoneでよくあると思います。
同じような構成で、例えば発注管理アプリに登録されている内容をそのまま発注先の業者にも共有したい場合、社内のスペースに商品マスタを作成し、発注管理アプリをゲストスペース内に作成する、という構成をまずは考えますよね。
ただ、これができないんです!
ゲストユーザーは、ゲストスペース内のアプリ・データしか閲覧権限がありませんので、ゲストスペースを跨いでデータの参照、つまり関連レコード一覧やルックアップの機能が使えません。
そのため、ゲストユーザー内にも全く同じ商品マスタのアプリを作成する必要が出てきてしまうのです。これではメンテナンスが2倍になってしまうので、ちょっと不便ですよね。
このような場合、筆者は社内にも発注管理アプリを作成し、そのデータをゲストスペース内の発注管理アプリにもコピーするという方式を取りました。
やりたい事は実現できましたが、少し手間がかかってしまいますね。
2. ユーザーグループを取得できない
これは結構謎な仕様なのですが、、、ゲストスペースではユーザーグループを取得できません。アプリの管理メニューから、アクセス権の設定画面を開いてみましょう。
本来ここに表示されるべきユーザーグループの情報が、、、ない。恐らくゲストアカウントを含めたアクセス権限設定が複雑になるのを回避するために、設定できない仕様になっているのでしょう。
つまりゲストスペース内でアクセス権限の設定を行う場合は、AdministratorsまたはEveryoneというグループで設定する以外は、個別に設定していくしかありません。
これはJavaScript実装においても同様であり、ゲストかどうかの判別しかできません。
社外のユーザーがアクセスするゲストスペースだからこそ、細かいアクセス権限の設定を行いたいのですが、個別に設定する必要があり手間が発生します。
ただ、仕様の問題なので、これはどうしようもないですね。。。
3. kintone REST APIでデータを取得できない
kintone REST APIでデータを取得する場合、下記のようなコーディングを行います。
1 2 3 4 5 6 7 8 9 10 11 12 |
var body = { "app": 1, "id": 1001 }; kintone.api(kintone.api.url('/k/v1/record', true), 'GET', body, function(resp) { // success console.log(resp); }, function(error) { // error console.log(error); }); |
ただし、これをゲストアカウントで実行しようとすると「アクセス権がない」という内容のエラーが返ってきます。これは、1で書いた通りゲストスペースを跨いだデータにアクセスができないことから発生するエラーです。
とはいえ、データの処理上ではゲストスペース外のデータにアクセスしたいケースも多いですよね。そのような場合は、書き方に少し工夫が必要です。
下記のサンプルコードは、APIトークンを用いた認証を行なっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var params = '?app=1&id=1001'; var url = 'https://{subdomain}.cybozu.com/k/v1/record.json' + params; var xhr = new XMLHttpRequest(); xhr.open('GET', url); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); xhr.setRequestHeader('X-Cybozu-API-Token', 'XXXXX'); xhr.onload = function() { if (xhr.status === 200) { // success console.log(JSON.parse(xhr.responseText)); } else { // error console.log(JSON.parse(xhr.responseText)); } }; xhr.send(); |
ゲストアカウントのままではエラーになるので、APIトークン認証など、別の認証を行なってからデータの取得処理を実行する必要があります。
ゲストスペースの落とし穴まとめ
本記事では、ゲストスペース内にアプリを作成する際の気をつけるべき点をまとめました。
- ゲストスペースを跨いだ関連レコード一覧・ルックアップ機能は利用できない
- ユーザーグループは利用できない(個別にアクセス権を設定する)
- APIトークン認証を用いてデータを取得する
この3点に気をつけて、アプリを作っていきましょう。