ghqで管理されたディレクトリ構造でディレクトリを作ってgit initまでしてくれるツールを作った
Posted
手元のマシンでリポジトリを管理するときにghqを使うと勝手に統一感あるディレクトリ構成でリポジトリ管理してくれるので便利です。
しかし、自分でリポジトリを作ってなにかを開始する機会が多いと mkdir ~/src/github.com/himanoa/foobar
を毎回入力する必要がありちょっと不便です。
リポジトリ名を入力したらよしなにディレクトリを作って欲しいと思ってたので、勉強がてらにRustで簡単なCLIツールを作りました。 mkrepo
インストール方法
macOS用にhomebrew用の整備とかArchLinux向けにAURパッケージを公開しているわけではないので、インストールには cargo
が必要です。
次のコマンドでインストールすることができます
cargo install mkrepo
また、mkrepoは.gitconfigに特定のkey-value構造が存在していることに依存しています。そのため ~/.gitconfig
に次のような記述を追加する必要があります
[user]
name="あなたのなまえ"
[ghq]
root="~/src"
[mkrepo]
service="github.com"
つかいかた
Make project directory for ghq style. 0.0.1
USAGE:
mkrepo [FLAGS] [OPTIONS] <repository>
FLAGS:
-d dru run
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-a, --author <author> repository author name
-m <first_commit_message> first_commit_message name
-s, --service <service> service name
ARGS:
<repository> Repository name
mkrepo foobar
とかやると src/github.com/himanoa/foobar
が生成されて mkrepo -a himanoa-sandbox foobar
すると src/github.com/himanoa-sandbox/foobar
が生成される形です。github.com
が使えない企業戦士向けに mkrepo -s corp.repo foobar
とかやると src/corp.repo/himanoa/foobar
が生成されます。便利ですね。
オワオワリに
一年前にRustでWebApp書くのに挫折していて、それからあんまり書かなくなってしまった言語だったのですが、パターンマッチやif let
など書き味がよくいい言語だなぁといった感想でした。
でもやっぱりコンパイルエラーの解決だったりテストしやすい設計みたいなのを意識しだすと結構難しくて、https://github.com/himanoa/himanoa/issues/16 みたいなのを用意して、モチベーションが低下しないようにコードを書いてました。
今回はdry-run
を実行できるようにすれば自然とテストしやすい設計になるはずだ、と思いこんで事前に実行するコマンドの型のVecを生成する関数と、コマンドのVecを引数にとってシーケンシャルに実行していくアーキテクチャでやってみたのですが、これはあんまりうまく行かなかったです。
I/Oが絡む処理を実行する過程で、条件分岐などして実行するコマンドを変更したくなるパターンが発生してしまうと、コマンドビルダーでI/Oしないといけなくなってしまい、コマンドビルダーを純粋に保ってテストを書きたいのに、I/Oに依存しなくちゃいけなくなって辛かったです。
拍手ボタン