--- title: echo 初心者でも簡単!! echo で扱うアセットファイル群を簡単にバイナリにまとめて使ってみる tags: Go author: codehex slide: false --- 最近 Go の web framework である [github.com/labstack/echo](https://github.com/labstack/echo) を使ってアプリケーションを作ることが多くなってきました。昨日 echo で静的ファイルをバイナリに突っ込みたいなと考えた時、gin なら [github.com/gin-contrib/static](https://github.com/gin-contrib/static) があるのですが、 echo は自前で書かないとありませんでした。そこで、「パクればええやん」と思いついて出来上がったのがこちらになります。 > Static middleware for echo web framework(golang) [https://github.com/Code-Hex/echo-static](https://github.com/Code-Hex/echo-static) 早速使ってみましょう。 # 使ってみる mkdir echo && cd echo を実行した後、このようなディレクトリ構造を用意します。 ``` . ├── assets │   ├── gopher.png │   └── index.html └── main.go ``` index.html はこんな感じです。 ```html:index.html Echo!!

Hello, World gophers!!

``` gopher.png です。 ![gopher.png](https://qiita-image-store.s3.amazonaws.com/0/118068/774ff336-2f6e-c9fb-09e4-326d48056530.png) か、かわいい!!!!! ここで 次のような main.go を作成しましょう。 ```go:main.go package main import ( static "github.com/Code-Hex/echo-static" assetfs "github.com/elazarl/go-bindata-assetfs" "github.com/labstack/echo" ) func main() { e := echo.New() e.Use(static.ServeRoot("/static", NewAssets("assets"))) e.GET("/ping", func(c echo.Context) error { return c.String(200, "test") }) // Listen and Server in 0.0.0.0:8080 e.Start(":8080") } func NewAssets(root string) *assetfs.AssetFS { return &assetfs.AssetFS{ Asset: Asset, AssetDir: AssetDir, AssetInfo: AssetInfo, Prefix: root, } } ``` そして [go-bindata](https://github.com/jteeuwen/go-bindata) を次のように実行してみましょう。 go-bindata -o bindata.go assets/... こうすると、ディレクトリ構成は次のようになるはずです。 ``` . ├── assets │   ├── gopher.png │   └── index.html ├── bindata.go └── main.go ``` それでは `go build` を実行してバイナリを作りましょう。すると `echo` という名前のバイナリが出来上がるはずです。 # 実行 ./echo ブラウザで `127.0.0.1:8080` にアクセスしてみましょう。 `{"message":"Not Found"}` のようなメッセージが表示されるはずです。 しかし、main.go のファイルをもう一度見てみましょう。 ```go e.Use(static.ServeRoot("/static", NewAssets("assets"))) ``` とありますね! ということは `127.0.0.1:8080/static` へブラウザでアクセスしてみましょう! 可愛いページが表示されますね!! これは `127.0.0.1:8080/static` にアクセスした時、 `assets` ディレクトリ上に置かれているファイルへアクセス可能にするという意味のコードです。 つまり、`index.html` へアクセスしたい場合は `127.0.0.1:8080/static` もしくは `127.0.0.1:8080/static/index.html`、gopher.png にアクセスしたい場合は `127.0.0.1:8080/static/gopher.png` へアクセスすればいいのです! # まとめ echo でもめっちゃ簡単にアセットをバイナリにまとめて、ブラウザなどからアクセスすることができる。