kintoneのスペース管理者を確認する方法

#kintoneスペース
kintoneには掲示板のようにメンバー同士で議論したり、情報をまとめるための『スペース』機能があります。
社内で新しくプロジェクトが出来た際にスペースを新しく立ち上げると、情報が一元管理しやすくなって、とても便利です。

![space1.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/140d9022-e6d6-605a-255f-a81cbc9cc336.png)


#スペース管理者
スペースを新しく作成する際に、作成者は『スペースの管理者』を設定することが出来ます。
スペースの管理者は下記の権限を持ちます
・スペースの本文の編集権限
・全てのスレッドの本文の編集権限
・スペースの基本情報(名前、カバー画像等)の編集権限
・スペースのメンバーの編集権限及び管理者の設定権限

逆にいうと、スペースの管理者じゃないと、上記の権限がありません。
『スレッドの本文を更新したい』と思ったら、スペース管理者に連絡して更新してもらう必要があります。

これはこれで、運用的に大丈夫だとは思うのですが、一つ問題が・・・

![space2.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/ac4a6d48-6502-527b-6603-893fb8499b7a.png)


誰　が　ス　ペ　ー　ス　管　理　者　か　が　分　か　ら　な　い

故に、誰に連絡すれば良いかわからない・・・／(^o^)＼
っという問題に社内でちょくちょく出くわしてるので、スペース管理者を簡単に確認する方法を今回紹介します。

#管理者を確認する方法
##下準備
ブラウザを立ち上げ、新しくブックマークを追加します。
URLを指定する設定があるので、下記の1行のコードをコピペしてください。


```js
javascript: var regex = /space\/\d*/; var url = window.location.href; var spaceID = url.match(regex)[0].replace('space/','');kintone.api(kintone.api.url('/k/v1/space/members', true), 'GET', {id: spaceID}).then(function(resp) { var admins = []; for (var i = 0; i<resp.members.length; i++){ if (resp.members[i].entity.type === "USER" && resp.members[i].isAdmin === true){ admins.push(resp.members[i].entity.code) } } return(admins); }).then(function(admins){ var body = { "codes": admins, "offset": 0, "size": 100 }; kintone.api(kintone.api.url('/v1/users', true), 'GET', body, function(resp) { var alertmessage = "スペースの管理者:\n"; for (var j=0; j<resp.users.length; j++){ alertmessage += resp.users[j].name + " (" + resp.users[j].code + ")、 "; } alertmessage = alertmessage.slice(0, -2); alert(alertmessage); } ); } );
```


##実行方法
kintoneにログインし、適当なスペースに遷移してください。
先程登録したブックマークをクリックします。

![spaceadmins.gif](https://qiita-image-store.s3.amazonaws.com/0/100542/0f3d4773-95e7-ebc2-e232-68ed62182a61.gif)



スペースの管理者になっているメンバーの情報がダイアログに表示されます。
表示される内容は『表示名(ログイン名)』になります。

念のために、スペースのメンバー設定をGUIで確認しましょう。

![space3.PNG](https://qiita-image-store.s3.amazonaws.com/0/100542/44a70cf3-afd5-a7e8-f18e-00ac1a5063a5.png)

アラートダイアログで表示した情報が正しいですね！

##制限事項
・現時点では、Mac Safari、Mac Chrome、Windows IE11、Windows Chromeで動作確認出来ています。
・スペース、ゲストスペース、及びスレッドで動作確認が出来ていますが、通知ペインを開いた状態では動作しません。

##コードの説明
コードが1行にまとめられていて見にくかったので、見やすいフォーマットのコードをコメント入りで下記に記載します。


```javascript:get_space_admins.js
//スペースのIDを取得する
var regex = /space\/\d*/;
var url = window.location.href;
var spaceID = url.match(regex)[0].replace('space/','');

//スペースの管理者情報を取得し、さらに各管理者の詳細な情報を取得し、まとめたものをダイアログに表示する
kintone.api(kintone.api.url('/k/v1/space/members', true), 'GET', {id: spaceID}).then(function(resp) {
	var admins = [];
	for (var i = 0; i<resp.members.length; i++){
		//組織・グループの情報は除外し、管理者に設定されたユーザだけ情報を抜き出す
		if (resp.members[i].entity.type === "USER" && resp.members[i].isAdmin === true){
			admins.push(resp.members[i].entity.code)
		}
	}
	return(admins);
}).then(function(admins){
        //User API を叩く
		var body = {
					"codes": admins,
					"offset": 0,
					"size": 100
					};
		kintone.api(kintone.api.url('/v1/users', true), 'GET', body, function(resp) {
		    var alertmessage = "スペースの管理者:\n";
		    for (var j=0; j<resp.users.length; j++){
		    	alertmessage += resp.users[j].name + " (" + resp.users[j].code + ")、 ";
		    }
		    //最後の "、 " を文字列から外す
		    alertmessage = alertmessage.slice(0, -2);
			alert(alertmessage);
			}
		);
	}
);
```


##説明
スペースの管理者は[スペースのメンバーの取得API](https://developer.cybozu.io/hc/ja/articles/202166220)を叩いて取得しています。


このAPIを叩くために、スペースIDが必要になります。
ただkintoneにはスペースIDを取得するメソッドがありません。アプリIDだったら [kintone.app.getId();](https://developer.cybozu.io/hc/ja/articles/202166300)を使用して取得するのですが、残念ながらkintoneには**kintone.space.getId()** のようなメソッドは存在しません・・・

なので、地道にURLを解析してスペースIDを取得する方法で実装しました。
スペース、ゲストスペース、スレッド、セキュアアクセスのURLに対応しています。

とりあえずこの実装でスペース管理者の情報が取得出来るのですが、実は[スペースのメンバーの取得API](https://developer.cybozu.io/hc/ja/articles/202166220)だけだと、**メンバーの表示名を取得することが出来ません**。ぐぬぬ。
ということで、取得したメンバーのコードを使用して、[ユーザーエクスポート API（JSON）](https://developer.cybozu.io/hc/ja/articles/202363040#step2)を叩き、各ユーザの表示名を取得するようにしました。

最後に、取得した情報をまとめて、アラートで表示しました。



##終わりに
便利なコードなので、ブラウザのブックマークに保存しましょう！

・
・
・


スペースID取得するメソッドが欲しかった・・・(´・ω・｀)

##検証
2019/03/15 正常に動作することを確認