これは何?
タイトルだけだと何を言ってるのか良くわからないですが、ハードリンクを活用して任意のターゲットのファイルを容易に切換えるツールを作りました。
nobuhito/FileSwitcher
FileSwitcher can switch the file of the specified path with hard link.
どういうときに使うかというと、あるアプリの設定を切換えて立ち上げたいというときとかにピッタシです。
作ったきっかけは郵便局が出してる年賀状印刷アプリの住所録を切り替えるためでして、そちらの詳しい話は こちら で紹介してます。
いちおう汎用的に作ったので、例えば開発環境と本番観葉用に設定ファイル等を切り替えるときにも使えるかと思います。
使い方
例えばターゲットとして /path/to/hoge
(Windowsだったら c:\path\to\hoge
に読み替えて)のファイルを切換えたい場合は、
git clone https://github.com/nobuhito/FileSwitcher
cd FileSwitcher
go build
cd ..
mkdir hoge
cd hoge
cp ../FileSwitcher/FileSwitcher ./
FileSwitcher init -t /path/to/hoge
とすることで準備完了です。
init
することで default.xxx
ができますので、あとは好きなだけ default.xxx
のコピーを作ることができます。
切換えたいときは FileSwitcher set hogehoge
とすれば /path/to/hoge
に hogehoge
のハードリンクが貼られるのでターゲットのファイルを切換えて使うことができます。
また、 FileSwitcher list
とすれば現在セットされているファイルに *
がつくので、現在のターゲットファイルを知ることもできます。
内部的な話
はじめはGUIでの切換えを目論んでいました。でも、やっぱりGolangでのGUIってのは数年前からあんまり進捗ありませんね。ってことで、初めてCLIのアプリを作ってみました。
今回は cobra
というライブラリを使ってみたのですが、これなかなかいいですね。
spf13/cobra
A Commander for modern Go CLI interactions
サブコマンドを追加するときに別ファイルになると管理が面倒(リポジトリ的に)になってきたので、最後は全部 main.go
にまとめちゃいましたけど。
あとクリティカルなところで使いたい(家族の年賀状だけどw)ので、いつもよりテストも気合い入れて作りました。これくらいテストしておけばデータが飛ぶということはめったにないでしょう(それでも利用は自己責任でお願いします)。
ほかにトピック的なところでは、GitLabCIをつかってテストとビルドを行い、リポジトリをGitHubにもミラーさせています。GitLabでも一般公開してますので、GitHubにミラーさせる意味もないのですがIssueやPullReqとかはGitHubのほうが期待できるかなと思いまして。
また、.gitlab-ci.yml
はGitLabでGolangのCI環境を構築するサンプルにもなると思います。内容的には、DockerHubからGolangのイメージをダウンロードし、 go get
でライブラリをインストール、 go test
が通れば go build
で各環境向けにコンパイルするといったフローを作ってます。
初めは郵便局の宛名データ管理をしようと思って作り始めたのだが、ちょっと汎用的に作ったので各種バッチ処理とかそこそこ需要はあるんじゃないかな?と思う。もうすでに車輪はたくさん作られてるとは思うけど。