はじめに
@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プロジェクトをモノレポ化する
なので、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
します。
import { KintoneRestAPIClient } from '../vendor/js-sdk/packages/rest-api-client'
これで、2020/3/16時点で未リリースのaddAllRecords
関数だって使えちゃいます
方法その2(NPMモジュールとしてGitHubからインストール)
最初こっちのやり方考えてたんですが、方法1の方がいいと思ってやめました。
まず、Gitリポジトリ単位でjs-sdk
ごとインストールしてしまう。
yarn add https://github.com/kintone/js-sdk
そのままでは使えないので、該当ディレクトリに移動して自分でビルド
cd node_modules/@kintone/js-sdk/packages/rest-api-client/
yarn install
yarn build
使うときは、こんな風に@kintone/js-sdk
配下のディレクトリをたどってimport
します。
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
の中の一部を除外するのがかなり大変だったりするので、やめといた方がよさそう・・・
一応やり方書いておきますが、こんなギャグみたいな.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
を消しておく。
node_modules/
-lib/
esm/
umd/
まぁ、方法1の方が無難ですなw
おわりに
くれぐれも自己責任でね!
僕も正式リリースまでは、プロダクトコードには使いませんから!