@kintone/rest-api-client をGitHubからインストールする

# はじめに
`@kintone/rest-api-client` の開発中の機能を、GitHubからインストールして早めに使ってみました。
一般的にNPMパッケージをGitHubからインストールするときに比べて、特殊な方法が必要だったのでメモ。

# 注意

* Webpackビルド環境がある前提です
* 開発中のを勝手に使う場合、深刻なバグがある可能性もあるので自己責任で！

# ディレクトリ構造
rest-api-clientは、Gitリポジトリとしては特殊な形をしています。

https://github.com/kintone/js-sdk
この`@kintone/js-sdk`というリポジトリ内に、サブディレクトリとして`rest-api-client`が存在します。
https://github.com/kintone/js-sdk/tree/master/packages/rest-api-client

NPMの世界では `@kintone/rest-api-client` という単独パッケージ扱いですが、Gitの世界では単なるサブディレクトリ。
~~（なんでこんな変な構成なのかは謎。こういうNPMデザインパターンもあるのか？誰か知ってたら教えてください）~~
こういうパターンを「モノレポ」というらしいですね。僕も最近、とあるプロジェクトでモノレポを採用してみました。この記事が分かりやすいです。
[lernaを使ってnpmプロジェクトをモノレポ化する](https://92thunder.hatenablog.com/entry/2018/05/30/222440)


なので、GitHubからこんな風にインストールしようとしてもエラーになります。

```
yarn add https://github.com/kintone/js-sdk/tree/master/packages/rest-api-client
```

# 方法その1(Gitのsubmoduleとして使用)

NPMではなく、Gitのsubmoduleとしてインストールします。

```
mkdir vendor
cd vendor
git submodule add https://github.com/kintone/js-sdk
```

自分でビルド

```
cd js-sdk/packages/rest-api-client/
yarn install
yarn build
```

こんな風にlibフォルダが出来ていたらビルド成功。

```
$ ls lib
KintoneAllRecordsError.d.ts       KintoneRestAPIClient.js   __tests__/  url.d.ts
KintoneAllRecordsError.js         KintoneRestAPIError.d.ts  client/     url.js
KintoneRequestConfigBuilder.d.ts  KintoneRestAPIError.js    http/
KintoneRequestConfigBuilder.js    KintoneTypes.d.ts         index.d.ts
KintoneRestAPIClient.d.ts         KintoneTypes.js           index.js
```

使うときは、こんな風に相対パスで`js-sdk/packages/rest-api-client`を`import`します。

```js
import { KintoneRestAPIClient } from '../vendor/js-sdk/packages/rest-api-client'
```

これで、2020/3/16時点で未リリースの`addAllRecords`関数だって使えちゃいます :smile: 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24333/a03336f8-7839-94f4-09e9-8a93f7797c1d.png)


# 方法その2(NPMモジュールとしてGitHubからインストール)

最初こっちのやり方考えてたんですが、方法1の方がいいと思ってやめました。

まず、Gitリポジトリ単位で`js-sdk`ごとインストールしてしまう。

```
yarn add https://github.com/kintone/js-sdk
```

そのままでは使えないので、該当ディレクトリに移動して自分でビルド

```shell-session
cd node_modules/@kintone/js-sdk/packages/rest-api-client/
yarn install
yarn build
```


使うときは、こんな風に`@kintone/js-sdk`配下のディレクトリをたどって`import`します。

```js
import { KintoneRestAPIClient } from '@kintone/js-sdk/packages/rest-api-client/lib'
```

`rest-api-client`まで指定でOKかと思ったら、
`rest-api-client/lib`まで指定しないとうまく動いてくれませんでした。

## 問題点

ビルド直後はうまく動くんですが、そのあと他のNPMモジュールを追加インストールしたら、せっかくビルドした`rest-api-client/lib`がきれいさっぱり無くなっちゃいました。インストール毎にクリーンにしてくれるんですね。。

たとえば`.gitignore`で該当フォルダを除外しないようにして、`lib`をコミットしたりすればいけますが、[`node_modules`の中の一部を除外するのがかなり大変](https://qiita.com/anqooqie/items/110957797b3d5280c44f#%E3%81%82%E3%82%8B%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E4%BB%A5%E4%B8%8B%E3%81%AE%E5%85%A8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E7%89%B9%E5%AE%9A%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%A0%E3%81%91%E9%99%A4%E3%81%84%E3%81%A6%E7%84%A1%E8%A6%96%E3%81%97%E3%81%9F%E3%81%84
)だったりするので、やめといた方がよさそう・・・

一応やり方書いておきますが、こんなギャグみたいな`.gitignore`書いて、

```:.gitignore
node_modules/*
!/node_modules/@kintone
/node_modules/@kintone/*
!/node_modules/@kintone/js-sdk/
/node_modules/@kintone/js-sdk/*
!/node_modules/@kintone/js-sdk/packages/
/node_modules/@kintone/js-sdk/packages/*
!/node_modules/@kintone/js-sdk/packages/rest-api-client/
/node_modules/@kintone/js-sdk/packages/rest-api-client/*
!/node_modules/@kintone/js-sdk/packages/rest-api-client/.gitignore
!/node_modules/@kintone/js-sdk/packages/rest-api-client/lib/
```

さらに、こっちの`.gitignore`から`lib`を消しておく。

```diff:node_modules/@kintone/js-sdk/packages/rest-api-client/.gitignore
 node_modules/
-lib/
 esm/
 umd/
```

まぁ、方法1の方が無難ですなw

# おわりに
くれぐれも自己責任でね！
僕も正式リリースまでは、プロダクトコードには使いませんから！