開発者ブログ

中の人によるブログです。技術の話、勉強会の話などを取り上げていきます。

お知らせ

開発者ブログを移転しました。新しいアドレスはhttp://blog.everyleaf.comです。

sub resources プラグインの紹介

こんにちは、大場です。

今日は、自作のプラグイン sub_resources (http://github.com/nay/sub_resources) を紹介します。

なお、これはRubyConf2009で初の英語プレゼンをした話題です。スライドは slideshare にあります。

RESTとURL設計の重要さを理解して「キレイなエンジニア」を目指す!

こんにちは、@kukoです。
今日は私の苦手なRESTの話をしますね。

はじめに

Rails1系から2系に上がった時に、頭を悩ませたのがRESTでした。

宗教じみてるし、なんか設定も複雑でやることが増えたような気がして、なかなかお友達になれない。

しかし、RoRのアプリを作っていくにあたって、どうしてもさけては通れない道でした。

私と同じように悩める方がいたらぜひ参考にして欲しくて、

RESTとは何か。
URLはどうあるべきか。

の、とっかかりとなる話をしたいと思います。

RESTとは

「RESTとは、ウェブのような分散ハイパーメディアシステムのためのソフトウェアアーキテクチャのスタイルのひとつである」

そんなこと言われても困ってしまいますよね。。

RESTは「リソース」を扱うための考え方であり、 URLというのは特定のリソースを指し示しているのです。

リソースとリソースの操作

RESTを考えるときによく出てくるのが「リソース」という単語です。

「リソース」とは、例えば掲示板があったとしたら、
掲示板の大元の書き込みであったり、
掲示板につけられたコメントのことであったり、
もしくは添付されたファイルや画像であったり、
そんなひとつの「情報」として扱えるものを指しています。

RESTの考え方では、リソースはそれぞれ固有のURLを持っています。

/bbs/3/comments/7

例えば、これは、id3の掲示板につけられたコメントの1つを指し示すURLです。

そしてそのURLに対して、「何をするのか」、それを「GET」「POST」「PUT」「DELETE」という4種類のHTTPのメソッドで操作をするのです。

URLはメソッド(動作)をあらわさず、メソッドはHTTPメソッドが対応します。
これがRESTの原則です。

古いRailsではactionがURLに入っていましたが、これは先ほど説明した「URLはリソースを指し示す名詞であるべき」という原則とは違いますね。

きちんとしたRESTでは、アクション名はURLに出るべきではないのです。 なぜなら、アクション名は動詞であり、URLはリソースを表すため、名詞であるべきだからです。

URLとメソッド名のギャップ

少し実装の話に踏み込みますと、設計はURL設計から始めると良いです。 キレイなURLが作れれば、コントローラーの実装で悩むことも少なくなるでしょう。

気をつけたいのはI/Fのレイヤーと実装のレイヤーでギャップがある場合です。

I/Fのレイヤーでは

「何を」= URL = リソース
「どうする」=HTTPメソッド

であらわします。
たとえば、先ほどの掲示板bbs/3にお気に入りの星をつけたい場合、RESTfullに書くなら

bbs/3/stars

というURLにPOSTリクエストを送ります。ここで、bbs/3/stars/addや、bbs/3/add_starにしないのは、 URLは名詞であるという前提からです。
考え方としては「starをcreateする」と考えてください。

これに対して、実装のレイヤーでは

「何を」=主としてコントローラ名、補助的にアクション名
「どうする」=アクション名

となるので
BbsControllerのadd_starがアクション呼ばれるようにするかもしれません。
(もし複雑だったらBbsStarsControllerのaddメソッドにするかもしれませんが)

どうでしょうか。このとおり、この2つのレイヤーの間には少しギャップがありますが、この2つのレイヤーの構造を意識して、 RESTっぽいURL設計はどうあるべきかを考えて設計すると良いでしょう。


少しはRESTとお友達になれそうですか?^^

Rails で cron を使わずに cron っぽいことを行う方法

河野です! 今回は、 Rails で cron を使わずに cron っぽいことを行う方法をご紹介します! cron が使えないというケースはあまりないかもしれませんが、知っているといつか役に立つかもしれません。

開発用メールサーバmocksmtpdを活用する

こんにちは。@denpachiです。

今回は、私が開発をする上で使っているmocksmtpdというツールを紹介します。

mocksmtpd とは?

メールを送信する動作確認やテストを行う際に、 GmailのSMTPを使ったり、実際に開発用のメールサーバを立てて メール送信のテストを行っている方も多いと思います。

それをもう少し手軽にテストできるような仕組みがmocksmtpdです。
mocksmtpdを立ち上げておくと、 メールをどこにも送信せずに、ローカルのディレクトリにHTML形式で保存してくれます。

  • http://d.hatena.ne.jp/koseki2/20081103/mocksmtpd

  • (作者のこせきさん、本当にありがとうございます)

    インストールと起動

    使い方は至って簡単です。

    インストールはgemでパッケージが配布されているので、以下のコマンドを実行するだけです。

    $ gem sources -a http://gems.github.com
    $ sudo gem install koseki-mocksmtpd
    

    初期設定と起動方法は次の通りです。

    $ cd ~
    $ mocksmtpd init
    $ cd ./mocksmtpd
    $ sudo mocksmtpd start
    

    これで、SMTPサーバが立ちました。
    送信されたメールを確認するには

    ~/mocksmtpd/inbox/index.html
    

    を開くと、メールの内容を見る事ができます。

    macbook(late2008)にsnow leopard インストール+カーネル64bit化する

    こんにちは@tatsuoSakuraiです!
    snow leopardのクリーンインストール+カーネル64bit化やってみました!

    流れ

    ・自宅の環境
     ・バックアップ用機器:100GB外付けHDD(容量が少なすぎて使い物にならない)
     ・無線Lan:Fon(最近不安定でほぼ毎回再起動にうんざり)
    ・Time Capsule安くなった(1TBのHDD & 無線Lan)
    ・snow leopardは3000円ちょい
    ・→思い切って買おう!(Time Capsule高かったけどいいもの買ったな!と思います)

    クリーンインストール

    (※作業前のバックアップをお忘れなく)
    Mac OS X Snow Leopardをクリーンインストールする方法。
    ここを参考にさせてもらいました。写真付きでとてもわかりやすかったです。
    インストールにかかった時間は40分くらいでした。
    (Xcodeのインストールも忘れずに!)

    カーネル64bit化

    ここまでは順調にいったのですが、カーネルが32bitのまま
    うーん、せっかくだから64bit化したい!

    調べたところ、どうやら僕のmacbookでは無理な感じです。。。(が、結論から言うとできました)
    (ちなみに初代アルミマックとかlate2008とかMacBook5,1というらしいです)
    64bit完全対応のSnow Leopard、実はデフォルト起動は32bitカーネル!?

    さらに調べました。
    なんとかできそうです。(※要自己責任)
    MacBook (late2008) を64bit起動する
    このときの作業メモ
     HexEditorでアドレスが000266e0になるまでスクロールさせて、charを0x4と入力してenter
     "保存できませんでした"とかでますが、なんとか保存された感じです
     (「編集を許可する」のチェックをoff/onしました)

    インストールした感想

     さて、なんとかカーネル64bitできました
     速度感としては(あくまでもなんとなく)
     アップグレード < クリーンインストール < カーネル64bit 
     と苦労した分だけ速くなった気がします!

    Rails環境のアップグレード

    自宅用macなのでとりあえず開発環境も含め全てのデータをバックアップから移行しました。
    (開発環境もなんとかアップグレードできたのですが、再構築するのがいいようです。)

    Macportsのインストール
    そのままだとportsが動かないので最新版をインストールします
    MacportsのSnow Leopard対応版が出た
    インストールしたらupdate

    $ sudo port -d selfupdate
    $ sudo port -d sync
    

    ここからでいろいろつまったので下記サイトを参照にしながらごにょごにょしました
    Rails開発環境、Snow Leopardへアップグレードする方法
    Mac OS X Snow Leopard のインストールと Rails 環境の修正等
    Snow Leopardにアップデートした後に気をつけること 主にMacPortsとrubygemsについて(コマンドの"が全角になっていたので注意)

    scaffoldを作って動作確認してみましたが、ちゃんと動きました!
    しかし、やっぱり何か不安です。
    次の週末には開発環境を再構築したいと思いました

    まとめ

    ・クリーンインストールは簡単
    ・開発環境は再構築しましょう
    ・TimeMachineのバックアップ++

    以上です。どなたかの参考にしていただけたらうれしいです。

    ブログ開設

    こんにちは、nayです。

    日々の仕事や勉強会で気づいたことなどを、社内の人で交代で発信する場を設けることにしました。コーナー名は何の芸もない「開発者ブログ」!

    どうぞよろしくお願いします。