あおみかんのブログ

フリーランスのIT系エンジニア。ゲーム制作スタジオ4th cluster代表。

GAE/Goの基本的な設定の覚え書き

Go言語は昔(1.4まで?)はパッケージ管理の標準的な仕組みがなくて、1.7あたりでvendorディレクトリを必ず読むようになったらしい。 デファクトスタンダードは、今の所glideというものらしい。 godepsも良いみたいだけど、個人的に何となくglideの方が扱いやすく思えたので。

GOPATHを指定する必要があり、僕はautoenvを使う事にしたけど、何にせよこの後のプロセスを踏む前に必ず、作業ディレクトリがGOPATHに含まれてるようにする。

echo $GOPATH
/Users/akn/go:/Users/akn/Documents/TimeCard/time-card-gae

普通の $PATH と同様 : で区切っていいらしい。

で、とにかくディレクトリ構造が肝心。僕はこんな風にした。(srcなしとかも試したけど、srcがないと上手く動作しなかった)

your-app-dir
└── src
    ├── app.yaml
    ├── glide.lock
    ├── glide.yaml
    ├── main.go
    ├── server
    │   └── server.go
    └── vendor

主要なファイルの中身を晒しておく。

app.yaml

application: my-app
version: 0
runtime: go
api_version: go1

handlers:
- url: /.*
  script: _go_app

nobuild_files:
- vendor

skip_files:
- vendor/.*$

main.go

package main

import (
    "server"
)

func init() {
    server.Start()
}

良く分かんないんだけど、main.goから直接vendor以下のを読みに行くと上手く行かなかったので、server packageを定義して、そっちから読むようにしてる。

あとは以下で開発

goapp serve

もしくはデプロイ

goapp deploy

これだと覚え書きすぎて分かりにくいので、丁寧めの記事へのリンクを貼っておきます。 ただし、僕は goenv を使って app/srcでディレクトリを分ける方法はCan’t findとか言われてライブラリが読まれず、上手く行かなかった。

www.freegufo.com

qiita.com

qiita.com