iPhoneで Grafanaの グラフを 参照できる アプリ Grafanizer 作ってます。 詳しくは こちらへ

任意のファイルを切り替えるFileSwitcherってのを作った

Jan 6, 2017  
#dev

これは何?

タイトルだけだと何を言ってるのか良くわからないですが、ハードリンクを活用して任意のターゲットのファイルを容易に切換えるツールを作りました。

nobuhito/FileSwitcher

FileSwitcher can switch the file of the specified path with hard link.

https://github.com/nobuhito/FileSwitcher

どういうときに使うかというと、あるアプリの設定を切換えて立ち上げたいというときとかにピッタシです。

作ったきっかけは郵便局が出してる年賀状印刷アプリの住所録を切り替えるためでして、そちらの詳しい話は こちら で紹介してます。

いちおう汎用的に作ったので、例えば開発環境と本番観葉用に設定ファイル等を切り替えるときにも使えるかと思います。

使い方

例えばターゲットとして /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/hogehogehoge のハードリンクが貼られるのでターゲットのファイルを切換えて使うことができます。

また、 FileSwitcher list とすれば現在セットされているファイルに * がつくので、現在のターゲットファイルを知ることもできます。

内部的な話

はじめはGUIでの切換えを目論んでいました。でも、やっぱりGolangでのGUIってのは数年前からあんまり進捗ありませんね。ってことで、初めてCLIのアプリを作ってみました。

今回は cobra というライブラリを使ってみたのですが、これなかなかいいですね。

spf13/cobra

A Commander for modern Go CLI interactions

https://github.com/spf13/cobra

サブコマンドを追加するときに別ファイルになると管理が面倒(リポジトリ的に)になってきたので、最後は全部 main.go にまとめちゃいましたけど。

あとクリティカルなところで使いたい(家族の年賀状だけどw)ので、いつもよりテストも気合い入れて作りました。これくらいテストしておけばデータが飛ぶということはめったにないでしょう(それでも利用は自己責任でお願いします)。

ほかにトピック的なところでは、GitLabCIをつかってテストとビルドを行い、リポジトリをGitHubにもミラーさせています。GitLabでも一般公開してますので、GitHubにミラーさせる意味もないのですがIssueやPullReqとかはGitHubのほうが期待できるかなと思いまして。

また、.gitlab-ci.yml はGitLabでGolangのCI環境を構築するサンプルにもなると思います。内容的には、DockerHubからGolangのイメージをダウンロードし、 go get でライブラリをインストール、 go test が通れば go build で各環境向けにコンパイルするといったフローを作ってます。

FileSwitcher_CI_Flow


初めは郵便局の宛名データ管理をしようと思って作り始めたのだが、ちょっと汎用的に作ったので各種バッチ処理とかそこそこ需要はあるんじゃないかな?と思う。もうすでに車輪はたくさん作られてるとは思うけど。