ちょっと前こんな記事がブクマを集めていた。
JavaScript プログラマの職種は4種類くらいに分けるべき
プログラムを生業としている者としては、確かに自分の領分が拡大解釈されて仕事を押し付けられることのしんどさは凄くよく分かる。
Node.jsの登場によりサーバサイドまでもJavascriptで記述できるようになったとはいえ、実際的には考慮しなければいけない要素も記述の仕方もサーバとクライアントで全然異なるわけで、「一つの言語で全てを記述できる」とは言ってもなかなか簡単ではなかったりする。
(特にクライアントサイドはフレームワークの概念が何だか混沌としてるし)
とは言え、「単一の言語でサーバからクライアントまで弄れる」ということが大きな魅力であるのも確かなわけで、機会があれば勉強してみたいなーと思ってはいた。
そこに面白い設計思想のJavascriptフレームワークMeteorが登場!
このフレームワークでは、サーバ側とクライアント側の処理を同じコードに記述できる!!
しかもNode.js/NoSQL(MongoDB)/データバインディング/WebSocketといったナウい要素を一気に味わえるのがおいしい。
バージョンが1に満たないとかMongoが必須とか、まだちょっと実戦で導入は厳しいかなという気はするけど、プライベートで使ってみる分には面白そうなんで触ってみた。
Meteorをインストール
CentOSに以下のコマンドで一発簡単インストール。
$ curl install.meteor.com|/bin/sh
以下のコマンドでバーション確認ができればインストール成功。
$ meteor --version Release 0.7.2
meteoriteを導入
ついでにMeteorのバージョンとパッケージ管理を行えるmeteoriteを導入しておく。
$ sudo -H npm install -g meteorite
アプリケーションを作成してみる
meteorite経由でアプリを作成。
$ mtr create hello
アプリ名のディレクトリ以下に下記のファイルが生成される。
$ tree hello/ hello ├── hello.css ├── hello.html ├── hello.js └── smart.json 0 directories, 4 files
実際にファイルを覗いてみる
hello.css
これはまあ普通のCSSファイル
hello.html
AngularJSみたいに{{}}
で要素の挿入。
{{> [テンプレート名]}}
でテンプレートタグ内を入れ込む。
<head> <title>hello</title> </head> <body> {{> hello}} </body> <template name="hello"> <h1>はろーわーるど</h1> {{greeting}} <input type="button" value="Click" /> </template>
hello.js
if (Meteor.isClient) {...}
内でクライアント側で実行する処理、if (Meteor.isServer) {...}
でサーバ側処理を記述する。
Meteor.startup(function () {...});
は開始時の処理。
if (Meteor.isClient) { Template.hello.greeting = function () { return "こんにちは、世界!"; }; Template.hello.events({ 'click input': function () { // template data, if any, is available in 'this' if (typeof console !== 'undefined') console.log("You pressed the button"); } }); } if (Meteor.isServer) { Meteor.startup(function () { // code to run on server at startup }); }
他にもクライアントからサーバ側のメソッドを呼び出すとかクライアントからのDBの値の操作とか色々面白そうな要素はあるっぽいけど、とりあえず今回はこれだけ。
起動してみる
作成されたディレクトリに移動して起動。
$ cd hello $ meteor --port [ポート番号]
ローカルの該当ポートにブラウザでアクセスできればOK。
Herokuにデプロイしてみる
herokuで動かしてみる。
ひとまずgitに登録。
$ git init $ git add . $ git commit -m 'meteor hello'
ビルドパック付きでHerokuに作成。
ここで表示されるURLをメモっておく。
$ heroku create --stack cedar --buildpack https://github.com/oortcloud/heroku-buildpack-meteorite.git
さっきのURLを環境変数に入れておく。
$ heroku config:add ROOT_URL=http://[...].herokuapp.com/
MongoDBのアドオンやらWebSocketの有効化やらをしておく。
$ heroku addons:add mongohq $ heroku labs:enable websockets
最後にプッシュして完了。
$ git push heroku master

はじめてのNode.js -サーバーサイドJavaScriptでWebアプリを開発する-
- 作者: 松島浩道
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/03/15
- メディア: 大型本
- クリック: 15回
- この商品を含むブログ (5件) を見る
僕はJavascript界隈には疎いのでまだ全然使いこなしたイメージは持ててないけれど、とりあえず「クライアントとサーバの垣根を取り払う」という発想は非常に面白いなと思った。
(職業柄あまり「全部カバーしました」なプロダクトに良いイメージはないし、正直Meteorみたいなのが主流になっていくという風には思えないけれどね)
余談
Herokuでも話題の新言語Hack使えるようになったらしい。
[ANN] 先日発表されたFacebookが開発したPHP互換のプログラム言語Hackを今すぐHerokuで試してみることができます! http://t.co/RAZYxrUia4
— heroku JP (@herokujp) March 24, 2014
CentOSなんでローカルへのHHVM導入が面倒らしいのでちょっと手を出すの躊躇ってるんだけど、使ってみたい気もする・・・