動機

ゲームが作れるところに転職がしたい。
サーバサイドの技術を極めたい。
ということでなにやろうかなと迷っていた。
そこで久々にTechTrainを利用してメンターの方と話しながら作っていくことに。
モチベーションの維持にも繋がるし、いい目標にはなると思った。
ミッションはまあまあの数があるのだが、今回の目的に一番沿っていたのがこれ。
Goはほぼ触ったことがないとはいえ、APIサーバーをただ動くように組むだけならできるので、学習ポイントを絞って取り組んでいく。

リポジトリ
https://github.com/Tim0401/ca-tech-dojo-go

ミッション
https://techbowl.co.jp/techtrain/missions/12

ポイント

このミッションをする上で何点か重点的に学ぶポイントを決めて望んだ。
主に私の知識が足りないと思っている部分。
知識が足りない=正しい方向も分からない
なので、メンターさんからアドバイスを重点的に頂く部分でもある。

アプリケーション全体の設計

いわゆるアーキテクチャを学ぶこと。
今回はレイヤードアーキテクチャを意識して組んでいたら、最終的にクリーンアーキテクチャに向かった形。
層ごとに役割を分けること、依存性を片方向にすることを意識していたらそうなった。

実務に耐えうるアプリケーションを目指す

主に継続して開発できるようなコードを維持することと、パフォーマンス面を計測ツールを絡めて改善すること。
実際に運用するわけじゃないので(このアプリの運用とは)、条件を変更しての負荷試験を行っていく形となる。
マスタデータをメモリに載せたり、Redisを用いた高速化などを試す。
あとはメモリの確保の仕方などもあって気にすることはたくさん。

テストを書く

実務に耐えうる〜という文脈に含まれる気はするが、Goといえばテスト。
書きやすいのは間違いないので、テストをしやすい設計共々気をつけていく。

実装の流れ

1~2ヶ月かけて実装していった。
主なコードの変遷と考えていたことを記す。
基本的な実装順はミッション概要に依るのでミッションURL参照。
今回は外部のライブラリをできるだけ導入しない形で進めたので、ルーティングなどもnet/httpを素で用いている。
今回のミッション範囲に限るなら、少し面倒なのは確かだが十分実用的だと感じた。
実際使うならgormとかecho or ginとかsql-migrateとかが定番かも。
色々参考URL載せてます。ありがたみが深い。

環境構築+Go事始め

まずはお決まりの環境構築。
最初はGoもDocker内で動かす形を取ろうとしていた。
しかし、デバッグ環境を作るのがややこしいこと、WindowsでもMacでもGo環境を構築するのが容易で差異も少ないこと、メンターさんの現場でもローカルで開発していることなどからGoの環境はローカルに作ることにした。
よってDocker内にはMySQLとPHPMyAdminだけ入れてローカルからコンテナ内のDBを使う形に。
Docker+MySQLはだいたいこれ。
https://qiita.com/A-Kira/items/f401aea261693c395966
VSCode+Goのデバッグ環境はこれ。
https://qiita.com/momotaro98/items/7fbcad57a9d8488fe999

あとは、Goのアプリケーションを作る上での基礎的なディレクトリ構造を軽く学ぶ。
cmd/アプリ名配下にmain.goを配置し、そこをエントリーポイントとする。
main.goはできるだけシンプルにして、pkg/アプリ名に実際の処理を書いていく。 この辺は https://github.com/kubernetes/kubernetes も参考にしながら。

本来は1記事にまとめて書く予定だったのだが、次の項が長くなりすぎたので急遽分割。
学んだことはできるだけ文字に起こしておきたいね。

次回: (2) アプリケーション設計