LICENSEファイルを生成するコマンドラインツールを書いた
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がなかったり、結構いい名前が既に更新されてないパッケージになってたりその辺ちょっと気になった。
- crates.io: Package Groups · Issue #975 · rust-lang/cargo
- Crates.io package policies - internals / policy - Rust Internals
- Cargo crate name reservation spam : rust
あと、cargo publish
する際にバージョンを手動で変更するのが大変なので、npm version {patch,minor,major}
相当のやつかnpやrelease-itみたいなインタラクティブリリースするやつが欲しくて探したけど見つからなかった。
- cargo-version-cli - Cargo: packages for Rust
- cargo-bump - Cargo: packages for Rust
- sunng87/cargo-release: Cargo subcommand “release”: everything about releasing a rust crate.
cargo-releaseは近いのだけど、バージョンを上げてpublishするのではなくて、devをcurrentにしてpublishするワークフローになっていて、次の開発バージョンを最初から決めておかないとできないワークフローになっていて少し違うものだった。
--dry-run
のメッセージで誤解してたけど、cargo release {patch,minor,major}
はversionupしてからpublishをやってくれるみたいだった。
- pre-version
npm version {patch, minor, major}
# バージョン更新 & git tag- post-version
- publish
というフローがしたかったけど、そういうcargoサブコマンドとかないのかな? というのがパッケージを公開する作業やってて思った疑問だった。
ドキュメントは翻訳(最新ではないけど)とかあったり、Cargoがテンプレ生成から実行/テスト、公開までプログラミングで面倒な部分を全部やってくれるので導入は楽だった。
あとRustのライブラリはマルチライセンスのパターンがやたら多い(Rustがそうだから?)ので、複数ライセンスの生成に対応とかするといいのかもしれない。
Pull Reuqest待っています。
license-generator MIT Apache --author azu
参考
お知らせ欄
JavaScript Primerの書籍版がAmazonで購入できます。
JavaScriptに関する最新情報は週一でJSer.infoを更新しています。
GitHub Sponsorsでの支援を募集しています。