ghqで管理されたディレクトリ構造でディレクトリを作ってgit initまでしてくれるツールを作った

手元のマシンでリポジトリを管理するときに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に依存しなくちゃいけなくなって辛かったです。

欲求ボタン