はじめに
社内向けにOutsystemsのE2E(codeceptjs)のライブラリを作成している。
他チームに展開するにあたり、簡単な導入法がないかを考えている。
社外へ公開せず、社内から簡単にアクセスできる方法がよい。
ZIPの共有、gitのsubmodule、ローカルファイルpackageのnpm installなどを検討したが、それぞれ難点があり採用に至らなかった。
npmについて調べていくと、gitリポジトリからnpm installできることが分かった。
jsやnodeは既存システムの改修をしたことがある程度の知識のため、調べたことを備忘録代わりに書き留めていこうと思う。
環境
node:v21.5.0
npm:10.2.4
前提
ライブラリは作成中で、package.jsonやリポジトリは作成されている状態である。
リポジトリは社内からのみアクセス可能になっている。
package名はmylibrary、バージョンは0.1.0とする。
リポジトリのURLはmyRepository、ターゲットのブランチはtargetBranchとする。
インストール
npm install
gitからのインストールには以下のコマンドを使う。
$ npm install git+{myRepository}#{targetBranch}
myRepositoryはgit clone
する際のURLを指定する。今回はhttpのプロトコルでインストールできることを確認した。
targetBranchはインストールするソースをどのブランチから取得するかを指定する。今回は確認していないがtagを指定することもできるようだ。
インストールされたものを確認する
npm list
でインストール状況を確認した。
mylibrary@0.1.0 (git+{myRepository}#{commitId})
利用側のプロジェクト側で上記コマンドを実行して、ファイルがどのように配置されたかを確認する。
node_module
配下にライブラリ側のpakage.json
のname
に指定した名称でフォルダが作成されている。
さらに、ライブラリ側で依存関係のあるパッケージがインストールされていることが確認できた。
適当な名前にしてしまうと、他のパッケージと被る可能性があるため注意しなければならない。
アンインストール
下記コマンドを実行した。アンインストールに関しては他と同じようにパッケージ名を指定する。
$ npm uninstall mylibrary
npm list
でインストール状況を確認したところ、正しく削除されていることが確認できた。
利用のための設定
クラスをexportして利用側でrequireしたい。
ライブラリの内部のフォルダ・ファイル構造を意識させず、すべてのクラスを以下のように利用できるようにしたい。
const { Hogehoge } = require("mylibrary");
index.jsでexports
/src/index.js
に各クラスのexportsを記載
module.exports = {
Hogehoge: require("./hoge/Hogehoge"),
Fugafuga: require("./fuga/Fugafuga"),
};
package.jsonのexportsを設定
ライブラリ側のpackage.json
にexportsを追記。
"exports": {
".": "./src/index.js"
}
終わりに
突貫ではあるが、目標であった自作ライブラリの簡単な配布が実現できた。
このライブラリをチーム全体で育てていくための開発規約や運用サイクルについてはまたきちんと考えていきたい。
そのために、gitを用いたnpm installでのバージョン管理方法など技術的な課題も残っているので調査していきたい。