license-generatorというLICENSEファイルを作成するコマンドラインツールを作りました。

機能的にはいくつかのライセンスから選んで、該当のLICENSEファイルを生成して現在ディレクトリに出力するだけです。

現在は次のライセンスをサポートしています

インストール

Rustで書いたCLIなのでCargoでインストールします

cargo install license-generator

使い方

$ license-generator --author <name> [LICENSE_TYPE]

[LICENSE_TYPE]:
- AGPL
- Apache
- CC0
- GPL
- LGPL
- MIT
- MPL
- Unlicense

Options:
  --author input author name

MITライセンスでライセンスを作成するなら、次のような感じでコマンドを叩くだけです。

license-generator MIT --author azu

おわりに

The Rust Programming Language読みながらRust勉強してる感じだとそんなに難しくは感じないけど、実際にアプリを書くとハマる系の言語だと思ったので、とりあえず何か書くためにlicense-generatorを書いてみた。

元々Rubyで書かれてたlicense-generatorを使ってたのだけど、ランタイム言語がいらないものに書き換えたくてライセンスジェネレータを選んだ。

でもバイナリの配布方法とインストール方法(curl | shみたいのとか)を簡単にやる方法(設定自体がめんどい)で簡単な方法がわからなくてcargo installになってる。

Cargoはできがいいんだけど、パッケージにnamespaceがなかったり、結構いい名前が既に更新されてないパッケージになってたりその辺ちょっと気になった。

あと、cargo publishする際にバージョンを手動で変更するのが大変なので、npm version {patch,minor,major}相当のやつかnprelease-itみたいなインタラクティブリリースするやつが欲しくて探したけど見つからなかった。

[cargo-release](https://github.com/sunng87/cargo-release)は近いのだけど、バージョンを上げてpublishするのではなくて、devをcurrentにしてpublishするワークフローになっていて、次の開発バージョンを最初から決めておかないとできないワークフローになっていて少し違うものだった。 `--dry-run`のメッセージで誤解してたけど、`cargo release {patch,minor,major}`はversionupしてからpublishをやってくれるみたいだった。
  1. pre-version
  2. npm version {patch, minor, major} # バージョン更新 & git tag
  3. post-version
  4. publish

というフローがしたかったけど、そういうcargoサブコマンドとかないのかな? というのがパッケージを公開する作業やってて思った疑問だった。

ドキュメントは翻訳(最新ではないけど)とかあったり、Cargoがテンプレ生成から実行/テスト、公開までプログラミングで面倒な部分を全部やってくれるので導入は楽だった。

あとRustのライブラリはマルチライセンスのパターンがやたら多い(Rustがそうだから?)ので、複数ライセンスの生成に対応とかするといいのかもしれない。

Pull Reuqest待っています。

license-generator MIT Apache --author azu

参考