読者です 読者をやめる 読者になる 読者になる

Go言語とTypeScriptでTodoWebアプリを作った

Go言語とTypeScriptの勉強がてらにTodoWebアプリケーションを作った。

Github : https://github.com/akira-kuriyama/todo-app--golang-and-typescript

デモ: http://demo.todo.st-marron.info/

あと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アプリ開発には向いてなさそう(素直にScalaRubyを使ったほうが生産性が出そう)。
    • ツールとかミドルウェアの開発には向いていると思う。速いしポータブルだし。
    • 型の継承がないし、ジェネリックもないし、例外機構もないし、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がデファクトスタンダードになってほしい。


  • その他感想
    • 雑なTodoWebアプリを作るつもりが凝ってしまった。
    • JSのほうはReact.jsで書き直したい。
    • Go言語書いてるとRubyが恋しくなる。
    • DockerはDisposableで便利。