簡易なプラグインの作成方法

お世話になっております。
kintoneの標準や無償プラグインで出来ない処理を実装するために、止む無くスクリプトを使っているのですが、管理者の方針でスクリプトを使わないような指示が出ています。
プラグインであれば汎用的で簡易な処理は実装可能かと思い、幾つかのスクリプト処理を置き換えようと思っているのですが、なかなか簡易なサンプルが見当たりません。

日付Aと日付Bを比較して大小比較チェックをするプラグインを作ってみようと思い、
chatgptに尋ねてみたところ、サンプルを作ってくれました。
しかし、zipファイルをアップロード時にエラーが出てしまいます。
「 インストールに失敗しました。プラグインのファイルが不足している、または正しくありません。 (GAIA_PL05 cVdmkaUF6yBL5y1c2a2d)」

zipファイルの構造は、
DATE-COMPARE-PLUGIN.zip
│ icon.png
│ manifest.json
├─html
│ └─ config.html
└─js
└─ main.js
となっており、
[manifest.json]

{
  "manifest_version": 1,
  "version": "1.0",
  "type": "APP",
  "name": {
    "ja": "日付比較プラグイン(テキスト入力版)"
  },
  "description": {
    "ja": "設定画面でフィールドコードを入力し、日付A > 日付B の場合にエラーとするプラグインです。"
  },
  "icon": "icon.png",
  "desktop": {
    "js": [
      "js/main.js"
    ]
  },
  "mobile": {
    "js": [
      "js/main.js"
    ]
  },
  "config": {
    "html": "html/config.html"
  }
}

でjsonファイルの構文エラーは出ていません。

[main.js]

(function() {
  "use strict";

  // プラグイン設定を取得
  var config = kintone.plugin.app.getConfig(kintone.$PLUGIN_ID);
  var FIELD_A = config.fieldA;
  var FIELD_B = config.fieldB;

  if (!FIELD_A || !FIELD_B) {
    // 設定されていない場合は何もしない
    return;
  }

  // 保存時イベント
  kintone.events.on(['app.record.create.submit', 'app.record.edit.submit'], function(event) {
    var record = event.record;
    var dateA = record[FIELD_A].value;
    var dateB = record[FIELD_B].value;

    if (dateA && dateB) {
      var dA = new Date(dateA);
      var dB = new Date(dateB);

      if (dA > dB) {
        event.error = "日付Aは日付B以前である必要があります。";
        record[FIELD_A].error = "日付A > 日付B です";
      }
    }
    return event;
  });
})();

となっています。

フィールド名は、直接入力する方法にしています。
[config.html]

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>日付比較プラグイン設定</title>
</head>
<body>
  <h2>日付比較の対象フィールドを指定してください</h2>
  <p>
    日付Aフィールドコード: <input type="text" id="fieldA">
  </p>
  <p>
    日付Bフィールドコード: <input type="text" id="fieldB">
  </p>
  <button id="save">保存</button>
  <button id="cancel">キャンセル</button>

  <script>
    (function() {
      "use strict";

      // 保存済み設定を読み込む
      var config = kintone.plugin.app.getConfig(kintone.$PLUGIN_ID);
      if (config.fieldA) document.getElementById("fieldA").value = config.fieldA;
      if (config.fieldB) document.getElementById("fieldB").value = config.fieldB;

      // 保存ボタン
      document.getElementById("save").onclick = function() {
        var newConfig = {
          fieldA: document.getElementById("fieldA").value,
          fieldB: document.getElementById("fieldB").value
        };
        kintone.plugin.app.setConfig(newConfig);
      };

      // キャンセルボタン
      document.getElementById("cancel").onclick = function() {
        history.back();
      };
    })();
  </script>
</body>
</html>

文法的には問題がないと思われるのですが、アップロードするリソース自体に問題があるのでしょうか?

kintoneのサイトでもサンプルは見つかりましたが、難しくて内容が理解できず諦めてしまいました。
単純なサンプルが公開されているサイトがありましたら情報を頂けると幸いです。

kintoneプラグインではppkファイルという証明書ファイル(kintoneシステムが、同一プラグインだと認識するためのファイル)を同梱するなど、いくつか要件があります。
まずは以下ページなどで基本的な箇所を押さえておくのが良いかと思います。

イントロダクション - cybozu developer network

kintoneプラグイン開発手順 - cybozu developer network

「いいね!」 2

コマンドラインの操作はひつようですが、そこさえ少しおぼえてもらえれば
create-pluginを使うのが色々楽だとはおもいます!

「いいね!」 2

コメント有難うございました。

もう少しマニュアルを読み込んでみます。
きっと何か見落としている部分があるのでしょうね。
証明書は社内で使用するならば不要と理解していました。

コメント有難うございます。

この方法は試してみましたが、create-kintone-plugin のコマンドを叩くと、シンプルな構成にしても同じようなエラーが出続けてしまうので、行き詰っていました。

なるほど…書き換えるまえにとりあえずアップロードしてみる、など、まずは問題を切り分けるところから始まりそうですね

質問から的外れになってしまうのと、Plugin作成の勉強のためかな~とおもい
コメントを入れず様子をみていましたが...なんか苦戦されているようなので…

日付Aと日付Bを比較して大小比較チェックをするプラグイン

比較チェックだけなんですか?
デフォルトの計算式(IF関数と不等号)で簡単に出来るとおもうのですが...

そのあとをどうするかによりますが、そのあと動作させたいことのPluginを探すなり、
作るなりをした方がいいかも:duck:...

ちなみに、ですが

管理者の方針でスクリプトを使わないような指示が出ています。

の、理由を聞いてみましたか?

kintone は、常にアップデートを繰り返しています
そして業務アプリは常に使用することが前提ですよね

スクリプトがアップデートと干渉したときに業務が止まってしまうのを
危惧しているのではないでしょうか?
(1、2個のアプリなら迅速な対応も可能かもしれませんが…)

ベンダーさんが作成したPluginなら、ベンダーさんが対応してくれますが
ご自身で作成したPluginだと、ご自身で対応されることになりますヨ

なので、デフォルトの計算式で対応できることは
「Plugin」や「カスタマイズ」を 避けることをお勧めします:blush:

IF(日付_至="","", IF(日付_自>=日付_至,"NG_(日付が逆)","") )

日付が逆

日付が逆、エラーメッセージ

「いいね!」 3

コメント有難うございます。

日付の大小比較は計算式でできるだろうなとは思いましたが、一つのサンプルです。
正直なところ、プラグインの作成は興味本位の部分が大きいです。

スクリプトを使わないように、というのは、確かにそういうケースもあるとは思いますが、
対応できる人が他にいない、という理由です。
アップデートがスクリプトで干渉するという問題もありますが、同じようにプラグインで干渉するという問題もあるかと思います。
また、プラグイン同志の干渉も考えられますが、プラグインはブラックボックスなので、どうすることももできず、スクリプトで完結できるものはそのほうがよいのかなと思ったり、逆にプラグインを複雑に使っているほうがソースコードを書いているのと同様、ドキュメントがないと、可視性が悪いようにも思えますが、私の不勉強によるもののような気もします。

たぶん、複雑なプラグインの制御を使うよりは、ボタンを作って制御するほうが楽な場合もありますので、何等かの基準が必要なんだろうなと思います。

ちなみに、エラーチェックで保存ボタン押下時に、エラーを出すのは、条件分岐プラグインを使われているのでしょうか? 不勉強ですみません。

「いいね!」 1

そうですか、自作のPluginを認めてくれているんですね、羨ましいです
弊社も カスタマイズ 禁止なのですが...
「 JSEdit for kintone 」:backhand_index_pointing_left:Pluginなんだから)を使わせてくれないかな~
と思い申請したがダメで、当然自作PluginもNG…理由を聞いたたら前述の回答でした:pensive_face:

ちなみに、エラーチェックで保存ボタン押下時に、エラーを出すのは、条件分岐プラグインを使われているのでしょうか?

はい、ご明察のとおりです…一応設定画像を下に貼っておきます
ちなみに、同じPlugin内でIF関数を使い「日付判定」もできますが
(=自動入力欄に計算式がかけます)
自分は、デフォルトで出来ない所のみをPluginで動作させるようにしています
(これも前述の通り)

ご参考まで!:blush:

---追記-----------------------------

プラグインはブラックボックスなので、どうすることももできず、

に対応できるか…使ったことがないのでわかりませんが
こんな:backhand_index_pointing_down:Pluginはあります…情報まで!
実行時エラー捕捉プラグイン(TiS)

コメント有難うございます。

そうですか、自作のPluginを認めてくれているんですね、羨ましいです

いいえ。スクリプト禁止なので、プラグインならいいでしょ、という感じでどうしても標準機能で出来ないところだけ、単機能のプラグインを作れないかなと提案するつもりでした。

ちなみに、御社は、スクリプトも禁止なのですか?

まだ初めて間もないので何とも言えないのですが、社内システムならともかく社外にも提供するアプリで、一定のユーザインタフェイスを確保するには、スクリプト+無償プラグインだけでどこまで対処されているのだろうか、という疑問があります。出きているとすれば、明らかな自分の勉強不足です。

ちなみに、御社は、スクリプトも禁止なのですか?

はい、カスタマイズ禁止(=JavaScript禁止 )です

当然、自分で書いたCODEを「パッケージング」して
(自作)Plugin化しても、同様な扱いだと言われてしまい
情シスしかPluginの登録ができないのでしょうがないです
(この時点でJSの勉強は諦めました:pensive_face:覚えても利用できないので...)

スクリプト+無償プラグインだけでどこまで対処されているのだろうか、という疑問があります。

一応、無償プラグインだけで対応しています、結構調べましたけど…
そして「開発者ライセンス」の中で、
事前に何回も検証を重ねてから会社に展開している感じです

「いいね!」 1

コメント有難うございます。

そうなんですね。
スクリプト無しでもかなりのことができる、ということですね。
中途半端にスクリプトが書けるので、スクリプト書いてしまうほうが早い、と思い込んでしまっている部分がありそうですね。

「いいね!」 1

このトピックはベストアンサーに選ばれた返信から 3 日が経過したので自動的にクローズされました。新たに返信することはできません。