2011年04月

「未知の技術探訪」シリーズ第3回目はRubyのWebアプリケーションフレームワークである「Ramaze」です。とても軽量な作りになっていて、サイト構築時Railsを使うまでもないという時に力を発揮してくれます。Railsにとても似てるのでRailsを知っていれば学習コストもそんなに高くないと思われます。
インストール


gemでインストールします。すごく簡単です。


$ sudo gem install ramazePassword:
Fetching: innate-2011.04.gem (100%)
Fetching: ramaze-2011.01.30.gem (100%)
============================================================

Thank you for installing Ramaze!
To create a new project:
$ ramaze create yourproject

============================================================
Successfully installed innate-2011.04
Successfully installed ramaze-2011.01.30
2 gems installed
Installing ri documentation for innate-2011.04...
Installing ri documentation for ramaze-2011.01.30...
Installing RDoc documentation for innate-2011.04...
Installing RDoc documentation for ramaze-2011.01.30…


動かしてみる


おきまりのHello World!でもやってみます。rubyコマンドが使えるユーザであれば実行場所はどこでも構いません。なんだかコードもRailsに似てますね。下記コードをhello.rbで保存します。

[ruby]
require 'rubygems'
require 'ramaze'
class MainController < Ramaze::Controller
def index
'Hello, World!'
end
end Ramaze.start
[/ruby]そして起動。ブラウザからhttp://localhost:7000/にアクセスすると実行結果が見られます。


$ ruby hello.rb
W [2011-04-29 21:45:30 $9333] WARN | : No explicit root folder found, assuming it is .
D [2011-04-29 21:45:30 $9333] DEBUG | : Using webrick
I [2011-04-29 21:45:30 $9333] INFO | : WEBrick 1.3.1
I [2011-04-29 21:45:30 $9333] INFO | : ruby 1.8.7 (2009-06-12) [universal-darwin10.0]
D [2011-04-29 21:45:30 $9333] DEBUG | : TCPServer.new(0.0.0.0, 7000)
D [2011-04-29 21:45:30 $9333] DEBUG | : Rack::Handler::WEBrick is mounted on /.
I [2011-04-29 21:45:30 $9333] INFO | : WEBrick::HTTPServer#start: pid=9333 port=7000


URLのマッピングもコントローラの中でできてしまいます。Railsで言うroutes.rbの代わりですね。下記のようにコードを書くとhttp://localhost:7000/another/helloにアクセスすることで画面が表示されます。

[ruby]
class AnotherController < Ramaze::Controller
map '/another'

# http://localhost:7000/another/hello
def hello
"Hello from Another!"
end
end
[/ruby]もっと詳しく知りたい方は、オンラインドキュメント(英語のみ)を御覧ください。以前、同じRubyのWebフレームワークであるSinatraを試してみましたがそれととても良く似てますね。あとはどうSinatraと住み分けをしていくかですね。更新も割と頻繁なようなので今後の更なる発展に期待です。

このエントリーをはてなブックマークに追加

今更ですが、7月に行くバリからブログを更新したい!という想いから、カメラコネクションキット(通称カメコネキット)を購入しました。



カメラはLumix GF1、初代iPadを使用しています。



使ってみた結果、想像以上に素晴らしいです。

何がすごいって、繋いだら何もすることなく自然にカメラの画像や動画がiPadに表示されて、iPadで一回タップするだけで全てのデータがiPadに吸い込まれ、(データ量にもよりますが)数分後にはストレスなく閲覧することが可能です。いや、これってできて当たり前のことかもしれないですけど、日本のメーカーが作ったら絶対こんなにスムーズに操作することはできないでしょう。



心配していた動画についても拡張子をmovで動画撮影すればiPadでも問題なく見ることができました。


カメコネキットは、SDカードを挿入するものと、USB接続するものの二つがついてきます。GF1でもUSB接続できるかなぁと心配してましたが、問題なく動作しました。わざわざSDカードをカメラから取り出さずにすむのはかなり便利です。

データ転送後はカメラ内のデータを削除するかしないかを聞いてきます。画像をiPadで管理している人は消して新しい写真や動画をバシバシ撮りましょう!


GF1は1年半くらい前に8万くらいで買ったんですが、今はGF2という後継機種がパンケーキレンズと望遠レンズセットでこの値段で買えるんですね。。。

[tmkm-amazon]B004CYFSS4[/tmkm-amazon]

このエントリーをはてなブックマークに追加

「未知の技術探訪」シリーズ第2回目は「YAML」です。第1回目は「HAML」でした。どうみても兄弟です(実際使ってみると全然兄弟じゃなかったですが)。

読み方は?


「YAML」は「ヤムル」と読み、「YAML Ain't a Markup Language」の略です。日本語にしてみると「ヤムルはマークアップ言語じゃないよ!」ですね。

何に使われる技術か



  • 構造化されたデータを表現するためのフォーマット。

  • 構造化データやオブジェクトを文字列にシリアライズ(直列化)するためのデータ形式の一種。

  • 人間にとって読みやすいデータ直列化フォーマットである。



などと書いてあります。自分なりに解釈した言葉で表すと

ある約束に従ってデータを用意し、それをプログラムで取り込んで配列やハッシュなどの形式から始まり、様々なデータ形式に変換してくれるという感じでしょうか。

まぁ、これは一つの使用例として表現したに過ぎません。応用になると、ライブラリを使ってYAMLデータからSQL文を作ったり、Javaのクラスを作ったりと色々できるようです。

日本語でGoogle検索すると、Ruby関係の解説ページが多く出てきますので、日本ではRubyで使われてることが多いのかもしれません。ですが、Rubyに限らずCやPython、PHP、Java等様々な言語で使用できるようです。

HAML同様、インデントを使って記述されます。ただし、インデントにはタブは使えないので半角スペース(通常は2つ)を使ってインデントします。

こちらはYAMLの公式サイトです。面白いのはこのページ自体がYAMLの構文を使って書かれていることです。初めて見ると一瞬戸惑ってしまいますね(笑)今の自分にはあまり必要ないかなーと思いました。



このエントリーをはてなブックマークに追加

Rails3のルーティングについて(一部Rails2との比較がありますが)、Rails超初心者なりに網羅的に調べてみました。もし間違っている部分がありましたらご指摘いただけると助かります。

ちなみに、この記事を書く前はルーティングってなに?設定しないとRails動かないの?おいしいの?というレベルでした。そしてrails serverやって、ブラウザにRouting errorと表示されて?が頭に浮かんでる状態でした。

ルーティング情報の確認方法



Railsアプリケーションのルートで次のコマンドを打つことで次のようにルート情報が確認できる。


>rake routes
/books/:id(.:format) {:controller=>"books", :action=>"show"}
root /(.:format) {:controller=>"books", :action=>"default"}


マッチングの順番



config/routes.rbに書いてあるルートは上から順に適用される。

デフォルトルート



routes.rbに書いてあるルーティング情報のどれにもマッチしなかった場合に適用される。

[ruby]
# Rails2.x
map.connect ':controller/:action:id.:format'

# Rails3.x
match ':controller(/:action(/:id(.:format)))'
[/ruby]

(超基本的な)ルーティングの書き方



一番簡単な例。articlesコントローラのarticleアクションへのルーティングであればこう書く。
[ruby]
# Rails2.x
map.connect '/articles/article', :controller => 'articles', :action => 'article'

# Rails3.x
match '/articles/article'
[/ruby]ちょっと応用で、次のように書いておくことで、http://localhost:3000/books/3にアクセスすればshowアクションに3が渡される。

[ruby]
# Rails2.x
map.connect '/books/:id', :controller => 'books', :action => 'show'

# Rails3.x (:toは省略できるのでこの二つは同じ意味)
match 'books/:id', :to => 'books#show'match 'books/:id' => 'books#show'
[/ruby]

ルートへのルーティングの書き方



http://localhost:3000/でアクセスすると、通常はpublic/index.htmlが表示されるが、これを次のようにroutes.rbに書くと別ページにすることができる。ただし、適当なコントローラ(ここではbooksコントローラ)とHTML(ここではviews/books/default.html.erbを用意した)が必要。そしてpublic/index.htmlが存在すると、このルーティングを書いておいてもindex.htmlが表示されてしまうので、これは名前を変えるなり、削除しておく必要がある。

[ruby]
# Rails2.x
map.root :controller => 'books'

# Rails3.x
root :to => 'books#default'
[/ruby]

resourcesについて



routes.rbになにも書いていなければ、ルートは設定されない。よってブラウザからアクセスしてもお馴染みのRouting errorが出る。


> rake routes
(なにも表示されない)


だけど、

[ruby]
# Rails2.x
map.resources :books

# Rails3.x
resources :books
[/ruby]と書くだけで、7つのアクションへのルーティングが自動的に追加されます。scaffoldを使用すると、これすら自動で生成してくれます。


> rake routes
(in /Users/tetu1225/Documents/RailsApp/work/mebay)
books GET /books(.:format) {:controller=>"books", :action=>"index"}
POST /books(.:format) {:controller=>"books", :action=>"create"}
new_ad GET /books/new(.:format) {:controller=>"books", :action=>"new"}
edit_ad GET /books/:id/edit(.:format) {:controller=>"books", :action=>"edit"}
ad GET /books/:id(.:format) {:controller=>"books", :action=>"show"}
PUT /books/:id(.:format) {:controller=>"books", :action=>"update"}
DELETE /books/:id(.:format) {:controller=>"books", :action=>"destroy"}


7つというのはscaffoldを使った時に作られるアクションメソッドと同じです。要するにroutes.rbにルーティングの設定をしなくていいわけですね。それを1行で済ましてるわけです。

また、updateメソッドだけ設定したい!とかdeleteメソッド以外を設定したい!といった場合は:only:exceptオプションを設定することで実現できます。指定はシンボルでもOKのようです。

[ruby]
# Rails2.x
map.resources :books, :only => 'update'
map.resources :books, :except => 'delete'

# Rails3.x
resources :books, :only => 'update'
resources :books, :except => 'delete'
resources :books, :except => :delete #シンボルでもOK
[/ruby]でも、createとかeditとかshowとかの基本的なもの(CRUD)は上記方法でルーティングが設定できますが、例えばbookアクションへGETメソッドのルーティングを追加したくなったとします。そんな時は次のように書きます(Rails3.xではブロックをとるようになったことに注意してください)。

[ruby]
# Rails2.x
map.resources :books, :collection => {:book => :get}

# Rails3.x
resources :books do
get :book
end
[/ruby]こうするとルーティング情報に下記のように1行追加されることになります。以上により、例えばhttp://localhost:3000/books/3/bookへGETメソッドでのアクセスが可能になります(もちろん、コントローラにbookメソッドを追加する必要はあります)。


> rake routes
book_book GET /books/:book_id/book(.:format) {:controller=>"books", :action=>"book"}
(以下同じなので省略)


また、Rails3.xではresourcesには複数のリソースを渡せるようになったようです。


Rails3.x
resources :books, :magazines, :comics


resourcesには他にも色々な使い方があるようなのですが、今の自分には難しすぎたのでまたの機会に。

ルーティングについて参考になるサイトと書籍



http://irohiroki.com/2010/08/29/rails3-routes

http://kiyorin-net.blogspot.com/2011/04/rails3-routes.html

http://yasrails.blog33.fc2.com/blog-entry-17.html


どちらも初心者でも読めるので、Rails3本が少ない中すごく助かります。

[tmkm-amazon]4774146633[/tmkm-amazon]

[tmkm-amazon]4797363827[/tmkm-amazon]

※2012年3月26日追加
ついにリファレンス本も出ましたね。私も買いました。
[tmkm-amazon]4774149802[/tmkm-amazon]

最後にちょっと一言



Rails3.x環境でscaffoldを使わないでアプリケーション作ると、routes.rbが全てコメントアウトされてるので、ブラウザで表示しようとするとrouting errorになってしまいます。そいで、なんでだなんでだ!って調べるわけですけど、完全初心者にはルーティングは若干難しいので画面が表示されないまま時間が過ぎていってしまいます。

なので、せめてroutes.rbの一番最後の行くらいコメントアウト外しておいてくれたらなぁと思ったり。

[ruby]
# この部分
match ':controller(/:action(/:id(.:format)))'
[/ruby]Hello World!もできないよ。


このエントリーをはてなブックマークに追加

Macでは初めからコンソールツールが使えるようになってますが、あくまで最低限の機能しかついてません。前々から不便だなぁとは思ってました。このMac標準コンソールで一番不満なのは画面を分割できないことでした。

いや、画面自体は分割可能なんですが、分割した二つの画面は連動してるので各画面で違う操作ができないんですよ。それではあまり意味が無い。

それで良いコンソールアプリないかと思って探してたらありましたよ。その名もiConsole

これなら上記不満点を解決してくれます。特徴を挙げると

  • 画面分割して、各画面で独立操作が可能。

  • 分割先画面でのタブの使用も可能。

  • 背景と透過できる(標準コンソールもできる)

  • 3パターンの色指定が可能(標準コンソールはデフォルトで7パターン)


という感じです。色の指定は残念ながら画面毎の指定はできません。



上記以外の色では下記二色が用意されてます。





複数ターミナルを立ち上げて行ったり来たりをする人にはすごく便利なのではないでしょうか。おすすめです。

このエントリーをはてなブックマークに追加

↑このページのトップヘ