東京Node学園祭2013に参加した

昨日東京Node学泉祭2013に参加してきました
週の半ばくらいまでは台風で中止っぽい気がしてたけど、当日行く頃には雨も止んで無事開催となりました

当日聞いたセッション

基調講演 @meso さん

Node.jsの近況についてお話されてました。

nodeのMLを訳されている資料になってます。

  • Isaacがリーダーの間は後方互換性は保たれるとのこと
  • 互換性はv0.10とv0.12の間の話
  • v0.12の次はv1.0になるらしい

Track B Grunt, Yeoman, Bower @yosuke_furukawaさん

Grunt、Yeoman、Bowerについてひと通りお話されてました。

Yoはジェネレーターで、bowerはパッケージ管理、gruntはタスク管理
GruntはRubyでいうRakeみたいなやつかな
実はnode周りのこの辺の常識ツールとかも知らなかったので自分的にはすごくよかった
と同時にもっと色々勉強しないとなーと少し反省
ちなみに@yosuke_furukawaさんはyeomanのためにyeomaniaというモジュールを自作されたとのこと

yeomania -Github

僕もモジュールとか公開できるようになりたいなーとしみじみ

Track B Node.jsを選ぶとき,選ばないとき @tricknotesさん

@tricknotesさんは札幌から参加されてました
札幌でもtwitterを朝昼晩見ていると最新の情報に難なくキャッチアップできるそうですw

実際の中身はRailsとNode.jsの比較になってます

TrackB Node.jsで学生向けe-learningサイトを作った話 @teyoshさん

Nodeがプロダクションで使われる事例はあんま情報がない気がしていて、貴重な公園だったかなと思う
自分たちのPaaSとしては使える選択肢を増やすのか、あえて狭めてユーザーの迷いを断つべきなのか難しいところだったりするんだよね

TrackB WebRTCを始めよう がねこまさしさん

WebRTCって言葉は聞いたことあったものの実例をしっかり見たのは初めてで結構衝撃だった
思ったより簡単なコードで実現できるみたい
とは言え実際に作るには色々あるみたいでその辺のTipsがすごく参考になりました
フロントエンドをもっと真面目に勉強しないと行けないなーと痛感

LTについて

LTは事前の予定は5名だったものの、ピザが届くまで飛び入り参加OKということで無限にLTされてたw
今日見てみたら結果として8名が飛び入りLTしてたwこれはすごい

自分もさり気なくeXcaleの紹介してみたw
準備がなかったのでオフィシャルな資料をもとにアプリ作成のデモをやった

飛び入りなのに動画も上げて頂きました。ありがたや
準備がなかったのと酒もだいぶ入ってて頭がまったく働かずグダグダしてしまったw
助けて頂いた@mesoさんありがとうございました

参加のまとめ

今回学園祭は初参加だったのだが、内容としてマニアックなものよりも一般的なことのほうが多かったような気がしてて色々勉強になってよかったと思う
今後はセッション枠で何か話せるようになりたいなーと思います

ディレクトリがないとき作成するワンライナー

よく使いそうでなかなか思い出せないシェルスクリプトをgistに登録してgistデビューしてみた

$ if [ ! -d "DIR_NAME" ]; then mkdir "DIR_NAME";fi

運用自動化というとこういった小さなコードの積み重ねになるので、日本語をコードにするっていう慣習は地味に重要になんだよね

Gist

sails.jsを使ってみた

Sails.jsとは

Node.jsのMVCウェブアプリケーションフレームワーク
名前からも予想できる通り、Ruby on Railsチックな操作ができるフレームワークになっている

公式サイト http://sailsjs.org/

インストール

npmからインストールする

$ npm -g install sails

アプリケーションの作成

下記コマンドでアプリケーションのテンプレートが作られる この辺はrailsとまったく一緒

$ sails new sailstest

ディレクトリ構成はこんな感じ

sailstest
├── Gruntfile.js
├── README.md
├── api
│   ├── adapters
│   ├── controllers
│   ├── models
│   ├── policies
│   │   └── authenticated.js
│   └── services
├── app.js
├── assets
│   ├── favicon.ico
│   ├── images
│   ├── js
│   │   ├── app.js
│   │   ├── sails.io.js
│   │   └── socket.io.js
│   ├── robots.txt
│   └── styles
├── config
│   ├── 404.js
│   ├── 500.js
│   ├── adapters.js
│   ├── bootstrap.js
│   ├── controllers.js
│   ├── cors.js
│   ├── csrf.js
│   ├── i18n.js
│   ├── local.js
│   ├── locales
│   │   ├── _README.md
│   │   ├── en.json
│   │   └── es.json
│   ├── log.js
│   ├── policies.js
│   ├── routes.js
│   ├── session.js
│   ├── sockets.js
│   └── views.js
├── node_modules
│   ├── ejs
│   ├── grunt
│   ├── optimist
│   └── sails-disk
├── package.json
└── views
    ├── 404.ejs
    ├── 500.ejs
    ├── home
    │   └── index.ejs
    └── layout.ejs

この状態で下記コマンドを実行すると起動(いつものようにnode app.jsでもよい)
デフォルトではポート1337で起動するらしい

$ sails lift  
info: 
info: 
info:    Sails.js           <|
info:    v0.9.4              |\
info:                       /|.\
info:                      / || \
info:                    ,'  |'  \
info:                 .-'.-==|/_--'
info:                 `--'-------' 
info:    __---___--___---___--___---___--___
info:  ____---___--___---___--___---___--___-__
info: 
info: Server lifted in `/Users/keisuke/work/sailstest`
info: To see your app, visit http://localhost:1337
info: To shut down Sails, press <CTRL> + C at any time.

debug: --------------------------------------------------------
debug: :: Tue Sep 17 2013 23:09:12 GMT+0900 (JST)
debug: 
debug: Environment  : development
debug: Port     : 1337
debug: --------------------------------------------------------

ブラウザで開くと初期画面が表示される

f:id:syguer:20130917231910p:plain

sailsにはこれもまたrailsと同じくジェネレーターが付属している
初期ページの通り下記コマンドを実行してみる

$ sails generate foo 
info: Generating model and controller for foo...

ブラウザで/fooにアクセスしてみる

f:id:syguer:20130917233043p:plain

まだなにも入れていないので空リストが帰ってきてるが、データを入れてみる

実はSailsではジェネレーターでモデルを作成すると自動でREST APIが作成される
下記のようにブラウザで実行してみると、こんな結果が帰ってくる

f:id:syguer:20130917233423p:plain

先ほどの/fooにアクセスしてみると、追加したjohnが追加されている

f:id:syguer:20130917234040p:plain

こんな感じで更新もできる

f:id:syguer:20130917234246p:plain

削除も同様

f:id:syguer:20130917234246p:plain

f:id:syguer:20130917234040p:plain

ACLをつけることもできて、このREST APIの実行も制御できるらしい 素晴らしい

ところで、前回RESTについて書籍を学んだ記事を書いたが、

これ、ぜんぜんRESTじゃないじゃん

そもそもメソッドが全部GETだし、URLにメソッド名が来るのもどうなん? って思ったけど、これはCRUDショートカットってやつで、 ちゃんと/fooにPOST、GET、/foo/:idにPUT、DELETEできるらしい。おみそれしやした

他にもコントローラーのひな形を自動で作ったりできてかなり便利くさい
expressで1から書くのも軽量でいいけど、よくあるMVCのアプリ書くならこっちのほうが早いかも

Webを支える技術を読んだ

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

きっかけ

もともとRESTがどんなんかとか大雑把には知っていたけど、いざ自分がwebアプリ開発に携わり始めてリソースってなんじゃい?ってレベルだったことが大きい。
あと去年はずっとインフラやってたので、色んなプロトコルなりUnix(Linux)コマンドなりには通じてたものの、Webの基礎とかって疎かったのでしっかりやっとこうって魂胆。

本の中身

本の中身は大雑把に、

  • Webの歴史
  • URI
  • HTTP
  • メディアフォーマット

とかが書いてあります。 歴史でRESTに触れてからはREST前提で話が進む。
読んでいて意外とHTTPとか詳しく知らなかったことに気づく。
あと、僕は割と歴史系の話が好きで、この手の本の最初の方に載っている歴史を知るのは実に興味深い。
何事も歴史を知っておくと深く理解して使えるので、何か新しいことを始めるときは歴史から触れるのがいいと思う。

何はともあれREST

RESTを意識しているのといないのとでは作るものの質がまったく違うと思う。
RESTを意識すると世の中のサイトのURL設計がいかにイケてないかがすごくよく分かる。 まぁこの手の話は宗教戦争で、何が正しいとか間違ってるとかいいだすとキリがない話なのだが、先の項でも触れた歴史の話から読み取るに、RESTが正しいWebの扱われ方であるから生き延びてきたんだと思う。

RESTアーキテクチャの定義を本書から抜粋しておく。

  • クライアント/サーバ
  • ステートレスサーバ
  • キャッシュ
  • 統一インターフェース
  • 階層化システム
  • コードオンデマンド

これらをすべて備えなくても良いらしいが、この中でもクラサバ、ステートレス、統一インターフェースが重要であると思う。
なぜこれらが重要かというと、クラウド時代のスケーラブルなアーキテクチャには不可欠な要素だからである。
すべてのサーバーがユーザーインターフェースから独立しており、状態(state)を持たず、かつインターフェースが一様でないとスケーラブルにできない。
これはWebに限らない話で、今後クラウドが前提のアーキテクチャを組むなら意識すべきことだと思った。

話がそれたが結論

とりあえず以下のことがWebアプリ開発者として最低限必要だと思った。

  • リソースを理解した上でのURI設計
  • 適切なGET、POST、PUT、DELETEの使い分け
  • HTTPヘッダ、レスポンスコードの理解、適切な使い分け

それぞれがどのようなものか、どうすれば正しく使えるかは本書を読んでください。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

git rebase時にエディタのエラーで失敗するときの対処法

先日、金が無いにも関わらず意を決してMBAを購入したのだが、

gitを使ってrebaseするときに下記のようなエラーとなった。

error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.

そういえば会社のMacではじめてrebaseしたときもこのエラーが出ていた気がする。

改めて調べてみると、gitでrebaseの時とかに使うエディタを明示的に決める必要があるとのこと。

git config --global core.editor "/usr/bin/vim"

原因はよくわからんが、こういうもんらしい。

ついでにgitを使いはじめるときにいつも入れてるコンフィグも備忘録がてら書いておく。

# コミッターの設定
git config --global user.name "hoge"
git config --global user.email huga@example.com

# 色付けの設定
git config --global color.ui true

他にもいろいろ設定できるっぽいが今んとここれしか入れていない。

いいのあったら教えて下さい。