喫煙本数を監視しあうSNSをGoで作った

Webアプリというにはだいぶ簡素。リポジトリはこれ。

https://github.com/guricerin/stop-now-smoking

サイトはこれ。URLを見ればわかるが、Heroku上にデプロイしている。

https://stop-now-smoking.herokuapp.com/

構成

Go + HTML。デザインにBootstrapを採用し、一部プラグインにJavaScriptを使っている。「Goなら手軽にバックエンドを組める」らしいという理由でGoを選択。
おれはJavaScript、というか動的型付け言語が苦手なので自分で書いたのはGoとHTMLだけ。Webサーバが受け付けたURLに対応して練り上げたHTMLをクライアントに返す方式。そのためバックエンド・フロントエンドが厳密に分かれておらず、若干古臭い構成なのは否めない。

2022-03-31 追記 : このような構成のWebアプリをMPAと呼ぶらしい。

動機

おれは今までWebアプリを作ったことがなかった。業務で関わったことはあるが、既存の業務システムを別のフレームワーク上に移植するというものだったので、ゼロから開発したとは言い難い。なもんだからデータベースの知識も非常におそまつ。個人的に作ったものと言えるのは静的ページのみ。
ネット通信が飛び交ってるこの時代に上記のような技術経歴なんてプログラマとして正直どうよ?と思ったので、作ってみようという感じ。
「喫煙本数を記録する」という機能にしたのは、単におれ個人が使いたかったからだ。で、せっかくSNSにしたのだから、おれと同じくヤニカスの知人数名にこの自作アプリを紹介した。

Go入門

Goの文法学習には『A Tour of Go』というのが定番らしいので、それをささーっとこなした。

https://go-tour-jp.appspot.com/welcome/1

基礎文法マスターからWebアプリ作成への橋渡しには以下の書籍を参照した。達人出版会で購入したPDF版で計392ページ(手軽とは)。

https://www.marlin-arms.com/support/goweb/

GOMODULEのない時代に出版されたものなのでそこだけ少し面倒だったが、ほとんどの内容はためになった。よく使用されるライブラリを紹介してくれているのは初心者には大きい。
とくにセッション管理やクッキー制御の部分は大いに参考、というか丸パクリしている。

Goに対する個人的感想

良い点

  • 静的型付けなのに動的型付け言語感覚で書ける。この感触だけならF#に似ている。
  • ビルドはっや。なんじゃこのはやさ。しょぼいコード量という点を抜きにしてもはやい。

悪い点

  • =:=を分けている意味がわからない。=に統一するほうがどう考えても簡潔だと思うが、なにか理由があるんだろうか。
  • 代数的データ型はともかく列挙型すらない。iotaのなんちゃって列挙型で代用しているが、だいぶ不安。

GoとRust

GoとRustはなにかと比較されている。両方書いてみて感じたが、これらの用途ってまるで違うからわざわざ比較する意味がわからん。
GCがある以上、Goでのシステムプログラミングは無謀だろうし、もっと上のレイヤーを複雑なトリック抜きで多人数で開発するための言語だと思うんだけど。