AppEngine/Go で dep を使って vendoring する時の構成
について、雑にメモ。
結論から先に書く
と、おおよそ、今の構造はこんな感じになっている:
{appname}/ → アプリケーションの root directory
dist/ → deploy する際の directroy
assets/ → 静的 assets
gopath/ → env GOPATH=/path/to/gopath する為の directory
src → ../../vendor への symlink
app.yaml → appengine の app.yaml
main.go → AppEngine/Go の main.go
src/
{sources} → AppEngine/Go で使う実装の中身
vendor/
{appname} → ../src への symlink
{deps} → github 等から dep で取ってきたファイル類
それで実際に開発している最中では、
{appname}/dist/gopath
をGOPATH
として指定した上で、各種コマンドを実行- これには
dep ensure -update
は 含まない direnv
みたいなのを使う場合、GOPATH
を自動設定する様にした方が便利かもしれない(要検証)
- これには
{appname}/vendor/{appname}
を{appname}/src
への symlink としている- こうすると、アプリケーションのコードから
import "{appname}/path/to/component"
で参照できる - あと、アプリケーション依存のファイルをすっきりとまとめられて便利
- こうすると、アプリケーションのコードから
- 各種コマンドの実行の際には、
npm
+node-saku
を使っている- 基本的には
saku.md
を書いて、そのコマンドの実行をnpm
で行うというスタイル - この辺りの toolchain は割と好みで選べば良いと思う
- 基本的には
とりあえず、僕は今、こういうディレクトリ構造で開発しているけど、これで困った事が今のところ無いので、 割と良い感じの構造になっているのでは? と個人的に思っています。
ただ、Application の source code の割り振り方については、とりあえず DDD(ドメイン駆動開発)とか、 そういう感じのヤツを参照した方が良いかもしれないじゃね? と思ってはいますが、僕がその辺り詳しくないので、
なんとなく、こういう感じで良いんじゃね?
的な構造でやっています。まぁ今現在の開発の進み具合から言って、MVC の内の View と Controller を事始めしたぐらいで、 Model のところまで辿り付いてないっつーのも有るのですけれどもね、この辺りについては。
あとはまぁ、僕は今回、 GopherJS で React + Redux っぽい何かを自前で実装していたりもしており、 かつ HTML は Golang 側の DSL でなんとかする、という方針を取っているため、 HTML とか JavaSscript とかを、 まったくもって直接は書いてない、と言う感じになっています。ただ、 CSS については、その SCSS で書いていたりもしますが。
まぁ、最近の 開発 している感じだと、そういう感じだよって話でした。はい。