2013年10月19日土曜日

Node.jsのフレームワーク、sails.jsを触ってみた!

最近はsails.jsばかり触っているのでメモ書き程度に残して置きます。


sails.jsとは

sails.jsとはRailsを模したnode用のwebフレームワークです。
特徴としてはblueprintによりjsonを返すAPIを簡単に作成できるところですね。
内部的にexpressとsocket.ioを使用しています。

DB周りに関しては各種adapterがpluginとして提供されている。またwaterlineというORMを利用しているため、
SQLなどを書く必要もありません。

公式は以下
http://sailsjs.org/#!

インストール

nodeはインストール済みなら以下のコマンドを実行すればOK。
npm install -g sails

プロジェクトの作成

sails new PJ名

で出来ます。
作成したPJにはいって
npm install
すればセットアップは終了です。

sailsの起動

以下のコマンドを実行します。

sails lift

そしてhttp://localhost:3000
にアクセスして、indexページが表示されればOK

controllerの追加

sails generate controller  Controller名 action名...

で作成できる。

例えば

sails generate controller HelloWorld hello world

と実行するとcontroller以下にファイルが作成される。

sailsを起動してhttp://localhost:1337/helloworld/helloにアクセスすれば
jsonがresponseとして返ってきます。

Modelの追加についてはまた次の機会に。。。


最近はsails.jsばかり触っていますが、プライベートで動かす分には全く問題がない感じです。
Modelまわりとかもかなり楽できるようになっているので、
余計な時間を使わないで済むようになりました

ちなみにsails.jsはcoffeescriptでも実装が可能です。
ただ、generateコマンドで生成されるのはまだjsファイルのみです。。。
つくったのをjs2coffeeとかでcoffeescriptに自分でやるしかありません。。。

↓ではver 1.0でgenerateの際に利用できるようにするみたなことが書かれてますが、どうなんですかねぇ。。。
https://github.com/balderdashy/sails/issues/350

あとTypeScriptもはよ。

2013年9月14日土曜日

tsdのrepositoryを追加する方法

Typescriptのpackage managerとしてtsdを使用しています。
がこれに乗ってないライブラリがちらほらあったりするので
追加する方法を備忘録的にメモを残しておきます。


1.git clone する
git clone https://github.com/Diullei/tsd.git

2.repo_dataにjsonファイルを追加します。
※他のライブラリのやつを参考にすればOK

3.npm installでnode_moduleをインストールする。

4.gruntでrepository.jsonを作成する。repoディレクトリ以下に作成される。

5.tsdコマンドを実行するディレクトリで
tsd ncfg
を実行しコンフィングファイルを作成する

6.repositoryTypeを0にuriを先ほどビルドしたrepository.jsonのpathを設定する。

※tsd search 追加したライブラリ名
で先ほど追加したファイル名が出てくればOK

ついでにpull reqしておくと他の人が楽できますが、だいぶ放置されているのか
pull requestが承認されない模様。

2013年3月26日火曜日

Grunt.jsでファイルを更新したらCoffeeScriptを自動compiileする

下の作業メモとは違うけどgrunt.jsのsample projectはこちら

https://github.com/float1251/grunt-sample-project


とりあえず作業ログを残します。
作業ログはcoffeescriptですが、githubはtypescriptでもやってます。
業務ではプラスしてjsとcssのminimifyとかもやるようにしました。

Grunt.jsでcoffeescriptをcompileする

# grunt-cliをinstall
npm install -g grunt-cli

# sample-projectを作成する
mkdir ~/sample-grunt

# 作成したdirectoryに移動する
cd ~/sample-grunt

# package.jsonを作成する
# あとで編集できるので全部変更しないでOK
npm init

#以下のコマンドを実行する
#--save-devとつけることでpackage.jsonにdevdepencyが追加される。
#そのため次からはnpm installコマンドで環境が設定できる。
npm install grunt --save-dev
npm install grunt-contrib-coffee --save-dev
# Gruntfile.jsを作成する
# URLからサンプルを持ってきて作成する.
# http://gruntjs.com/sample-gruntfile
# 今回はcoffeescriptで作成したが,jsのほうがいいかもしれない。
# json形式でのerror回避がcoffeescriptだと若干めんどくさい
module.exports = (grunt)->
    grunt.initConfig {
        pkg: grunt.file.readJSON("package.json"),
            coffee:{
                glob_to_multiple:{
                    expand:true,
                    cwd:"./coffee",
                    src:["*.coffee"],
                    dest:"js/",
                    ext:".js"
                }
             }
          }
    grunt.loadNpmTasks "grunt-contrib-coffee"
    grunt.registerTask("default",["coffee"])

# testのためcoffee
mkdir coffee
echo console.log\("Hello Grunt"\); > coffee/test.coffee

# coffee以下にファイルができていることを確認
ls coffee/
>test.coffee

# 以下を実行してErrorがなければOk
grunt

ファイルが更新されたらcoffeescriptをcompiliする

# grunt-contrib-watchを試す
npm install grunt-contrib-watch --save-dev

# Gruntfileに以下を追加する
grunt.loadNpmTasks "grunt-contrib-watch" 
watch:{
files:["coffee/*.cofffee"],
tasks:["coffee"]
}

# 以下を実行して watchされていることを確認
grunt

# coffee以下のファイルを修正して、jsファイルが出力されていることを確認する
※base_pathやcwdにはsrcに記載しているファイル名までのPathを記述する。
これを記述しないと
src:"src/*.coffee"
dest:"js/"
のときに
js/src/*.js
という形式になってしまう。

2013年3月6日水曜日

enchant.jsでまたも適当につくってみました

というわけでまたパズルゲームです。
今度はキーボードを押したらブロックが伸びていくタイプのものです。

前回の反省を生かして、
QUnitを導入し、単体テストを実施しました。
また前回はバージョン管理してなかったのでgitでバージョン管理を行いました。
commitのタイミングはチケットの作業が終わるくらいで一回行うように心がけました。

■反省点
・チケットの作業が終わってもcommitし忘れることがあった。
本当はredmineとgitを連携させたいんだが、ちょっと面倒。。。
・単体テストの粒度が甘く、本格的に結合していくときにバグが発生することがあった。
 もうちょっとテストの粒度を細かする。というかしっかりと境界値やテストに漏れがないか確認する。
・前回に比べればだいぶ綺麗だが、DRYっぽくなってない部分があったり、
一部メソッドの行数が長かったりするのは不満。どっかのタイミングでこれでもやろうかな
・何かJavascrioptというかcoffeescriptっぽく書けてないような気がする。
どっかのOSSとかを読んで見たほうがよいと思った(小並感)

次あたりからUnityで何かつくろうか、それともまたenchant.jsで何かつくるか、
はたまたAndEngineで何かつくるかは考え中。。。


○2013/03/07 追記
・作業時間は5時間弱でした。業後に2日かけて作りました。
これの半分くらいの時間で作れるようになりたいかな。

・ドキュメント残すようにする。
引数が何の型を想定して作っているのかよくわからなくなるので。
調べたらYUIDocというのがあるらしいので次はこれを導入してみる。

2013年3月5日火曜日

ライフゲームをさくっとつくった

ライフゲームなんてあるんですね。知らなかったです。

基本ルール
誕生
死んでいるセルに隣接する生きたセルがちょうど3つあれば、次の世代が誕生する。
生存
生きているセルに隣接する生きたセルが2つか3つならば、次の世代でも生存する。
過疎
生きているセルに隣接する生きたセルが1つ以下ならば、過疎により死滅する。
過密
生きているセルに隣接する生きたセルが4つ以上ならば、過密により死滅する。
(Wikipediaより引用)

参考URL
http://ja.wikipedia.org/wiki/%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B2%E3%83%BC%E3%83%A0
http://www.daily-labo.com/ygg18.html

ルールはすごい簡単なんでさくっと作ってみました。

すごい不思議な動きをするなぁと思いました(小並感)。

coffeescriptでテトリスつくってみた

バグがあるがそれなりに形になったので。

・CoffeeScriptというかJavaScriptでハマった。
・単体テストやらずに実装してたらバグが出た時にかなり困った。
・Cellとかもクラス化しとけばよかった。
  また作りが悪いのでリファクタしたくても単体テストがないのでやる気にならなかった。
・redmineでチケット切りながらやったけどMTVが保てるのでいいと思った(小並感)
・最後の最後にQUnitを導入。UnitTestがあるとやはり不具合修正のスピードは全然違う。
  QunitでCoffeeScriptでコンパイルしたjsを使用するには-bをつけてコンパイルする。
・ブロックの定義は4x4の配列よりもx,yを中心にどの位置に配置するかのほうがよかった。
  ex:(x,y)=(1,1)のT字ブロックの際はx=1,y=1 type=[[1,0],[0,1],[0,-1]]みたいに。

反省は次回に生かさないとね。
また気が向いたら作ってみますよ( ̄ー ̄)

2013年3月2日土曜日

適当につくっています



めっちゃ適当に作ってます。
enchant.jsは手軽につくれるので個人的に気に入ってます。
ただcoffeescriptというかjavascriptにイライラしてます。

とりあえず、最低限の機能すら実装できてないのでもっとちゃんと実装しないとなー

そしてUnityでのゲーム開発も進めないとだし。。。
時間が足りなすぎる^^;