THINKING MEGANE

「ほい、これ」ってファイルを渡せる Hoi というツールをつくった

PC間でのファイル受け渡しのときにファイルサーバを使うことがたまにありますが、OSによってファイルパスやその書式が違ったり、受け渡し用のディレクトリをつくるとか、ファイル渡したいだけなのに、なんだか小さなひっかかりがあってスマートじゃないなあといつも感じてました。

なので、もっと直感的に「ほい、これ」って渡せるツールをつくってみました。


Hoi

Hoiはファイルの受け渡しを簡単に行うためのコマンドラインツールです。Go言語で書かれており、HTTPファイルサーバを利用して機能を提供します。

ファイルを渡す

使い方は簡単でローカルのファイルパスをhoiコマンドの引数に渡すだけです。

$ hoi ~/Documents/hoge.txt

そうすると以下のような、ダウンロード用のURLが出力されます。

http://192.168.0.100:8081/h6un2x8zx6018xuhhn3bu7twwnf4ol1y/hoge.txt

これをIRCなりなんなりで相手に伝えてください。

仕組み

特に難しいことはしていません。主な処理はこういう感じです。

  • ファイルダウンロード用にHTTPサーバを起動する
  • HTTPサーバのDocumentRootに対して引数のファイルのシンボリックリンクをはる

見ての通り、シンボリックリンクさえはればどんなファイルでもダウンロード対象になりますし、HTTPSでもないので、
必ず信頼できるネットワーク上で使うようにしてください。

ファイルを消す

$ hoi --clear

で公開しているファイルのシンボリックリンクを削除します。

そのうち、定期的に消すような処理を入れようかなと思ってます。

デーモン化について

HTTPサーバのデーモン化、Supervisordとか使わず Hoi 単体だけでできるように、こんな感じのシンプルなやつにしてます。

func runAsDaemon() {
	cmd := exec.Command(os.Args[0], "--server")
	cmd.Start()
}

今のところ、PIDでしかHTTPサーバのプロセスにたどり着く手段がなくて、サーバのstatus/stopとかの実装をどうしようか思案中です。

Go言語でのデーモン化についてよい案をお持ちのかた、アドバイスお待ちしてます。


Go言語、HTTPサーバを立てるだけならすぐできてしまって便利ですね。

ファイルの受け渡しのためにローカルにHTTPサーバを立てるというのはある意味ぜいたくですが、全然負荷もかからないので、こんな風に使ってみるのもありかなとちょっと遊んでみました。

このエントリーをはてなブックマークに追加