このチュートリアルは、「Rails入門ガイド」を読んでRailsの基礎知識を得たことを前提に書かれています。 ここで紹介するコードの一部は、それ以前のバージョンの Rails では動作しません。
1 コマンド ラインの基本
Rails を毎日使用する上で絶対に欠かせないコマンドがいくつかあります。
- rails console
- rails server
- rake
- rails generate
- rails dbconsole
- rails new app_name
これらのコマンドを順番に見ていき、単純なRailsアプリケーションを作ってみましょう。
1.1 rails new
最初に行うことは、Railsのインストール後にrails newコマンドを実行して新しいRailsアプリケーションを作成することです。
rails gemをまだインストールしていなければ、gem install railsと入力してインストールできます。 Rails 3 リリース ノート
$ rails new commandsapp create create README.rdoc create .gitignore create Rakefile create config.ru create Gemfile create app ... create tmp/cache create tmp/pids create vendor/plugins create vendor/plugins/.gitkeep
Rails は、この小さなコマンドのために膨大な量のものをセットアップしてくれます!
1.2 rails server
railsサーバーコマンドは、RubyにバンドルされているWEBrickという小さなWebサーバーを起動します。 Web ブラウザからアプリケーションにアクセスするときはいつでもこれを使用します。
WEBrick は Rails を提供するための唯一のオプションではありません。
これ以上何もしなくても、rails server は新しいピカピカの Rails アプリを実行します:
わずか 3 つのコマンドで、ポート 3000 でリッスンする Rails サーバーを作成しました。 ブラウザでhttp://localhost:3000を開くと、基本的なRailsアプリが動作しているのがわかると思います。 デフォルトの開発環境は -e で変更できます。
$ rails server -e production -p 4000
-bオプションはRailsを指定したipにバインドします。 -dオプションを渡すと、サーバをデーモンとして実行できます。 rails generate を単独で実行すると、利用可能なジェネレータのリストが表示されます。
また、ジェネレータコマンドを呼び出すために “g” という別名を使用することもできます: rails g.
Generator gems を通じてさらなるジェネレータ、あなたがインストールするであろうプラグインの部分、そしてあなた自身の作成さえインストール可能です!
ジェネレーターを使用すると、ボイラープレート コード、つまりアプリが動作するために必要なコードを書くことによって、大量の時間を節約できます。
コントローラー ジェネレーターを使用して独自のコントローラーを作ってみましょう。 しかし、どのようなコマンドを使用すればよいのでしょうか。 ジェネレーターに尋ねてみましょう:
Rails のコンソール ユーティリティにはすべてヘルプ テキストがあります。 ほとんどの *nix ユーティリティと同様に、–help または -h を最後に追加して、たとえば rails server –help.
The controller generator is expecting parameters in the form of generate controller ControllerName action1 action2.The controller generator is expecting parameters in the form of generate controller ControllerName action1 action2.The controller generator is expecting parameters in the form of generate controller controllerName action1 action2. hello というアクションを持つ Greetings コントローラを作成しましょう。 たくさんのディレクトリがアプリケーションにあることを確認し、コントローラー ファイル、ビュー ファイル、機能テスト ファイル、ビュー用ヘルパー、JavaScript ファイル、およびスタイルシート ファイルを作成しました。rb):
class GreetingsController < ApplicationController def hello @message = "Hello, how are you today?" endend
次に、メッセージを表示するビュー (app/views/greetings/hello.html.erb):
<h1>A Greeting for You!</h1><p><%= @message %></p>
rails server を使用して、サーバーを立ち上げます。
$ rails server=> Booting WEBrick...
app/views/(controller) に「チルダバックアップ」ファイルがないことを確認します。そうしないと、WEBrick は期待される出力を表示しません。 これは Rails 2.3.0 のバグと思われます。
URL は http://localhost:3000/greetings/hello.
Rails にはデータモデル用のジェネレータも付属しています。
利用可能なフィールド タイプのリストについては、TableDefinition クラスの column メソッドの API ドキュメントを参照してください。
ただし、モデルを直接生成するのではなく (これは後で行います)、足場をセットアップしてみましょう。 Rails における scaffold とは、モデル、そのモデルのためのデータベース マイグレーション、それを操作するコントローラ、データを表示および操作するビュー、および上記のそれぞれに対するテスト スイートの完全なセットです。
ここでは、プレイするビデオ ゲームの最高得点を記録する「HighScore」という単純なリソースを設定することにしましょう。
ジェネレーターは、モデル、コントローラー、ヘルパー、レイアウト、機能テストおよびユニット テスト、スタイルシートのディレクトリが存在することを確認し、ビュー、コントローラー、モデルおよび HighScore のデータベース移行 (high_scores テーブルとフィールドの作成) を行い、リソース用のルートとすべての新しいテストの世話をします。
マイグレーションでは、データベースのスキーマを変更するために、マイグレーション、つまり、いくつかの Ruby コード (あの 20100209025147_create_high_scores.rb に住んでいる) を実行することが要求されます。 どのデータベース? rake db:migrateコマンドを実行すると、Railsが作成してくれるsqlite3データベースです。 Rakeについてもう少し詳しく説明します。
ユニットテストについて説明します。 ユニット テストは、コードをテストし、コードについてアサーションを行うコードです。 ユニット テストでは、コードの小さな部分、たとえば、モデルのメソッドを取り上げて、その入力と出力をテストします。 ユニットテストはあなたの友達です。 あなたのコードをユニットテストすることで、あなたの生活の質が劇的に向上するという事実と早く和解することができれば、より良いことです。 マジで。
Railsが作ってくれたインターフェースを見てみましょう。
$ rails server
ブラウザでhttp://localhost:3000/high_scoreを開き、新しいハイスコア (スペースインベーダーで 55,160!) を作れるようになりました。
1.4 rails console
consoleコマンドによってRailsアプリケーションとコマンドラインから対話することができます。 裏を返せば、rails consoleはIRBを使用しているので、IRBを使ったことがある人ならすぐに馴染めるでしょう。 これは、コードを使った素早いアイデアのテストや、Web サイトに触れることなくサーバーサイドでデータを変更するのに便利です。
また、エイリアス “c” を使って、rails c.
もし、データを変更せずにコードをテストしたい場合は、rails console –sandbox でそれを実行することができます。
$ rails console --sandboxLoading development environment in sandbox (Rails 3.1.0)Any modifications you make will be rolled back on exitirb(main):001:0>
1.5 rails dbconsole
rails dbconsole は使用しているデータベースを特定し、そのデータベースで使用するコマンドラインインターフェースに移動します (そしてコマンドラインに与えるパラメータも特定します!)。 MySQL, PostgreSQL, SQLite, SQLite3 をサポートしています。
また、dbconsole を呼び出すために “db” というエイリアスを使うこともできます: rails db.
1.6 rails plugin
rails plugin コマンドはプラグイン管理を簡略化するものです。 プラグインは名前またはそのリポジトリURLでインストールできます。 Gitリポジトリからプラグインをインストールする場合は、Gitがインストールされている必要があります。 Subversion も同様です。
$ rails plugin install https://github.com/technoweenie/acts_as_paranoid.git+ ./CHANGELOG+ ./MIT-LICENSE......
1.7 rails runner
runner は Rails のコンテキストで非インタラクティブに Ruby コードを実行します。 例えば:
$ rails runner "Model.long_running_method"
また、runnerを呼び出すために「r」というエイリアスを使用することができます: rails r.
ランナーコマンドが動作する環境は、-eスイッチを使って指定することができます.
$ rails runner -e staging "Model.long_running_method"
1.8 rails destroy
破壊とは生成と反対のものと考えてみてください。 generate が何をしたかを把握し、それを元に戻します。
destroy コマンドを呼び出すためにエイリアス “d” を使うこともできます: rails d.
2 Rake
Rake は Ruby Make で、Unix ユーティリティ ‘make’ に代わるスタンドアロンの Ruby ユーティリティで、タスクリストを構築するのに ‘Rakefile’ と .rake ファイルを使用します。 Rails では、Rake は一般的な管理タスク、特に互いに連携した高度なタスクに使用されます。
rake –tasks と入力すると、現在のディレクトリに依存する Rake タスクの一覧を取得することができます。 各タスクには説明があり、必要なものを見つけるのに役立つはずです。
$ rake --tasks(in /home/foobar/commandsapp)rake db:abort_if_pending_migrations # Raises an error if there are pending migrationsrake db:charset # Retrieves the charset for the current environment's databaserake db:collation # Retrieves the collation for the current environment's databaserake db:create # Create the database defined in config/database.yml for the current Rails.env......rake tmp:pids:clear # Clears all files in tmp/pidsrake tmp:sessions:clear # Clears all files in tmp/sessionsrake tmp:sockets:clear # Clears all files in tmp/sockets
2.1 about
rake about は Ruby, RubyGems, Rails, Rails サブコンポーネント、アプリケーションのフォルダ、現在の Rails 環境名、アプリケーションのデータベースアダプタ、スキーマバージョンのバージョンについての情報を提供します。 ヘルプを求めるとき、セキュリティパッチが影響するかどうか確認するとき、既存の Rails インストールについて統計情報が必要なときなどに便利です。
2.2 assets
rake資産:precompileを使って app/assets の資産をプリコンパイルし、rake assets:clean でこれらのコンパイル済み資産を除去できます。 rake db:version はトラブルシューティングの際に有用で、データベースの現在のバージョンを知らせます。
Migrations に関するより詳しい情報は、Migrations ガイドにあります。 ドキュメントを削除することもできます。これは主に、組み込みプラットフォーム用の Rails アプリケーションを書く場合など、コードベースをスリム化するのに役立ちます。
特定の注釈、例えば FIXME を探している場合は、rake notes:fixme を使用することができます。 注釈の名前を小文字にしなければならないことに注意してください。
また、環境変数 ANNOTATION を使って注釈を指定することにより、コード内でカスタム注釈を使い、rake notes:custom を使ってそれらをリストすることができます。
$ rake notes:custom ANNOTATION=BUG(in /home/foobar/commandsapp)app/model/post.rb: * Have to fix this one before pushing!
特定の注釈とカスタム注釈を使う場合、出力行に注釈名 (FIXME, BUG など) が表示されません。6 routes
rake routes は定義したすべてのルートを一覧表示します。これは、アプリ内のルーティングの問題を追跡したり、使いこなそうとしているアプリ内の URL の概要を把握するのに便利です。
2.7 test
Rails におけるユニットテストについては、A Guide to Testing Rails Applications
によい説明が記載されています。 Railsの安定性は、テストの使用に負うところが大きいです。 test:名前空間で利用できるタスクは、うまくいけば書くことになるさまざまなテストの実行に役立ちます。
2.8 tmp
Rails.NETのテストスイートは、Rails.NETのテストスイートと同じです。tmp:名前空間のタスクは、Rails.root/tmpディレクトリをクリアするのに役立ちます:
2.9 その他
- rake stats はコードの統計情報を見るのに最適で、KLOC (thousands of lines of code) やコードとテストの比率などを表示します。
- rake secret は、セッションの秘密として使用する疑似ランダムキーを提供します。
- rake time:zones:all は、Rails が把握しているすべてのタイムゾーンを一覧表示します。
3 Rails の上級コマンドライン
コマンドラインをより高度に使用するには、ユーティリティから便利な (時には驚くべき) オプションを見つけて、自分のニーズと特定のワークフローにそれらを適合させていくことに焦点を当てます。 ここに挙げたのは、Rails の袖にあるいくつかのトリックです。
3.1 データベースと SCM を備えた Rails
新しい Rails アプリケーションを作成するとき、アプリケーションが使用するデータベースとソース コード管理システムの種類を指定するオプションが用意されています。
それでは、–git オプションと –database=postgresql オプションが私たちに何をしてくれるのか見てみましょう:
Rails が作成したファイルをリポジトリに追加する前に、gitapp ディレクトリを作成して空の git リポジトリを初期化する必要がありました。 データベース設定に何を入れたか見てみましょう。
また、データベースにPostgreSQLを選択したことに対応して、database.yml設定にいくつかの行が生成されました。
SCM オプションを使用する際の唯一の問題は、まずアプリケーションのディレクトリを作成し、次に SCM を初期化して、それから rails new コマンドを実行してアプリケーションの基礎を生成しなければならないということです。 バージョン2.3以降、RailsはRackを使用してWebページを提供するため、Rackハンドラを実装しているWebサーバであればどれでも使用できることになります。 これは、WEBrick、Mongrel、Thin、Phusion Passenger (いくつか例を挙げましょう!) を含みます。
Rack 統合に関する詳細は、Rails on Rack を参照してください。
別のサーバーを使用するには、その gem をインストールしてから rails server の最初のパラメーターにその名前を使用するだけです。
もしあなたが誤字や事実誤認を発見し、それを修正する自信があるなら、rails リポジトリをクローンして、新しい pull request を開いてください。 また、いくつかのパッチを提出する予定であれば、docrails のコミット権を要求することができます。 コミットはレビューされますが、それはあなたがコントリビューションを提出した後に行われます。 このリポジトリは定期的にmasterとクロスマージされます。
また、不完全な内容や最新のものでないものを見つけることができるかもしれません。 master に不足しているドキュメントを追加してください。 スタイルと規約についてはRuby on Rails Guides Guidelinesを確認してください。
何らかの理由で修正すべきものを見つけたものの、自分でパッチを当てられない場合は、issue を開いてください。
そして最後になりますが、Ruby on Railsのドキュメントに関するどんな議論もrubyonrails-docsメーリングリストでは大歓迎です。