土日月のgoの開発の進捗
- Docker-composeでMySQLの環境構築。Upの初期化の際に、SQLファイルにバグがあってエラーを起こして死ぬのでハマった。Sequel Proに先につなげて、そこでSQL文が正しいことを確認しながらすすめるのに落ち着いた。VScodeでSQLは書きにくい。変なところで赤線がひかれる。
- goからDBサーバーへの通信確認。ポートまわりやログインユーザの指定の仕方でハマった。
- goの"database/sql"パッケージなどを使って、databaseからSELECT文でデータをとってきてParseする部分も実装
- HTTP POSTでのSIGNUP機能の実装。Passwordの暗号化、databaseへの登録まで実装
- メンターとの面談。トークンを使った認証について、トークンの中にuseridがあるのがPasswordとちがうよいところ。公開鍵の話を思い出さないとイマイチ理解しきれなかった。セッションIDはなくてもよい。複数トークンを管理できるようにするのがよい(そのときのIDを入った順につけるとかならあり)。他サービスを使った認証を組み込むのが主流。自サービスはユーザテーブルをもち、発行されたトークンIDを管理すればよい。Twitter認証やFirebaseを使うと実装面でも楽だし、Passwordの再発行という面倒な実装もさけられるのがよい。
- 設計に関して、Fat Controllerやクリーンアーキテクチャという設計の考え方。データベースとのやり取りなど、別クラスに分離できるとよい。サーバーサイドでMVCというとき、Cはhttpの部分のみ、Vはjsonまで。ビジネスロジックとか多くがMになり、Mが肥大化するのが正しい。フロントエンドはまた別、Reduxとか別のアーキテクチャがある。SAPはアプリ全体の設計指針。
- 直近ハマっていた、ユーザ情報登録時のINSERT文で出るエラーについて、SQLのPlaceholderの話。$はPosgre、MySQLは?を使う。MySQL側のPasswordの型は今日実装していて足りないと気づいてなおした。
所感
Goの文法もSQLの文法もわからないまま手探りで勧めていたが、ようやく公式ドキュメントを読めるようになってきた。