kintoneプラグイン開発をはじめよう① 開発環境を用意する

#初めに
kintone プラグイン開発が初めての後輩に、私なりのベストプラクティスを伝えたくてこの記事を書いています。
1記事ではおさまらなかったのでシリーズ化します！

# この記事のターゲット

こんな人向けです。

- kintone カスタマイズしたことあるけどプラグイン作ったことがない
- 最近のプラグインのツールよくわからん
- 最新（2021/12時点）のツールをちゃんと使ってプラグイン開発できるようになりたい

# この記事のゴール
- kintone プラグインをどう作り始めればいいかわかる
- プラグイン開発の流れがわかる
- create-plugin の基本的な使い方がわかる

# kintone プラグインとは
kintone ヘルプ > 管理者ヘルプ > [プラグインの管理](https://jp.cybozu.help/k/ja/admin/add_plugin.html) より
> プラグインとは、設定画面用のHTML・JavaScript・CSSファイルがパッケージングされたものです。

うーん、ヘルプは説明が簡単すぎる…。

私の思う特徴は以下の通り。

- スタンダードコースで利用可能
- カスタマイズ用のJavaScript、CSSや設定画面用のHTMLなどのファイルを、**専用ツール** でパッケージングしたもの
    - ファイル形式はZip
    - 解凍せずそのままkintoneにアップする
- kintone の環境にインストールすると、複数アプリに簡単に適用できる
- 設定画面が用意されているので、アプリごとに設定変更が可能


## プラグインを作るメリット

この記事読んでくれ。

- [kintoneプラグイン開発入門　【Part1: メリット編】
](https://developer.cybozu.io/hc/ja/articles/360017819551)


# 使うツール

プラグイン作成の初心者は、**[create-plugin](https://github.com/kintone/js-sdk/tree/master/packages/create-plugin)** を使うのがおすすめ。

これ一つで、

- プラグインの雛形（必要なファイル１セット）が作成できる！
- プラグインのパッケージング、アップロード、JS構文チェックができる！

他のツール気になる人は、
[プラグイン開発支援ツール群の案内](https://developer.cybozu.io/hc/ja/articles/360000975763) の機能比較表を見ると各ツールの特徴がわかります。

ちなみにプラグイン開発に慣れてきたら plugin-packer と plugin-uploader を個別で使いたくなるけど、それは次のステップです。
「複数プラグインをガンガン開発する」という段階になるまでは create-plugin 使えればOK。

# 実際にやってみよう

create-plugin には超簡単なサンプルプラグインが雛形として用意されています。
プラグイン開発に必要なファイル全てを自力で用意するのは面倒なので、
サンプルプラグイン（テンプレート）を書き換えていくのがおすすめです。
テンプレートはサイボウズがおすすめする理想のお作法で書かれています。たぶん。

## サンプルプラグインを触ってみる

まずはサンプルプラグインを手に入れて、自分の開発環境に適用してみましょう！

### create-plugin でサンプルプラグインをインストール
以下のコマンドを実行してください。

``` zsh
$ npx @kintone/create-plugin hello-kintone-plugin
```
:::note warn
「@kintone/plugin-uploaderを使いますか？」という質問には「Yes」と答えてください
:::
- コマンド最後の ``hello-kintone-plugin`` はプラグイン名
    - この名前でフォルダが新しく作成され、必要なファイルが入ってきます。
- 詳細は、[GitHubのREADME](https://github.com/kintone/js-sdk/tree/master/packages/create-plugin) や [解説記事](https://developer.cybozu.io/hc/ja/articles/360000877946) を参照


### プラグインをパッケージング ＆ kintone 環境にインストールする

プラグインをパッケージングして、kintone 環境にインストールしましょう！
ドメイン全体でそのプラグインが使えるようになります。

``` zsh
$ cd hello-kintone-plugin
$ npm start
```
コマンドライン上で kintone の環境情報を聞かれるので答えてください。

:::note warn
「dist/plugin.zip をアップロードしました!」と表示されたら、ターミナルは閉じたりせずそのままにしておいてください。
:::

``npm start``コマンド は次の２つが行われます。

1. プラグインファイルがパッケージングされる（Zipファイルができる）<br>
distフォルダ内に「plugin.zip」というファイルができます。これがプラグインです。
- 出来上がったZipファイルが、kintone のシステム管理にアップロードされる
<br> kintoneシステム管理 ＞ プラグイン の「読み込んだプラグイン」に追加されます。
  <br> 参考：[kintoneヘルプ：プラグインを追加／削除する](https://jp.cybozu.help/k/ja/admin/add_plugin/plugin.html)

### アプリに適用する

kintone 環境にプラグインを入れたら、使いたいアプリに適用します。

1. プラグインを適用したいアプリ（今回はなんでもいいです）の設定画面で、プラグインを追加する
   <br> [kintoneヘルプ：アプリにプラグインを追加する](https://jp.cybozu.help/k/ja/user/app_settings/plugin.html)
-  プラグインの設定画面で表示したいメッセージを入力して保存する
-  アプリの設定を保存（アプリを更新）
- 一覧画面の上部に、プラグインで設定したメッセージが表示されることを確認

:::note info
プラグインの設定画面と使い方がイメージできたら、次へ進んでください！
:::

##サンプルプラグインを書き換える

プラグイン開発のイメージを掴むために、サンプルプラグインの中身を一部書き換えてみましょう。
プラグイン開発の第一歩！

### プラグインのファイルを確認する

- distフォルダ： パッケージングされたプラグインファイル（plugin.zip）
- srcフォルダ：プラグインのパッケージング前のファイル
    - それぞれのファイルの説明は、[kintoneプラグイン開発手順「プラグイン作成に必要なファイルの準備」](https://developer.cybozu.io/hc/ja/articles/203455680#prepare-files) 参照
    - manifest.json については「[マニフェストファイルの作成](https://developer.cybozu.io/hc/ja/articles/203455680#create-manifest)」参照
    - [51-modern-default.css](https://developer.cybozu.io/hc/ja/articles/203302214)　は、kintone ライクな見た目にするためのスタイルシート
- private.ppk：プラグインの秘密鍵ファイル。なくすとプラグインのアップデートができなくなる。超重要なファイル。
 
### 設定画面のHTMLを書き換えてみる

src/html/config.html を開いて、内容を書き換えて保存してみてください。
例：Save ボタン、Cancel ボタンを「保存」「キャンセル」に書き換えてみる


### プラグインの自動パッケージング ＆ 自動アップロード

先程実行したコマンド``npm start``は、プラグインの自動パッケージングとアップロードを行うコマンドです。
このため、プラグインのファイルの中身を書き換えて保存すると、
自動で **プラグイン（zip）ファイルが作り直され、kintoneの環境にアップされます！**

ということで、プラグインの設定画面をリロードしてみましょう。
書き換えた内容が反映されているはずです。

:::note warn
自動パッケージング＆アップロードは、「Ctrl + C」キーで止められます。
:::

プラグイン開発の流れが把握できたでしょうか？
この流れが把握できれば、あとはファイルを書き換えていくだけで好きなプラグイン作れちゃいますね！！

# 次回（以降）予告

- kintoneカスタマイズをプラグインに作り替えるポイントは？
    - kintoneカスタマイズとプラグインの書き方ってどこが違うの？
- プラグインの設定画面ってどんな機能を作る必要があるの？
    - 設定項目を入力必須にするには？
    - 保存ボタンってデフォルトで用意されてないの？
    - 設定画面を開くと設定したはずの内容が消えてる？
    - アプリの設計情報を簡単に取得する方法ってある？
    - 設定画面の見た目を kintone っぽくするには？
- プラグインの秘密鍵ってなに？なくすとどうなるの？
- プラグインのファイル名変えたら自動パッケージング＆アップロードできない？
- プラグインたくさん作りはじめたらディスク容量ひっ迫されてきた…
    - node_modules フォルダの容量が大きすぎて辛い。どうしたら？

盛りだくさんだ〜
お楽しみに！

# つづき
[kintoneプラグイン開発をはじめよう②設定画面の作り方](https://qiita.com/asami_/items/698f48441e16d0fed8c4)