開発系AIの進化が早くて付いていくのがやっとで楽しいkintone開発エンジニアのだいもんです。
2025年後半に入ってからのkintoneアップデート、「開発者向け機能」の追加ラッシュがすごくないですか? 毎月のように更新される「kintone API 更新情報」を見ては、「これこれ!これが欲しかったんだよ!」と小躍りしている方も多いはず。私もですが。
ここ数ヶ月のアップデートは、「これまでREST APIでしか取れなかった(あるいはRESTでも苦労した)情報が、JavaScript APIでサクッと取れるようになった」こと、ってまとめても良いのではないでしょうか。
以前、フィールド情報の取得やUI表示系については紹介がありましたが、今回はもう少しマニアック、かつ「これができるとロジックの組み方が変わる!」という「状態確認系API」にスポットを当ててみたいと思います。
単に「APIリクエスト数が減らせてハッピー」というだけでなく、kintone開発のパラダイムシフトとも言える変化がそこにありました。
弊社では初回開発無料の定額39万円でkintoneアプリを開発する定額型開発サービス「システム39」を提供しております。kintoneの導入やアプリ開発でお困りの方は、お気軽にご相談ください。
*Webでの打ち合わせも可能です。
「設定値」ではなく知りたいのは「今の状態」
これまでのkintoneカスタマイズで、例えば「このフィールドは今、ユーザーに見えているのか?(表示権限や設定で隠されていないか)」を知りたい時、どうしていましたか?
REST APIでフォーム設計情報を取得して、アクセス権設定を取得して、現在のユーザーと照らし合わせて…と、計算や判定をする必要がありました。しかも、他のプラグインが kintone.app.record.setFieldShown() で動的に隠しているフィールドなら、REST APIの情報だけでは「現在見えているか」は分かりません。
大抵の場合、本当に欲しかったのは「設定値」ではなく、「今、ブラウザでレンダリングされている最終的な結果」なんですよね。
最近追加された以下のAPIたちは、まさにその「現在の状態」を教えてくれます。
kintone.app.record.isFieldVisible()kintone.app.record.isGroupFieldOpen()kintone.app.record.getActionButtonDisplayState()kintone.app.record.getStatusActionButtonDisplayState()
これらが登場したことの意味を、具体的なコード例とともに見ていきましょう。
1. グループフィールドの開閉状態がわかる! isGroupFieldOpen()
「グループフィールドを開閉したタイミング」のイベントは以前からありましたが、「今、どのグループが開いているのか?」を任意のタイミングで調べるのは、実は公式APIでは不可能でした(DOM要素を無理やり見るしかありませんでした…)。
これが kintone.app.record.isGroupFieldOpen('group_code') だけで取得できるようになりました。
これを使うと、例えば「グループAを開いたら、自動的にグループBとCを閉じる」といった、いわゆるアコーディオンメニュー的な挙動が、公式APIだけで安全に実装できます。
// 以前はDOM操作が必要だった処理が、こんなにスマートに!
kintone.events.on([
'app.record.create.show',
'app.record.edit.show',
'app.record.detail.show'
], (event) => {
// 特定のボタンを押したときに状態チェック
const myButton = document.createElement('button');
myButton.innerText = 'グループの状態チェック';
myButton.onclick = () => {
const isOpen = kintone.app.record.isGroupFieldOpen('GroupA');
if (isOpen) {
alert('グループAは元気よく開いています!');
} else {
// 開いていないなら開く処理、などもsetGroupFieldOpenで連携可能
alert('グループAは閉じています。');
}
};
kintone.app.record.getHeaderMenuSpaceElement().appendChild(myButton);
return event;
});
「ユーザーが今どういう状態で見ているか」に合わせて、次のアクションを動的に変えられる。これはUI体験の向上に直結します。
2. プロセス管理の「あのボタン」はある?ない? getStatusActionButtonDisplayState()
処理の削減という意味ではこれが一番かもしれません。「プロセス管理のアクションボタンが表示されているかどうか」の取得。
プロセス管理の設定は複雑です。「現在のステータス」だけでなく、「作業者が誰か」「次のステータスの条件は満たしているか」など、変数が多すぎてREST APIの情報から「今、承認ボタンが出ているか」を判定するのはなかなかに面倒でした。
それが、こうです。
// 「承認」アクションのボタンが表示されているかチェック
const isApproveVisible = kintone.app.record.getStatusActionButtonDisplayState('承認');
if (isApproveVisible) {
// ボタンが出ている=このユーザーには承認権限があり、かつ条件を満たしている
console.log('承認ボタンが表示されています。ガイドを表示しましょう。');
// 承認時の注意事項スペースを表示する、などの制御が可能
} else {
console.log('今は承認できません');
}
「難しい計算はkintone本体に任せて、結果だけもらう」。 これです、これ。 非同期処理(Promise/await)を書かずに、if 文の中にサラッと書けるの、最高です。
まとめ:非同期の「予測」から、同期待機の「確認」へ
今回のAPI追加ラッシュを見て感じるのは、kintoneカスタマイズが「REST APIで裏側の情報を取ってきて推測する」必要があった世界から、「JavaScript APIで目の前の事実を確認する」世界になった、ということ。
- APIリクエスト数を消費しない(意外と悩むポイント)
- 非同期処理を待たなくていい(コードがシンプル、動作が高速)
- 「レンダリング後の現状」がわかる(他のプラグインの影響や複雑な権限設定の結果がわかる)
特に3点目は、堅牢なカスタマイズを作る上で非常に重要です。
「あれ、この機能RESTでやるしか無かったっけ?」と思ったら、まずは最新のJavaScript APIドキュメントをチェックしてみてください。「おっ、いつの間にかできるようになってる!」という発見があるかもしれませんよ。
それでは、良きkintoneライフを!
弊社では初回開発無料の定額39万円でkintoneアプリを開発する定額型開発サービス「システム39」を提供しております。kintoneの導入やアプリ開発でお困りの方は、お気軽にご相談ください。
*Webでの打ち合わせも可能です。