【つかってみた】kintone Utility for JavaScript が 廃止予定らしいので、kintone JS SDK の利用を強烈に推してみる

こちらの記事で紹介している kintone JS SDK ですが、新しく[rest-api-client](https://developer.cybozu.io/hc/ja/articles/900000767263)がリリースされて、JS SDKは非推奨になっています。ご注意ください。
https://github.com/kintone/kintone-js-sdk/

[【Tips公開】kintone JS SDK (2019/03/29)](https://developer.cybozu.io/hc/ja/articles/360026035931)でアナウンスの通り、2019年3月にkintoneのレコードを取得する [kintone REST API](https://developer.cybozu.io/hc/ja/articles/201941754) のラッパーライブラリ [kintone JS SDK](https://developer.cybozu.io/hc/ja/articles/360025484571)がリリースされました。

[こちらに記載の通り](https://developer.cybozu.io/hc/ja/articles/360025484571)
> 「kintone JS SDK」とは、以前リリースされた「kintone Node.js SDK(β)」や「kintoneUtility」の後継となる SDK です。

**上記２つのライブラリの後継** と公式にうたわれていますし、[kintoneUtility](https://developer.cybozu.io/hc/ja/articles/115000333223) 何より[GitHubのリポジトリ](https://github.com/kintone/kintoneUtility)に廃止予定とあります。

> kintone Utility for JavaScript (Deprecated)

何か **~SDK** は 外部からproxy等を利用して kintone API を叩く用と勘違いしている方（私も含め）もいるかもしれませんが、そう言う訳ではありませんので、これからはどんどん使いましょうと自戒も込めて kintoneUtility の代わりにつかってみました。

# 利用準備

簡単に始めるには、GitHubからzipファイルをダウンロードして、解凍した中にある kintone-js-sdk.min.js を取り出して利用します。

## 手順

## kintoneカスタマイズ用の環境を準備

ローカルにkintoneカスタマイズの環境を作ります。必要無い方は飛ばしてください。
Node.jsは導入済みの前提です。

1. 開発用のディレクトリを作成します。 mkdir my-project
2. cd my-project
3. `npm init -y` 初期化します。
4. `npm install --save-dev @babel/core @babel/cli` Babelトランスパイラをインストールします。
5. `npm install @babel/preset-env --save-dev` 最新のJavaScriptを利用できる様にセットアップします。

## kintone JS SDK ライブラリを取得

1. GitHubからダウンロード
2. zipファイルを解凍
3. distディレクトリの kintone-js-sdk.min.js をカスタマイズするプロジェクトのソースファイルと同じディレクトリに保存します

# ソースコード
そのままでは動作しないかもです。動作するブラウザに応じて変換してください。

```javascript
kintone.events.on('app.record.index.show', (event) => {
  const kintoneRecord = new kintoneJSSDK.Record()
  const appId = kintone.app.getId()
  const totalCount = true

  //**
  // * getRecords(appId, query, fields, totalCount)
  // */
  let getAllRec = () => {
    const query = '$id <= "50"  order by $id desc limit 10'
    const fields = []
    kintoneRecord.getRecords(appId, query, fields, totalCount).then((rsp) => {
      console.log(rsp)
    }).catch((err) => {
      console.log(err.get())
    })
  }

  //**
  // * getAllRecordsByQuery(appId, query, fields, totalCount)
  // */
  let getAllRecByQ = () => {
    const query = '$id <= "10000" order by $id desc'
    const fields = []
    kintoneRecord.getAllRecordsByQuery(appId, query, fields, totalCount).then((rsp) => {
      console.log(rsp)
    }).catch((err) => {
      console.log(err.get())
    })
  }

  //**
  // * getAllRecordsByCursor(option)
  // */
  let getAllRecByCur = () => {
    const option = {
      app: appId
    }
    kintoneRecord.getAllRecordsByCursor(option).then((rsp) => {
      console.log(rsp)
    }).catch((err) => {
      console.log(err.get())
    })
  }

  getAllRec()
  getAllRecByQ()
  getAllRecByCur()

})
```

# とりあえずAPIを叩いてみる

[getRecords(appId, query, fields, totalCount)](https://kintone.github.io/kintone-js-sdk/latest/reference/record/#getrecordsapp-query-fields-totalcount) 関数で複数レコードを取得してみます。

  １. 最初にJSSDKのインスタンスを取得します。
    kintone内部からAPIを叩く場合は、引数のkintoneコネクションオプションは必要無いです。

> // without connection, module will use session authentication of kintone
>  var kintoneRecord = new kintoneJSSDK.Record();

  ２. お決まりの、アプリIDをセット。[kintone.app.getId()](/https://developer.cybozu.io/hc/ja/articles/202166300/)関数を使います。

  ３. クエリを設定。getRecords は limit が使えます。


```javascript

  const kintoneRecord = new kintoneJSSDK.Record()  1.

  const appId = kintone.app.getId() // 2.

  const query = '$id <= "50"  order by $id desc limit 10' // 3.

```

# レコード一括取得してみる

[getAllRecordsByQuery(app, query, fields, totalCount)](https://kintone.github.io/kintone-js-sdk/latest/reference/record/#getallrecordsbyqueryapp-query-fields-totalcount) 関数を使って、レコード一括取得してみます。

getAllRecordsByQuery は クエリに limit や offset が 使えないので注意です。
一度に取得できるレコード上限の500件を超えてレコードを取得できます。

> Number of records can be retrieved at once is greater than the default limitations

```javascript

query = '$id <= "10000" order by $id desc'

```


# カーソル関数をつかってみる

本日リリースの [kintone js SDK v0.4.0](https://github.com/kintone/kintone-js-sdk/releases/tag/v0.4.0) でカーソルに対応した [getAllRecordsByCursor(option)](https://kintone.github.io/kintone-js-sdk/latest/reference/record/#getallrecordsbycursoroption) 関数が用意されたので早速使ってみました。

[ここの記事](https://developer.cybozu.io/hc/ja/articles/360028843531)を見るとカーソルは面倒だなと思っていましたが、js sdk に用意された　getAllRecordsByCursor は、カーソルを意識する事無く使い勝手は良いなと感じました。

全件取得の時はアプリIDを渡すだけです。getAllRecords系と違って、引数の渡し方が違うので注意です。

```javascript

    const option = {
      app: appId
    }

```


# まとめ

* JS SDK はkintone内部のJSで使う時には、認証情報とかセットしなくても良いので、kintoneUtilityの代わりにどんどん使ってOK
* 一括取得時に再帰とか、カーソルとか考えなくてOK

改めて便利だなと感じました。

# 追記

[【kintone JS SDK】カーソルAPIの対応と今後の開発計画について](https://developer.cybozu.io/hc/ja/articles/360030647431)
に 2019年8月末 リリースの v0.5.0 よりメソッドの引数の渡し方が、今回のカーソル関数と同様にシングルオブジェクトに変更される様です。 

# 参考リンク

* [kintone JS SDK](https://developer.cybozu.io/hc/ja/articles/360025484571)
* [getAllRecordsByCursor(option)](https://kintone.github.io/kintone-js-sdk/latest/reference/record/#getallrecordsbycursoroption)
* [複数のレコードをループして取得するワザ](https://developer.cybozu.io/hc/ja/articles/201501294)
* [「kintone Utility Library for JavaScript」の使い方](https://developer.cybozu.io/hc/ja/articles/115000333223)
* [kintone Utility for JavaScript を使ってみたよ](https://qiita.com/kiku38/items/f903fcdf0c4e3d6ac1ab)
* [レコードの一括取得（クエリで条件を指定）](https://developer.cybozu.io/hc/ja/articles/202331474#step2)
* [第4回 クエリ指定して更新・並び順変更をしてみよう](https://developer.cybozu.io/hc/ja/articles/115001436186)

# 設定ファイル

```package.json
{
  "name": "test-sdk",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "babel src -d lib",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "kazuhiro yoshida",
  "license": "MIT",
  "devDependencies": {
    "@babel/cli": "^7.5.0",
    "@babel/core": "^7.5.4",
    "@babel/preset-env": "^7.5.4"
  }
}
```


```.babelrc
{
    "presets": ["@babel/preset-env"]
}
```

* [webpack入門 ~Babel,Polyfillを使って快適ES6ライフ~](https://developer.cybozu.io/hc/ja/articles/360022880491)
* [Using Babel](https://babeljs.io/setup#installation)