1
0

More than 3 years have passed since last update.

pkgenというパッケージジェネレーターを作った

Posted at

概要

https://github.com/overgrow-crops/pkgen
yamlで書かれたパッケージのツリー構造の設計図を元に
パッケージを生成します。

コマンドとしては下記の3種類だけですが非常にパワフルなツールかと思います。

  • pkgen
  • pkgen template
  • pkgen lang

使ってみる

インストール

$ curl -O -L https://github.com/overgrow-crops/pkgen/releases/download/v0.2.0/pkgen
$ chmod +x ./pkgen
$ mv ./pkgen /usr/local/bin

確認

$ pkgen -v
$ pkgen/v0.2.0 darwin-x64 node-v14.4.0

プロジェクトルートで

初回のpkgen実行はプロジェクトディレクトリにpkgディレクトリと.pkgen.ymlを作成します。
ユーザのホームディレクトリに.pkgenディレクトリがない場合ホームディレクトリにも自動で環境構築します。

$ pkgen
  ____  _
 |  _ \| | ____ _  ___ _ __  
 | |_) | |/ / _` |/ _ \ '_ \ 
 |  __/|   < (_| |  __/ | | |
 |_|   |_|\_\__, |\___|_| |_|
            |___/            
⠏ Add the .pkgen.yml file to the current directory...

.pkgen.ymlを書く

.pkgen.ymlに任意のディレクトリ構造を書いてやります。

pkg:
  test:
    hoge.foo.bar:

パッケージのジェネレート (コマンド: pkgen)

$ pkgen
[generate] to pkg/test/hoge/foo/bar/

テンプレートの切り替え (コマンド: pkgen template)

$ pkgen template
? Select the package template you want to use.
@default(current) -> (Use arrow keys)
❯ @default 

プログラミング言語ごとのテンプレート切り替え (コマンド: pkgen lang)

$ pkgen lang
? Select the programming language you want to use.
ecmascript5(current) -> (Use arrow keys)
❯ @typescript 
  ecmascript5 
  ecmascript6 

テンプレートは幾つでも作成可能

pkgen templateコマンドは$HOME/.pkgen/templateディレクトリ直下のディレクトリを読み込みます。
なので$HOME/.pkgen/template/sampleというディレクトリを作りpkgen templateコマンドを実行すると
下記のようにテンプレートが追加されます。
ただし、テンプレートの中には最低でも一つ言語毎のテンプレートが含まれている必要があります。
空のテンプレートを選択しても警告が出るだけで選択する事は出来ません。

$ pkgen template
? Select the package template you want to use.
@default(current) -> (Use arrow keys)
❯ @default 
  sample 

まとめ

今回cliフレームワークはcacを使っています。
これまでcliはGoのurfaveなどを使っていましたが
Node.jsのcliフレームワークは簡単に選択肢やチェックボックスが実装でき
ユーザーの入力パターンを制限し簡単に安全なcliの実装が出来ることが分かりました。
Goでのcli開発もそれはそれでならではの良さがあるでしょうが
Node.jsでのcli実装もかなり優秀なようです。
何よりchalkやinquirerというライブラリのおかげでサクッとカッコいいのができます。
やはりカッコいいのは作る側としても自分の作ったものを継続的に育てていこうという
モチベーションが続くのでいいですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0