morimorig3.com

SvelteとGoとDockerでTODOアプリを作ってみた感想

keyVisual

コソコソとGoの学習を進めていたのだけど、ようやく形になるものをひとつ作ることができた。

TODOアプリ

TODOアプリばかり作ってるけど、またTODOをテーマにして実装した。

今回はやることが結構変わっているので許されるはず。

以下、リポジトリのREADMEに書き殴った感想を転載。

感想

https://github.com/morimorig3/go_svelte_todo_app

学習を目的としたSvelteとGoによるTODOアプリです。Svelteはフロントエンド処理を担当させ、GoはTODOを管理するAPIを提供しています。双方のコンテナを作成しDockerのコンテナ間通信を行わせる。

Svelte

フロントエンドフレームワークとして、Svelteを触ってみたかったので選択。かなり直感的に書けるのとReactよりVueに近いみたい(Vueを触ったことがない)なので、Reactよりとっつきやすいと思った。

ただ、大規模なアプリケーションになると、1つのファイルが縦に長くなってしまって辛くなりそうな感じ。普段Reactを触っているせいでそう感じるのかも。Next触ったことない上、ReactはReact Nativeばかり触っているのでWeb API系に対する型の付け方が全然わからなかった。(FormDataとかFetch APIとか)

あと、やっぱり新しいフレームワークを触るのはおもしろい。しかし、SvelteKit使う必要はなかった。

事前学習

本格的に触り始める前に結構事前にさわったこと

実践Svelte入門はとくにオススメ

Go

Goは今回の製作で一番苦労した。なぜなら、これまでフロントエンド系の言語・環境しか触ってこなかったので知識ゼロからのスタートだった。

難しかったポイント

  • Go言語自体の理解
  • Go言語のパッケージ管理
  • httpリクエスト関連
  • サーバーサイドでのデータの取り回し
  • Go言語の設計

業務でJavaでも触っていれば苦労しないんだろうけど、どれもこれもはじめてで久しぶりにプログラミングの難しさを感じ、いい意味で焦りを感じることができた。

本当はタスク管理もDBサーバーもたてて、mySQLとかしたかったけど今回はそこまでいけなかった。個人的にはDBサーバーも大きな壁のひとつだ。今回のTODO管理はインメモリで再起動したら消える仕様で妥協した。クライアントサイドに持たせるのは何度もやってきたのでもういいかなと思った。

流石にあかんと思いmysqlでデータの永続化は実装した。ほとんど参考文献のまま写経したくらいのため内容が理解できておらず課題は山積・・。

クリーンアーキテクチャの本とか読んでも素晴らしさが理解できなかったけど、今回の実装をおこなった上で再読すれば少しは理解できるのかもしれないと思った。

事前学習

正直Goは完全初心者向けのドキュメントがかなり少ないから優良なものが少ない。今の自分のレベル(サーバーサイド何も知らない)にマッチしている参考書を見つけることができなかった。

Docker

Dockerは今回かなり理解できたように思う。完全には理解できていないけど、初歩的なところを体感しながら理解できたのは良かった。

Docker imageに必要なもの詰め込んで、Docker Composeで動かす程度の理解だが・・。開発するには環境構築が必要なのは変わりないけど、プロダクトの環境をそのままDockerに乗っけることができたので、今回はまんぞく。

Dockerとデプロイ周りのことがさっぱりなので、今後触れる機会があれば触ってみたい。サーバーサイドコードを本番環境にデプロイする日は来るのだろうか。

事前学習

とくになし。公式ドキュメントが結構充実している。

まとめ

こういうのはAPI開発っていうのだろうか。やってて楽しいのは楽しい。機能実装できたときより綺麗な設計で組み上げられたら達成感が高そうに感じた。

今回のやつは超簡易版なので、本格的なプロダクトになるとDBや認証やセッション管理も合ってそりゃクリーンアーキテクチャとかマイクロサービスとか、フロントエンドとは次元の違う概念が出てくるはずだわと思った。