巨人の足元でたじlog

そうして言葉を軽んじるから――― 君は私の言葉を聞き逃す

GoとNext.jsを使った個人開発アプリケーションの構成を構想する

参考記事①

qiita.com

Next.jsはVercelにデプロイ
GoはCloudRun
RDSはCloudSQL
という構成。うん。これが一番シンプルでいい気がする。 ほかも見てみます。

参考記事②

zenn.dev

Go × Next.js × GraphQL というパターン。
これもまあある構成な気がしています。
これの場合、GraphQLってリソースって必要なんでしょうか?
GraphQLの位置づけがまだわかっていないです。
しかし、一度に色んな技術を盛り込みすぎると大変になりそうなので、一旦はGraphQLはなしで開発を進めてみて、リリースした後にGraphQLを入れ込んでみるのがいいかなと思っています。
なにかのつらみがあってGraphQLをみんな導入しているはずなので、そのつらみを一回小規模なサービスで経験しておいてから、だからこれが有るといいんだよと言えるようにしてみたいためです。

参考記事③

zenn.dev

GraphQLは後回しにしようと思いましたが、この記事を見て半日ほどで学習したと記載あったので、一度どんなものなのかの概念だけ把握しておくのはありかなと思いした。
と思ったんですが、GraphQLの周辺ツールに1〜2週間くらいかかっていたので、やはり一旦保留です。
いや、GraphQLの雰囲気だけ掴んでおいて、実装はまたの機会ってことにするのが落としどころかな?

結論

ということで、シンプルにGo + Next.jsという構成にしてみたいと思います。 参考記事①の通りに

Next.jsはVercelにデプロイ
GoはCloudRun
RDSはCloudSQL

という構成でやってみようかと思います。

Goのフレームワーク選定

参考記事①

qiita.com

自前でスクラッチで書いてみるのもありか。
しかし、初手でスクラッチで書くのは諸刃の剣だなって気がしています。
挙動を理解できるので良いと思うのですが、いかんせん開発スピードが出ずにモチベーションが下がる可能性があります。
かつ、フレームワークが隠蔽してくれている処理をいちいち書く必要があるので、考えることが多いです。それ故に勉強にはなるのですが。
なので、今回はやはりフレームワークを使用したいと思います。
フレームワークをある程度使えるようになってから、スクラッチで実装してみて、そのときにフレームワークで色んなことをやってくれていたんだなぁとしみじみと感じるスタイルを取ることにします。

参考記事②

qiita.com

以前も調べていてGinが覇権穫りつつあるのかなと思っていましたが、再度確認。
これは思考停止でGinでいい気がします。
一応、Next.jsとGinの組み合わせで罠とかないかなと調べてみます。
APIサーバーとして使うので、サーバーサイドのフレームワークはNext.jsからした関係ないと思いますが。

参考記事③

zenn.dev

Gin使ってますね。
というかこれ、開発環境と本番環境のインフラとかも説明してくれているので、すごく良さそうですそのあたりはまだちゃんと見ていないですが、あとで役立ちそうです。

ということで、GoのフレームワークはGinで 進めてみたいと思います。

どういう順番で手を付けるか

自分の現場としては、Goはローカルでスクラッチで簡単なTodoアプリは作ったことある。
Next.jsは全くのはじめまして、Reactはチュートリアルレベルだけかじったことがある、TypeScriptはReactとNestJSをちょっと触ったことがあるので、そのときになんとなく触ってみた。
くらいな感じです。
そもそもの開発の流れとしては、一回Next.jsとGoを疎通だけできるような状態にして、そこからページ単位(API単位)で機能を作っていく感じが正しいのかなって気がしています。
なんとなくフロント側で使いたいAPIを定義(想定)して開発して、それに合うようなAPIをバックエンドで開発するという流れなのかなと言う気がしています。
でも、そうするとフロントの動作確認とかはどうするんだろう?って気もしてます。
モックのデータだけ返すようなAPIを一時的にバックエンドでベタ書きの決め打ちとかで作って動作確認→問題なさそうならバックエンドで実装という流れなのかな?
いや、今回はとりあえず個人開発なので、両方同期的に開発できそうだからそこまで気にしなくてもいいっか。
railsのようなフルスタックフレームワークでもerbとcontrollerも両方いじりながら開発するので、そのノリで。
ただ、フロントとバックエンドでチームが分かれているサービスとかではどう進めていくのか気になるところです。
フロントが先な気がするな。
しかしここにGraphQLとかも入ってくるといよいよわからなくなってくるな。みんなで開発するのって大変だなぁ。

学習方法

Go(Gin)とNext.jsはそれぞれ独立して学習を進めて問題なさそうに思います。
一旦Next.jsを一通りやってみて、その後Ginも触る。
それが終わったらもうサービスの開発に取り掛かりたいと思います。

ようやく進められそうです。

10月末までにリリースを目指して開発を進めていきます!

今後使っていきたい技術

メモ書き程度に。
言葉の粒度はまちまちですが、以下を触ってみたいなと思っています。
どこかのタイミングでプロジェクトに入れ込めれば良いなと構想しています。
- GraphQL
- Firebase
- Go
- React(TypeScript)
- GCP
- テスト
- gRCP
- クリーンアーキテクチャ
- テスト駆動開発
- ドメイン駆動開発
- GithubActions
- k8s