Go言語とTypeScriptの勉強がてらにTodoWebアプリケーションを作った。
Github : https://github.com/akira-kuriyama/todo-app--golang-and-typescript
デモ: http://demo.todo.st-marron.info/
- 使った技術
- サーバーサイド
- Go言語(フレームワークは使ってない。最初はフレームワーク使わないほうがその言語の理解が深まると思っているので)
- Go言語の外部ライブラリは
- mattn/go-sqlite3(Todo情報はSQLiteに保存している)
- BurntSushi/toml(TOMLという設定ファイルフォーマットを読み書きするやつ)
- PuerkitoBio/goquery(スクレイピングが捗るやつ)
- pilu/fresh (ソースの変更を検知してGoアプリを自動で再起動してくれる。開発時にとても便利。)
- フロントエンド
- TypeScript
- Semantic-UI (CSSフレームワーク)
- JSのライブラリは
- es6-promise.js、handlebars.js、moment.js、jQuery、Masonry.js(タイル上に並べるライブラリ)
- サーバーサイド
あとnginxは静的ファイル配信のためにリバースプロキシとして使っていて、ビルドはDockerでやっている。 なのでhttps://github.com/akira-kuriyama/todo-app--golang-and-typescript#install にも書いたけどgit cloneしてdocker buildしてdocker runすればひと通り動くようになっている。 ちなみにデモサイトのサーバーはDigitalOceanのサーバーを使っている。1ヶ月$10のやつ。($5のやつはDocker動かすにはメモリが足りなかった)
Go言語の感想
- 大規模Webアプリ開発には向いてなさそう(素直にScalaやRubyを使ったほうが生産性が出そう)。
- ツールとかミドルウェアの開発には向いていると思う。速いしポータブルだし。
- 型の継承がないし、ジェネリックもないし、例外機構もないし、enumもないし、三項演算子もないし、色々ないけどベタに書けばなんとかなる。
- 標準ライブラリ(あとは外部ライブラリも)は揃っているのでやりたいことには困らない。
- 型チェックや使ってない関数やimportの指摘はありがたいけど、ちょっと厳密過ぎて萎えるときがある。
- go fmt(Go標準ソースコードフォーマット)は素晴らしい。こういうのは言語側で提供してくれると(スペース派とタブ派とかの)争いがなくなって良い。あとインデント修正コミットとかなくなるのでバージョン管理システムに優しい。
- GoroutineやChannelは(TodoWebアプリでは使ってないけど)簡単で便利でこれだけでもGoを使いたい場面があると思う。
TypeScriptの感想
- オブジェクト指向言語をやってた人なら凄くとっつきやすい。クラス、インターフェース、継承、アクセス修飾子等々便利なものがひと通り揃っている。
- 型チェックは有用。あとどんな型のオブジェクトを渡せばいいかが明示できるのが凄くいい。たとえば以下のように
show(options)
っていうメソッドだとoptionsに何を渡せばいいかソースを読まないとわからないが、show(options:{message:string; undoCallback?:()=>void})
のように型情報があると何を渡せるかがすぐに分かる。 - 型のチェックがあるので外部ライブラリを使う場合その外部ライブラリの型情報が書かれたファイルが必要だけど、 https://github.com/borisyankov/DefinitelyTyped に大体メジャーなのはある。あと自分でも簡単に型情報は書けるので問題ない。
- コンパイルされた結果のJSが綺麗。人間が読めるし、最悪TypeScriptを捨てる場合でもコンパイル結果のJSはそのまま使える。
- 使っていて特に不満点は見つからなかった。 TypeScriptがデファクトスタンダードになってほしい。
Go言語を勉強する際に参考にしたサイト
- http://go-tour-jp.appspot.com/#1 A Tour of Go
- http://golang.jp/ プログラミング言語Goの情報サイト
- http://www.geocities.jp/m_hiroi/golang/index.html M.Hiroi's Home Page / Go Language Programming
- 書籍はいいのがなかったので買わなかった。
TypeScript言語を勉強する際に参考にしたサイト/書籍
- http://www.typescriptlang.org/Handbook 公式サイトのドキュメント
- http://tatsu-zine.com/books/typescript-reference TypeScriptリファレンス (Amazonの評価はなぜかあんまり良くないですがひと通りの仕様の解説と筆者の見解が載っていてとても参考になるのでお薦めです。Kindle版は検索ができず文字もぼやけるので、達人出版会で買ったほうがよいかと思います)
- その他感想
- 雑なTodoWebアプリを作るつもりが凝ってしまった。
- JSのほうはReact.jsで書き直したい。
- Go言語書いてるとRubyが恋しくなる。
- DockerはDisposableで便利。