Node.jsでWebアプリ開発体験してる

URLにタグを付けるやつ

8月頃からAmazon API Gateway, AWS Lambda, Electronと、徐々にJavaScriptを触る機会が増えてきて結構面白くなってきたので、サーバサイドでの開発も試してみようと思い、一昨日から暇を見つけて簡単なWebアプリをつくってみてる。いまは習作としてURLにタグを付けられるだけのサービスをつくってみてる。コメントとか無くて、タグで情報整理して互いの役に立つことだけでコミュニケーションする。どうしても会話したかったらタグで会話すれば良さそう。公共性のある徳の高いタグをつけた人には何らかの承認をしてあげたいけどまだ特にアイデアが無い。構造的には、ユーザ入力があるし、データは永続化する必要があるし、そこそこ検索も必要だし、キャッシュのしがいもあるし、ログイン機能があるのでセッション管理とかも考えられて、練習に丁度よい。

凝りすぎて進捗ダメ

タグを付ける機能すらまだ不完全にしか実装できてなくて、NPMのインストール作業からはじまり、NVM入れたり、BabelやBrowserify、Webpack、Grunt、Gulpの選定をしたりしたあと、Node.jsのhttpモジュールやconnect、express、koa、sailsなどのフレームワークを一通り見、RDBを使いたいのでBookshelfやSequelizeなどのORMを見比べ、ディレクトリ構成やアプリケーションの分割方法を模索しつつ、Sassのコンポーネントの分割方法を考えながらEDJOとか最近どうなったかなとか調べつつ、サバクラでテンプレート共有できるようにVirtual DOMの類を導入したり、クライアント側のUIコンポーネントに使うのにRx導入したり…とかいろいろやってたらほとんど進捗してなかった。

自分で規約決めるの楽しいのでは

Express というやつを使ってアプリをつくってみてて、Rackぐらいの薄い機能しかないので、自分でいろいろ設計できて面白い。普段はよくRuby on Railsを触ってるんだけどアプリケーションの分割方法に色々不満があって、例えばbefore_actionやafter_actionやrescue_fromって全部Rack middlewareで実現すれば良いのにとか、Controllerっていう単位の分け方に曖昧なところがあってモヤッとしたりとか、1 action 1 classの方が良くないかと思うこともあったり、継承でツリー構造にしながらmixinでネットワーク構造にもするし巧みにoverrideもするみたいな方法取られると見通し悪くて嫌だなあとかいろいろ思っていたので、一度ゼロから考えなおして自分で納得のいくやり方を探るのはわりと楽しい。

そこそこ夢があって良い

最近Cycle.jsを触る過程でRxJSの使い方を覚えたんだけど、データベースや外部のAPIとの非同期通信が案外多いので、サーバサイドで使ってみると意外と相性が良い (※個人の感想であり実際の効果を保証するものではありません)。Promiseと組み合わせて使うとそれなりに捗る気がする。サーバサイドとクライアントサイドでテンプレート共有できてるので、それなりにSEO対策しながらVirtual DOM使うみたいなこともできて良い。あとAmazon API Gateway + AWS Lambdaの環境で動かすことも若干考慮しながらつくってるので、うまくいけばEC2とかじゃなくてそういう環境で動かすこともできそう。セッションやファイルシステムなどの扱いに気を付ければ恐らく上手く動くと思う。