Everyleaf Lab http://blog.everyleaf.com 株式会社万葉の開発者が技術情報を配信します posterous.com Wed, 09 Nov 2011 23:35:00 -0800 ひっこし! http://blog.everyleaf.com/hello-manyo http://blog.everyleaf.com/hello-manyo

はじめまして、今年10月より入社しました田中洸一(@tanaka51)と申します。

入社から1ヶ月が経ちまして、いろいろと落ち着いてきた所でブログ更新という大役を仰せつかりました。

これからもちょくちょく書いていけたらと思います。

 

さて、既にご案内の事と思いますが、弊社は11月4日から新しいオフィスになりました!

その前日の11月3日はみんなで引越し作業をしたのですが、その時の写真を紹介したいと思います。(写真提供:こういちろうさん(@koichiroo)、ありがとうございます!)

 

20111103-DSC_7596

旧オフィスにて荷造り中…

 

20111103-DSC_7599

旧オフィスに残されたメッセージ

 

20111103-DSC_7601

第二チームリーダーは背中で語る

 

20111103-DSC_7611

その頃、新オフィスではインフラ整備中…

 

20111103-DSC_7617

新オフィスには会議室があります!

 

 

20111103-DSC_7629

新オフィスは801号室です

 

20111103-DSC_7668

ダンボールの山がいっぱいです

 

20111103-DSC_7672

積まれていくダンボール

 

20111103-DSC_7686

新オフィスのベランダからは旧オフィスが見えます!

 

20111103-DSC_7703

新オフィスのビルの入り口と社長。カードキーですよー!

 

20111103-DSC_7718

荷解き中…既に机やら椅子やらが並んでますね

 

20111103-DSC_7724

続・荷解き中…

 

20111103-DSC_7729

良い笑顔!

 

 

20111103-DSC_7738

櫻井さん!今日もタオル!

 

20111103-DSC_7755

荷解き中に発見された癒し系のブツ

 

20111103-DSC_7784

引越し終了後の祝杯!

 

20111103-DSC_7788

社長の笑顔!お疲れ様でした

 

20111103-DSC_7811

最後にみんなでパチリ!みなさん良い笑顔です!

 

 

新オフィスに引っ越して、広く明るく快適になりました!

是非、遊びにいらしてください:-)

 

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/cQynXaxbojCDU Koichi Tanaka tanaka51 Koichi Tanaka
Thu, 29 Sep 2011 08:17:00 -0700 Matz Keynote in RubyConf2011 "Ruby Everywhere" http://blog.everyleaf.com/matz-keynote-in-rubyconf2011-ruby-everywhere http://blog.everyleaf.com/matz-keynote-in-rubyconf2011-ruby-everywhere

五十嵐です。RubyConf2011に参加しています。今年も去年と同じくNew Orleansでの開催です。初日、最初のセッションである まつもとさんのキーノートがさきほど終わりましたので速報レポートです。より詳細はレポートは後ほど るびま などでも紹介されると思いますのでお楽しみに。:)

■Herokuチーフアーキテクト"matz"

「私は言語開発者です。すごい言語の開発者です。」で会場から笑いと拍手をもって迎えられ、まつもとさんのキーノートが始まりました。最初に新しい肩書きのHerokuチーフアーキテクトを紹介。セールスフォースのMarc Benioff との「君を雇いたいんだけど」「えっ?」 という馴れ初めを紹介されました。「私を雇ったら私の収入は増えてうれしいけど、Rubyを推進するためにはRubyデベロッパーを雇った方がいいよ。」中田さんをHerokuがフルタイムで雇用したこと、中田さんがパッチモンスターと呼ばれるコミット数1位のコミッターであることを紹介しました。紹介された中田さんはいつも通りのスタンスで会場からの拍手を受けていました。そしてこれからもRubyのコアコミッターを雇用する企業があれば歓迎したいとのことです。

■もっと多くの開発者をRubyで幸せにしたい

(以下、matzさん口調でお楽しみください。)

JRubyは素晴らしい。Java開発者にRubyを使えるようにしてくれた。ほかにも、RubotはJruby on Android。Rhodes はモバイルフォン向けのアプリをRubyで書けるフレームワーク。私はモバイルの分野にリーチしたい。モバイルフォン、ロボット、車とかね。RiteVMは去年紹介した組み込み向けRubyのVMCoreです。去年と何が違うか?今年は動いている!(会場拍手)デモしますね。(マンデルブローを描くデモを披露)組み込みRuby(mruby)はまだ若くて弱い存在だけど、いろんな可能性がある。ロボットや、TVの中とかね。完璧な言語はない。Rubyでさえも。だから選択を提供したい。私はRubyで世界の幸せをもっと増やしたいと思ってる。今私たちがRubyを使って感じているように。みなさんに感謝します。ありがとう。

■注釈:Riteとmruby

組み込み向けRubyのRiteとmrubyの違いですが、RiteはVMの部分、mrubyはRubyとしての名前とのことです。Ruby1.9とYARVの関係と同じで、YARVにあたるのがRite、Ruby1.9にあたるのがmrubyです。

■追記

RubotとRhodesの書き方が良くなかったので修正しました。

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Sat, 28 May 2011 01:30:00 -0700 Matz Keynote in EuRuKo2011 http://blog.everyleaf.com/matz-keynote-in-euruko2011 http://blog.everyleaf.com/matz-keynote-in-euruko2011

五十嵐です。EuRuKo2011でベルリンにきています。最初のmatzさんの話が終わりました。例年のEuRuKo参加の際の飛行機トラブルを紹介し、「今年は無事に到着したよ!」で会場を掴んだmatzさんのキーノート。Riteなどmatzさんの最近のお仕事を説明したキーノートでした。簡単なメモ程度ですが、速報レポートです。(英語だとメモが追いつかないです・・・(^^;))Riteに関してはRubyConfのキーノートから最新状況にアップデートがかかっていました。

■Rubyの標準化

標準化の内容は1.8と1.9の共通部分、プラットフォームの共通部分になるため、CRubyのサブセットになる。

■ギャップを埋めたい

Rubyでもっとたくさんのエンジニアをハッピーにしたい。まだRubyを使えないプラットフォームのエンジニアがいる。また、Rubyアソシエーションはまだ日本だけでの活動なので世界の活動にしたい。

■Ruby is Great!

すごい言語

すごいライブラリ

すごいコミュニティ

国際的、ナイス、たのしい

すごい実装

MagRev(smalltalk)のバーチャルマシン上で動く実装が近々リリースされる。商用。

■組み込みRuby Rite

環境がリッチになるにつれ、アプリを作るプラットフォームが必要になっている。Ruby1.9 は巨大で、POSIXに強く依存している(小さなプラットフォームだとPOSIX提供がない)。Mark+SweepのGCはオブジェクト破棄に長い時間がかかる。Riteのパフォーマンスについては、速くないのはそれほど問題ないが、レイテンシは重要。RiteはRuby1.9のサブセットだけど、ISO Rubyには非準拠。Luaを良くしたのが組み込みRubyだと思うよ!コンセプトはComponents & Configurable。Configurable、たとえばFileIOを使わない環境ではOFFにできる。double や float を選べたり、ASCIIとUTF-8を選べる。TV、ロボット、ゲームとかで使えるよ。2011年後半にはOSSで公開、MITライセンスかGPLで(GPLの部分で会場からブーイング発生(笑))。ここはスポンサーの日本政府の意向があるので私には決められないんだ。M17Nには非対応なので、コンパイル時にASCIIかUTF-8を選んで自分で実装する必要がある。Rubyスレッドには対応しないけど、fiberには将来対応するかも。

■Q&A

質疑応答で会場からの「Rubyを開発してくれてありがとう!」の発言にあわせ、会場は拍手につつまれました。:)

■追記

Riteが採用しているRegisterBaseVMについてmatzさんに聞いたので加筆。VMのトレンドには2種類あって、1つはスタックベース、もう1つはレジスタベース。スタックベースはスタックに値と命令を積んで実行するタイプ。(1積んで、2積んで、+積んで、みたいな)レジスタベースは複数のレジスタに値をいれて実行。(1と2をレジスタに入れて実行)レジスタベースは命令長が長くなるけど、命令数が少なくなる。(オペランドが命令に入るから)スタックベースは命令長は短いけど、命令数が多くなる。YARV,JVM はスタックベース。Luaはレジスタベース。経験的に、メモリから命令をとってきて、それが何か判別する処理のコストが高いのが分かってるので、今回はレジスタベースを採用。ちなみにmatzさんの好みはスタックベースだそうです。:)

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Thu, 24 Feb 2011 22:04:00 -0800 「Ruby on Rails3で学ぶWeb開発の基本」をRails Hub にて連載開始 http://blog.everyleaf.com/ruby-on-rails3webrails-hub http://blog.everyleaf.com/ruby-on-rails3webrails-hub

五十嵐です。弊社の大場、河野、鳥井がRails Hubにて「Ruby on Rails3で学ぶWeb開発の基本」の連載を開始しました。第1回は既に公開され、現在第2回の執筆に入っています。ぜひご活用ください。

本記事にも書かれている通り、Rails3認定試験がもうすぐ開始されます。私を含め、弊社メンバーも3人が先日のβ試験に参加しました。β試験との位置づけで難易度未調整な段階での試験だったため、合格率12.5%と大変難しい内容でしたが、Railsの仕組みを理解するのに有用な問題も多くありました。本連載ではRails試験の対象項目に沿って、Railsについて解説していきます。Rails3に対応した参考資料はまだ少ないので、この連載がみなさんの理解の手助けになれば幸いです。

また、この連載でRailsに興味を持っていただいた方にオススメの資料を紹介します。現在あるRails3の資料としては、松田明さんによる WEB+DB PRESS Vol.58 Rails3特集がオススメです。また、達人出版界で販売されている黒田努さんの「はじめる! Rails3(1)」も丁寧に易しくRails3の使い方を教えてくれます。海外の資料では@ITの西村賢さんの「Rails情報源の歩き方(前編)」でも紹介されている「Rails3 CheatSheet」が簡潔に新しいメソッドをまとめてくれています。「Rails情報源の歩き方」にはほかにも便利な情報源が多数紹介されていますので、アンテナを立てておきたい方にオススメです。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Mon, 27 Dec 2010 19:45:00 -0800 Sapporo RubyKaigi 03 http://blog.everyleaf.com/sapporo-rubykaigi-03 http://blog.everyleaf.com/sapporo-rubykaigi-03

Hi. I'm igaiga. This is the first post written in English in this blog.

I'll write about a great ruby event called 'Sapporo RubyKaigi 03' held in Sapporo on December 4th. Sapporo is a big northern city in Japan. It is in Hokkaido, which is the second largest island in Japan.

The total number of attendees at Sapporo RubyKaigi 03 was around 150. 110 people came from neighboring area and the rest from the outside of Hokkaido. Matz was one of those from the outside.

The event had 10 sessions and 11 lightning talks in a single track. Talks were about testing, math library, pair programming, the power of ruby blocks, a new system using dRuby, Rails, e-publishing and Ruby culture. Here is the English article which introduces Matz's keynote speech in my blog

Our president Yasuko OHBA had a talk there. The title of her slides was "Smell in Rails Apps". She introduced some episodes she experienced in developing and reviewing Rails applications and indicated the points to improve product code. The key concept of her talk was 'write your code with consideration for future newcomers'.

Sapporo RubyKaigi 03 can be said to be a great success because it had many nice sessions and was full of joy and good will all day long. Among many nice regional RubyKaigis in Japan, Sapporo RubyKaigi must be one the most enticing conferences because of nice ruby guys in the community 'Ruby Sapporo', beautiful landscapes and delicious food. You can't miss the next one wherever you live! :)

You can see the conference's photos here in flickr. I think you can feel 'love for Ruby from Sapporo'.

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Wed, 08 Dec 2010 20:00:00 -0800 札幌Ruby会議03 http://blog.everyleaf.com/35786356 http://blog.everyleaf.com/35786356

五十嵐です。今日は楽しかった札幌Ruby会議の話をします。

札幌で3回目となるRuby会議が先週行われ、約150人の参加者が集まり大盛況となりました。北海道ゆかりの方や本州で活躍する方らがLTも含め20を超える発表を行いました。

基調講演にはまつもとゆきひろさんが登壇し、「Rubyは光だ」という愛に満ちたお話と、Ruby2.0と組み込みRuby "Rite" の話をされました。(発表の動画は後日公開されると思います。)

弊社の大場も「Railsアプリ開発 野生のカン」というタイトルで発表いたしました。Railsアプリ開発時に遭遇するケースをいくつか提示し、自らの経験に基づく対処法、方針を展開しました。また、自らのRubyConfでの経験から、日本のRuby会議での発表でもスライドに英語を入れておくと英語圏の人々に読んでもらえることがあると日英併記スライドを提案しました。(発表資料はこちらで公開されています。「Railsアプリ開発 野生のカン」

そして、今回のトレンドとなった最初の発表者の柴田さん、村田さんから続く「去年と同じ服」を大場も踏襲しており、本人はどんよりとショックを受けておりましたが、会場は温かい笑いに包まれていました。

今回の札幌Ruby会議03はシングルトラックだったこともあり、このように会場が一体となって笑ったり、感極まったりできたことがとても心地よかったです。北海道の方々だけでなく、本州からの参加者(今回は約40人)とも交流できる札幌Ruby会議、またぜひ行きたいと思いますし、大変オススメのRuby会議です。

次回の開催はぜひ足を運んでみてはいかがでしょうか。以下のリンクで楽しい雰囲気を感じていただけると思います。

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Wed, 17 Nov 2010 09:48:00 -0800 初めてのRubyConf http://blog.everyleaf.com/rubyconf http://blog.everyleaf.com/rubyconf

こんにちは、@tatsuoSakurai です。
先日、初めて RubyConf に参加してきました!

行く前には英語も話せないのに行ってどうしよう?とか、
今まで海外行ったことないんだけど大丈夫かな?など、
もんもんと考えたのですが、実際行ってみると、
とてもよい経験になったのでした。

英語話せなくても行ってよかった!
ぜひぜひ多少の無理をしても行くことをオススメします。

たくさんあったよかったことの中から、
特によかったことを3つ書いてみたいと思います。

● 英語を勉強したくなる
当然ですが、まわりは全員外国人で、会話は英語です。
RubyConf では毎日会場でランチやコーヒーが提供され、
セッションの合間にも、コミュニケーションをとる時間がたくさんあって、
気軽に話せそうな良い雰囲気でした。

ランチで同じテーブルだったりすると気軽に声をかけてくれて、
すこし話すと顔を覚えてもらえます。
もっと話したいのに伝えられない!
好きな子に告白できなかった思春期以来のもどかしさでした。
来年はあの Rubyist ともっと話そうという具体的な目標ができました。

● Ruby(や他の言語)を勉強したくなる
スピーカーや参加者の Ruby 熱にあてられて、
もっともっと Ruby や他の言語を勉強したくなります。
日本の RubyKaigi とはまた違ったなにかをもらうことができました。 

● 日本の Rubyist 達とゆっくり話せる
@yukihiro_matz さんをはじめ、
日本の Rubyist 達といっしょに晩ご飯を食べに行ったり、
ホテルへ戻ったあとも部屋では同室の Rubyist と、
ロビーでは同じホテルの Rubyist と、
日本ではなかなかできない貴重なお話をたくさんすることができました。


以上です。
大事なことなので2回言いますが、迷ってたら行ってみることをオススメします。仕事の都合や旅費など、考えることはたくさんありますが、多少の苦労や無理をして行くだけの価値が必ずあります!


p.s. 
忙しい時期に快く RubyConf に行かせてくれたプロジェクトのみなさま、どうもありがとうございました!

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/642834/Photo_1.jpg http://posterous.com/users/4wEYgUBYElEZ tatsuo sakurai tatsuoSakurai tatsuo sakurai
Fri, 12 Nov 2010 21:52:00 -0800 RubyConf2010 -Matz基調講演編- http://blog.everyleaf.com/rubyconf2010-matz http://blog.everyleaf.com/rubyconf2010-matz

五十嵐です。

RubyConf2日目、朝はRubyConfXkマラソンが開催され、

5kmコースと10kmコースであわせて100人以上が朝のミシシッピ河川敷を走りました。

弊社の河野も5kmコースで参加しました。

セッションはDHHの基調講演で始まり、Matzの基調講演で終わるという豪華な布陣。

ほかにもJRuby、RubiniusやMacRubyといったRuby実装のお話や、

日本発のライブラリdrubyに関する話がありました。

特に、Matzさんの基調講演は終了後に満員の会場が総立ちのスタンディングオベーションとなり、

RubyConf初参加の私は、

海外にもこれだけの数のRuby愛を持ったRubyistがいるということを体感して感極まりました。

あとで聞いたところ、Matzさんも

「スタンディングオベーションには感動して、うるっときそうになった」

と言っていました。

今日のブログはMatzさんの基調講演をダイジェストで日本語超訳しましたのでお楽しみください。

かなり短縮していますので、細かいところは発表資料の公開をお待ちください。

---追記(2010.11.15)---

matzにっきに基調講演の内容と資料がupされましたので、より詳細はそちらをご参照ください。

--- Matz 基調講演 ---

 

2001年の第1回のRubyConfが開かれた際に、参加者は30名ほどのとても小さなカンファレンスでした。

2002年のときは自分たちはマイナーだけど、coolであろうという話をしました。

2003年はRubyをどう豊かにしていくかを話しました。

2004年はこれなかったよごめん。この年に子供が生まれました。

2005年はRubyの未来のビジョンについて議論しました。

...

2009年は80%の状況に対応できる言語としてのRubyを話しました。

今年は未来と多様性について話します。

未来は、そう、Ruby2.0です。

以下のようなことを考えています。

Traits、

名前の衝突への解決、例えば衝突時に警告するModule#mixの導入、

Tree Modification、

alias_method_chainに替わるModule#prepend、

Keyword Arguments、

Namespace(例えば前田修吾さんが話したRefinementなど)。

んで、Ruby2.0はいつでるのか?うん、クリスマスね。いつかの。

多様性の話。私は多様性が好きです。

多様性はコストがかかる。JRuby, MacRuby, Rubinius、MagLev、リソースが分散される。

それでも私は多様性が好きなんだ。

多様性の1つとして組み込み向けのRuby実装、"Rite"の話をします。

portableで、メモリ使用量も少なく、レイテンシも少ないもの。

あと、九工大の田中先生がRubyChipってのをFPGAで作ってるんだよね。

んで、Riteはいつリリースされるのか?うん、分かんない。ごめん。

でも日本の2年間の官製プロジェクトの一部に入ってる。成果はもちろんOSSで公開するよ。

githubで公開すると思うので、協力してくれる方はそれまで待っててください。

CRubyを辞めるのか?いや、そんなことはないので安心してください。

そもそもCRubyにかける時間は減ってきてるのだけど、

言語デザイナやコミュニティリーダーとしてがんばります。

Rubyを17年作っているけど、Rubyのユーザーは100人を超えないと思っていた。

ところが、現在はこの会場にもたくさんの人が来てくれているけど、

すごくたくさんの人にRubyを使ってもらっている。

それは、自分の力ではなくて、

Daveが本を書いてくれなければ、

DHHがRubyを選んでくれなければ、

そしてあなたがコミュニティに参加しなければ、今のRubyはなかったと思います。

みなさんに心から感謝します!

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Thu, 11 Nov 2010 22:09:00 -0800 RubyConf2010 -入国審査編- http://blog.everyleaf.com/rubyconf2010 http://blog.everyleaf.com/rubyconf2010

 

五十嵐です。

10回目となるRubyConfがアメリカのニューオリンズで開催されています。

万葉からは私を含め、エンジニアの半数の4人が参加しています。

1日目を終えたところですが、大変楽しい時間を過ごしております。

RubyConfはスポンサーが積極的にRubyエンジニアのリクルート活動を行っていたり、

話者と聴講者との間で質疑応答や発表中の合いの手(ヤジ?)が活発に行き交ったり、

Ruby会議とはまた違う雰囲気です。

ぜひ、日本のRubyistのみなさんにも参加して体験してもらいたいです。

RubyConfのレポートはるびまで後ほど公開されると思いますので、

今日は移動の最大の難関とも言える入国審査について書いてみます。

アメリカの中継空港(今回はシカゴで乗り継ぎました)で入国審査を受けました。

あらかじめ、問答を想定しておくと安心です。例えばこんな感じでしょうか。

  • 入国の目的は?(What's the purpose?)
    • To attend technology conference.
  • 何のカンファレンス?(What's kind of?)
    • About computer.
  • どんな仕事してるの?(What's your job?)
    • Programmer.
  • 会社名は?(What's your company name?)
    • Everyleaf.
  • 何日滞在するの?(How many days will you stay?)
    • A week.

中には日本語で「こんにちは(^^)」から入ってくれる審査官の人もいるそうですし、

問答が短かかったり長かったりする場合もあります。

(上記は今回の我々の最長ケースです。)

来年のRubyConfでみなさんとお会いできるのを楽しみにしています!

 

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Wed, 03 Nov 2010 20:56:00 -0700 Ruby技術者認定試験制度にGoldが新設されました http://blog.everyleaf.com/32421790 http://blog.everyleaf.com/32421790

五十嵐です。

Ruby技術者認定試験制度に従来からのSilverに加え、2010年10月からGoldが新設されました。

弊社でもSilver(全エンジニアが取得)に続き、Goldの取得を目指して始動しています。

私も1回の不合格を経てなんとか合格できました。

(現在キャンペーン中で、不合格になった場合は無料でもう1回受験できます。)

Silverと比べてRubyの幅広い範囲の知識が要求されるようになったと感じました。

分からなかった問題を調べると、知らないことも多くあって勉強になりました。

今回はGoldということで「目指せ黄金聖闘士」をスローガンに試験に挑んでおります。

「勝手にRuby十二宮を守る黄金聖闘士を作る」

とワルノリしている人もいるので、

みんなで黄金聖闘士を目指してがんばっていきます!

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Tue, 07 Sep 2010 22:15:00 -0700 Rails3でRSpec http://blog.everyleaf.com/rails3rspec http://blog.everyleaf.com/rails3rspec

五十嵐(igaiga)です。

Rails3でRSpecを使おうとしてはまったので日記を書きます。

Gemfile へ以下のように書いて

gem 'rspec-rails'

bundle install するとRSpec1系がインストールされてしまいます。(2010.9.8現在)

Rails3ではRSpec2系を使いたいので、以下のように書き直してみたのですが、

 

gem 'rspec-rails', '>= 2.0.0'

 

今度は2.0.0はまだリリースされていないと言われます。

ベータバージョンを明に書くのは嫌だな、と思ったら、ursmさんのページに以下のような記述が。

 

gem 'rspec-rails', '>= 2.0.0.beta'

これで最新のRSpec2系beta版がインストールされるようになりました。

あとは

bundle install
rails g rpsec:install

のあとで、rails g scaffold foo などで一緒にspecファイルひな形が生成されます。

t_wadaさんへこの話をしたところ、誰もが通る道のようで安心(?)しました。(^^ゞ

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Tue, 07 Sep 2010 03:13:00 -0700 Windows上で Ruby1.9.2 + Rails3 + SQLite or MySQL 環境を構築 http://blog.everyleaf.com/27538644 http://blog.everyleaf.com/27538644

五十嵐(igaiga)です。

RubyKaigiはもりだくさんの内容で、弊社メンバーも年に一度の祭典を満喫しました。

RubyKaigi最終日のAsakusa.rbで Yehuda Katz さんが

「今日か明日にRails3が出るよ」と宣言した通り、

日本時間の2010.8.30にRails3がリリースされました。

弊社でもベータ時代からRails3を使っていたプロダクトを正式版へアップデートしたり、

Rails2系のプロダクトをRails3へバージョンアップする準備を始めています。

今日は、WindowsでRailsアプリを立ち上げる機会があったので、

Windows上の Ruby1.9.2 + Rails3 + SQLite or MySQL 環境を構築する手順を紹介します。

 

Ruby1.9.2 インストール

http://rubyforge.org/projects/rubyinstaller/

から rubyinstaller-1.9.2-p0.exe をダウンロードしてインストールします。

ruby と gem がインストールされます。

 

SQLite3 インストール

http://www.sqlite.org/ 

か らsqlitedll-3_7_2.zip をダウンロードします。

sqlite3.dll を C:\Ruby192\bin へコピーします。

 

Rails3 インストール

$ gem install rails

 

RailsApp作成

$ rails new appname

$ cd appname

$ bundle install

$ rails s

localhost:3000 へアクセスできれば成功です。

Scaffoldで何か作ってみましょう。

$ rails g scaffold user name:string email:string

$ rake db:create:all

$ rake db:migrate

と、ここまで簡単に到達できました。

 

次はMySQLを使うアプリを作ってみました。

 

MySQLを使う(mysql2 アダプタ)

MySQLをダウンロードしてインストールします。

http://dev.mysql.com/downloads/mysql/#downloads

Windows (x86, 32-bit), MSI Installer Essentials - Recommended

 

$ rails new appname -d mysql

$ cd appname

$ bundle install

gem 'mysql2' (Rails3標準のmysqlアダプタ)でエラーがでます。

 

Error installing mysql2: ERROR: Failed to build gem native extension.

 

調べたところ、以下でmysql2のwindows対応が進められているようです。

今日(2010.9.7)現在、まだバグが残っているもののインストールはできる模様です。

http://github.com/brianmario/mysql2/issues#issue/8

 

 

MySQLを使う(ruby-mysqlアダプタ)

 

回避策としてpure ruby の ruby-mysql アダプタを使う方法を試してみました。

アプリを再作成します。

$ rails new appname -d mysql

Gemfileの以下の箇所を修正します。

#gem 'mysql2'

gem 'ruby-mysql'

 

$ bundle install

 

config/database.yml の以下の行を変更します。(development, test, productionの3つ)

adapter: mysql

host: 127.0.0.1

 

(host: localhost にしていると、 uninitialized constant Mysql::Protocol::UNIXSocket というエラーが出ます。)

 

$ rails g scaffold task name:string memo:string

$ rake db:create:all

$ rake db:migrate

 

これで動きました!

mysql2が動作するようになるまで ruby-mysql を使ってみようと思います。

 

動作させるにあたり、以下のページを参考にさせていただきました。

ありがとうございました。

 

http://d.hatena.ne.jp/toyoshi/20100902/1283389510

 

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Tue, 27 Jul 2010 21:07:00 -0700 カフェ ドゥ 万葉 http://blog.everyleaf.com/24342583 http://blog.everyleaf.com/24342583

はじめまして。今年の4月から万葉に勤務しています五十嵐(twitter ID:igaiga555)です。今回、開発者ブログのリニューアルにあわせて、本ブログデビューです。どうぞよろしくお願いします。

今日は万葉が実施しているユニークな試み「カフェ ドゥ 万葉」を紹介します。週に1日、午後の時間に社外の方に遊びにきていただき、同じ場所でそれぞれ自分の仕事をもくもくとこなすという試みです。特に一緒に作業をしたりするわけではないのですが、技術的にわからないことがあれば質問しあったり、おやつの時間にお菓子を食べて雑談したりします。特別なことをやっているわけではないのですが、これがなかなかに面白い時間なのです。同じ会社ではないのに一緒に働いているような気分になれますし、カフェのお客さんの得意な分野について質問したりもできますし、フリーで働いている方とはお仕事のお話をしたりして良い関係のきっかけになったりもします。

常連でいらっしゃる日本Rubyの会会長の高橋さんにインタビューしてみました。
「カフェ ドゥ 万葉、いかがですか?」

高橋会長:「お菓子おいしいです!」

ありがとうございました。そんな感じのゆるい営業をしております。

「カフェ ドゥ 万葉」は永和システムマネジメントの角谷さんが名付けてくださいました。これはフランス語のようなので、フランス人の @Zavie さんに綴りを聞いてみました。すると、ドゥは de と du があるとのこと。どう違うのでしょう?

@Zavie
it depends on the "gender" and count of what is refers to. Tell me the word, I'll tell you the correct use. ;-)


「万葉」が男性名詞か女性名詞かで違うのですね!

@Zavie
Cafe de Manyo sounds correct, since Manyo is a proper noun in this case.


Cafe de Manyo は自然だそうなので、Cafe de Manyo でいいみたいです。
でも、外国語のときに de と du をどうやって決めるの?

@Zavie
hmm, tough question. I guess it would a choice based both on gender when translated, what it refers to, and how it "sounds".


難しい質問だったようです。"sounds"によるとのこと!難しいですね。><

さらに "Le" ( = the ) をつけるとオススメとのこと。

"Le café de Manyo"


よりかっこ良くなりました。(^^)

カフェ ドゥ 万葉 に興味を持っていただき、遊びに来たいという方はお近くの万葉社員までお声かけください。開店の準備がございますので、事前にご予約をお願いしております。

カフェ ドゥ 万葉 は、万葉のメンバーとコミュニティのエンジニアのみなさんをつなぐ、私たちにとって大事な場所になっています。とてもおもしろい場所なので、この試みがほかの会社さんにも広まるといいなと思っています。

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/958612/igaiga_icon101016_from_koichiro.jpg http://posterous.com/users/4wEYgUxscF9f Kuniaki IGARASHI igaiga Kuniaki IGARASHI
Sun, 18 Apr 2010 12:00:00 -0700 sub resources プラグインの紹介 http://blog.everyleaf.com/23080124 http://blog.everyleaf.com/23080124

こんにちは、大場です。

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

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

この記事を書く動機

sub_resources はRails 2.3.x で使える、ルート作成を助けるプラグインです。そろそろ Rails 3 がやってきてルートが大きく変わるときにこの話題をするのは旬とはいえませんが、この話題の背景にはURLやコントローラの設計ニーズの話があります。この記事を通じてそのあたりのモヤモヤした領域を整理することができることは無駄ではないはずです。また、Rails 3 で私のニーズが解決しなければ sub_resources を改良して使って行くつもりだし、Rails 2.3.x で私としては sub_resources が役に立つと思っているので(一部、不足はあるのですが)、記事がまったく無駄になるということもないだろうと考えて、書いておくことにしました。

Rails2のURLマッピング(ルーティング)

原則として、単純な CRUD を行なうリソースと、そのリソースを単純に階層化していくだけなら、sub_resources プラグインは要りません。

例えば、グループのCRUDのルート(RailsにおけるURLとアクションのマッピング定義)は以下のようになります。

# /groups/3 のようなURLを作る
map.resources :groups

単純に階層化すると次のようになります。

# /groups/3/members/5 のようなURLを作る
map.resources :groups do |groups|
  groups.resources :members
end

ここまでは非常にシンプルで素晴らしい。しかし、このようなシンプルさは、基本的には以下のルールの範囲内でしか成り立ちません。

  • 1つのコントローラで1種類のリソースのCRUDのみを提供する

この原則から外れると、ルート定義は少しずつ複雑になっていきます。そこで、現実的にはどのような外れ方があるかを以下に説明していきます。

CRUD以外のアクションを作りたい

多くの問題がこの「CRUD以外のアクションを作りたい」に集約されます。しかし、結果としての形は同じでも、このニーズはさらに次のように分解できます。

  • 動詞の追加 - そのコントローラの「リソース」に対するべつの「動詞」を追加したい
  • 標準的でない対象範囲 - そのコントローラの「リソース」(ただし、範囲が標準の想定と違う)に対するCRUDを追加したい
  • サブリソースの利用 - そのコントローラの「リソース」の付属的なリソース(ここでは「サブリソース」と呼んでおきます)に対する機能を追加したい

動詞の追加

動詞の追加の例としては、「ロック」「ロック解除」といった動詞を追加したいというケースがあります。この場合の解決方法には次のようなバリエーションがあります。

  • resources に追加設定を記述する
  • 「ロック状態」を別リソースと見なして、URLをさらに階層化する。「ロック状態」へのCRUDとして表現するので”動詞”部分は増やさない。

resourcesに追加設定を記述するには次のようにします。

map.resources :book, :members => {:lock => :post, :unlock => :post}

この方法は簡単ですが、難点として、URLやヘルパーメソッド名(ルート名)に動詞が入るということがあります。

POST books/:id/lock      # lock_book_path で生成できる
POST books/:id/unlock    # unlock_book_path で生成できる

本来、RESTなURLには動詞は含めないのでこれはあまり美しいとはいえません。

別の方法として、「ロック状態」を別リソースとして表現する方法があります。つまり、books/3/lock というURL(ここでいうlockは名詞)を考え、これへのPOSTを「ロックする」、DELETEを「アンロックする」と見なします。つまり、「動詞の追加」ではなく「サブリソースの利用」というニーズにシフトするということになります。これは美しいのですが、ルートの設定は面倒になってきます。

with_options({:controller => 'books'}) do |books|
  books.book_lock 'books/:id/lock', :action => 'lock',
   :conditions => {:method => :put}
  books.connect 'books/:id/lock', :action => 'unlock',
   :conditions => {:method => :delete}
end

sub_resourcesプラグインを使うと、この後者の設定を楽に行なうことができるようになります。この場合は、1つのBookに対して1つのLockしかないので、次のように sub_resource (単数系)のオプションを使って書くことになります。

map.resources :books, :sub_resource => :lock

こうすると、先ほどの2つのマッピングは以下のようになります。

# book_lock_path でURLを生成できる
PUT 'books/:id/lock'     ->  :action => 'update_lock'
DELETE 'books/:id/lock'  ->  :action => 'destroy_lock'

なお、sub_resource(s)オプション内には、通常のresourcesへ渡せるオプションがすべて使えます。例えば以下のように書くことができます。

map.resources :books,
  :sub_resource => {:lock => {:only => [:update, :destroy]}}

アクションが単純なパターンに変えられますが、これはこれで全コントローラで統一されると読みやすいという利点があるのでいいと思っています。

標準的でない対象範囲

シンプルなマッピングから逸脱する一般的な要因にはもう一つ別の問題が挙げられます。それは、標準的でないリソースの範囲に対するアクションのマッピングです。この問題はさらに以下の2つに分けることができます。

  • URL prefix (絞り込み条件)が標準的でない - groups/members といった :group_id を挟まない URL のカバー
  • CRUDの対象範囲が標準的でない - 集合に対するDELETEなどを行ないたい

sub_resourcesプラグインは後者にしか対応していません(本当は前者にも踏み込みたいのですが)。

URL prefix (絞り込み条件)が標準的でない

まず、標準的な URL prefix の例を挙げましょう。「あるグループに所属するメンバー一覧」の一般的なルートは次のようになります。

  • GET /groups/3/members
  • GroupMembersController の index アクション
  • groupmemberspath でURLを生成できる

上記のように ‘groups/:group_id/…..’ で始まる形は、Rails では標準的です。reousrces のネストなどで簡単に定義できます。

では、「グループに関係なくすべての新しいメンバーを一覧する機能」があったとしたらどうでしょうか? これが、標準的ではないリソースの範囲の例です。メンバーに対するほとんどの機能は、グループをURLで絞ることを前提としているのに、グループを超えた検索機能や閲覧機能を提供するとなると、戸惑ってしまいます。例えば、以下のような候補があるでしょう。

候補1

  • GET /members
  • MembersController の index アクション
  • members_path でURLを生成できる

悪くありませんが、GroupMembersController との共存で混乱するかもしれませんし、URLの統一感としては多少迷うところです。メリットとしては、ルートの定義が多順ですし、フィルターなどのしがらみもなく実装がしやすいと思います。

map.resources :members

一方、メンバーというのはグループの下にあるのだから、「特定のグループ」を示している :group_id の部分を抜いて、’groups/members’ といったURLにするということも考えられます。

候補2

  • GET /groups/members
  • GroupMembersController の inter_groups アクション
  • intergroupsmembers_path でURLを生成できる

この例では、同じコントローラにまとめられますが、’groups/:id’ ではなく ‘groups’ を冠するため、複雑なルート設定が必要になります。

map.inter_groups_members 'groups/members',
  :controller => 'group_members', :action => 'index',
  :conditions => {:method => :get}

残念ながら、sub_resourcesプラグインにはこれに対する有効な支援策は入っていません。Rails3の動向もみながら、いずれ何とかしたいとなと私が考えていることのひとつです。

CRUDの対象範囲が標準的でない

標準的でない対象範囲という話題ではもうひとつありがちな悩みがあります。それは、Railsの想定しているCRUDの対象範囲と違うものを提供したい場合です。例としては「すべての本を一括で削除したい」といった操作を(も)提供したい場合があげられます。実現したい内容は次のようになります。

  • /books への DELETE で destroy_books アクションを呼ぶ

ごく単純なのですが、RAILSの標準ではないため、これの実現はまたもや手動でルートを定義しなければなりません。

# 手動定義の例
map.connect 'books',
  :controller => 'books', :action => 'destroy_all',
  :conditions => {:method => :delete}

map.resourcesへの追加設定で何とかなるのでは?と思われる方もいるかもしれません。以下のようにすると似たことが実現できますが、URLとヘルパーメソッド名が犠牲になります。

# reosurcesを使った定義の例
map.resources :books,
  :collection => {:destroy_all => :delete}

この場合、destroyallbookspath で /books/destroyall URLが生成されます。合理的ですが、前の例ほど美しくはありません。

しかし、sub_resources プラグインを入れていると、上記のようなresourcesを利用した記述で、手動定義とまったく同様の効果を得られるようになります。というのは、destroyall、updateall といったアクション名を、全体へのdestoryやupdateであると心得て、自動的にきれいなURLにしてくれる機能を入れているからです。命名規則を守って書くだけできれいなURLを実現できます。なお、この機能は、sub_resource(s)をつかった定義内でも利用することができます。

サブリソースの利用

ここまでで、sub_resources プラグインの意味をだいぶ掴んでいただけたと思うのですが、冒頭に挙げた「標準的なCRUD」を逸脱する最後の例についての説明が残っています。これが、サブリソースの利用です。「ロック」の例でも挙げましたが、1つのコントローラで、メインのリソースのほかに、副次的なリソースを扱いたいことがあります。これについてはいろいろな動機が考えられます。

  • 前述の「ロック」の例のように、CRUD以外の動詞を使わないようにするために「名詞」であるリソースを増やすケース
  • 日記の画像のように、ほぼ日記の一部であるものを手軽に同じコントローラで制御したいケース
  • 多くのコントローラに共通するサブリソースの実装をモジュールなどに切り出したいケース

最後の例はRubyConf用の資料で説明しています。簡単にいうと、updatetags、destroytags といったアクション名にしておけば、モジュールに切り出して色々なコントローラからincludeするだけですむが、ArticleTagsController、UserTagsController、などとタグの対象ごとにコントローラを作るのは大変だ、というようなニーズです。これについてはここでは割愛して、単純に、日記の画像の例で説明しておきます。

なお、1つのコントローラで複数のリソースを扱うのは、原則的には良くないといえます。Railsアプリケーションとしては基本的には1コントローラ1リソースで表現するようにし、何か理由のあるときにサブリソースを検討するとよいと思います。

日記の画像についての要件として、以下があるとします。「日記には3つ画像がつけられる。作成や変更は日記と一緒に行なわれるので、それぞれの画像の表示機能だけを BlogsController につけたい。」

このようなとき、sub_resources プラグインを使うと以下のように記述することができます。

map.resources :blogs, :sub_resources => :images

このようにすると、’blogs/3/images/17’ といった URL が BlogsController の image アクションに対応づけられます。このとき、:id には ブログのid 、:image_id に画像のidが入ります。このように、コントローラの主たるリソースのid がつねに :id になるのは、フィルターなどで統一的に処理がしやすくなって便利です。

sub_resources プラグインの機能のまとめ

以上、Rails2.3.xのルーティングで標準的に書きづらいギャップの話と、それをカバーするための sub_resources プラグインの話をしました。まとめると、sub_resources プラグインは以下の機能を持っています。

  • 1つのコントローラに、付属的なリソースへの操作を追加するためのきれいなルート設定を簡単にする。アクション命名が統一的になる。 ** 付属的なリソースがメインリソース1つに対して複数の場合は sub_resources オプションを使う ** 付属的なリソースがメインリソース1つに対して1つの場合は sub_resource オプションを使う
  • リソースの集合へのupdate、destroyをきれいなURLで実現できるようにする

もし興味のある方はぜひ使ってみてください。また、Rails 3での最適解(もし、Rails3でこれらがすべて満たされるのでなければ)について一緒に取り組んでいただければと思います。

Permalink | Leave a comment  »

]]>
http://posterous.com/images/profile/missing-user-75.png http://posterous.com/users/4wEYgUC23xdL nay3 nay3
Fri, 12 Feb 2010 12:00:00 -0800 RESTとURL設計の重要さを理解して「キレイなエンジニア」を目指す! http://blog.everyleaf.com/resturl http://blog.everyleaf.com/resturl

こんにちは、@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とお友達になれそうですか?^^

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/642762/______-1.png http://posterous.com/users/4wEYhxtNoGNH Everyleaf Everyleaf
Mon, 21 Dec 2009 12:00:00 -0800 Rails で cron を使わずに cron っぽいことを行う方法 http://blog.everyleaf.com/rails-cron-cron http://blog.everyleaf.com/rails-cron-cron

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

poormans_cron プラグインを使う

poormans_cron というプラグインを使うと、 cron を使わずに cron っぽいことができるようになります。 poormans_cron は指定した間隔毎に任意の処理を実行するためのプラグインです。 また、基本的に cron は分単位からの指定しかできませんが、 poormans_cron では秒単位で処理の起動間隔を指定することができます。

仕組み

poormans_cron の仕組みはとても簡単です。 poormans_cron をインストールするとコントローラーにフィルターが一つ追加されます。 そのフィルターで、poormans_cron に事前に登録しておいた処理が定期的に実行されます。 この処理はコントローラーとは別のスレッドで実行されるので、リクエストを行ったユーザーが poormans_cron の処理が終わるまで待たされるということはありません。

インストール方法

./script/plugin install git://github.com/jugyo/poormans_cron.git

使い方

テーブルの作成

まず、 以下のようなテーブルを作成します。

create_table :poormans_crons, :force => true do |t|
  t.column :id,           :integer
  t.column :name,         :string
  t.column :interval,     :integer
  t.column :performed_at, :datetime
end

cron の作成

poormans_cron で定期的に処理を実行するには、 事前に poormans_crons テーブルに cron データを作成しておく必要があります。 cron に必要な情報は以下の二つです。

  • cron を識別するための名前
  • 実行間隔(何秒毎に処理を実行するのか)

例えば、1時間毎に処理を実行する cron を作成したい場合は以下のようにします。

PoormansCron::Cron.create(:name => 'hourly', :interval => 60 * 60)

cron データの作成にはマイグレーションを使うと良いと思います。

cron への job の登録

cron に実行してもらいたい処理(job と呼びます)を登録するには以下のようにします。

PoormansCron::Cron.register_job(:hourly) do
  # do something
end

register_job メソッドに渡すブロックの中に job の処理を記述します。

この設定は config/initializers/poormans_crons.rb 等に書いておくと良いと思います。

以上で poormans_crons の設定は完了です。

まとめ

とあるプロジェクトで必要にせまられてこのプラグインを作りました。 秒単位で処理の起動間隔を指定できるので、場合によっては cron よりも便利かもしれません。 また、デーモンの代わりに使うのも良いかもしれません。 ただし、当然ながらユーザーのアクセスがないと何も実行されません。

poormans_crons のソースは Github に置いてあります。

http://github.com/jugyo/poormans_cron

要望やバグ等があれば報告していただけると有り難いです!

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/642762/______-1.png http://posterous.com/users/4wEYhxtNoGNH Everyleaf Everyleaf
Sun, 11 Oct 2009 23:22:00 -0700 macbook(late2008)にsnow leopard インストール+カーネル64bit化する http://blog.everyleaf.com/macbooklate2008snow-leopard-64bit http://blog.everyleaf.com/macbooklate2008snow-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のバックアップ++

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

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/642834/Photo_1.jpg http://posterous.com/users/4wEYgUBYElEZ tatsuo sakurai tatsuoSakurai tatsuo sakurai
Thu, 17 Sep 2009 12:00:00 -0700 開発用メールサーバmocksmtpdを活用する http://blog.everyleaf.com/mocksmtpd http://blog.everyleaf.com/mocksmtpd

こんにちは。@denpachiです。

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

 

mocksmtpd とは?

メールを送信する動作確認やテストを行う際に、

GmailのSMTPを使ったり、実際に開発用のメールサーバを立てて

メール送信のテストを行っている方も多いと思います。  

 

それをもう少し手軽にテストできるような仕組みがmocksmtpdです。  

mocksmtpdを立ち上げておくと、

メールをどこにも送信せずに、ローカルのディレクトリにHTML形式で保存してくれます。  

 

 

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

 

インストールと起動

 

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

インストールは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

 

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

 

Permalink | Leave a comment  »

]]>
http://files.posterous.com/user_profile_pics/642780/avater.jpg http://posterous.com/users/4wEYhQPPKEYp yuuki-everyleaf yuuki-everyleaf