Go言語でAssetsもシングルバイナリ化に便利な packr パッケージ
2020.11.25
この記事は最終更新日から1年以上が経過しています。
どもです。
これまた、お久しぶりな。。
は、早いですね。
もう11月も終わりそうではないですか!?
振り返れば、最近はスプラトゥーンしかやってないな。。(反省)
そんなこんな今回はGoに関する記事をと。
思い返せば、Goの記事(Qiita)書いたのも4年前ですよ!本当に時の流れは早いな。。
Rubyの会社のフロントエンドエンジニアが、GolangでAPIサーバーを開発してみる。
久々に触ったら、「あれこれどうだっけ?」状態でした。w
なので、再度復習の日々。
と言う事で、Go言語はCLIを容易に作成出来ると言う事で、以前 node.jsで作成したCLIの一つの「APB CLI」をGo言語で作成しなおしました。
そこで、「assetsファイル(htmlとかcssとか)をバイナリ(実行ファイル)に固めてシングルバイナリにしたいなぁ。。」
と思った際、以前だったらgo-bindataを使用するのが一般的だったみたいですが、メンテナンスもされなり別のパッケージが使われていると言う事なので、色々ある中で「gobuffalo/packr」を使用してみました。
packr
https://github.com/gobuffalo/packr
以下の様に、packr.NewBox() メソッドの引数にtemplatesのパスを指定しBoxを作成して、
box := packr.NewBox("./templates")
この様に、FindStringメソッドでString型(ファイル内容を文字列)でファイルを取得することが出来ます。
html, err := box.FindString("index.html")
こちらで、バイナリを取得する事が出来ます。
html, err := box.Find("index.html")
もちろん、HTMLのみならず、CSSファイルも可能です。
Findや、FindString以外にも、box.List()でファイル検索をイテレータで取得することも可能で、超便利でした。
for _, file := range box.List()
この様に、イテレータですべてのファイルを取得し、ファイル作成も簡単に行えます。
for _, file := range box.List() { s, err := box.Find(file) err = ioutil.WriteFile(file, s, 0644) if err != nil { log.Fatal(err) } }
NewBoxで作成したassetsに関しては、
$ go build
した際に一緒にバイナリ(実行ファイル)に含まれる形となります。
そのほかも触っていこうと。