#kintone100日チャレンジ Day072:表示ルールはGASに任せて全体カスタマイズJSを薄く保つ!「ポータル掲示板 from GAS」を組んでみた

#kintone100日チャレンジ Day072:表示ルールはGASに任せて全体カスタマイズJSを薄く保つ!「ポータル掲示板 from GAS」を組んでみた

記事
IT・テクノロジー
面倒解決エンジニアの森田ユウゴです。
台湾からお届けする「#kintone100日チャレンジ」の72日目。

kintone案件はもちろん、各種業務にAIエージェントを用いていると深刻なトークン不足が…。
学習の面で利用者には不利ですが、お客様作業以外の用途でAntigravityを使ってみることにしました。やっぱりClaudeCodeやCODEXに比べると、同じスキルを読み込んでいるのに残念な印象です。チューニングが必要なのか、エージェントとして未熟なのかわかりませんが…。
少なくとも、AI Proプランの延長で「おまけ」として使うなら良いかもしれません。体感はcursorのComposer 2.5 Fastと同等かそれ以下というイメージです。(Opus4.6使ってるのに…。)

さて、本日のテーマは、kintone管理者・社内広報担当者向けの「ポータル掲示板 from GAS」。ポータルお知らせのカスタマイズ手法や完成度の高いポータルデザインツールは既に多数ありますが、今回は「表示ルールとkintone API呼び出しをGAS側に寄せ、全体カスタマイズJSは薄く保つ」構成に挑戦してみました。

「ポータル掲示板 from GAS」について


🎯 どんな課題に向き合ったか(現場の不とベネフィット)

現場の「不」: 部署・グループ・個人ごとに出し分けたいお知らせがあるのに、標準のお知らせ掲示板だけでは表現力もターゲティングも足りない。全体カスタマイズで全部書こうとすると、ルール判定・kintone API呼び出し・キャッシュまで1ファイルに詰め込み、保守が地獄になる。

導入後の世界(ベネフィット): ポータル/スペースポータル上部に、対象ユーザーだけにリッチテキストのお知らせを表示できる。表示ルールの変更はGAS管理画面から行い、kintone側のJS再アップロードは不要。本文はkintoneアプリのリッチテキストフィールドで編集できるので、非エンジニアでも内容更新に参加しやすい。

💡 着想・こだわり


kintoneポータルのカスタマイズ記事や、HTML/CSSベースのポータルデザインツール、アプリでリンク集を管理するテンプレートなど、ポータルをリッチにする手段はすでに豊富です。今回は「新しい掲示板を作った」というより、フロントとバックエンドの責務分離を試したのが本題です。

フロント(kintone全体カスタマイズ)は、portal.show / space.portal.show で配置先を取得し、ログインユーザーの所属情報を kintone.user API で集め、GAS Web AppへPOSTするだけ。

バックエンド(GAS)は、表示ルールJSONの評価、優先順位判定、組織マップ取得、リッチテキストレコードの取得、CacheServiceによるキャッシュを担当。設定UIもGAS管理画面に集約しています。

kintoneレコード取得は表示専用アプリのAPIトークン認証のみ使用。閲覧権限に絞ったトークンを管理画面に登録し、Script Propertiesへ保存。トークン値そのものは画面に再表示しません。

✨ これで出来ること(機能概要)

まずはこちらをご覧ください。
ユーザー・組織・グループ別の出し分け: ルールごとに targets を指定。複数マッチ時は priority が小さい1件のみ表示。

ポータルとスペースポータル両対応: 通常ポータルと space.portal.show の両方で同じ仕組みを動かし、portalId でスペース限定ルールも設定可能。

GAS管理画面でルール保存: ルールの保存・反映はGAS Web Appの管理画面から。保存時にキャッシュをクリアし、kintone側の再デプロイなしで反映。

課題

現時点では下記のような課題が残っています。

表示ルールをJSONで自分で書く必要がある(専用の記載ツールは未準備)
表示ルールは PORTAL_BOARD_RULES_JSON としてJSON配列で保持されます。次のような形で定義する必要があります。

例)情報システム部向けのお知らせを ORG-1300 所属者にだけ出す場合
ruleId: rule-001 / priority: 100 / enabled: true / portalId: 空(全ポータル) / title: 情報システム部向けのお知らせ / targets.organizations: ["ORG-1300"] / content: appId 508, recordId 1, fieldCode リッチエディター

これは正直、手入力は厳しいです…。

GASのコールドスタートで初回表示が遅い
GAS Web Appはしばらく使われていないとインスタンスが停止し、初回アクセスで起動待ち(コールドスタート)が発生します。体感では数秒〜十数秒かかることもあり、ポータル表示のたびにユーザーが待たされるのは厳しいです。

さいごに

#kintone100日チャレンジ として、2026年4月から毎日プラグインをバイブコーディングしています。明日もお楽しみに!

私森田ユウゴはココナラでkintoneに関する各種サービスを出品しております。

SIerの中でもインフラSEとして約10年、特に「運用保守」にはベンダーとして深く携わってきました。
作りっぱなしにしない導入やカスタマイズのご提案が可能です。
お気軽にご相談をくださいませ
→森田ユウゴのプロフィールはこちら👇


サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す