1
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?

【kintone/プラグイン】plugin-uploaderでハマった話【dev活】

Last updated at Posted at 2024-09-20

前置き

勉強会いってきた。

先日、サイボウズさん主催のdevCampプラグイン基礎編に行ってきました。
とても為になるお話が聞けたり、他のエンジニアさん達と意見交換できたり、とても素敵な時間を過ごさせていただきました!!😁
特に、APIトークンを使用した安全なREST APIの使い方については、ちょうど実務で困っていた箇所だったのでめちゃめちゃ助かりました……!!

モチベのあるうちに触っとこう。

と思い、復習ついでに、勉強会内ではさらっと流されたplugin-packerにも触れていくことにしました。
そこで、お手本を見ながら進ていたですが、うまくいかないところが多々あったので備忘録として残します。

【本題】plugin-uploaderでハマった

前提:お手本のcreate-pluginのStep2まで素直に従って、補足に記載のnpm startでパッケージングする。

plugin-uploadeのインストール

plugin-uploadeのお手本通りインストールする。
npm install -g @kintone/plugin-uploader

plugin-uploadeの実行

次にkintoneにアップロードしようと思い、
kintone-plugin-uploader --base-url https://examle.cybozu.com --username ログイン名 plugin.zip
を実行すると……

スクリーンショット 2024-09-21 021332.png
見たことあるエラー
PowerShell のスクリプトファイル実行させないぞってやつが出てきました。

「単純にps1がダメならcmdに書き換えようかなぁ……」とファイルを探すと、
スクリーンショット 2024-09-21 022830.png
cmdファイルあるじゃん

plugin-uploade.cmdの実行

デフォルトでps1ファイルが優先されるなら、cmdを指定したら通るのでは?
と考え、以下を実行
kintone-plugin-uploader.cmd --base-url https://examle.cybozu.com --username ログイン名 plugin.zip

スクリーンショット 2024-09-21 023724.png
通った!!やった!!

と思ったらログインエラー

スクリーンショット 2024-09-21 024511.png
なんやて。
ユーザー名はコピペしたから間違いないし、そもそもパスワード聞かれてないのになんで??
ここで数時間悩む。

そうだ、パスワードも一緒に書いちゃえ

kintone-plugin-uploader.cmd --base-url https://examle.cybozu.com --username ログイン名 --password パスワード plugin.zip
スクリーンショット 2024-09-21 025132 - コピー.png
あ、通った。ラッキー。
(あの数時間はなんだったんだ……)
追記:npmのサイトにちゃんと使い方書いてた😢

喜びも束の間

なんか凄そうなエラーが出た。
スクリーンショット 2024-09-21 025132.png
こんな時こそ冷静になってエラーメッセージを検索しよう!

プラグインzipファイルのパスが違った

npm startでパッケージングすると、plugin.zipはdistフォルダの中に生成されます。

スクリーンショット 2024-09-21 030245.png
なので、plugin.zipを指定するパスを正しくすれば通るはず……

plugin.zipのパスを修正

以下を実行
kintone-plugin-uploader.cmd --base-url https://examle.cybozu.com --username ログイン名 --password パスワード dist\plugin.zip

スクリーンショット 2024-09-21 030731.png
キターーーーーーーーー!!!!脳汁ブシャーーーー!!!!

kintoneからも確認する

kintoneシステム管理>プラグインから確認します。
ちゃんと入ってますね。
スクリーンショット 2024-09-21 031324.png

【おまけ】"npm run upload" was failed

事件はまだ終わってない

本編は円満に解決したと思ったのにfailedとはどういう事だ??
スクリーンショット 2024-09-21 032716.png

そもそもnpm startってなんだろう?

虎の巻さん曰く、

npm startは、package.jsonのstartに定義されたコマンドを実行するコマンドです。

とのことです。

package.jsonを調べてみよう

sample_plugin_project\package.json
{
  "name": "watchYoutubeOnKintone",
  "version": "0.1.0",
  "scripts": {
    "start": "node scripts/npm-start.js", 
    "develop": "npm run build -- --watch",
    "build": "kintone-plugin-packer --ppk private.ppk --out dist/plugin.zip src",
    "lint": "eslint src",
    "upload": "kintone-plugin-uploader dist/plugin.zip --watch --waiting-dialog-ms 3000"
  },
  "devDependencies": {
    "@cybozu/eslint-config": "^23.0.0",
    "@kintone/plugin-packer": "^8.1.3",
    "@kintone/plugin-uploader": "^9.1.2",
    "eslint": "^8.57.0",
    "npm-run-all": "^4.1.5"
  }
}

おそらく、我々は5行目のstartを呼び出している。(きっと、たぶん)
npm startnode scripts/npm-start.jsを実行させているっぽい。

npm-start.jsの中身を見る。

いかにも一番初めに実行されるぜって名前のファイルだ。

sample_plugin_project\scripts\npm-start.js
"use strict";
const runAll = require("npm-run-all");

runAll(["develop", "upload"], {
  parallel: true,
  stdout: process.stdout,
  stdin: process.stdin
}).catch(({results}) => {
  results
    .filter(({code}) => code)
    .forEach(({name}) => {
      console.log(`"npm run ${name}" was failed`); //ここが呼び出されている
    })
  ;
});

このコードは、package.jsonに定義されたdevelopとuploadを平行実行させる処理だと推測できる(多分、おそらく)
という事は、"npm run upload" was failedは、

uploadコマンドが通っていない。

つまり、sample_plugin_project\package.jsonファイルの9行目
"kintone-plugin-uploader dist/plugin.zip --watch --waiting-dialog-ms 3000"
が犯人!!!!

手動でアップロードした時のコマンドを参考に修正する

sample_plugin_project\package.json
{
  "name": "watchYoutubeOnKintone",
  "version": "0.1.0",
  "scripts": {
    "start": "node scripts/npm-start.js", 
    "develop": "npm run build -- --watch",
    "build": "kintone-plugin-packer --ppk private.ppk --out dist/plugin.zip src",
    "lint": "eslint src",
    "upload": "kintone-plugin-uploader --base-url https://examle.cybozu.com --username ログイン名 --password パスワード dist/plugin.zip --watch --waiting-dialog-ms 3000"
  },
  "devDependencies": {
    "@cybozu/eslint-config": "^23.0.0",
    "@kintone/plugin-packer": "^8.1.3",
    "@kintone/plugin-uploader": "^9.1.2",
    "eslint": "^8.57.0",
    "npm-run-all": "^4.1.5"
  }
}

動作確認

1.コマンドプロンプトにnpm startを入力する

スクリーンショット 2024-09-21 045632 - コピー.png
ちゃんと動いてる……!!

2.カスタマイズファイル本体にコメントを追記し、保存する。

例)sample_plugin_project\src\js\desktop.js
//省略

    if (spaceEl === null) {
      throw new Error('The header element is unavailable on this page.');
    }
    console.log('hello cyboz');  //コメントを追記

    const fragment = document.createDocumentFragment();
    const headingEl = document.createElement('h3');


//省略

スクリーンショット 2024-09-21 045632.png
動いた!!!!

3.kintone環境で確認

サンプルプラグインの設定を入力、保存する。
スクリーンショット 2024-09-21 050537.png

アプリを開き、コメントが表示されていることを確認する
スクリーンショット 2024-09-21 050520.png

4.監視の停止

Ctrl+cで監視を終了することができる
パッチジョブを終了するか聞かれたらyと入力
スクリーンショット 2024-09-21 162210.png

まとめ

sample_plugin_project\package.jsonファイルの9行目を
"upload": "kintone-plugin-uploader --base-url https://examle.cybozu.com --username ログイン名 --password パスワード dist/plugin.zip --watch"
に変えたら、保存するごとに変更を検知してプラグインをアップロードできる!!楽!!

※注意

今回はsample_plugin_project\package.jsonに直接パスワード書いちゃってるので、取り扱いには十分にご注意ください。

最後に

kintoneってすごいなぁというのを改めて感じました……
これを機に、気が向いたらまた投稿しようかなと思います。
ご質問やご指摘等ございましたらお気軽にコメントください。

閲覧ありがとうございました!

追記

2024/10/04

npmのサイトにちゃんと使い方書いてた😢

参考資料

1
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
1
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?