できました。
下記 appIds の 586 はゲストスペース所属、539 は通常スペース所属、
278 はスペース未所属、999 は存在しないアプリIDなのですが、
どれも下図のように、スペースに属していればスペースIDを取得し
そのスペースがゲストか否かの判定も可能でした。
(() => {
'use strict';
// レコード一覧画面が表示されたときに処理を開始
kintone.events.on('app.record.index.show', async () => {
// 属するスペースのIDと、そのスペースIDが通常スペースかゲストスペースかを調べるアプリ群
const appIds = [586, 539, 278, 999];
for (const appId of appIds) {
try {
const appInfo = await getAppInfo(appId);
// アプリIDが存在しなかった場合
if (!appInfo.apps || appInfo.apps.length === 0) {
console.error(`アプリID ${appId} の情報が取得できませんでした`);
continue;
}
const spaceId = appInfo.apps[0].spaceId;
console.log(`取得したspaceId (appId: ${appId}):`, spaceId);
// アプリがスペースに属していなかった場合
if (!spaceId) {
console.log(`アプリID ${appId} はスペースに属していません`);
continue;
}
const spaceInfo = await getSpaceInfo(spaceId);
// アプリがスペースに属していたら、通常スペースかゲストスペースかでログを変える
if (spaceInfo.isGuest) {
console.log(`取得したスペースID ${spaceId} はゲストスペースです (appId: ${appId})`);
} else {
console.log(`取得したスペースID ${spaceId} は通常のスペースです (appId: ${appId})`);
}
} catch (error) {
console.error(`エラー発生 (appId: ${appId}):`, error);
}
}
});
// アプリ情報を取得する関数
async function getAppInfo(appId) {
const client = new KintoneRestAPIClient();
return client.app.getApps({ ids: [appId] });
}
// スペース情報を取得する関数
async function getSpaceInfo(spaceId) {
const client = new KintoneRestAPIClient();
try {
return await client.space.getSpace({ id: spaceId });
} catch (error) {
// 通常スペースではなかった場合にゲストスペースと見做して処理を続行
if (error.code === "GAIA_IL25") {
console.log(`ゲストスペースの可能性あり (spaceId: ${spaceId}) - ゲストスペース用APIクライアントを使用`);
const guestClient = new KintoneRestAPIClient({ guestSpaceId: spaceId });
return await guestClient.space.getSpace({ id: spaceId });
}
throw error;
}
}
})();