JavaScriptNode.jsoclifschematics

Schematicsをoclifから実行する

NestJSやAngularでファイルを作成する時に使用されているschematicsというライブラリがあります。 これを使うことで、簡単にファイルの生成やデータの更新などが可能になります。 これを自作のCLIでも動かせ […]

広告ここから
広告ここまで

NestJSやAngularでファイルを作成する時に使用されているschematicsというライブラリがあります。

これを使うことで、簡単にファイルの生成やデータの更新などが可能になります。

これを自作のCLIでも動かせるようにしたいなと思ったので、いろいろ調べてみました。

Step1: oclifでCLIプロジェクトを立ち上げる

まずはサンプルのCLIプロジェクトを作ります。

今回はoclifを使いましたが、ここは他のライブラリなどでも問題ないはずです。

$ npx oclif single schematics-cli
$ cd schematics-cli

セットアップが完了できていれば、以下のようなコマンド入力でメッセージが表示されるはずです。

$ ./bin/run 
hello world from ./src/index.ts

Step2: schematics-cliのインストール

schematicsを実行するためのCLIをインストールします。

$ yarn add @angular-devkit/schematics-cli

Step3: NestJSのschematicsをインストール

生成する内容を定義したライブラリが各プロジェクトで公開されています。

今回はNestJSのschematicsをインストールしてみました。

$ yarn add @nestjs/schematics

Step4: schematicsをoclifから実行する

schematicsのCLIソースを読む限り、main関数を実行することで動かせそうでした。

ということでoclifから直接呼び出すように書いてみます。

import {Command} from '@oclif/command'
import {
  main
} from "@angular-devkit/schematics-cli/bin/schematics"

class SchematicsCli extends Command {
  static description = 'describe the command here'

  async run() {
    await main({
      args: [
          "@nestjs/schematics:interface",
          "--name=helloOclif"
      ]
  })
  }
}

export = SchematicsCli

argにはstringの配列を渡します。内容はschematics-cliを直接実行する時の引数をそのまま渡せばよさそうです。

Execute

最後にoclifコマンドを実行してみます。

先ほどと異なり、NestJSのファイルが生成されたというメッセージが出るようになっています。

% ./bin/run
CREATE src/hello-oclif.interface.ts (31 bytes)

$ cat ./src/hello-oclif.interface.ts
export interface HelloOclif {}

まとめ

自作のCLIコマンドでschematicsを使いたい場合、main関数を実行するようにすれば良さそうです。

引数をCLIとschematicsそれぞれで管理し、CLIからschematicsにproxyしてやる必要がありますので要注意です。

実際にやる場合は、schematicsとCLIをLernaなどでモノレポ管理にしてやると効率が良いのではないかと思います。

おまけ: schematics-cliから直接実行する場合

ちょっと雑ですが、以下のようなステップでschematics-cliからNestJSやAngularなどのschematicsを実行することも可能です。

$ npm init -y
$ npm i -D @angular-devkit/schematics-cli
$ npm i -S @nestjs/schematics
$ ./node_modules/.bin/schematics @nestjs/schematics:interface --name test
CREATE src/test.interface.ts (25 bytes)

誰得?わからない

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts