3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

どうも、フリーランスでエンジニアをしている たむら と申します。
Qiitaは1年ぶりの投稿です。よろしくお願いします。

この記事はkintoneアドベントカレンダー2025の12/19の記事です。

私はdevkin meetup!という勉強会コミュニティの中で、Devkinoxというkintone関連の開発者用Chrome拡張を、コミュニティのメンバーと開発しています。

Chrome拡張のメリット

kintoneをカスタマイズするプラグイン、JavaScript/CSSファイルのアップロードと、Chrome拡張でのカスタマイズの違いを簡単に紹介します。

導入・運用が簡単

  • 登録が簡単・更新も簡単
    公式のChrome拡張サイトからワンクリックでインストール、更新が可能です。プラグインはアプリごとにインストールする必要があり面倒ですが、Chrome拡張なら一度入れるだけでOKです。

  • 環境を選ばない
    ドメインの違うkintone環境でも動作可能で、アプリごとにプログラムを反映する必要はありません。

プラグインとは違うアプローチが可能

  • ツールとして開発
    汎用的な機能を現在表示しているアプリに対して実行するような、ツールとしてのカスタマイズに向いています。

  • UIをkintoneの画面内に埋め込まなくてもよい
    Chrome拡張は、画面外のブラウザのURL欄から操作でき、独立したポップアップの表示も可能です。
    kintoneの画面に実行ボタンなどを配置しなくてもよいため、kintoneの画面のパーツとは競合せず、拡張性の高い画面が作れます。

Chrome拡張のデメリット

ブラウザ依存

Chrome/Edge以外のブラウザでは使用できません(Firefoxは別途対応が必要)。

使用シーンが多岐にわたる

プラグインは特定のアプリでのみ動作しますが、Chrome拡張はJavaScript/CSSファイルを
全体に適用したときのように、すべてのページで実行される可能性があります。
そのため、不要なページでの動作も例外として考慮する必要があります。

※Chrome拡張の開発を始めたところなので、まだ気づいていないデメリットがあるかもしれません...


Chrome拡張でのコード例

Chrome拡張を開発するにはmanifestファイルの作成やビルドが必要ですが、今回はそこは置いておいて、どんな感じでコードが実装できるかを紹介します。

Chrome拡張でもkintoneを操作するkintone REST APIやkintone JavaScript APIが使えるので、以下のような簡単な実装が可能です。

現在のアプリ情報を取得する

kintone JavaScript APIを使って、今表示しているアプリのIDや名前、
フィールド情報などを取得します。この情報があれば、開発時のデバッグや
アプリ情報の確認が素早くできます。

// kintoneの画面か判定
if (typeof kintone === "undefined" || !kintone || !kintone.app) {
  return null;
}

// アプリidを取得
const appId = kintone.app.getId();
if (appId === null || appId === undefined) {
  return null;
}
// 1. アプリ詳細情報を取得
const appDetails = await (kintone as any).api(
  (kintone as any).api.url("/k/v1/app.json", true),
  "GET",
  { id: appId },
);

// 2. アプリのフィールド情報を取得
const fieldsResponse = await (kintone as any).api(
  (kintone as any).api.url("/k/v1/app/form/fields.json", true),
  "GET",
  { app: appId, lang: "default" },
);
const appFields = fieldsResponse.properties;

// アプリ情報を返す(後続処理でこの情報を見やすく表示してあげる)
return {
  appId: appId.toString(),
  appName: appDetails.name || "(名称未設定)",
  spaceId: appDetails.spaceId ? appDetails.spaceId.toString() : undefined,
  threadId: appDetails.threadId
    ? appDetails.threadId.toString()
    : undefined,
  creatorName: appDetails.creator?.name || "(不明)",
  createdAt: appDetails.createdAt || "(不明)",
  modifierName: appDetails.modifier?.name || "(不明)",
  modifiedAt: appDetails.modifiedAt || "(不明)",
  fields: appFields,
};

Devkinoxでは、取得した情報をこんな感じで表示しています。

タイトルなし.png

編集画面でフィールドに文字をセット

テスト用のダミーデータをサクッと作成するために、文字列一行フィールドにフィールドコードと同じ文字をセットします。

const fieldsResponse = kintone.app.record.get();
const record = fieldsResponse.record;
for (const key in record) {
  const field = record[key];
  if (field.type === "SINGLE_LINE_TEXT" && field.value === undefined) {
    field.value = key;
  }
}
kintone.app.record.set(fieldsResponse);

Devkinoxのダミーデータ作成機能での実行例

タイトルなし2.png


最後に

kintoneのカスタマイズをChrome拡張でツール化すると、プラグインやJavaScript/CSSファイルアップロードとは違うアプローチで開発が可能です。
そのうち商用プラグイン以外に、商用のkintone Chrome拡張が出てくるかもしれませんね。

Devkinoxは、オープンソースで開発しております。GitHubリポジトリ
今後も開発者がほしい機能を追加していく予定です。興味のある方はご参加ください。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?