ちょっと前にPHP+Laravelの環境準備を行いましたが、なんだかんだGo言語を試したくなりました。タイトルにGinが2つついてますがミスではありません。Gin(webフレームワーク)とGin(ホットリロード)です。今時な開発してたらHotReloadは必須みたいになってきましたね。最初無しでテストしてましたが結局準備してしまいました。
Goのインストール
いつも通りターミナルを開いて下さい。
brew install go
を実行します。終わったら、
echo 'export GOPATH="$HOME/go"' >> ~/.bash_profile echo 'export PATH="$PATH:$GOPATH/bin"' >> ~/.bash_profile source ~/.bash_profile
をそれぞれ1行ずつターミナルで実行します。
そしてターミナルを再起動後、
go version
で環境変数が正しく設定されているか確認します。
ここで一つ注意点なのですが、公式ページからインストーラをダウンロードする方法もあります。が、こちらだとIDE次第では開発時にエラーメッセージが表示されてしまう様になります。せっかくのMac環境なのでbrewしましょう。
とりあえずテストプロジェクト作成
とりあえずテスト実行したいので、goプロジェクト用のフォルダを好きなところに作成します。vsCodeでそのフォルダを開きます。そこで一旦、拡張機能タブにてGoを検索してインストールします。ここで、依存する拡張機能のインストールを求められた場合は実行して下さい。自分はこのタイミングではされませんでした。
フォルダ内にtest.goというファイルを作成し、
package main import “fmt” func main() { fmt.Printf(“hello, world!”) }
を記述して保存します。自分はこのタイミングで拡張機能のインストールを迫られました。
また、vsCodeで拡張機能をインストールした場合は再起動して下さい。謎のエラーが発生したりします。
保存・再起動したらターミナルブロックで
go run test.go
を実行します。するとhello, world が表示されるはず。
Gin(フレームワーク)の準備
Ginの説明は省きます。今Go使ってバックエンド作るならこれかなーと感じました。軽いし早いし使いやすいです。
一旦vsCodeは閉じてターミナルにて
go get github.com/gin-gonic/gin
を実行します。
こんな感じで、ホームディレクトリ/go/src/github.com/gin-gonic が存在すればオッケーです。
vsCodeを開き、今度はapp.goという名前でファイルを作成し、
package main import ( "net/http" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello World!!") }) r.Run() // gin run app.go }
をコピペして保存。
go run app.go
を実行して下さい。成功した感じだったら、
localhost:8080 にアクセス。ポート番号は違うものを指定されるかもしれませんがデフォルトだとこれなはずです。いずれにせよコマンドラインに出力されているので確認して下さい。ブラウザで見てみるとHello,Worldが表示されているはず。
確認後は一旦、Ctrl+Cで止めて下さい。
Gin(ホットリロード機能)をインストール
今のままだとコードを変更するたびにrunコマンドを実行する必要があります。しかし、もう1つのGinを入れると保存するたびにいい感じにしてくれるので、ブラウザを更新するだけでよくなるのです。
go get github.com/codegangsta/gin
を実行。今度はgo/bin/ginが存在することを確認して下さい。
これもパスが通っているか確認する必要があるので、
gin help
を実行してヘルプが表示されるか確認して下さい。出てこない場合はパスがうまく通っていない可能性があります。goインストールの部分を参考に、.bash_profileの確認、sourceコマンドの再実行を行って下さい。
実行できた場合はターミナルにて先ほどのapp.goが存在するディレクトリまで移動し、
gin run app.go
を実行します。localhost:3000 にアクセスすると表示されます。vsCodeで変更し保存後、ブラウザをリロードしてみましょう。
自分の環境だと、vsCodeでは何故かginコマンドが通りませんでした。パスの変更がうまく伝わっていないのか分かりませんが、とりあえずターミナルでは問題ありませんでした。
まとめ
いかがだったでしょうか。こうやって情報がまとまってさえいれば、比較的すんなり進んだかと思います。Goは比較的新しい言語なため、仕様変更も多く古い情報が淘汰されていなかったりします。例えば昔は開発プロジェクトもgo/binフォルダの中でないといけなかったり。今は今回試した様に、どこにあってもフレームワーク導入できますし、サードパーティなツールの使用もできます。
実戦で使っても大丈夫なのか、これから統合的に調べて判断して行きたいなと思います。次はAzureで動かしてみようかな。