Ruby on Rails4.0.0正式版でJSON関連コードが無いキレイなscaffoldを生成する方法

Ruby on Rails4.0.0が正式リリースされましたが、4.0.0RC1 までと JSON関連のコードが無いscaffoldを生成する方法が変わりました ^^;

http://rubyonrails.org/images/rails.png

4.0.0RC1 までは、以下のオプションで JSON関連のコードが無い、きれいな controller と views の *.json.jbuilder が生成されませんでした。

% rails g scaffold todo due:date task:string -c scaffold_controller

しかし、Ruby on Rails4.0.0正式版 (4.0.0RC2から)は上のオプションでは JSON関連のコードが生成されてしまいます。--jbuilder=false を指定すれば *.json.jbuilder は生成されなくなりますが、controller には 醜い respond_to 〜 format.json があります ^^;

コードを見て判った事は、JSON関連のコード生成は jbuilder Gem が行っています。 したがって、Gemfile から jbuilder Gem をコメントアウトしてしまえばOKです。

結論

Ruby on Rails4.0.0が正式でJSON関連のコードが無いscaffoldを生成するには

Gemfile を以下のように変更します

gem 'jbuilder', '~> 1.2'

↓ 変更

# gem 'jbuilder', '~> 1.2'

Rails4.0で rake db:fixtures:load FIXTURES_PATH=spec/fixtures が deprecated と表示された際の対処法

Rails4.0RC2もリリースされましたね!
Rails4.0 で rake db:fixtures:load FIXTURES_PATH=spec/fixtures を実行すると以下のようなワーニングが表示されます。fixtuesの読み込みは出来てますが、気持ち悪いですよね。

% rake db:fixtures:load FIXTURES_PATH=spec/fixtures 
Using FIXTURES_PATH env variable is deprecated, 
please use ActiveRecord::Tasks::DatabaseTasks.fixtures_path = '/path/to/fixtures' instead.

色々と検索したのですが、適切な回答が見つからなかったので、ここに書いて置きます。

暫定的な対応

2013/12/19 Rails 4.0.2 では動作しないようです

fixturesのディレクトリーを指定する FIXTURES_PATHは deprecated ですが、fixtures ディレクトリーの下のディレクトリーを指定する FIXTURES_DIR は、まだ有効です。そこで、これを ../../ と悪用(?) して本来のfixturesのディレクトリー (デフォルトは test/fixures) の外のディレクトリーを指定しています。

% rake db:fixtures:load  FIXTURES_DIR=../../spec/fixtures

たぶん正しい対応


ワーニングに書かれているように、ActiveRecord::Tasks::DatabaseTasks.fixtures_path にfixturesのディレクトリーを指定すれば良いのですが、どこにこれを書いたら良いのかを見つけるのに手間取ってしまいました。

実は、 rake db:〜 の rakeタスクは lib/tasks に db.rake ファイルを書くことで機能を追加・変更できます。

namespace :db do
  task :load_config do
    ActiveRecord::Tasks::DatabaseTasks.fixtures_path = File.join(Rails.root, 'spec', 'fixtures') 
  end
end

2013/12/19 修正
2013/12/25 修正

そこで、 lib/tasks/db.rake ファイルに上のように書いてあげると、通常の rake db:fixtures:load で spec/fixtures から読み込んでくれます。

RubyKaigi 2013の感想など

生まれかわった RubyKaigi RubyKaigi 2013 に参加しました。

http://rubykaigi.org/2013/images/badgeOfficialSponsor.png

今回も私の会社 EY-Office は スポンサー (一番小さいのですが)になりました。 現在のEY-Officeの売り上げのほとんどが Ruby, Ruby on Railsの教育なので当然ですよね ^^)

RubyKaigi全体の感想など

Matz がいる RubyKaigi

今までのRubyKaigiは土日開催が多く、Rubyのパパ Matz(まつもとさん)は宗教上の理由から土曜夜の帰ってしまわれる事が多かったと思います。
しかし、今回は木金土開催だったので、いつもMatzが会場にいました。 にこにこと質問に応じてくれるMatz 、お弁当を配ってくれるHeroku社員のMatz、 ボッチのMatz 。。。 私も Rubyの質問をゆっくりと出来ました。
Matz がいる Rubykaigi は Matz is nice so we are nice. が感じられる良い空間になってたと思う。

みんなと語りあえる Bentou のありがたさ

今回は Heroku が Bentou スポンサーとして、毎日の昼ご飯を提供してくれました。おかげで、お店に行ったりする時間が要らず、いろいろな参加者と話す事が出来、有形無形の得るものがりました。
Herokuさんありがとうございます。Microsoftさんも飲み物ありがとうございます。

しかし、語り合えない

@a_matsuda さんが、なぜ(日本人)みんなは、いつも使ってるモジュールやツールの作者の(外人の)開発者が来てるのに、話さないのかな? と言われ・・・・

その晩、考えました。

  1. 便利に使ってるモジュール・ツールでも、使ってるだけで、そのコードを読んだりしてない。したがって作者も知らない
    • これは、日本人の作者でも同じで、使っていても、そのモジュール・ツールそのものに興味をもっていない事が多い
    • 何か自分のやりた事が出来そうで出来ない時などはコードを読むが、そうい機会はそんなに多くない
  2. 英語力の低さ(低いと思ってる意識)もあり「素晴らしいモジュール・ツールをありがとう」と声をかける事が出来ない
  3. 上の2つが関連し、そのモジュール・ツールに興味があれば、拙い英語でも質問をしたくなるし、技術的な話しなら出来そうだけど、一般的なお話が出来る英語力は無いよ・・・

しかし、技術は圧倒的に英語圏で生まれるいまの時代、このようなチェンスに話しが出来ないのは本当にもったいないよな。
英語がんばろう! コードもたくさん読もう!

Ruby on Railsの人がたくさん登壇

以前より Ruby on Railsの人(と思える人)のセッションが増えたと思います。しかも、彼らの多くも Rubyの事を語っていました。
昔からRubyを使っていた人たちと、Ruby on Railsを使ってる人の溝みたいな物が、凄く小さくなっているように思え嬉しかった。

角谷さんの RubyKaigi

角谷さんは世界で一番 RubyKaigi の事を考え、時間を使っている人だ。 1年の休みを取ってからの 2nd Season の RubyKaigiが現実になり、緊張したり、焦ったりしながらも、輝いてる Kaigi屋の 角谷さんを 久しぶりに見られたのも 嬉しかった。

技術的な収穫

オブジェクト指向の再来

オブジェクト指向が今ほど広まっていなかった昔、一部のエンジニアたちが熱く語っていたオブジェクト指向。時は流れ Ruby on Rails を始めオブジェクト指向は一般的になりたくさんの場所で使われ出してみると、あらたな問題が出てくる・・・ 今回のRubyKaigiでも DCI, Refactoring Fat Models with Patterns、Refinement .... オブジェクト指向の古典と、さらにRubyらしい新しい形の話しが聞けた。今後も楽しみ。

RubyMotion

登場したときに、これは面白い! と思った RubyMotion でしたが、購入後まったく触っていませんでした、今回 RubyMotion がどのような仕掛けになっているのかが判りました。
そしてその面白さに惹かれて、現在あるアイデアを実装出来るのか試しています。Objective-Cが抵抗なく書ける私ですが、案外 面白い事が出来そうだとワクワクしています。

PyPy

RubyKaigi終了後の Tokyu.rbの宴会であった Pythonista の方(すいません名前を忘れてしまいました!)から PyPy の話しを聞かせてもたっら。
PyPyは Python で書いた Pythonの処理系だと思っていたのですが、現在は 動的言語処理系を作るためのフレームワークなのだそうです。LLVMGCCにかわる新しいCコンパイラーではなく、コンパイラーを作るためのフレームワークだというのと同じだそうです。面白そうですね Topaz (PyPyで作られたRuby処理系) もそんなところから生まれて来たんですね、納得納得。

年を取った

Matzの髪の毛や髭に白いものが混じって来て・・・ という話しではなく。3日間の密度の高いRubyKaigiに参加するのは体力が無く3日目は疲れていて、ついつい居眠りをしてました ^^;

歳を取ったなぁ〜 と思い知らされました。 でも老体にむち打って来年も参加します!
来年もスポンサーになれるようにがんばって仕事しよう !!

今すぐ、Windows7で Ruby 2.0.0 + Rails 4.0RC1 を試したい人向けのメモ

以前書いた 今すぐ、Windows7で Ruby 2.0.0 + Rails 4.0beta1 を試したい人向けのメモ より、だいぶ楽になったので書きました。


警告
  • 一応EY-Office教育テキスト(Rails, RSpec)のコードが動くところを確認しましたが、Rails4.0RC1の動作を保証するものではありません
  • もしMacLinux環境が使えるなら、そちらを使う事を強くお勧めします
  • irb, rails consoleでワーニングが出ます → Stack Overflow
  • Windows7(64bit)で試しました、WindowsXP等で動くかどうかわかりません
  • RailsInstaller も Ruby2.0.0に対応したインストラーを準備しているようなので、そちらを待つのも良いかもしてません
インストールの概要
インストール手順
  • http://rubyinstaller.org から Ruby 2.0.0-p125 と DevKit-mingw64-32-4.7.2-20130224-1151-sfx.exe をダウンロードし、インストール
    • インストール先は C:\Ruby200 等にしましょう
    • PATH に C:\Ruby200\bin を追加しましょう(インストラーで設定)
    • DevKitのインストールは訳あって C:\Ruby200\DevKit にしました
> gem update --system -N
> gem install bundler -N
> gem install rails --version 4.0.0.rc1 -N
> rails new dummy
  • sqlite3 (sqlite3-1.3.7-x86-mingw32)は動かないのでアンインストール
gem uninstall sqlite3
> cd C:\temp
> C:\Ruby200\DevKit\mingw\bin\bsdtar.exe -xvf  sqlite-3.7.15.2-x86-windows.tar.lzma
> copy bin\sqlite3.exe C:\Ruby200\bin
  • sqlite3の再インストール
> gem install sqlite3 -N --platform=ruby -- --with-opt-dir=C:\temp
  • Ruby on Rails の動作が確認できたら C:\temp は削除してかまいません
プロジェクト作成時の注意

新規にRailsプロジェクトを作る際に bundle が動くと、また動作しないsqlite3-1.3.7-x86-mingw32がインストールされてしまうので以下のように、プロジェクトを作成すると良いでしょう

> rails new rails_app -B
> cd rails_app
> bundle install --local

まちがって、普通に rails new rails_app してしまった時は sqlite3-1.3.7-x86-mingw32 をアンインストールすれば OK

>gem uninstall sqlite3
Select gem to uninstall:
 1. sqlite3-1.3.7-x86-mingw32
 2. sqlite3-1.3.7
 3. All versions
> 1
Successfully uninstalled sqlite3-1.3.7-x86-mingw32
おまけ

この方法で作った C:\Ruby200 をコピーしPATHを設定するだけで、簡単に他のPCに Ruby on Rails環境をコピーできます ^^)

Xcodeでプロジェクトにドラッグ&ドロップでファイルを追加する場合の注意点

昨日の「出版記念! iPhone開発初心者向け無料セミナー」参加者のみなさま、参加ありがとうございました。

ハンズオンで、音声ファイルをプロジェクトに追加する際には、File → Add Files to "..." を使った場合に表示されるダイアログで、 ■ Copy items into destination group's folder (if needed) をチェックして下さいとお伝えしましたが、

ドラッグ&ドロップでファイルをプロジェクトに追加した際に表示されるダイアログは下の様で、最初は Add to targets □ がチェックされていません。ドラッグ&ドロップ した場合は、これもチェックして下さい。
Add to targets がチェックされて無い場合には、ターゲット(iPhone,iOSシュミレーター)にはそのファイルはコピーされません。

ちなみに、Add to targets がチェックされて無い場合は Build Phases タブの Copy Bundle Resources でファイルをターゲットに追加できます。

書籍 「はじめてのiPhone/iPadアプリ開発」の出版を記念して、初心者向けiPhone開発の無料セミナーを行います !!

「はじめてのiPhone/iPadアプリ開発」の出版を記念して、初心者向けiPhone開発の無料セミナーを行います。
iPhone開発に興味のある方、是非申し込んで下さい。

http://atnd.org/events/38267

ピダハン―― 「言語本能」を超える文化と世界観

休暇中に読みました。

この本は、言語学者でありプロテスタントの宣教師であった著者が布教の為にアマゾン奥深くに住む少数民族ピダハンの言葉を学ぶために彼らの村に暮らした記録と、著者が彼らの言語や文化を学ぶことで著者自身の人生が変わってしまう物語です。

ピダハン―― 「言語本能」を超える文化と世界観

ピダハン―― 「言語本能」を超える文化と世界観

ピダハンの言葉は

  • おはよう、さようなら、ありがとう、すみませんなどの「交換的言語使用」がない
  • 数をあらわす単語が無い(1,2 もない)
  • 色の名前や右左を表す単語がない
  • いかなる言語とも似てない
  • 村にはピダハン語以外を話せる人はいない(片言は話せるが)

そして、ピダハンの生活・文化には

  • 主に川で魚を取ってくらしている、一年を通じ魚は良く捕れる
  • 食物を保存する習慣はない
  • 集団で暮らしているが、王や村長はいない
  • 神話がない
  • 宗教、宗教的儀式がない
  • 夜にじっくりと寝ることはない、15分から1時間程度の仮眠を幾度となく取る(アマゾンの奥地では絶えず野生の脅威があるので熟睡するのは危険らしい)
  • 子供は歩けるくらいになれば一人前の人間として扱う、けして子供だからと言って特別扱いしない
  • 死を恐れていない
  • 自分の見た物、仲間の見たもの以外には興味がない
  • よく笑う

ピダハンはアマゾン奥深くに住んでいますが未開の人ではありません。船の通れるような川沿い住んでいるのでブラジル人の商人が訪れ取引もしますし、近くの部族が西洋化しているのは知っています。彼らは西洋の文明は知っていながらも、自分たちの生き方の方が素晴らしいと信じ生活を変えません。

著者は、連続ではありませんが30年近くピダハンと暮らしました。ピダハン語を理解し、ほかの学者と共同で彼らに数字を教えようと半年間も努力しましたが、彼らは数字に価値を見いださず結局失敗しました。
また、彼らにキリスト教を教えようとしましたが、自分または仲間の見た物以外は信じない彼らには、「おまえはイエスに会ったことがあるのか? 会った事のない物の言う事など興味がない」と言われ上手くいきませんでした。
著者は最終的にはピダハン的な世界を選び、キリスト教を捨ててしまいました。



ピダハンには、東洋人の私たちでも驚く言語・文化をもっています。あいさつや神話はどの民族もが持っているものだと思っていましたが・・・

そして西洋文明を知っていながら、それを取り入れようとはせず、自分たちの世界で幸せに生きています。彼らには宗教や神話のような抽象的なものは必要ないのです、現実だけの世界で生きているのです。
ジャングルの中で暮らしているので絶えず身の危険にはさらされていますが、たぶん私たちが持つ抽象的な不安も無いのではないかと思います。