diff --git a/guides/source/ja/2_2_release_notes.md b/guides/source/ja/2_2_release_notes.md index f0d4a88d50e..c7748d138b2 100644 --- a/guides/source/ja/2_2_release_notes.md +++ b/guides/source/ja/2_2_release_notes.md @@ -14,7 +14,7 @@ Rails 2.2は、Railsを安定稼働させ、世界とつなぐインフラスト ### 国際化 -Rails 2.2では、国際化 (internationalization: 長いのでi18nと略されます) 向けの簡単なシステムが提供されます。 +Rails 2.2では、国際化(internationalization: 長いのでi18nと略されます)向けの簡単なシステムが提供されます。 * リードコントリビュータ: Rails i18チーム * 詳細: @@ -54,7 +54,7 @@ RailsがJRubyや次期Ruby 1.9とスレッド安全性に関してうまく動 $ rake doc:guides ``` -これでガイドが `Rails.root/doc/guides` 以下に生成され、ブラウザで `Rails.root/doc/guides/index.html` を開けばすぐに内容を表示できます。 +これでガイドが`Rails.root/doc/guides`以下に生成され、ブラウザで`Rails.root/doc/guides/index.html`を開けばすぐに内容を表示できます。 * 主なコントリビュータ: [Xavier Noria](http://advogato.org/person/fxn/diary.html)および[Hongli Lai](http://izumi.plan99.net/blog/) * 詳細: @@ -74,8 +74,8 @@ class ArticlesController < ApplicationController # リクエストで送信するヘッダがstale?に提供されたオプションと異なる場合、 # リクエストは実際にstaleし、respond_toブロックが起動する # (このときstale?呼び出しのオプションがレスポンスにセットされる)。 - # リクエストヘッダがマッチする場合リクエストはフレッシュなので respond_toブロックはトリガーされない。 - # 代わりにデフォルトのレンダリングが発生してlast-modified と etag ヘッダーをチェックし、 + # リクエストヘッダがマッチする場合リクエストはフレッシュなのでrespond_toブロックはトリガーされない。 + # 代わりにデフォルトのレンダリングが発生してlast-modifiedとetagヘッダーをチェックし、 # テンプレートをレンダリングする代わりに "304 Not Modified" だけを送信すればよいと判断する。 if stale?(:last_modified => @article.published_at.utc, :etag => @article) respond_to do |wants| @@ -88,7 +88,7 @@ class ArticlesController < ApplicationController @article = Article.find(params[:id]) # レスポンスヘッダを設定し、リクエストに対してそれらをチェックする。 - # リクエストがstaleの場合(すなわち etag または last-modified のいずれもマッチしない場合)、 + # リクエストがstaleの場合(すなわちetagまたはlast-modifiedのいずれもマッチしない場合)、 # デフォルトのテンプレートレンダリングが行われる。 # リクエストがフレッシュな場合、デフォルトレンダリングはテンプレートをレンダリングする代わりに # "304 Not Modified "を返す。 @@ -102,7 +102,7 @@ end Railsをスレッドセーフにするために行われた作業がRails 2.2に反映されています。Webサーバのインフラにもよりますが、これはメモリ内のRailsのコピー数が少なくても、より多くのリクエストを処理できることを意味し、サーバのパフォーマンス向上とマルチコアの利用率向上につながります。 -アプリケーションのproductionモードでマルチスレッドディスパッチを有効にするには、 `config/environments/production.rb` に以下の行を追加してください。 +アプリケーションのproductionモードでマルチスレッドディスパッチを有効にするには、`config/environments/production.rb`に以下の行を追加してください。 ```ruby @@ -122,7 +122,7 @@ Active Record ### トランザクショナルマイグレーション -歴史的に、ステップを複数含むRailsマイグレーションはトラブルの元でした。マイグレーション中に何か問題が発生すると、エラー発生前のマイグレーションはデータベースを変更しますが、エラー発生後のマイグレーションは適用されません。また、マイグレーションのバージョンは実行済みとして保存されていたので、問題を解決した後に `rake db:migrate:redo` で単純に再実行できませんでした。トランザクショナルマイグレーションは、マイグレーションステップをDDLトランザクションでラップすることでこれを変更し、どれかが失敗したらマイグレーション全体を元に戻すようにします。Rails 2.2では、トランザクショナルマイグレーションは、PostgreSQLですぐにサポートされます。将来このコードは他のデータベースにも拡張可能で、IBMはすでにDB2アダプタをサポートするよう拡張しています。 +歴史的に、ステップを複数含むRailsマイグレーションはトラブルの元でした。マイグレーション中に何か問題が発生すると、エラー発生前のマイグレーションはデータベースを変更しますが、エラー発生後のマイグレーションは適用されません。また、マイグレーションのバージョンは実行済みとして保存されていたので、問題を解決した後に`rake db:migrate:redo`で単純に再実行できませんでした。トランザクショナルマイグレーションは、マイグレーションステップをDDLトランザクションでラップすることでこれを変更し、どれかが失敗したらマイグレーション全体を元に戻すようにします。Rails 2.2では、トランザクショナルマイグレーションは、PostgreSQLですぐにサポートされます。将来このコードは他のデータベースにも拡張可能で、IBMはすでにDB2アダプタをサポートするよう拡張しています。 * リードコントリビュータ: [Adam Wiggins](http://about.adamwiggins.com/) * 詳細: @@ -131,7 +131,7 @@ Active Record ### コネクションプール -コネクションプーリングは、Railsがデータベース接続のプールにデータベースリクエストを分散させ、最大サイズまで成長させられます(デフォルトでは5ですが、 `database.yml` に `pool` キーを追加すれば調整できます)。これは、同時に多数のユーザーをサポートするアプリケーションのボトルネックを解消するのに役立ちます。また、 `wait_timeout` も用意されており、デフォルトでは 5 秒で終了します。`ActiveRecord::Base.connection_pool` は、必要に応じてプールに直接アクセスできます。 +コネクションプーリングは、Railsがデータベース接続のプールにデータベースリクエストを分散させ、最大サイズまで成長させられます(デフォルトでは5ですが、`database.yml`に`pool`キーを追加すれば調整できます)。これは、同時に多数のユーザーをサポートするアプリケーションのボトルネックを解消するのに役立ちます。また、`wait_timeout`も用意されており、デフォルトでは5秒で終了します。`ActiveRecord::Base.connection_pool`は、必要に応じてプールに直接アクセスできます。 ```yaml @@ -184,7 +184,7 @@ User.find_last_by_city('London') #### `find_by_attribute!` -`!`付きの新しい`find_by_attribute!` は、`Model.first(:conditions => {:attribute => value}) || raise ActiveRecord::RecordNotFound` と同等です。マッチするレコードが見つからない場合は、`nil` を返す代わりに例外を発生します。 +`!`付きの新しい`find_by_attribute!`は、`Model.first(:conditions => {:attribute => value}) || raise ActiveRecord::RecordNotFound`と同等です。マッチするレコードが見つからない場合は、`nil`を返す代わりに例外を発生します。 ```ruby # 'Moby'がサインアップしていなければActiveRecord::RecordNotFound例外を発生する @@ -195,7 +195,7 @@ User.find_by_name!('Moby') ### 関連付けがprivateやprotectedスコープを尊重するようになった -Active Recordの関連付けプロキシは、プロキシされたオブジェクトのメソッドのスコープを尊重するようになりました。以前の`@user.account.private_method` は、関連付けられた Account オブジェクトのprivateメソッドを呼び出していました(`User has_one :account`の場合)。この機能が必要な場合は、 `@user.account.send(:private_method)` をお使いください (または、メソッドを private や protected ではなく public にしてください)。 `method_missing` をオーバーライドしている場合は、関連付けが正常に機能するように `respond_to` も同じ挙動になるようにオーバーライドする必要がある点にご注意ください。 +Active Recordの関連付けプロキシは、プロキシされたオブジェクトのメソッドのスコープを尊重するようになりました。以前の`@user.account.private_method`は、関連付けられたAccountオブジェクトのprivateメソッドを呼び出していました(`User has_one :account`の場合)。この機能が必要な場合は、`@user.account.send(:private_method)`をお使いください(または、メソッドをprivateやprotectedではなくpublicにしてください)。`method_missing`をオーバーライドしている場合は、関連付けが正常に機能するように`respond_to`も同じ挙動になるようにオーバーライドする必要がある点にご注意ください。 * リードコントリビュータ: Adam Milligan * 詳細: @@ -203,10 +203,10 @@ Active Recordの関連付けプロキシは、プロキシされたオブジェ ### その他のActive Recordの変更 -* `rake db:migrate:redo` にオプションで VERSION を追加して、特定のマイグレーションを redo に指定できるようになりました。 -* UTC タイムスタンプの代わりに数値のプレフィックスを持つ移行を行うには `config.active_record.timestamped_migrations = false` と設定してください。 -* カウンタキャッシュのカラム(`:counter_cache => true` で宣言された関連付け)をゼロに初期化する必要がなくなりました。 -* `ActiveRecord::Base.human_name` により、国際化に対応したモデル名を人間に読みやすく翻訳できるようになりました。 +* `rake db:migrate:redo`にオプションでVERSIONを追加することで、redoで特定のマイグレーションを指定可能になりました。 +* UTCタイムスタンプの代わりに数値のプレフィックスを持つ移行を行うには`config.active_record.timestamped_migrations = false`と設定してください。 +* カウンタキャッシュのカラム(`:counter_cache => true`で宣言された関連付け)をゼロに初期化する必要がなくなりました。 +* `ActiveRecord::Base.human_name`により、国際化に対応したモデル名を人間に読みやすく翻訳できるようになりました。 Action Controller ----------------- @@ -252,7 +252,7 @@ map.resources :photos, :collection => { :search => [:get, :post] } ### 特定のアクションを持つresources -デフォルトでは、`map.resources`を使ってルートを作成すると、Railsは7つのデフォルトアクション(index, show, create, new, edit, update, and destroy)に対するルーティングを生成します。しかし、これらのルーティングはそれぞれアプリケーションのメモリを消費し、Railsが追加のルーティングロジックを生成することになります。そこで、`:only` と `:except` オプションを使って、Railsがリソースに対して生成するルートを細かく設定できるようになりました。単一のアクション、アクションの配列、または特殊オプション `:all` や `:none` を指定できます。これらのオプションは、ネストしたリソースに継承されます。 +デフォルトでは、`map.resources`を使ってルートを作成すると、Railsは7つのデフォルトアクション(index, show, create, new, edit, update, and destroy)に対するルーティングを生成します。しかし、これらのルーティングはそれぞれアプリケーションのメモリを消費し、Railsが追加のルーティングロジックを生成することになります。そこで、`:only`と`:except`オプションを使って、Railsがリソースに対して生成するルートを細かく設定できるようになりました。単一のアクション、アクションの配列、または特殊オプション`:all`や`:none`を指定できます。これらのオプションは、ネストしたリソースに継承されます。 ```ruby map.resources :photos, :only => [:index, :show] @@ -264,31 +264,31 @@ map.resources :products, :except => :destroy ### その他のAction Controllerの変更 * リクエストのルーティング中に発生した例外で、[カスタムエラーページを簡単に表示](http://m.onkey.org/2008/7/20/rescue-from-dispatching)できるようになりました。 -* HTTP Acceptヘッダはデフォルトで無効化されました。Accept ヘッダが必要な場合は、 `config.action_controller.use_accept_header = true` でオンに戻せます。 +* HTTP Acceptヘッダはデフォルトで無効化されました。Acceptヘッダが必要な場合は、`config.action_controller.use_accept_header = true`でオンに戻せます。 * ベンチマークが秒単位ではなくミリ秒単位で出力されるようになりました。 -* RailsがHTTPonly cookieをサポートするようになりました(セッションで使われます)。 これは新しいブラウザでクロスサイトスクリプティングのリスクを軽減するのに有用です。 -* `redirect_to` が URI スキームを完全にサポートしました(たとえば`ssh: URI` にリダイレクトできます)。 -* `render` が `:js` オプションをサポートし、正しい MIME タイプを持つ素の JavaScript をレンダリングするようになりました。 -* リクエストフォージェリ対策が HTML フォーマットのコンテンツリクエストにのみ適用されるように強化されました。 -* 渡されたパラメータが nil の場合のポリモーフィック URL 動作が改良されました。たとえば、 `polymorphic_path([@project, @date, @area])` を nil の日付で呼ぶと、 `project_area_path` が返されます。 +* RailsがHTTPonly cookieをサポートするようになりました(セッションで使われます)。これは新しいブラウザでクロスサイトスクリプティングのリスクを軽減するのに有用です。 +* `redirect_to`がURIスキームを完全にサポートしました(たとえば`ssh: URI`にリダイレクトできます)。 +* `render`が`:js`オプションをサポートし、正しいMIMEタイプを持つ素のJavaScriptをレンダリングするようになりました。 +* リクエストフォージェリ対策がHTMLフォーマットのコンテンツリクエストにのみ適用されるように強化されました。 +* 渡されたパラメータがnilの場合のポリモーフィックURLの振る舞いが改良されました。たとえば、`polymorphic_path([@project, @date, @area])`をnilの日付で呼ぶと、`project_area_path`が返されます。 Action View ----------- -* `javascript_include_tag` と `stylesheet_link_tag` が新しい `:recursive` オプションをサポートし、 `:all` も指定することでファイルのツリー全体を読み込めるようになりました。 -* 同梱の Prototype JavaScript ライブラリがバージョン 1.6.0.3 にアップグレードされました。 -* `RJS#page.reload` は、ブラウザの現在のページをJavaScriptで再読み込みします。 -* `atom_feed` ヘルパーに `:instruct` オプションが追加され、XML 処理命令を挿入できるようになりました。 +* `javascript_include_tag`と`stylesheet_link_tag`が新しい`:recursive`オプションをサポートし、`:all`も指定することでファイルのツリー全体を読み込めるようになりました。 +* 同梱のPrototype JavaScriptライブラリがバージョン1.6.0.3にアップグレードされました。 +* `RJS#page.reload`は、ブラウザの現在のページをJavaScriptで再読み込みします。 +* `atom_feed`ヘルパーに`:instruct`オプションが追加され、XML処理命令を挿入できるようになりました。 Action Mailer ------------- -Action Mailerがメーラーでレイアウトをサポートするようになりました。適切な名前のレイアウトを指定すると、HTMLメールをブラウザ上のビューのように整形できます。たとえば、`CustomerMailer`クラスは `layouts/customer_mailer.html.erb` を使うことを想定しています。 +Action Mailerがメーラーでレイアウトをサポートするようになりました。適切な名前のレイアウトを指定すると、HTMLメールをブラウザ上のビューのように整形できます。たとえば、`CustomerMailer`クラスは`layouts/customer_mailer.html.erb`を使うことを想定しています。 * 詳細: * [What's New in Edge Rails: Mailer Layouts](http://archives.ryandaigle.com/articles/2008/9/7/what-s-new-in-edge-rails-mailer-layouts) -Action Mailer は、GMail の SMTP サーバーでSTARTTLS を自動的にオンにすることで、ビルトインのサポートを提供するようになりました。このためには、Ruby 1.8.7 がインストールされている必要があります。 +Action Mailerは、GMailのSMTPサーバーでSTARTTLSを自動的にオンにすることで、ビルトインのサポートを提供するようになりました。このためには、Ruby 1.8.7がインストールされている必要があります。 Active Support -------------- @@ -316,7 +316,7 @@ end memoize :full_name ``` -その他のメモ化機能には、メモ化をオンオフできる`unmemoize`, `unmemoize_all`, `memoize_all` などがあります。 +その他のメモ化機能には、メモ化をオンオフできる`unmemoize`, `unmemoize_all`, `memoize_all`などがあります。 * リードコントリビュータ: [Josh Peek](http://joshpeek.com/) * 詳細: @@ -325,7 +325,7 @@ memoize :full_name ### `each_with_object` -`each_with_object` メソッドは、Ruby 1.9 からバックポートされたメソッドを用いて `inject` の代替となるメソッドを提供します。これはコレクションに対して反復処理を行い、現在の要素とメモをブロックに渡します。 +`each_with_object`メソッドは、Ruby 1.9からバックポートされたメソッドを用いて`inject`の代替となるメソッドを提供します。これはコレクションに対して反復処理を行い、現在の要素とメモをブロックに渡します。 ```ruby %w(foo bar).each_with_object({}) { |str, hsh| hsh[str] = str.upcase } @@ -345,7 +345,7 @@ class Vendor < ActiveRecord::Base end ``` -上は`vendor#account_email` と `vendor#account_password` という委譲メソッドを生成します。また、以下のようにカスタムのプレフィックスも指定できます。 +上は`vendor#account_email`と`vendor#account_password`という委譲メソッドを生成します。また、以下のようにカスタムのプレフィックスも指定できます。 ```ruby class Vendor < ActiveRecord::Base @@ -354,30 +354,30 @@ class Vendor < ActiveRecord::Base end ``` -上は`vendor#owner_email` and `vendor#owner_password`という委譲メソッドを生成します。 +上は`vendor#owner_email`および`vendor#owner_password`という委譲メソッドを生成します。 リードコントリビュータ: [Daniel Schierbeck](http://workingwithrails.com/person/5830-daniel-schierbeck) ### その他のActive Supportの変更 -* `ActiveSupport::Multibyte` が大幅に更新されました。Ruby 1.9 との互換性のための修正も含まれます。 -* `ActiveSupport::Rescuable` が追加され、任意のクラスが `rescue_from` 構文にミックスインできるようになりました。 -* `Date` と `Time` クラスに `past?`, `today?`, `future?` が追加され、日付や時間を比較しやすくなりました。 -* `Array#[1]`〜`Array#[4]` までのエイリアスとして `Array#second`〜`Array#fifth` が追加されました。 -* `Enumerable#many?` は `collection.size > 1` をカプセル化したものです。 -* `Inflector#parameterize` は、 入力を URL で利用可能な形に変換します(`to_param` で使われます)。 -* 日数や週数の端数を`1.7.weeks.ago` や `1.5.hours.since` のように認識できるようになりました。 +* `ActiveSupport::Multibyte`が大幅に更新されました。Ruby 1.9との互換性のための修正も含まれます。 +* `ActiveSupport::Rescuable`が追加され、任意のクラスが`rescue_from`構文にミックスインできるようになりました。 +* `Date`と`Time`クラスに`past?`, `today?`, `future?`が追加され、日付や時間を比較しやすくなりました。 +* `Array#[1]`〜`Array#[4]`までのエイリアスとして`Array#second`〜`Array#fifth`が追加されました。 +* `Enumerable#many?`は`collection.size > 1`をカプセル化したものです。 +* `Inflector#parameterize`は、入力をURLで利用可能な形に変換します(`to_param`で使われます)。 +* 日数や週数の端数を`1.7.weeks.ago`や`1.5.hours.since`のように認識できるようになりました。 * 付属のTzInfoライブラリがバージョン0.3.12にアップグレードされました。 -* `ActiveSupport::StringInquirer` は、文字列が等しいかどうかをスマートにテストする方法を提供します(`ActiveSupport::StringInquirer.new("abc").abc? => true`)。 +* `ActiveSupport::StringInquirer`は、文字列が等しいかどうかをスマートにテストする方法を提供します(`ActiveSupport::StringInquirer.new("abc").abc? => true`)。 Railties -------- -Railties(Railsのコアコード)で最も大きな変更は、`config.gems` の仕組みです。 +Railties(Railsのコアコード)で最も大きな変更は、`config.gems`の仕組みです。 ### `config.gems` -Railsアプリケーションで必要なすべてのgemsのコピーを `/vendor/gems` に配置可能にすることで、デプロイの問題を回避し、Railsアプリケーションを自己完結性を高められるようになりました。この機能はRails 2.1で初めて登場しましたが、Rails 2.2ではより柔軟で堅牢になり、gems間の複雑な依存関係も扱えるようになりました。RailsのGem管理では以下のコマンドが使えます。 +Railsアプリケーションで必要なすべてのgemsのコピーを`/vendor/gems`に配置可能にすることで、デプロイの問題を回避し、Railsアプリケーションを自己完結性を高められるようになりました。この機能はRails 2.1で初めて登場しましたが、Rails 2.2ではより柔軟で堅牢になり、gems間の複雑な依存関係も扱えるようになりました。RailsのGem管理では以下のコマンドが使えます。 * `config.gem _gem名_`: `config/environment.rb`ファイルに対応するgemを設定 * `rake gems`: 設定済みのgemをすべて表示する。gem(および依存関係が)インストール済みか、frozenか、フレームワークgemかも表示されます(フレームワークgemは他のgemが実行されるよりも先に読み込まれ、frozenにできない)。 @@ -397,12 +397,12 @@ Railsアプリケーションで必要なすべてのgemsのコピーを `/vendo ### その他のRailtiesの変更 -* [Thin](http://code.macournoyer.com/thin/) Webサーバのファンに朗報です。`script/server` が Thin を直接サポートするようになりました。 -* `script/plugin install <plugin> -r <revision>` が svn ベースのプラグインと同様に git ベースのプラグインでも動作するようになりました。 -* `script/console` で `--debugger` オプションがサポートされました。 +* [Thin](http://code.macournoyer.com/thin/) Webサーバのファンに朗報です。`script/server`がThinを直接サポートするようになりました。 +* `script/plugin install <plugin> -r <revision>`がsvnベースのプラグインと同様にgitベースのプラグインでも動作するようになりました。 +* `script/console`で`--debugger`オプションがサポートされました。 * Rails自体をビルドするためのCIサーバの設定方法は、Railsのソースコードに含まれています。 -* `rake notes:custom ANNOTATION=MYFLAG` でカスタムアノテーションをリストアップできます。 -* `Rails.env` が `StringInquirer` でラップされ、 `Rails.env.development?` が使えるようになりました。 +* `rake notes:custom ANNOTATION=MYFLAG`でカスタムアノテーションをリストアップできます。 +* `Rails.env`が`StringInquirer`でラップされ、`Rails.env.development?`が使えるようになりました。 * Railsで非推奨の警告が表示されないようにし、gemの依存性を適切に扱うためには、rubygems 1.3.1以降が必須となりました。 非推奨化されたもの @@ -421,15 +421,15 @@ Railsアプリケーションで必要なすべてのgemsのコピーを `/vendo end ``` - 以前は、上記のコードで'customer'パーシャル内の `customer` というローカル変数が利用可能でした。現在は、すべての変数を明示的に`:locals`ハッシュで渡す必要があります。 + 以前は、上記のコードで'customer'パーシャル内の`customer`というローカル変数が利用可能でした。現在は、すべての変数を明示的に`:locals`ハッシュで渡す必要があります。 -* `country_select`が削除されました。詳細および代替プラグインについては、[http://www.rubyonrails.org/deprecation/list-of-countries](http://www.rubyonrails.org/deprecation/list-of-countries) を参照してください(訳注: このページは現在無効です)。 -* `ActiveRecord::Base.allow_concurrency` は無効になりました。 -* `ActiveRecord::Errors.default_error_messages` は非推奨化されました。`I18n.translate('activerecord.errors.messages')`をお使い下さい。 -* `%s` と `%d` の式展開構文は国際化で非推奨化されました。 -* `String#chars` は非推奨化され、代わりに `String#mb_chars` が採用されました。 +* `country_select`が削除されました。詳細および代替プラグインについては、[http://www.rubyonrails.org/deprecation/list-of-countries](http://www.rubyonrails.org/deprecation/list-of-countries)を参照してください(訳注: このページは現在無効です)。 +* `ActiveRecord::Base.allow_concurrency`は無効になりました。 +* `ActiveRecord::Errors.default_error_messages`は非推奨化されました。`I18n.translate('activerecord.errors.messages')`をお使い下さい。 +* `%s`と`%d`の式展開構文は国際化で非推奨化されました。 +* `String#chars`は非推奨化され、代わりに`String#mb_chars`が採用されました。 * 小数で表される月や年の長さが非推奨化されました。代わりに、Rubyコアの`Date`クラスや`Time`クラスの演算をお使いください。 -* `Request#relative_url_root` は非推奨化されました。代わりに `ActionController::Base.relative_url_root` をお使いください。 +* `Request#relative_url_root`は非推奨化されました。代わりに`ActionController::Base.relative_url_root`をお使いください。 クレジット表記 ------- diff --git a/guides/source/ja/2_3_release_notes.md b/guides/source/ja/2_3_release_notes.md index 869639f46ab..130f41cba3b 100644 --- a/guides/source/ja/2_3_release_notes.md +++ b/guides/source/ja/2_3_release_notes.md @@ -1,7 +1,7 @@ Ruby on Rails 2.3 リリースノート =============================== -Rails 2.3では、Rackの広範な統合、Railsエンジンのサポートの刷新、Active Recordのネストされたトランザクション、ダイナミックスコープとデフォルトスコープ、統一レンダリング、より効率のよいルーティング、アプリケーションテンプレート、静かなバックトレースといったさまざまな新機能や改善機能が提供されています。このリストは主要なアップグレードをカバーしていますが、すべての小さなバグフィックスや変更を含んでいるわけではありません。すべてを見たい場合は、GitHubのメインRailsリポジトリの[コミットリスト](https://github.com/rails/rails/commits/2-3-stable) をチェックするか、個別のRailsコンポーネントの `CHANGELOG` ファイルを確認してください。 +Rails 2.3では、Rackの広範な統合、Railsエンジンのサポートの刷新、Active Recordのネストされたトランザクション、ダイナミックスコープとデフォルトスコープ、統一レンダリング、より効率のよいルーティング、アプリケーションテンプレート、静かなバックトレースといったさまざまな新機能や改善機能が提供されています。このリストは主要なアップグレードをカバーしていますが、すべての小さなバグフィックスや変更を含んでいるわけではありません。すべてを見たい場合は、GitHubのメインRailsリポジトリの[コミットリスト](https://github.com/rails/rails/commits/2-3-stable)をチェックするか、個別のRailsコンポーネントの`CHANGELOG`ファイルを確認してください。 -------------------------------------------------------------------------------- @@ -22,31 +22,31 @@ Railsは、これまでのCGIと決別し、あらゆる場所でRackを使う 以下はRack関連の変更点の概要です。 -* `script/server` は rackup 設定ファイルが存在すれば、それを取得します。これは Rack と互換性のある全てのサーバをサポートすることを意味します。デフォルトでは `config.ru` ファイルを探索しますが、`-c` スイッチでこれを上書きできます。 +* `script/server`はrackup設定ファイルが存在すれば、それを取得します。これはRackと互換性のある全てのサーバをサポートすることを意味します。デフォルトでは`config.ru`ファイルを探索しますが、`-c`スイッチでこれを上書きできます。 * FCGIハンドラはRackを経由します。 -* `ActionController::Dispatcher` は独自のデフォルトミドルウェアスタックを保持しています。ミドルウェアは注入・並べ替え・削除できます。ミドルウェアスタックは起動時にチェーンにコンパイルされます。ミドルウェアスタックは `environment.rb` で設定できます。 +* `ActionController::Dispatcher`は独自のデフォルトミドルウェアスタックを保持しています。ミドルウェアは注入・並べ替え・削除できます。ミドルウェアスタックは起動時にチェーンにコンパイルされます。ミドルウェアスタックは`environment.rb`で設定できます。 * ミドルウェアスタックを調べられる`rake middleware`タスクが追加されました。これはミドルウェアスタックの読み込み順序をデバッグするのに便利です。 -* 結合テストのランナーが、ミドルウェアとアプリケーションのスタック全体を実行するように変更されました。これにより、結合テストは Rack ミドルウェアのテストに最適になりました。 -* `ActionController::CGIHandler` は Rack の後方互換性のある CGI ラッパーです。`CGIHandler` は古い CGI オブジェクトを受け取り、その環境情報を Rack と互換性のある形に変換します。 -* `CgiRequest` と `CgiResponse` は削除されました。 +* 結合テストのランナーが、ミドルウェアとアプリケーションのスタック全体を実行するように変更されました。これにより、結合テストはRackミドルウェアのテストに最適になりました。 +* `ActionController::CGIHandler`はRackの後方互換性のあるCGIラッパーです。`CGIHandler`は古いCGIオブジェクトを受け取り、その環境情報をRackと互換性のある形に変換します。 +* `CgiRequest`と`CgiResponse`は削除されました。 * セッションストアがlazy loading(遅延読み込み)されるようになりました。リクエスト中に一度もセッションオブジェクトにアクセスしなかった場合、セッションデータを読み込むことはなくなりました(cookieの解析、memcacheからのデータ読み込み、Active Recordオブジェクトの探索)。 -* クッキーの値を設定するテストで `CGI::Cookie.new` が不要になりました。`request.cookies["foo"]`に`String`値を代入すれば期待どおりcookieが設定されます。 -* `CGI::Session::CookieStore` が `ActionController::Session::CookieStore` に置き換えられました。 -* `CGI::Session::MemCacheStore` が `ActionController::Session::MemCacheStore` に置き換えられました。 -* `CGI::Session::ActiveRecordStore` が `ActiveRecord::SessionStore` に置き換えられました。 -* セッションストアは引き続き `ActionController::Base.session_store = :active_record_store` で変更できます。 -* デフォルトのセッションオプションは引き続き `ActionController::Base.session = { :key => "..." }` で設定できます。ただし `:session_domain` オプション名は `:domain` に変更されました。 -* 従来リクエスト全体をラップしていたミューテックスは、 `ActionController::Lock` ミドルウェアに移動しました。 -* `ActionController::AbstractRequest` と `ActionController::Request` は統合されました。新しい `ActionController::Request` は `Rack::Request` を継承しています。これは、テストリクエストにおける `response.headers['type']` へのアクセスに影響します。代わりに `response.content_type` をお使いください。 -* `ActiveRecord::QueryCache` ミドルウェアは、 `ActiveRecord` がロードされると自動的にミドルウェアスタックに挿入されます。このミドルウェアは、リクエストごとの Active Record クエリキャッシュのセットアップやクリアを行います。 -* RailsのルータとコントローラのクラスはRackの仕様に準拠するようになりました。コントローラを直接呼び出すには、 `SomeController.call(env)` を使います。ルータはルーティングパラメータを `rack.routing_args` に保存します。 -* `ActionController::Request` は `Rack::Request` を継承するようになりました。 -* `config.action_controller.session = { :session_key => 'foo', ...` の代わりに、 `config.action_controller.session = { :key => 'foo', ...` をお使い下さい。 -* ミドルウェア `ParamsParser` を使うと、XML、JSON、または YAML リクエストを前処理して、任意の `Rack::Request` オブジェクトで正常に読み込めるようになりました。 +* クッキーの値を設定するテストで`CGI::Cookie.new`が不要になりました。`request.cookies["foo"]`に`String`値を代入すれば期待どおりcookieが設定されます。 +* `CGI::Session::CookieStore`が`ActionController::Session::CookieStore`に置き換えられました。 +* `CGI::Session::MemCacheStore`が`ActionController::Session::MemCacheStore`に置き換えられました。 +* `CGI::Session::ActiveRecordStore`が`ActiveRecord::SessionStore`に置き換えられました。 +* セッションストアは引き続き`ActionController::Base.session_store = :active_record_store`で変更できます。 +* デフォルトのセッションオプションは引き続き`ActionController::Base.session = { :key => "..." }`で設定できます。ただし`:session_domain`オプション名は`:domain`に変更されました。 +* 従来リクエスト全体をラップしていたミューテックスは、`ActionController::Lock`ミドルウェアに移動しました。 +* `ActionController::AbstractRequest`と`ActionController::Request`が統合されました。新しい`ActionController::Request`は`Rack::Request`を継承しています。これは、テストリクエストにおける`response.headers['type']`へのアクセスに影響します。代わりに`response.content_type`をお使いください。 +* `ActiveRecord::QueryCache`ミドルウェアは、`ActiveRecord`が読み込まれると自動的にミドルウェアスタックに挿入されます。このミドルウェアは、リクエストごとのActive Recordクエリキャッシュのセットアップやクリアを行います。 +* RailsのルータとコントローラのクラスはRackの仕様に準拠するようになりました。コントローラを直接呼び出すには、`SomeController.call(env)`を使います。ルータはルーティングパラメータを`rack.routing_args`に保存します。 +* `ActionController::Request`は`Rack::Request`を継承するようになりました。 +* `config.action_controller.session = { :session_key => 'foo', ...`の代わりに、`config.action_controller.session = { :key => 'foo', ...`をお使い下さい。 +* ミドルウェア`ParamsParser`を使うと、XML、JSON、またはYAMLリクエストを前処理して、任意の`Rack::Request`オブジェクトで正常に読み込めるようになりました。 ### Railsエンジンを新たにサポート -ここしばらくアップグレードがありませんでしたが、Rails 2.3ではRailsエンジン(他のアプリケーションに組み込めるRailsアプリケーション)にいくつかの新機能が追加されました。まず、エンジン内のルーティングファイルは `routes.rb` ファイルと同様に自動的にロード・リロードされるようになりました(これは他のプラグイン内のルーティングファイルについても同様です)。次に、プラグインにappフォルダがある場合、`app/[models|controllers|helpers]`は自動的にRailsの読み込みパスに追加されます。エンジンもビューパスの追加をサポートするようになり、Action MailerやAction Viewはエンジンや他のプラグインからのビューを利用するようになりました。 +ここしばらくアップグレードがありませんでしたが、Rails 2.3ではRailsエンジン(他のアプリケーションに組み込めるRailsアプリケーション)にいくつかの新機能が追加されました。まず、エンジン内のルーティングファイルは`routes.rb`ファイルと同様に自動的にロード・リロードされるようになりました(これは他のプラグイン内のルーティングファイルについても同様です)。次に、プラグインにappフォルダがある場合、`app/[models|controllers|helpers]`は自動的にRailsの読み込みパスに追加されます。エンジンもビューパスの追加をサポートするようになり、Action MailerやAction Viewはエンジンや他のプラグインからのビューを利用するようになりました。 ドキュメント ------------- @@ -56,7 +56,7 @@ Railsは、これまでのCGIと決別し、あらゆる場所でRackを使う * 詳しくは[Rails Documentation Projects](https://rubyonrails.org/2009/1/15/rails-documentation-projects)を参照して下さい。 -Ruby 1.9.1 のサポート +Ruby 1.9.1のサポート ------------------ Rails 2.3は、Ruby 1.8および現在リリースされているRuby 1.9.1のどちらでも、独自のテストにすべてパスするはずです。ただし1.9.1への移行には、Railsコアだけでなく、データアダプタ、プラグイン、その他依存するコードのすべてをRuby 1.9.1互換性でチェックする必要があることにご注意下さい。 @@ -81,7 +81,7 @@ end ネステッド属性を有効にすると、レコードと関連する子レコードを自動的に(かつアトミックに)保存し、子を意識したバリデーションを行い、ネステッドフォームをサポートします(後述)。 -また、`:reject_if` オプションを使うことで、ネステッド属性によって追加される新しいレコードに対する要件を指定することもできます。 +また、`:reject_if`オプションを使うことで、ネステッド属性によって追加される新しいレコードに対する要件を指定することもできます。 ```ruby accepts_nested_attributes_for :author, @@ -107,7 +107,7 @@ end User.find(:all) # => Adminだけを返す ``` -ネステッドトランザクションでは、外側のトランザクションの状態に影響を与えずに内側のトランザクションをロールバックできます。トランザクションをネストしたい場合は、明示的に `:requires_new` オプションを追加する必要があります。そうしないと、ネステッドトランザクションは単に親トランザクションの一部になります(現在のRails 2.2ではそうなっています)。ネステッドトランザクションは内部で [セーブポイントを使う] (http://rails.lighthouseapp.com/projects/8994/tickets/383,) ので、真のネステッドトランザクションを持たないデータベースでもサポートされます。また、テスト中にこれらのトランザクションをトランザクションフィクスチャでうまく動作させるために、ちょっとしたマジックも使っています。 +ネステッドトランザクションでは、外側のトランザクションの状態に影響を与えずに内側のトランザクションをロールバックできます。トランザクションをネストしたい場合は、明示的に`:requires_new`オプションを追加する必要があります。そうしないと、ネステッドトランザクションは単に親トランザクションの一部になります(現在のRails 2.2ではそうなっています)。ネステッドトランザクションは内部で[セーブポイントを使う](http://rails.lighthouseapp.com/projects/8994/tickets/383)ので、真のネステッドトランザクションを持たないデータベースでもサポートされます。また、テスト中にこれらのトランザクションをトランザクションフィクスチャでうまく動作させるために、ちょっとしたマジックも使っています。 * リードコントリビュータ: [Jonathan Viney](http://www.workingwithrails.com/person/4985-jonathan-viney)、[Hongli Lai](http://izumi.plan99.net/blog/) @@ -136,7 +136,7 @@ Rails 2.3では、名前付きスコープに似た**デフォルトスコープ ### バッチ処理 -`find_in_batches` を使うことで、メモリに負担をかけずにActive Record モデルの大量のレコードを処理できるようになりました。 +`find_in_batches`を使うことで、メモリに負担をかけずにActive Recordモデルの大量のレコードを処理できるようになりました。 ```ruby Customer.find_in_batches(:conditions => {:active => true}) do |customer_group| @@ -144,9 +144,9 @@ Customer.find_in_batches(:conditions => {:active => true}) do |customer_group| end ``` -`find_in_batches`には、ほとんどの`find`オプションを渡せます。ただし、返すレコードの順序を指定することや(常に主キーの昇順で返される整数値でなければなりません)、 `:limit`オプションを使うことはできません。代わりに、 `:batch_size`オプション(デフォルトは 1000件)を使って、各バッチで返されるレコードの数を設定できます。 +`find_in_batches`には、ほとんどの`find`オプションを渡せます。ただし、返すレコードの順序を指定することや(常に主キーの昇順で返される整数値でなければなりません)、`:limit`オプションを使うことはできません。代わりに、`:batch_size`オプション(デフォルトは1000件)を使って、各バッチで返されるレコードの数を設定できます。 -新しい `find_each` メソッドは、個々のレコードを返す `find_in_batches` のラッパーで、検索自体はバッチ処理で行われます (デフォルトでは 1000 件) 。 +新しい`find_each`メソッドは、個々のレコードを返す`find_in_batches`のラッパーで、検索自体はバッチ処理で行われます(デフォルトでは1000件)。 ```ruby Customer.find_each do |customer| @@ -156,13 +156,13 @@ end この方法はバッチ処理でのみ使うようご注意ください。少数のレコード(1000件以下)の場合は、通常のfindメソッドをループで回してください。 -* 詳細(この時点では、この便利メソッドは単に `each` と呼ばれていました)。 +* 詳細(この時点では、この便利メソッドは単に`each`と呼ばれていました)。 * [Rails 2.3: Batch Finding](http://afreshcup.com/2009/02/23/rails-23-batch-finding/) * [What's New in Edge Rails: Batched Find](http://archives.ryandaigle.com/articles/2009/2/23/what-s-new-in-edge-rails-batched-find) ### コールバックで複数条件を指定 -Active Record コールバックを使うときに、同じコールバックで `:if` と `:unless` オプションを組み合わせ、複数の条件を配列として指定できるようになりました。 +Active Recordコールバックを使うときに、同じコールバックで`:if`と`:unless`オプションを組み合わせ、複数の条件を配列として指定できるようになりました。 ```ruby before_save :update_credit_rating, :if => :active, @@ -172,7 +172,7 @@ before_save :update_credit_rating, :if => :active, * リードコントリビュータ: L. Caviola ### `having`で検索 -`:having` オプション(および `has_many` と `has_and_belongs_to_many` 関連付け)が追加され、グループ化された検索結果のレコードを検索でフィルタできるようにました。SQL の知識が豊富な人ならご存知のように、グループ化された結果に基づいてフィルタをかけられるようになります。 +`:having`オプション(および`has_many`と`has_and_belongs_to_many`関連付け)が追加され、グループ化された検索結果のレコードを検索でフィルタできるようにました。SQLの知識が豊富な人ならご存知のように、グループ化された結果に基づいてフィルタをかけられるようになります。 ```ruby developers = Developer.find(:all, :group => "salary", @@ -183,7 +183,7 @@ developers = Developer.find(:all, :group => "salary", ### MySQLコネクションの再接続 -MySQLコネクションで再接続フラグをサポートされました。trueに設定すると、コネクションが切れてあきらめる前にクライアントがサーバーへの再接続を試みます。Railsアプリケーションでこの動作を有効にするために、`database.yml`でMySQL接続に `reconnect = true` を設定できるようになりました。デフォルトは `false` なので、既存のアプリケーションの動作は変わりません。 +MySQLコネクションで再接続フラグをサポートされました。trueに設定すると、コネクションが切れてあきらめる前にクライアントがサーバーへの再接続を試みます。Railsアプリケーションでこの動作を有効にするために、`database.yml`でMySQLコネクションに`reconnect = true`を設定できるようになりました。デフォルトは`false`なので、既存のアプリケーションの動作は変わりません。 * リードコントリビュータ: [Dov Murik](http://x.com/dubek) * 詳細: @@ -192,17 +192,17 @@ MySQLコネクションで再接続フラグをサポートされました。tru ### その他のActive Recordの変更点 -* `has_and_belongs_to_many` プリロードの生成 SQL から余分な `AS` が削除され、いくつかのデータベースの動作が改善されました。 -* `ActiveRecord::Base#new_record?` は、既存のレコードが存在する場合に `nil` ではなく `false` を返すようになりました。 -* `has_many :through` の関連付けにおいて、テーブル名の引用符のバグが修正されました。 -* `updated_at` タイムスタンプに特定のタイムスタンプを指定できるようになりました: `cust = Customer.create(:name => "ABC Industries", :updated_at => 1.day.ago)`. -* `find_by_attribute!` 呼び出しに失敗した場合のエラーメッセージを改善しました。 -* Active Record の `to_xml` サポートに `:camelize` オプションが追加され、柔軟性が少し高まりました。 -* `before_update` や `before_create` のコールバックをキャンセルする際のバグが修正されました。 -* JDBC 経由でデータベースをテストするための Rake タスクが追加されました。 -* `validates_length_of` は、 `:in` または `:within` オプション (オプションが指定された場合) でカスタムエラーメッセージを使うようになりました。 -* スコープ付き select のカウントが正しく動作するようになり、 `Account.scoped(:select => "DISTINCT credit_limit").count` のようなことができるようになりました。 -* `ActiveRecord::Base#invalid?` が `ActiveRecord::Base#valid?` の逆として動作するようになりました。 +* `has_and_belongs_to_many`プリロードの生成SQLから余分な`AS`が削除され、いくつかのデータベースの動作が改善されました。 +* `ActiveRecord::Base#new_record?`は、既存のレコードが存在する場合に`nil`ではなく`false`を返すようになりました。 +* `has_many :through`の関連付けにおいて、テーブル名の引用符のバグが修正されました。 +* `updated_at`タイムスタンプに特定のタイムスタンプを指定できるようになりました: `cust = Customer.create(:name => "ABC Industries", :updated_at => 1.day.ago)`. +* `find_by_attribute!`呼び出しに失敗した場合のエラーメッセージを改善しました。 +* Active Recordの`to_xml`サポートに`:camelize`オプションが追加され、柔軟性が少し高まりました。 +* `before_update`や`before_create`のコールバックをキャンセルする際のバグが修正されました。 +* JDBC経由でデータベースをテストするためのRakeタスクが追加されました。 +* `validates_length_of`は、`:in`または`:within`オプション(オプションが指定された場合)でカスタムエラーメッセージを使うようになりました。 +* スコープ付きselectのカウントが正しく動作するようになり、`Account.scoped(:select => "DISTINCT credit_limit").count`のようなことが可能になりました。 +* `ActiveRecord::Base#invalid?`が`ActiveRecord::Base#valid?`の逆として動作するようになりました。 Action Controller ----------------- @@ -211,7 +211,7 @@ Action Controllerは、今回のリリースでレンダリングに関する大 ### レンダリング方法の統一 -`ActionController::Base#render` でレンダリング対象を指定する方法がよりスマートになりました。レンダリング対象を指定するだけで、正しい結果が期待できます。以前のバージョンのRailsでは、以下のようにレンダリングで明示的な情報を提供する必要が生じることがよくありました。 +`ActionController::Base#render`でレンダリング対象を指定する方法がよりスマートになりました。レンダリング対象を指定するだけで、正しい結果が期待できます。以前のバージョンのRailsでは、以下のようにレンダリングで明示的な情報を提供する必要が生じることがよくありました。 ```ruby render :file => '/tmp/random_file.erb' @@ -228,11 +228,11 @@ render 'show' render :show ``` -Railsは、レンダリング対象の冒頭にスラッシュがある場合、スラッシュが途中にある場合、スラッシュがまったくない場合に応じて、ファイル、テンプレート、アクションのいずれかを選択します。アクションをレンダリングするときに、文字列の代わりにシンボルも使えます。その他のレンダリングスタイル (`:inline`, `:text`, `:update`, `:nothing`, `:json`, `:xml`, `:js`) では、引き続き明示的なオプションが必要です。 +Railsは、レンダリング対象の冒頭にスラッシュがある場合、スラッシュが途中にある場合、スラッシュがまったくない場合に応じて、ファイル、テンプレート、アクションのいずれかを選択します。アクションをレンダリングするときに、文字列の代わりにシンボルも使えます。それ以外のレンダリングスタイル(`:inline`、`:text`、`:update`、`:nothing`、`:json`、`:xml`、`:js`)では、引き続き明示的なオプションが必要です。 ### Application Controllerがリネームされた -`application.rb`で特殊なケースのネーミングにいつも悩まされている方へ朗報です。Rails 2.3では`application_controller.rb`という名前に代わりました。さらに、新しい rake タスク `rake rails:update:application_controller` が用意され、これを自動的に実行できます(これは通常の `rake rails:update` プロセスの一部として実行されます)。 +`application.rb`で特殊なケースのネーミングにいつも悩まされている方へ朗報です。Rails 2.3では`application_controller.rb`という名前に代わりました。さらに、新しいrakeタスク`rake rails:update:application_controller`が用意され、これを自動的に実行できます(これは通常の`rake rails:update`プロセスの一部として実行されます)。 * 詳細: * [The Death of Application.rb](https://afreshcup.com/home/2008/11/17/rails-2x-the-death-of-applicationrb) @@ -240,7 +240,7 @@ Railsは、レンダリング対象の冒頭にスラッシュがある場合、 ### HTTPダイジェスト認証のサポート -Railsでは、HTTPダイジェスト認証がビルトインでサポートされるようになりました。これを使うには、以下のようにユーザーのパスワードを返すブロックを付けて `authenticate_or_request_with_http_digest` を呼び出します(パスワードはハッシュ化され、送信されたcredentialと比較されます)。 +Railsでは、HTTPダイジェスト認証がビルトインでサポートされるようになりました。これを使うには、以下のようにユーザーのパスワードを返すブロックを付けて`authenticate_or_request_with_http_digest`を呼び出します(パスワードはハッシュ化され、送信されたcredentialと比較されます)。 ```ruby class PostsController < ApplicationController @@ -266,17 +266,17 @@ end ### ルーティングの効率向上 -Rails 2.3では、ルーティングにいくつかの重要な変更が加えられています。`formatted_` ルーティングヘルパーがなくなり、代わりに `:format` をオプションとして渡せるようになりました。これにより、どのリソースに対してもルート生成プロセスが50%削減され、かなりの量のメモリが節約できます(大規模なアプリケーションでは最大100MB)。自分のコードが `formatted_` ヘルパーを使っていたとしても、当面は動作しますが、この動作は非推奨であり、新しい標準でルーティングを書き直せば、アプリケーションの効率は向上します。もう一つの大きな変更点は、Railsが `routes.rb` だけでなく、複数のルーティングファイルをサポートするようになったことです。`RouteSet#add_configuration_file` を使えば、現在読み込まれているルーティングをクリアすることなく、いつでも新しいルートを取り込めます。この変更はRailsエンジンで最も有用ですが、ルーティングをバッチで一括読み込みする必要がある任意のアプリケーションで利用できます。 +Rails 2.3では、ルーティングにいくつかの重要な変更が加えられています。`formatted_`ルーティングヘルパーがなくなり、代わりに`:format`をオプションとして渡せるようになりました。これにより、どのリソースに対してもルート生成プロセスが50%削減され、かなりの量のメモリが節約できます(大規模なアプリケーションでは最大100MB)。自分のコードが`formatted_`ヘルパーを使っていたとしても、当面は動作しますが、この動作は非推奨であり、新しい標準でルーティングを書き直せば、アプリケーションの効率は向上します。もう一つの大きな変更点は、Railsが`routes.rb`だけでなく、複数のルーティングファイルをサポートするようになったことです。`RouteSet#add_configuration_file`を使えば、現在読み込まれているルーティングをクリアすることなく、いつでも新しいルートを取り込めます。この変更はRailsエンジンで最も有用ですが、ルーティングをバッチで一括読み込みする必要がある任意のアプリケーションで利用できます。 * リードコントリビュータ: [Aaron Batalion](http://blog.hungrymachine.com/) ### Rackベースの遅延読み込みセッション -大きな変更点として、Action Controller のセッションストレージの基盤が Rack レベルに押し下げられたことが挙げられます。Railsアプリケーションからはまったく見えないはずですが、コードにはかなりの作業が含まれています(ボーナスとして、古いCGIセッションハンドラ周辺の厄介なパッチがいくつか削除されました)。Rails以外のRackアプリケーションもRailsアプリケーションと同じセッションストレージハンドラにアクセスできる (つまり同じセッションにアクセスできる) からです。さらに、セッションは遅延読み込みされるようになりました(フレームワークの他の部分の読み込み改善と同様)。つまり、セッションが不要な場合に明示的に無効にする必要はなくなりました。セッションを参照しないようにすれば、セッションは読み込まれません。 +大きな変更点として、Action Controllerのセッションストレージの基盤がRackレベルに押し下げられたことが挙げられます。Railsアプリケーションからはまったく見えないはずですが、コードにはかなりの作業が含まれています(ボーナスとして、古いCGIセッションハンドラ周辺の厄介なパッチがいくつか削除されました)。Rails以外のRackアプリケーションもRailsアプリケーションと同じセッションストレージハンドラにアクセスできる(つまり同じセッションにアクセスできる)からです。さらに、セッションは遅延読み込みされるようになりました(フレームワークの他の部分の読み込み改善と同様)。つまり、セッションが不要な場合に明示的に無効にする必要はなくなりました。セッションを参照しないようにすれば、セッションは読み込まれません。 ### MIMEタイプの扱いが変更 -RailsでMIMEタイプを処理するコードには、いくつかの変更があります。まず、 `MIME::Type` が `=~` 演算子を実装し、同義語を持つタイプの存在をチェックする必要がある場合の記法がずっと明確になりました。 +RailsでMIMEタイプを処理するコードには、いくつかの変更があります。まず、`MIME::Type`が`=~`演算子を実装し、同義語を持つタイプの存在をチェックする必要がある場合の記法がずっと明確になりました。 ```ruby if content_type && Mime::JS =~ content_type @@ -287,43 +287,43 @@ Mime::JS =~ "text/javascript" => true Mime::JS =~ "application/javascript" => true ``` -もう1つの変更は、フレームワークがさまざまな場所でJavaScriptをチェックするときに `Mime::JS` を使うようになり、それらの代替をきれいに処理できるようになったことです。 +もう1つの変更は、フレームワークがさまざまな場所でJavaScriptをチェックするときに`Mime::JS`を使うようになり、それらの代替をきれいに処理できるようになったことです。 * リードコントリビュータ: [Seth Fitzsimmons](http://www.workingwithrails.com/person/5510-seth-fitzsimmons) ### `respond_to`の最適化 -RailsとMerbチームの合併による最初の成果として、Rails 2.3には`respond_to`メソッドの最適化が含まれています。このメソッドはもちろん多くのRailsアプリケーションで多用されていて、送られてきたリクエストのMIMEタイプに応じてコントローラが異なる結果をフォーマットできるようになっています。`method_missing`の呼び出しをなくし、プロファイリングと微調整を行った結果、3つのフォーマットを切り替えるシンプルな `respond_to` で、1秒あたりのリクエスト数が8%向上しています。最も優れている点は、このスピードアップを利用するためにアプリケーションのコードを変更する必要がまったくないことです。 +RailsとMerbチームの合併による最初の成果として、Rails 2.3には`respond_to`メソッドの最適化が含まれています。このメソッドはもちろん多くのRailsアプリケーションで多用されていて、送られてきたリクエストのMIMEタイプに応じてコントローラが異なる結果をフォーマットできるようになっています。`method_missing`の呼び出しをなくし、プロファイリングと微調整を行った結果、3つのフォーマットを切り替えるシンプルな`respond_to`で、1秒あたりのリクエスト数が8%向上しています。最も優れている点は、このスピードアップを利用するためにアプリケーションのコードを変更する必要がまったくないことです。 ### キャッシュのパフォーマンス向上 -Railsは、リモートキャッシュストアから読み込んだデータをリクエストごとにローカルキャッシュとして保持するようになり、不要な読み込みを減らしてサイトのパフォーマンスを向上させました。この機能はもともと `MemCacheStore` に限定されていましたが、必要なメソッドを実装しているリモートストアであれば、どのストアでも利用できます。 +Railsは、リモートキャッシュストアから読み込んだデータをリクエストごとにローカルキャッシュとして保持するようになり、不要な読み込みを減らしてサイトのパフォーマンスを向上させました。この機能はもともと`MemCacheStore`に限定されていましたが、必要なメソッドを実装しているリモートストアであれば、どのストアでも利用できます。 * リードコントリビュータ: [Nahum Wild](http://www.motionstandingstill.com/) ### ビューのローカライズ -Railsは、設定したロケールに応じてローカライズされたビューを提供できるようになりました。たとえば、 `Posts` コントローラに `show` アクションがあると、デフォルトでは`app/views/posts/show.html.erb` がレンダリングされます。しかし`I18n.locale = :da` と設定すると、 `app/views/posts/show.da.html.erb` がレンダリングされるようになります。ローカライズされたテンプレートが存在しない場合は、装飾なしバージョンが使われます。Railsには `I18n#available_locales` と `I18n::SimpleBackend#available_locales` もあり、これらは現在のRailsプロジェクトで利用可能な翻訳の配列を返します。 +Railsは、設定したロケールに応じてローカライズされたビューを提供できるようになりました。たとえば、`Posts`コントローラに`show`アクションがあると、デフォルトでは`app/views/posts/show.html.erb`がレンダリングされます。しかし`I18n.locale = :da`と設定すると、`app/views/posts/show.da.html.erb`がレンダリングされるようになります。ローカライズされたテンプレートが存在しない場合は、装飾なしバージョンが使われます。Railsには`I18n#available_locales`と`I18n::SimpleBackend#available_locales`もあり、これらは現在のRailsプロジェクトで利用可能な翻訳の配列を返します。 -さらに、同じ方法でpublicディレクトリにあるrescueファイルもローカライズできます。たとえば、 `public/500.da.html` や `public/404.en.html` が使えるようになります。 +さらに、同じ方法でpublicディレクトリにあるrescueファイルもローカライズできます。たとえば、`public/500.da.html`や`public/404.en.html`が使えるようになります。 ### 翻訳APIをパーシャルでスコープ化 -翻訳APIの変更により、パーシャル内のキー翻訳を簡単に書けるようになり、記述の重複が少なくなりました。`people/index.html.erb` テンプレートから `translate(".foo")` を呼び出すと、実際には `I18n.translate("people.index.foo")` を呼び出します。キーの前にピリオドがない場合は、以前と同じようにAPIはスコープなしとなります。 +翻訳APIの変更により、パーシャル内のキー翻訳を簡単に書けるようになり、記述の重複が少なくなりました。`people/index.html.erb`テンプレートから`translate(".foo")`を呼び出すと、実際には`I18n.translate("people.index.foo")`を呼び出します。キーの前にピリオドがない場合は、以前と同じようにAPIはスコープなしとなります。 ### その他のAction Controllerの変更 -* ETag の取り扱いが少し改善されました。レスポンスにbodyがないとき、または `send_file` でファイルを送信するときに、Rails は ETag ヘッダの送信をスキップするようになりました。 -* RailsによるIPスプーフィングのチェックは、携帯電話のトラフィックが多いサイトで邪魔になることがありますが。そのような場合は`ActionController::Base.ip_spoofing_check = false` と設定することで、チェックを完全に無効にできるようになりました。 -* `ActionController::Dispatcher` は独自のミドルウェアスタックを実装しており、 `rake middleware` を実行することで確認できます。 -* cookieセッションが永続的なセッション識別子を持つようになりました。これはサーバーサイドストアとの API 互換性があります。 -* `send_file` と `send_data` の `:type` オプションで、`send_file("fabulous.png", :type => :png)`のようにシンボルを使えるようになりました。 -* `map.resources` の `:only` と `:except` オプションは、ネストしたリソースには継承されなくなりました。 -* バンドルされている memcached クライアントがバージョン 1.6.4.99 に更新されました。 -* プロキシキャッシュで動作するように `expires_in`、`stale?`、`fresh_when` メソッドに `:public` オプションを指定できるようになりました。 -* RESTful なmemberルーティングが追加され、 `:requirements` オプションが正しく動作するようになりました。 +* ETagの取り扱いが少し改善されました。レスポンスにbodyがないとき、または`send_file`でファイルを送信するときに、RailsはETagヘッダの送信をスキップするようになりました。 +* RailsによるIPスプーフィングのチェックは、携帯電話のトラフィックが多いサイトで邪魔になることがありますが。そのような場合は`ActionController::Base.ip_spoofing_check = false`と設定することで、チェックを完全に無効にできるようになりました。 +* `ActionController::Dispatcher`は独自のミドルウェアスタックを実装しており、`rake middleware`を実行することで確認できます。 +* cookieセッションが永続的なセッション識別子を持つようになりました。これはサーバーサイドストアとのAPI互換性があります。 +* `send_file`と`send_data`の`:type`オプションで、`send_file("fabulous.png", :type => :png)`のようにシンボルを使えるようになりました。 +* `map.resources`の`:only`と`:except`オプションは、ネストしたリソースには継承されなくなりました。 +* バンドルされているmemcachedクライアントがバージョン1.6.4.99に更新されました。 +* プロキシキャッシュで動作するように`expires_in`、`stale?`、`fresh_when`メソッドに`:public`オプションを指定できるようになりました。 +* RESTfulなmemberルーティングが追加され、`:requirements`オプションが正しく動作するようになりました。 * 浅いルーティングで、名前空間が適切に考慮されるようになりました。 -* `polymorphic_url` が、不規則に活用される複数形の名前を持つオブジェクトをより適切に扱えるようになりました。 +* `polymorphic_url`が、不規則に活用される複数形の名前を持つオブジェクトをより適切に扱えるようになりました。 Action View ----------- @@ -332,7 +332,7 @@ Rails 2.3のAction Viewでは、ネステッドモデルのフォーム、`rende ### ネステッドオブジェクトのフォーム -親モデルが子オブジェクトのネステッド属性を受け入れる場合(上述のActive Recordのセクションの説明を参照)、 `form_for` と `field_for` を使ってネステッドフォームを作成できます。これらのフォームは任意の深さにネスト可能で、少ないコードで複雑なオブジェクト階層を単一のビューで編集できます。たとえば以下のようなモデルがあるとします。 +親モデルが子オブジェクトのネステッド属性を受け入れる場合(上述のActive Recordのセクションの説明を参照)、`form_for`と`field_for`を使ってネステッドフォームを作成できます。これらのフォームは任意の深さにネスト可能で、少ないコードで複雑なオブジェクト階層を単一のビューで編集できます。たとえば以下のようなモデルがあるとします。 ```ruby class Customer < ActiveRecord::Base @@ -383,7 +383,7 @@ Rails 2.3では以下のようにビューを書けます。 ### パーシャルのレンダリングがスマートに -`render` メソッドは年々賢くなり、今はさらに賢くなりました。オブジェクトやコレクションと適切なパーシャルがあり、命名が一致する場合は、オブジェクトを`render`するだけで動くようになりました。たとえばRails 2.3では、以下の`render`コールがビューで使えます(命名が適切であると仮定します)。 +`render`メソッドは年々賢くなり、今はさらに賢くなりました。オブジェクトやコレクションと適切なパーシャルがあり、命名が一致する場合は、オブジェクトを`render`するだけで動くようになりました。たとえばRails 2.3では、以下の`render`コールがビューで使えます(命名が適切であると仮定します)。 ```ruby # これは以下と同様 @@ -399,7 +399,7 @@ render @articles ### 日付セレクタヘルパーのプロンプト表示 -Rails 2.3では、様々な日付選択ヘルパー(`date_select`、`time_select`、`datetime_select`)で、コレクション選択ヘルパーと同様にカスタムプロンプトを指定できます。プロンプトには、文字列の他に、様々なコンポーネントのプロンプト文字列のハッシュを渡せます。また、 `:prompt` を `true` に設定することで、一般的なプロンプトも利用できます。 +Rails 2.3では、様々な日付選択ヘルパー(`date_select`、`time_select`、`datetime_select`)で、コレクション選択ヘルパーと同様にカスタムプロンプトを指定できます。プロンプトには、文字列の他に、様々なコンポーネントのプロンプト文字列のハッシュを渡せます。また、`:prompt`を`true`に設定することで、一般的なプロンプトも利用できます。 ```ruby select_datetime(DateTime.now, :prompt => true) @@ -416,7 +416,7 @@ select_datetime(DateTime.now, :prompt => ### AssetTagのタイムスタンプキャッシュ -静的アセットパスに「キャッシュバスター」としてタイムスタンプを追加するRailsの慣習はよく知られていると思います。これは、画像やスタイルシートなどの古いコピーが、サーバーで変更されたときにユーザーのブラウザのキャッシュから提供されないようにするためのものです。Action Viewの設定オプション `cache_asset_timestamps` で、この動作を変更できるようになりました。キャッシュを有効にすると、Railsは最初にアセットを提供するときにタイムスタンプを一度算出して値を保存します。これは、静的アセットを提供するための(コストのかかる)ファイルシステム呼び出しが減ることを意味しますが、その代わり、サーバーの実行中にアセットを変更しても変更がクライアントに反映されることも期待できなくなります。 +静的アセットパスに「キャッシュバスター」としてタイムスタンプを追加するRailsの慣習はよく知られていると思います。これは、画像やスタイルシートなどの古いコピーが、サーバーで変更されたときにユーザーのブラウザのキャッシュから提供されないようにするためのものです。Action Viewの設定オプション`cache_asset_timestamps`で、この動作を変更できるようになりました。キャッシュを有効にすると、Railsは最初にアセットを提供するときにタイムスタンプを一度算出して値を保存します。これは、静的アセットを提供するための(コストのかかる)ファイルシステム呼び出しが減ることを意味しますが、その代わり、サーバーの実行中にアセットを変更しても変更がクライアントに反映されることも期待できなくなります。 ### アセットホストをオブジェクトとして宣言 @@ -426,7 +426,7 @@ select_datetime(DateTime.now, :prompt => ### `grouped_options_for_select`ヘルパーメソッド -アクションビューには、セレクタボックスの生成を支援するヘルパーがすでにたくさんありますが、もうひとつ増えました。`grouped_options_for_select` です。これは以下のように、文字列の配列またはハッシュを受け取って、 `option` タグを `optgroup` タグでラップした文字列に変換するものです。 +アクションビューには、セレクタボックスの生成を支援するヘルパーがすでにたくさんありますが、もうひとつ増えました。`grouped_options_for_select`です。これは以下のように、文字列の配列またはハッシュを受け取って、`option`タグを`optgroup`タグでラップした文字列に変換するものです。 ```ruby grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], @@ -445,7 +445,7 @@ grouped_options_for_select([["Hats", ["Baseball Cap","Cowboy Hat"]]], ### フォームのセレクタヘルパーを無効にするオプションタグ -フォームのセレクタヘルパー(`select` や `options_for_select` など)が`:disabled` オプションをサポートするようになり、結果のタグで無効にしたい単一の値または値の配列を受け取れるようになりました。 +フォームのセレクタヘルパー(`select`や`options_for_select`など)が`:disabled`オプションをサポートするようになり、結果のタグで無効にしたい単一の値または値の配列を受け取れるようになりました。 ```ruby select(:post, :category, Post::CATEGORIES, :disabled => 'private') @@ -475,7 +475,7 @@ options_from_collection_for_select(@product.sizes, :name, :id, :disabled => lamb Rails 2.3では、キャッシュされたテンプレートを特定の環境で有効または無効にする機能があります。キャッシュされたテンプレートは、レンダリング時に新しいテンプレートファイルがあるかどうかをチェックしないので、速度が向上します。しかし、これは同時に、サーバを再起動せずに「その場で」テンプレートを置き換えられないということでもあります。 -ほとんどの場合、production環境ではテンプレートのキャッシュを有効にしたいと思うでしょう。これは `production.rb` ファイルで設定します。 +ほとんどの場合、production環境ではテンプレートのキャッシュを有効にしたいと思うでしょう。これは`production.rb`ファイルで設定します。 ```ruby config.action_view.cache_template_loading = true @@ -485,10 +485,10 @@ config.action_view.cache_template_loading = true ### その他のAction Viewの変更 -* CSRF 保護トークンの生成がシンプルになりました。Rails はセッション ID をいじくりまわすのではなく、 `ActiveSupport::SecureRandom` によって生成されたシンプルなランダム文字列を使うようになりました。 -* `auto_link` が、生成されたメールのリンクにオプション(`:target` や `:class` など)を適切に適用するようになりました。 -* `autolink` ヘルパーがリファクタリングされ、より直感的に使えるようになりました。 -* URL に複数のクエリパラメータがある場合でも、 `current_page?` が正しく動作するようになりました。 +* CSRF保護トークンの生成がシンプルになりました。RailsはセッションIDをいじくりまわすのではなく、`ActiveSupport::SecureRandom`によって生成されたシンプルなランダム文字列を使うようになりました。 +* `auto_link`が、生成されたメールのリンクにオプション(`:target`や`:class`など)を適切に適用するようになりました。 +* `autolink`ヘルパーがリファクタリングされ、より直感的に使えるようになりました。 +* URLに複数のクエリパラメータがある場合でも、`current_page?`が正しく動作するようになりました。 Active Support -------------- @@ -497,13 +497,13 @@ Active Supportでも、`Object#try`などいくつかの興味深い変更が行 ### `Object#try` -多くの人が、オブジェクトに対する操作を試みるときに`try()`を使うというアイデアを採用しています。特にビューでは、`<%= @person.try(:name) %>`のようなコードを書くことでnilチェックを回避できるので便利です。この機能がRailsに組み込まれました。Railsに実装されたこの機能は、privateメソッドに対して `NoMethodError` を発生し、オブジェクトがnilの場合は常に `nil` を返します。 +多くの人が、オブジェクトに対する操作を試みるときに`try()`を使うというアイデアを採用しています。特にビューでは、`<%= @person.try(:name) %>`のようなコードを書くことでnilチェックを回避できるので便利です。この機能がRailsに組み込まれました。Railsに実装されたこの機能は、privateメソッドに対して`NoMethodError`を発生し、オブジェクトがnilの場合は常に`nil`を返します。 * 詳細: [try()](http://ozmm.org/posts/try.html) ### `Object#tap`のバックポート -`Object#tap` は [Ruby 1.9](http://www.ruby-doc.org/core-1.9/classes/Object.html#M000309) および 1.8.7 に追加されたもので、Rails に以前からある `returning` メソッドに似ています。ブロックを`yield`して、`yield`したオブジェクトを返すというものです。Railsは現在、これを古いバージョンのRubyでも使えるようにするコードを含んでいます。 +`Object#tap`は[Ruby 1.9](http://www.ruby-doc.org/core-1.9/classes/Object.html#M000309)および1.8.7に追加されたもので、Railsに以前からある`returning`メソッドに似ています。ブロックを`yield`して、`yield`したオブジェクトを返すというものです。Railsは現在、これを古いバージョンのRubyでも使えるようにするコードを含んでいます。 ### XMLminiのパーサーが差し替え可能に @@ -519,7 +519,7 @@ XmlMini.backend = 'LibXML' ### `TimeWithZone`で秒以下をサポート -`Time` クラスと `TimeWithZone` クラスに、時刻を XML フレンドリーな文字列で返す `xmlschema` メソッドが含まれました。Rails 2.3 の`TimeWithZone` は `Time` と同じ引数になり、返される文字列の小数第2位の桁数を指定できるようになりました。 +`Time`クラスと`TimeWithZone`クラスに、時刻をXMLフレンドリーな文字列で返す`xmlschema`メソッドが含まれました。Rails 2.3の`TimeWithZone`は`Time`と同じ引数になり、返される文字列の小数第2位の桁数を指定できるようになりました。 ```ruby Time.zone.now.xmlschema(6) # => "2009-01-16T13:00:06.13653Z" @@ -534,14 +534,14 @@ json.orgサイトで仕様を調べると、JSON構造体のキーはすべて ### その他のActive Supportの変更 * `Enumerable#none?`で、与えられたブロックにマッチする要素がないことをチェックできます。 -* Active Support [delegates](https://afreshcup.com/home/2008/10/19/coming-in-rails-22-delegate-prefixes)を使う場合、新しい `:allow_nil` オプションで、ターゲットオブジェクトが nil のときに例外を発生させずに`nil` を返すようになりました。 -* `ActiveSupport::OrderedHash`が`each_key` と `each_value` を実装しました。 -* `ActiveSupport::MessageEncryptor` は(cookieのような)信頼できない場所に保存する情報を暗号化する簡単な方法を提供します。 -* Active Support の `from_xml` がXmlSimple に依存しなくなりました。その代わりに、Railsは必要な機能だけを備えた、独自のXmlMini実装を含むようになりました。これにより、RailsはこれまでバンドルされていたXmlSimpleのコピーから解放されました。 +* Active Supportの[delegates](https://afreshcup.com/home/2008/10/19/coming-in-rails-22-delegate-prefixes)を使う場合、新しい`:allow_nil`オプションで、ターゲットオブジェクトがnilのときに例外を発生させずに`nil`を返すようになりました。 +* `ActiveSupport::OrderedHash`が`each_key`と`each_value`を実装しました。 +* `ActiveSupport::MessageEncryptor`は(cookieのような)信頼できない場所に保存する情報を暗号化する簡単な方法を提供します。 +* Active Supportの`from_xml`がXmlSimpleに依存しなくなりました。その代わりに、Railsは必要な機能だけを備えた、独自のXmlMini実装を含むようになりました。これにより、RailsはこれまでバンドルされていたXmlSimpleのコピーから解放されました。 * privateメソッドをメモ化すると、その結果もprivateになります。 -* `String#parameterize` にオプションの区切り文字を渡せるようになりました。例: `"Quick Brown Fox".parameterize('_') => "quick_brown_fox"`. -* `number_to_phone` に7桁の電話番号を渡せるようになりました。 -* `ActiveSupport::Json.decode` が `u0000` 形式のエスケープシーケンスを処理するようになりました。 +* `String#parameterize`にオプションの区切り文字を渡せるようになりました。例: `"Quick Brown Fox".parameterize('_') => "quick_brown_fox"`. +* `number_to_phone`に7桁の電話番号を渡せるようになりました。 +* `ActiveSupport::Json.decode`が`u0000`形式のエスケープシーケンスを処理するようになりました。 Railties -------- @@ -574,33 +574,33 @@ $ rake rails:template LOCATION=~/template.rb ### Quieter Backtrace -thoughtbotの [Quiet Backtrace](https://github.com/thoughtbot/quietbacktrace) プラグインは`Test::Unit` のバックトレースから選択的に行を削除できますが、Rails 2.3ではそれをベースにした `ActiveSupport::BacktraceCleaner` と `Rails::BacktraceCleaner` をコアに実装しています。これは、フィルタ(バックトレース行を正規表現で置換する)とサイレンサー(バックトレース行を完全に削除する)の両方をサポートします。Railsは新しいアプリケーションで最も一般的なノイズを取り除くためにサイレンサーを自動的に追加し、フィルタに追加するものを保存できる`config/backtrace_silencers.rb` ファイルを生成します。この機能により、バックトレース中の任意のgemの出力もpretty printされるようになります。 +thoughtbotの[Quiet Backtrace](https://github.com/thoughtbot/quietbacktrace)プラグインは`Test::Unit`のバックトレースから選択的に行を削除できますが、Rails 2.3ではそれをベースにした`ActiveSupport::BacktraceCleaner`と`Rails::BacktraceCleaner`をコアに実装しています。これは、フィルタ(バックトレース行を正規表現で置換する)とサイレンサー(バックトレース行を完全に削除する)の両方をサポートします。Railsは新しいアプリケーションで最も一般的なノイズを取り除くためにサイレンサーを自動的に追加し、フィルタに追加するものを保存できる`config/backtrace_silencers.rb`ファイルを生成します。この機能により、バックトレース中の任意のgemの出力もpretty printされるようになります。 ### 遅延読み込みと自動読み込みでdevelopmentモードの起動が高速化 Railsの一部(とその依存関係)が実際に必要なときだけメモリに読み込まれるようにするために、かなりの作業が行われました。コアフレームワークであるActive Support、Active Record、Action Controller、Action Mailer、Action Viewは、それぞれのクラスを`autoload`で遅延読み込みするようになりました。この作業によりメモリフットプリントが抑えられ、Rails全体のパフォーマンスが向上するはずです。 -また、起動時にコアライブラリを自動読み込みするかどうかを(新しい `preload_frameworks` オプションで)指定できます。デフォルトの `false` ではRailsが少しずつ自動読み込みされますが、一度にすべてを取り込む必要が生じることもあります(PassengerとJRubyは、Railsのすべてを一括で読み込むことを希望しています)。 +また、起動時にコアライブラリを自動読み込みするかどうかを(新しい`preload_frameworks`オプションで)指定できます。デフォルトの`false`ではRailsが少しずつ自動読み込みされますが、一度にすべてを取り込む必要が生じることもあります(PassengerとJRubyは、Railsのすべてを一括で読み込むことを希望しています)。 ### rake gemタスクが書き直された -様々な rake gem タスクの内部が、多くのケースでうまく動くよう大幅に改訂されました。gem システムは開発時の依存関係と実行時の依存関係の違いを認識するようになり、unpackingがより堅牢になり、gem の状態問い合わせで返される情報が改善され、スクラッチでアプリを開発するときに依存関係で「卵が先かニワトリが先か」問題を起こしにくくなりました。また、JRubyでgemコマンドを使うときや、すでにベンダリングされているgemの外部コピーを持ち込もうとする依存関係についても修正されています。 +様々な rake gem タスクの内部が、多くのケースでうまく動くよう大幅に改訂されました。gemシステムは開発時の依存関係と実行時の依存関係の違いを認識するようになり、unpackingがより堅牢になり、gemの状態問い合わせで返される情報が改善され、スクラッチでアプリを開発するときに依存関係で「卵が先かニワトリが先か」問題を起こしにくくなりました。また、JRubyでgemコマンドを使うときや、すでにベンダリングされているgemの外部コピーを持ち込もうとする依存関係についても修正されています。 * リードコントリビュータ: [David Dollar](http://www.workingwithrails.com/person/12240-david-dollar) ### その他のRailties変更 -* Rails ビルド用に CI サーバを更新する手順が更新され、拡張されました。 -* Railsの内部テストが `Test::Unit::TestCase` から `ActiveSupport::TestCase` に変更され、RailsコアのテストでMochaが必須になりました。 -* デフォルトの `environment.rb` ファイルが整理されました。 -* dbconsole スクリプトで数字のみのパスワードを設定してもクラッシュしなくなりました。 -* `Rails.root` が `Pathname` オブジェクトを返すようになりました。つまり、 `File.join` を使っている [既存のコードをクリーンアップ](https://afreshcup.wordpress.com/2008/12/05/a-little-rails_root-tidiness/)して`join` メソッドを直接使えるようになりました。 -* CGIやFCGIのディスパッチを扱う/publicの様々なファイルが、デフォルトではすべてのRailsアプリケーションで生成されなくなりました(必要であれば、`rails`コマンドを実行するときに `--with-dispatchers` を追加すればまだ取得できますし、後から `rake rails:update:generate_dispatchers` で追加することも可能です)。 +* Railsビルド用にCIサーバを更新する手順が更新され、拡張されました。 +* Railsの内部テストが`Test::Unit::TestCase`から`ActiveSupport::TestCase`に変更され、RailsコアのテストでMochaが必須になりました。 +* デフォルトの`environment.rb`ファイルが整理されました。 +* dbconsoleスクリプトで数字のみのパスワードを設定してもクラッシュしなくなりました。 +* `Rails.root`が`Pathname`オブジェクトを返すようになりました。つまり、`File.join`を使っている[既存のコードをクリーンアップ](https://afreshcup.wordpress.com/2008/12/05/a-little-rails_root-tidiness/)して`join`メソッドを直接使えるようになりました。 +* CGIやFCGIのディスパッチを扱う/publicの様々なファイルが、デフォルトではすべてのRailsアプリケーションで生成されなくなりました(必要であれば、`rails`コマンドを実行するときに`--with-dispatchers`を追加すればまだ取得できますし、後から`rake rails:update:generate_dispatchers`で追加することも可能です)。 * Railsガイドの記法がAsciiDocからTextileマークアップに変更されました。 * scaffoldで生成されるビューやコントローラが少し整理されました。 -* `script/server` に、特定のパスからRailsアプリケーションをマウントする `--path` 引数を渡せるようになりました。 -* gemのrakeタスクは、設定済みの gem がない場合に環境の読み込みをスキップするようになりました。これは、gem が見つからないために `rake gems:install` が実行できないといった「卵が先かニワトリが先か」問題の多くを解決するはずです。 -* Gems は正確に一度だけunpackされるようになりました。これは、ファイルの読み取り専用パーミッションでパックされた gem (hoeなど) の問題を解決します。 +* `script/server`に、特定のパスからRailsアプリケーションをマウントする`--path`引数を渡せるようになりました。 +* gemのrakeタスクは、設定済みのgemがない場合に環境の読み込みをスキップするようになりました。これは、gemが見つからないために`rake gems:install`が実行できないといった「卵が先かニワトリが先か」問題の多くを解決するはずです。 +* Gemsは正確に一度だけunpackされるようになりました。これは、ファイルの読み取り専用パーミッションでパックされたgem(hoeなど)の問題を解決します。 非推奨化されたもの @@ -609,16 +609,16 @@ Railsの一部(とその依存関係)が実際に必要なときだけメモ 今回のリリースで、いくつかの古いコードが非推奨化されました。 * めったにいないはずですが、Railsアプリのデプロイをinspector、reaper、spawnerスクリプトに依存している場合は、これらのスクリプトがRailsのコアに含まれなくなったことを知っておく必要があります。必要なら、[irs_process_scripts](https://github.com/rails/irs_process_scripts)プラグインでコピーを手に入れられるはずです。 -* Rails 2.3 で `render_component` が "deprecated" から "nonexistent" に変更されました。それでも必要な場合は、[render_component plugin](https://github.com/rails/render_component/tree/master)をインストールするとよいでしょう。 +* Rails 2.3で`render_component`が "deprecated" から "nonexistent" に変更されました。それでも必要な場合は、[render_component plugin](https://github.com/rails/render_component/tree/master)をインストールするとよいでしょう。 * Railsコンポーネントのサポートは削除されました。 -* `script/performance/request` スクリプトは現在Railsのコアから削除されました。結合テストでこのスクリプトを用いてパフォーマンスをチェックしている方は、別の新しい方法を学ぶ必要があります。新しいrequest_profilerプラグインをインストールすれば、まったく同じ機能を復元できます。 -* `ActionController::Base#session_enabled?` は、セッションが遅延読み込みされるようになったため非推奨化されました。 -* `protect_from_forgery` の `:digest` と `:secret` オプションは非推奨化されました(無効なオプションです)。 -* いくつかの結合テストヘルパーが削除されました。`response.headers["Status"]` と `headers["Status"]` は何も返さなくなりました。Rack は戻り値のヘッダに "Status" を使うことを許可していません。しかし、 `status` ヘルパーや `status_message` ヘルパーは利用可能です。`response.headers["cookie"]` と `headers["cookie"]` は CGI cookieを一切返さなくなりました。生のcookieヘッダを見るために `headers["Set-Cookie"]` を検査したり、クライアントに送信されたcookieのハッシュを取得するために `cookies` ヘルパーを利用することは可能です。 -* `formatted_polymorphic_url` は非推奨化されました。代わりに `polymorphic_url` と `:format` をお使いください。 -* `ActionController::Response#set_cookie` の `:http_only` オプション名は `:httponly` に変更されました。 -* `to_sentence` の `:connector` オプションと `:skip_last_comma` オプションは、 `:words_connector`, `:two_words_connector`, `:last_word_connector` オプションに置き換わりました。 -* `file_field` コントロールが空になっているマルチパートフォームを送信すると、以前は空文字列がコントローラに送信されていましたが、現在はnilを送信するようになりました。これは、Rack のマルチパートパーサーと Rails の古いパーサーとの違いに起因します。 +* `script/performance/request`スクリプトは現在Railsのコアから削除されました。結合テストでこのスクリプトを用いてパフォーマンスをチェックしている方は、別の新しい方法を学ぶ必要があります。新しいrequest_profilerプラグインをインストールすれば、まったく同じ機能を復元できます。 +* `ActionController::Base#session_enabled?`は、セッションが遅延読み込みされるようになったため非推奨化されました。 +* `protect_from_forgery`の`:digest`と`:secret`オプションは非推奨化されました(無効なオプションです)。 +* いくつかの結合テストヘルパーが削除されました。`response.headers["Status"]`と`headers["Status"]`は何も返さなくなりました。Rackは戻り値のヘッダに "Status" を使うことを許可していません。しかし、`status`ヘルパーや`status_message`ヘルパーは利用可能です。`response.headers["cookie"]`と`headers["cookie"]`はCGI cookieを一切返さなくなりました。生のcookieヘッダを見るために`headers["Set-Cookie"]`を検査したり、クライアントに送信されたcookieのハッシュを取得するために`cookies`ヘルパーを利用することは可能です。 +* `formatted_polymorphic_url`は非推奨化されました。代わりに`polymorphic_url`と`:format`をお使いください。 +* `ActionController::Response#set_cookie`の`:http_only`オプション名は`:httponly`に変更されました。 +* `to_sentence`の`:connector`オプションと`:skip_last_comma`オプションは、`:words_connector`, `:two_words_connector`, `:last_word_connector`オプションに置き換わりました。 +* `file_field`コントロールが空になっているマルチパートフォームを送信すると、以前は空文字列がコントローラに送信されていましたが、現在はnilを送信するようになりました。これは、RackのマルチパートパーサーとRailsの古いパーサーとの違いに起因します。 クレジット表記 ------- diff --git a/guides/source/ja/3_0_release_notes.md b/guides/source/ja/3_0_release_notes.md index 2f6700a33cf..e497cda6b7a 100644 --- a/guides/source/ja/3_0_release_notes.md +++ b/guides/source/ja/3_0_release_notes.md @@ -492,7 +492,7 @@ Active ResourceもActive Modelに切り出されたことで、Action PackでAct * `load`が数値の配列でも使えるようになった * リモートリソースの410レスポンスを、リソースが削除されたと認識するようになった * Active Resource接続にSSLオプションを設定する機能を追加 -* 接続のタイムアウト設定が`Net::HTTP` `open_timeout`にも効くようになった +* コネクションのタイムアウト設定が`Net::HTTP`の`open_timeout`にも効くようになった 以下は非推奨化されました。 diff --git a/guides/source/ja/3_2_release_notes.md b/guides/source/ja/3_2_release_notes.md index 54bc1a7a756..ca822894563 100644 --- a/guides/source/ja/3_2_release_notes.md +++ b/guides/source/ja/3_2_release_notes.md @@ -22,7 +22,7 @@ Rails 3.2へのアップグレード Rails 3.2ではRuby 1.8.7以上が必須です。これより前のバージョンのRubyのサポートは公式に廃止されたため、速やかにRubyをアップグレードすべきです。Rails 3.2はRuby 1.9.2とも互換性があります。 -TIP: Ruby 1.8.7のp248とp249には、Railsクラッシュの原因となるマーシャリングのバグがあります。なおRuby Enterprise Editionでは1.8.7-2010.02のリリースでこの問題が修正されました。現行のRuby 1.9のうち、Ruby 1.9.1はセグメンテーションフォールト(segfault)で完全にダウンするため利用できません。Railsをスムーズに動かすため、Ruby 1.9.xを使いたい場合は1.9.2 または1.9.3をお使いください。 +TIP: Ruby 1.8.7のp248とp249には、Railsクラッシュの原因となるマーシャリングのバグがあります。なおRuby Enterprise Editionでは1.8.7-2010.02のリリースでこの問題が修正されました。現行のRuby 1.9のうち、Ruby 1.9.1はセグメンテーションフォールト(segfault)で完全にダウンするため利用できません。Railsをスムーズに動かすため、Ruby 1.9.xを使いたい場合は1.9.2または1.9.3をお使いください。 ### Railsのアップグレード方法 @@ -155,7 +155,7 @@ Railties * デフォルトのGemfileからturn gemが削除されました。 -* 旧来の`rails generate plugin` プラグインジェネレータが削除されました。今後は`rails plugin new`をお使いください。 +* 旧来の`rails generate plugin`プラグインジェネレータが削除されました。今後は`rails plugin new`をお使いください。 * 旧来の`config.paths.app.controller` APIが削除されました。今後は`config.paths["app/controller"]`をお使いください。 @@ -310,7 +310,7 @@ Action Pack #### 非推奨 -* フォーマットやハンドラを`render :template`などに渡すこと(例: `render :template => "foo.html.erb"`)は非推奨になりました。今後はオプションで直接`:handlers`や`:formats`を指定できるようになりました(例: ` render :template => "foo", :formats => [:html, :js], :handlers => :erb`)。 +* フォーマットやハンドラを`render :template`などに渡すこと(例: `render :template => "foo.html.erb"`)は非推奨になりました。今後はオプションで直接`:handlers`や`:formats`を指定できるようになりました(例: `render :template => "foo", :formats => [:html, :js], :handlers => :erb`)。 ### Sprockets diff --git a/guides/source/ja/4_0_release_notes.md b/guides/source/ja/4_0_release_notes.md index dfb134d2d05..6ea7fcc6a01 100644 --- a/guides/source/ja/4_0_release_notes.md +++ b/guides/source/ja/4_0_release_notes.md @@ -6,7 +6,7 @@ Rails 4.0の注目ポイント * Ruby 2.0が推奨。1.9.3以上が必須。 * Strong Parameters * Turbolinks -* ロシアンドールキャッシュ (Russian Doll Caching) +* ロシアンドールキャッシュ(Russian Doll Caching) 本リリースノートでは、主要な変更についてのみ説明します。多数のバグ修正および変更点については、GitHubのRailsリポジトリにある[コミットリスト](https://github.com/rails/rails/commits/4-0-stable)のchangelogを参照してください。 @@ -16,7 +16,7 @@ Rails 4.0の注目ポイント Rails 4.0へのアップグレード ---------------------- -既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 3.2までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 4.0にアップデートしてください。アップグレードの注意点などについては[Ruby on Railsアップグレードガイド](upgrading_ruby_on_rails.html#rails-3-2%E3%81%8B%E3%82%89rails-4-0%E3%81%B8%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89) を参照してください。 +既存のアプリケーションをアップグレードするのであれば、その前に質のよいテストカバレッジを用意するのはよい考えです。アプリケーションがRails 3.2までアップグレードされていない場合は先にそれを完了し、アプリケーションが正常に動作することを十分確認してからRails 4.0にアップデートしてください。アップグレードの注意点などについては[Ruby on Railsアップグレードガイド](upgrading_ruby_on_rails.html#rails-3-2%E3%81%8B%E3%82%89rails-4-0%E3%81%B8%E3%81%AE%E3%82%A2%E3%83%83%E3%83%97%E3%82%B0%E3%83%AC%E3%83%BC%E3%83%89)を参照してください。 Rails 4.0アプリケーションを作成する @@ -55,61 +55,61 @@ $ ruby /path/to/rails/railties/bin/rails new myapp --dev ### アップグレード -* **Ruby 1.9.3** ([コミット](https://github.com/rails/rails/commit/a0380e808d3dbd2462df17f5d3b7fcd8bd812496)) - Ruby 2.0を推奨、1.9.3以降は必須。 +* **Ruby 1.9.3** ([コミット](https://github.com/rails/rails/commit/a0380e808d3dbd2462df17f5d3b7fcd8bd812496))- Ruby 2.0を推奨、1.9.3以降は必須。 * **[今後の非推奨化ポリシー](https://www.youtube.com/watch?v=z6YgD6tVPQs)** - 非推奨となった機能はRails 4.0で警告が表示されるようになり、Rails 4.1ではその機能が完全に削除される。 -* **ActionPackの「ページとアクションキャッシュ」(page and action caching)** ([コミット](https://github.com/rails/rails/commit/b0a7068564f0c95e7ef28fc39d0335ed17d93e90)) - ページとアクションキャッシュは個別のgemに分離された。ページとアクションキャッシュは手動での調整が必要な部分が多すぎる(背後のモデルオブジェクトが更新されたらキャッシュを手動で期限切れにする必要がある)。今後はロシアンドールキャッシュを利用すること。 -* **ActiveRecord observers** ([コミット](https://github.com/rails/rails/commit/ccecab3ba950a288b61a516bf9b6962e384aae0b)) - observers (デザインパターン) は個別のgemに分離された。observersパターンはページとアクションキャッシュでしか使われず、コードがスパゲッティになりやすいため。 -* **ActiveRecordセッションストア** ([コミット](https://github.com/rails/rails/commit/0ffe19056c8e8b2f9ae9d487b896cad2ce9387ad)) - ActiveRecordセッションストアは個別のgemに分離された。セッションをSQLに保存するのはコストがかさむ傾向がある。今後はcookiesセッション、memcacheセッション、または独自のセッションストアを利用すること。 -* **ActiveModelマスアサインメント保護** ([コミット](https://github.com/rails/rails/commit/f8c9a4d3e88181cee644f91e1342bfe896ca64c6)) - Rails 3のマスアサインメント保護は非推奨に指定された。今後はStrong Parametersを利用すること。 -* **ActiveResource** ([コミット](https://github.com/rails/rails/commit/f1637bf2bb00490203503fbd943b73406e043d1d)) - ActiveResourceは個別のgemに分離された。ActiveResourceの利用頻度が低いため。 -* **vendor/plugins の削除** ([コミット](https://github.com/rails/rails/commit/853de2bd9ac572735fa6cf59fcf827e485a231c3)) - 今後は`Gemfile`でgemのインストールを管理すること。 +* **ActionPackの「ページとアクションキャッシュ」(page and action caching)** ([コミット](https://github.com/rails/rails/commit/b0a7068564f0c95e7ef28fc39d0335ed17d93e90))- ページとアクションキャッシュは個別のgemに分離された。ページとアクションキャッシュは手動での調整が必要な部分が多すぎる(背後のモデルオブジェクトが更新されたらキャッシュを手動で期限切れにする必要がある)。今後はロシアンドールキャッシュを利用すること。 +* **ActiveRecord observers** ([コミット](https://github.com/rails/rails/commit/ccecab3ba950a288b61a516bf9b6962e384aae0b))- observers(デザインパターン)は個別のgemに分離された。observersパターンはページとアクションキャッシュでしか使われず、コードがスパゲッティになりやすいため。 +* **ActiveRecordセッションストア** ([コミット](https://github.com/rails/rails/commit/0ffe19056c8e8b2f9ae9d487b896cad2ce9387ad))- ActiveRecordセッションストアは個別のgemに分離された。セッションをSQLに保存するのはコストがかさむ傾向がある。今後はcookiesセッション、memcacheセッション、または独自のセッションストアを利用すること。 +* **ActiveModelマスアサインメント保護** ([コミット](https://github.com/rails/rails/commit/f8c9a4d3e88181cee644f91e1342bfe896ca64c6))- Rails 3のマスアサインメント保護は非推奨に指定された。今後はStrong Parametersを利用すること。 +* **ActiveResource** ([コミット](https://github.com/rails/rails/commit/f1637bf2bb00490203503fbd943b73406e043d1d))- ActiveResourceは個別のgemに分離された。ActiveResourceの利用頻度が低いため。 +* **vendor/pluginsの削除** ([コミット](https://github.com/rails/rails/commit/853de2bd9ac572735fa6cf59fcf827e485a231c3))- 今後は`Gemfile`でgemのインストールを管理すること。 ### ActionPack -* **Strong Parameters** ([コミット](https://github.com/rails/rails/commit/a8f6d5c6450a7fe058348a7f10a908352bb6c7fc)) - 許可リストで明示的に許可されたパラメータ (`params.permit(:title, :text)`) を使わないとモデルオブジェクトを更新できないようにする。 -* **ルーティングの「concern」機能** ([コミット](https://github.com/rails/rails/commit/0dd24728a088fcb4ae616bb5d62734aca5276b1b)) - ルーティング用のDSLで、共通となるサブルーティング (subroutes) を除外する (`/posts/1/comments`と`/videos/1/comments`における`comments`など)。 -* **ActionController::Live** ([コミット](https://github.com/rails/rails/commit/af0a9f9eefaee3a8120cfd8d05cbc431af376da3)) - JSONを`response.stream`でストリーミングする。 -* **「宣言的 (declarative)」ETag** ([コミット](https://github.com/rails/rails/commit/ed5c938fa36995f06d4917d9543ba78ed506bb8d)) - コントローラレベルのetagを追加する。これはアクションでのetag算出にも使われる。 -* **[ロシアンドールキャッシュ](https://37signals.com/svn/posts/3113-how-key-based-cache-expiration-works)** ([コミット](https://github.com/rails/rails/commit/4154bf012d2bec2aae79e4a49aa94a70d3e91d49)) - ビューで、ネストしたコード断片をキャッシュする。各断片は依存関係のセット (キャッシュキー) に応じて期限切れになる。通常、このキャッシュキーにはテンプレートのバージョン番号とモデルオブジェクトが使われる。 -* **Turbolinks** ([コミット](https://github.com/rails/rails/commit/e35d8b18d0649c0ecc58f6b73df6b3c8d0c6bb74)) - 最初のHTMLページだけを使ってサービスを提供する (訳注: 一部しか違わないページのためにページ全体を HTTP 送信しないで済むようにするための仕組み)。ユーザーが別のページに遷移すると、pushStateでURLを差し替え、AJAXでタイトルとbodyを差し替える。 -* **ActionControllerとActionViewの分離** ([コミット](https://github.com/rails/rails/commit/78b0934dd1bb84e8f093fb8ef95ca99b297b51cd)) - ActionViewはActionPackから分離され、Rails 4.1で個別のgemに移行する予定。 -* **ActiveModelへの依存をただちにやめること** ([コミット](https://github.com/rails/rails/commit/166dbaa7526a96fdf046f093f25b0a134b277a68)) - ActionPackはもはやActiveModelを使わなくなった。 +* **Strong Parameters** ([コミット](https://github.com/rails/rails/commit/a8f6d5c6450a7fe058348a7f10a908352bb6c7fc))- 許可リストで明示的に許可されたパラメータ(`params.permit(:title, :text)`)を使わないとモデルオブジェクトを更新できないようにする。 +* **ルーティングの「concern」機能** ([コミット](https://github.com/rails/rails/commit/0dd24728a088fcb4ae616bb5d62734aca5276b1b))- ルーティング用のDSLで、共通となるサブルーティング(subroutes)を除外する(`/posts/1/comments`と`/videos/1/comments`における`comments`など)。 +* **ActionController::Live** ([コミット](https://github.com/rails/rails/commit/af0a9f9eefaee3a8120cfd8d05cbc431af376da3))- JSONを`response.stream`でストリーミングする。 +* **「宣言的(declarative)」ETag** ([コミット](https://github.com/rails/rails/commit/ed5c938fa36995f06d4917d9543ba78ed506bb8d))- コントローラレベルのetagを追加する。これはアクションでのetag算出にも使われる。 +* **[ロシアンドールキャッシュ](https://37signals.com/svn/posts/3113-how-key-based-cache-expiration-works)** ([コミット](https://github.com/rails/rails/commit/4154bf012d2bec2aae79e4a49aa94a70d3e91d49))- ビューで、ネストしたコード断片をキャッシュする。各断片は依存関係のセット(キャッシュキー)に応じて期限切れになる。通常、このキャッシュキーにはテンプレートのバージョン番号とモデルオブジェクトが使われる。 +* **Turbolinks** ([コミット](https://github.com/rails/rails/commit/e35d8b18d0649c0ecc58f6b73df6b3c8d0c6bb74))- 最初のHTMLページだけを使ってサービスを提供する(訳注: 更新差分が少ししかないページのためにページ全体をHTTP送信しないで済むようにするための仕組み)。ユーザーが別のページに遷移すると、pushStateでURLを差し替え、AJAXでタイトルとbodyを差し替える。 +* **ActionControllerとActionViewの分離** ([コミット](https://github.com/rails/rails/commit/78b0934dd1bb84e8f093fb8ef95ca99b297b51cd))- ActionViewはActionPackから分離され、Rails 4.1で個別のgemに移行する予定。 +* **ActiveModelへの依存をただちにやめること** ([コミット](https://github.com/rails/rails/commit/166dbaa7526a96fdf046f093f25b0a134b277a68))- ActionPackはもはやActiveModelを使わなくなった。 ### 一般 -* **ActiveModel::Model** ([commit](https://github.com/rails/rails/commit/3b822e91d1a6c4eab0064989bbd07aae3a6d0d08)) - `ActiveModel::Model`は通常のRubyオブジェクトでもActionPackの機能を利用できるようにする (`form_for`など) ためのミックスイン。 -* **新しい「スコープAPI」** ([コミット](https://github.com/rails/rails/commit/50cbc03d18c5984347965a94027879623fc44cce)) - scopeメソッドの引数は常にcallメソッドを実装していなくてはならない。 -* **スキーマキャッシュダンプ** ([コミット](https://github.com/rails/rails/commit/5ca4fc95818047108e69e22d200e7a4a22969477)) - Railsの起動時間短縮のため、スキーマをデータベースから直接読み込むのではなくダンプファイルから読み込む。 -* **トランザクション分離レベル指定のサポート** ([コミット](https://github.com/rails/rails/commit/392eeecc11a291e406db927a18b75f41b2658253)) - 読み出しを頻繁に行うか、書き込みのパフォーマンスを重視してロックを減らすかを選択できる。 -* **Dalli** ([コミット](https://github.com/rails/rails/commit/82663306f428a5bbc90c511458432afb26d2f238)) - memcacheストアにはDalliのmemcacheクライアントを利用すること。 -* **通知の開始と終了** ([コミット](https://github.com/rails/rails/commit/f08f8750a512f741acb004d0cebe210c5f949f28)) - Active Support の内部フック機構 (instrumentation) によってサブスクライバへの通知の開始と終了が報告されます。 -* **デフォルトでのスレッドセーフ提供** ([コミット](https://github.com/rails/rails/commit/5d416b907864d99af55ebaa400fff217e17570cd)) - Railsは追加設定なしでスレッド化されます。 +* **ActiveModel::Model** ([コミット](https://github.com/rails/rails/commit/3b822e91d1a6c4eab0064989bbd07aae3a6d0d08))- `ActiveModel::Model`は通常のRubyオブジェクトでもActionPackの機能を利用できるようにする(`form_for`など)ためのミックスイン。 +* **新しい「スコープAPI」** ([コミット](https://github.com/rails/rails/commit/50cbc03d18c5984347965a94027879623fc44cce))- scopeメソッドの引数は常にcallメソッドを実装していなくてはならない。 +* **スキーマキャッシュダンプ** ([コミット](https://github.com/rails/rails/commit/5ca4fc95818047108e69e22d200e7a4a22969477))- Railsの起動時間短縮のため、スキーマをデータベースから直接読み込むのではなくダンプファイルから読み込む。 +* **トランザクション分離レベル指定のサポート** ([コミット](https://github.com/rails/rails/commit/392eeecc11a291e406db927a18b75f41b2658253))- 読み出しを頻繁に行うか、書き込みのパフォーマンスを重視してロックを減らすかを選択できる。 +* **Dalli** ([コミット](https://github.com/rails/rails/commit/82663306f428a5bbc90c511458432afb26d2f238))- memcacheストアにはDalliのmemcacheクライアントを利用すること。 +* **通知の開始と終了** ([コミット](https://github.com/rails/rails/commit/f08f8750a512f741acb004d0cebe210c5f949f28))- Active Supportの内部フック機構(instrumentation)によってサブスクライバへの通知の開始と終了が報告されます。 +* **デフォルトでのスレッドセーフ提供** ([コミット](https://github.com/rails/rails/commit/5d416b907864d99af55ebaa400fff217e17570cd))- Railsは追加設定なしでスレッド化されます。 NOTE: 追加したgemも同様にスレッドセーフであるかどうかをチェックしておいてください。 -* **PATCH動詞** ([コミット](https://github.com/rails/rails/commit/eed9f2539e3ab5a68e798802f464b8e4e95e619e)) - 従来の HTTP動詞であるPUTはPATCHに置き換えられました。PATCHはリソースの部分的な更新に使われます。 +* **PATCH動詞** ([コミット](https://github.com/rails/rails/commit/eed9f2539e3ab5a68e798802f464b8e4e95e619e))- 従来のHTTP動詞であるPUTはPATCHに置き換えられました。PATCHはリソースの部分的な更新に使われます。 ### セキュリティ -* **matchだけですべてをまかなわないこと** ([コミット](https://github.com/rails/rails/commit/90d2802b71a6e89aedfe40564a37bd35f777e541)) - ルーティング用のDSLで`match`を使う場合には HTTP動詞 (verb) を明示的に1つまたは複数指定する必要があります。 -* **htmlエンティティをデフォルトでエスケープ** ([コミット](https://github.com/rails/rails/commit/5f189f41258b83d49012ec5a0678d827327e7543)) - ERB内でレンダリングされる文字列は、`raw`や`html_safe`メソッドでラップしない限り常にエスケープされます。 -* **新しいセキュリティヘッダー** ([コメント](https://github.com/rails/rails/commit/6794e92b204572d75a07bd6413bdae6ae22d5a82)) - Railsから送信されるあらゆるHTTPリクエストに次のヘッダーが含まれるようになりました: `X-Frame-Options` (クリックジャック防止のため、フレーム内へのページ埋め込みを禁止するようブラウザに指示する)、`X-XSS-Protection` (スクリプト注入を停止するようブラウザに指示する)、`X-Content-Type-Options` (jpegファイルをexeとして開かないようブラウザに指示する)。 +* **matchだけですべてをまかなわないこと** ([コミット](https://github.com/rails/rails/commit/90d2802b71a6e89aedfe40564a37bd35f777e541))- ルーティング用のDSLで`match`を使う場合にはHTTP動詞(verb)を明示的に1つまたは複数指定する必要があります。 +* **htmlエンティティをデフォルトでエスケープ** ([コミット](https://github.com/rails/rails/commit/5f189f41258b83d49012ec5a0678d827327e7543))- ERB内でレンダリングされる文字列は、`raw`や`html_safe`メソッドでラップしない限り常にエスケープされます。 +* **新しいセキュリティヘッダー** ([コメント](https://github.com/rails/rails/commit/6794e92b204572d75a07bd6413bdae6ae22d5a82))- Railsから送信されるあらゆるHTTPリクエストに次のヘッダーが含まれるようになりました: `X-Frame-Options`(クリックジャック防止のため、フレーム内へのページ埋め込みを禁止するようブラウザに指示する)、`X-XSS-Protection`(スクリプト注入を停止するようブラウザに指示する)、`X-Content-Type-Options`(jpegファイルをexeとして開かないようブラウザに指示する)。 外部gem化された機能 --------------------------- Rails 4.0では多くの機能が切り出されてgemに移行しました。切り出されたgemを`Gemfile`ファイルに追加するだけでこれまでと同様に利用できます。 -* ハッシュベースおよび動的findメソッド群 ([GitHub](https://github.com/rails/activerecord-deprecated_finders)) -* Active Recordモデルでのマスアサインメント保護 ([GitHub](https://github.com/rails/protected_attributes)、[Pull Request](https://github.com/rails/rails/pull/7251)) -* ActiveRecord::SessionStore ([GitHub](https://github.com/rails/activerecord-session_store)、[Pull Request](https://github.com/rails/rails/pull/7436)) -* Active Record Observerパターン ([GitHub](https://github.com/rails/rails-observers)、[Commit](https://github.com/rails/rails/commit/39e85b3b90c58449164673909a6f1893cba290b2)) -* Active Resource ([GitHub](https://github.com/rails/activeresource), [Pull Request](https://github.com/rails/rails/pull/572)、[ブログ記事](http://yetimedia.tumblr.com/post/35233051627/activeresource-is-dead-long-live-activeresource)) -* アクションキャッシュ ([GitHub](https://github.com/rails/actionpack-action_caching)、[Pull Request](https://github.com/rails/rails/pull/7833)) -* ページキャッシュ ([GitHub](https://github.com/rails/actionpack-page_caching)、[Pull Request](https://github.com/rails/rails/pull/7833)) -* Sprockets ([GitHub](https://github.com/rails/sprockets-rails)) -* パフォーマンステスト ([GitHub](https://github.com/rails/rails-perftest)、[Pull Request](https://github.com/rails/rails/pull/8876)) +* ハッシュベースおよび動的findメソッド群([GitHub](https://github.com/rails/activerecord-deprecated_finders)) +* Active Recordモデルでのマスアサインメント保護([GitHub](https://github.com/rails/protected_attributes)、[プルリク](https://github.com/rails/rails/pull/7251)) +* `ActiveRecord::SessionStore`([GitHub](https://github.com/rails/activerecord-session_store)、[プルリク](https://github.com/rails/rails/pull/7436)) +* Active Record Observerパターン([GitHub](https://github.com/rails/rails-observers)、[コミット](https://github.com/rails/rails/commit/39e85b3b90c58449164673909a6f1893cba290b2)) +* Active Resource([GitHub](https://github.com/rails/activeresource), [プルリク](https://github.com/rails/rails/pull/572)、[ブログ記事](http://yetimedia.tumblr.com/post/35233051627/activeresource-is-dead-long-live-activeresource)) +* アクションキャッシュ([GitHub](https://github.com/rails/actionpack-action_caching)、[プルリク](https://github.com/rails/rails/pull/7833)) +* ページキャッシュ([GitHub](https://github.com/rails/actionpack-page_caching)、[プルリク](https://github.com/rails/rails/pull/7833)) +* Sprockets([GitHub](https://github.com/rails/sprockets-rails)) +* パフォーマンステスト([GitHub](https://github.com/rails/rails-perftest)、[プルリク](https://github.com/rails/rails/pull/8876)) ドキュメント ------------- @@ -121,28 +121,28 @@ Rails 4.0では多くの機能が切り出されてgemに移行しました。 Railties -------- -変更の詳細については[Changelog][railties] を参照してください。 +変更の詳細については[Changelog][railties]を参照してください。 ### 主な変更点 -* テスト用ディレクトリが追加されました: `test/models`、`test/helpers`、`test/controllers`、`test/mailers`これらに対応するrakeタスクも追加されました。([Pull Request](https://github.com/rails/rails/pull/7878)) +* テスト用ディレクトリが追加されました: `test/models`、`test/helpers`、`test/controllers`、`test/mailers`これらに対応するrakeタスクも追加されました。([プルリク](https://github.com/rails/rails/pull/7878)) * アプリケーション内の実行ファイルは`bin/`ディレクトリに置かれるようになりました。`rake rails:update:bin`を実行すると`bin/bundle`、`bin/rails`、`bin/rake`を取得します。 * デフォルトでスレッドセーフになりました。 -* `rails new`に`--builder`または`-b`を渡すことでカスタムビルダーを利用できる機能は削除されました。今後はアプリケーションテンプレートの利用をご検討ください。([Pull Request](https://github.com/rails/rails/pull/9401)) +* `rails new`に`--builder`または`-b`を渡すことでカスタムビルダーを利用できる機能は削除されました。今後はアプリケーションテンプレートの利用をご検討ください。([プルリク](https://github.com/rails/rails/pull/9401)) ### 非推奨 -* `config.threadsafe!`は非推奨になりました。今後は`config.eager_load`をご利用ください。後者は一括読み込み (eager load) の対象をさらに細かい粒度で制御できます。 +* `config.threadsafe!`は非推奨になりました。今後は`config.eager_load`をご利用ください。後者はeager loading(一括読み込み)の対象をさらに細かい粒度で制御できます。 * `Rails::Plugin`は廃止されました。今後は`vendor/plugins`にプラグインを追加する代わりに、gemやbundlerでパスやgit依存関係を指定してご利用ください。 Action Mailer ------------- -変更の詳細については[Changelog][action-mailer] を参照してください。 +変更の詳細については[Changelog][action-mailer]を参照してください。 ### 主な変更点 @@ -151,7 +151,7 @@ Action Mailer Active Model ------------ -変更の詳細については[Changelog][active-model] を参照してください。 +変更の詳細については[Changelog][active-model]を参照してください。 ### 主な変更点 @@ -164,7 +164,7 @@ Active Model Active Support -------------- -変更の詳細については[Changelog][active-support] を参照してください。 +変更の詳細については[Changelog][active-support]を参照してください。 ### 主な変更点 @@ -172,7 +172,7 @@ Active Support * `ActiveSupport::Cache::Entry`が最適化され、メモリ使用量と処理のオーバーヘッドが軽減されました。 -* 語の活用形 (inflection) をロケールごとに設定できるようになり、`singularize`や`pluralize`メソッドの引数にロケールも指定できるようになりました。 +* 語の活用形(inflection)をロケールごとに設定できるようになり、`singularize`や`pluralize`メソッドの引数にロケールも指定できるようになりました。 * `Object#try`に渡したオブジェクトにメソッドが実装されていなかった場合に、NoMethodErrorを発生する代わりにnilを返すようになりました。新しい`Object#try!`を使えば従来と同じ動作になります。 @@ -205,7 +205,7 @@ Active Support Action Pack ----------- -変更の詳細については[Changelog][action-pack] を参照してください。 +変更の詳細については[Changelog][action-pack]を参照してください。 ### 主な変更点 @@ -217,21 +217,21 @@ Action Pack Active Record ------------- -変更の詳細については[Changelog][active-record] を参照してください。 +変更の詳細については[Changelog][active-record]を参照してください。 ### 主な変更点 * マイグレーションで`change`を書く方法が改良され、以前のように`up`や`down`メソッドを使う必要がなくなりました。 - * `drop_table`メソッドと`remove_column`メソッドは逆方向のマイグレーション (取り消し) が可能になりました。ただしそのために必要な情報が与えられていることが前提です。 - `remove_column`メソッドは従来複数のカラムを引数に指定する際に使われていましたが、今後はそのような場合には`remove_columns`メソッドをご利用ください (ただしこちらは逆マイグレーションできません)。 + * `drop_table`メソッドと`remove_column`メソッドでマイグレーションの逆進(取り消し)が可能になりました。ただしそのために必要な情報が与えられていることが前提です。 + `remove_column`メソッドは従来複数のカラムを引数に指定する際に使われていましたが、今後はそのような場合には`remove_columns`メソッドをご利用ください(ただしこちらは逆マイグレーションできません)。 `change_table`も逆マイグレーション可能になりました。ただしそのブロックで`remove`、`change`、`change_default`が呼び出されていないことが前提です。 - * `reversible`メソッドが新たに追加され、マイグレーション (up) や逆マイグレーション (down) 時に実行するコードを指定できるようになりました。 + * `reversible`メソッドが新たに追加され、マイグレーション(up)や逆マイグレーション(down)時に実行するコードを指定できるようになりました。 詳細については[Active Record マイグレーションガイド](active_record_migrations.html#reversibleを使う)を参照してください。 * 新しい`revert`メソッドは、特定のブロックやマイグレーション全体を逆転します。 - 逆マイグレーション (down) を行うと、指定されたマイグレーションやブロックは通常のマイグレーション (up) になります。 + 逆マイグレーション(down)を行うと、指定されたマイグレーションやブロックは通常のマイグレーション(up)になります。 詳細については[Active Record マイグレーションガイド](active_record_migrations.html#以前のマイグレーションに戻す)を参照してください。 * PostgreSQLの配列型サポートが追加されました。配列カラムの作成時に任意のデータ型を使えます。それらのデータ型はフルマイグレーションやスキーマダンプでもサポートされます。 @@ -254,7 +254,7 @@ Active Record * `ActiveRecord::NullRelation`と`ActiveRecord::Relation#none`が追加されました。これらはRelationクラスにnullオブジェクトパターンを実装するためのものです。 -* `create_join_table`マイグレーションヘルパーが追加されました。これはHABTM (Has And Belongs To Many) 結合テーブルを作成します。 +* `create_join_table`マイグレーションヘルパーが追加されました。これはHABTM(Has And Belongs To Many)joinテーブルを作成します。 * PostgreSQL hstoreレコードを作成できるようになりました。 diff --git a/guides/source/ja/4_1_release_notes.md b/guides/source/ja/4_1_release_notes.md index c026c82a282..3ccda0e0413 100644 --- a/guides/source/ja/4_1_release_notes.md +++ b/guides/source/ja/4_1_release_notes.md @@ -127,7 +127,7 @@ class NotifierPreview < ActionMailer::Preview end ``` -プレビューを表示するには http://localhost:3000/rails/mailers/notifier/welcome にアクセスします。プレビューのリストは http://localhost:3000/rails/mailers にあります。 +このプレビューを表示するには、`http://localhost:3000/rails/mailers/notifier/welcome`にアクセスします。プレビューのリストは`http://localhost:3000/rails/mailers`で表示できます。 デフォルトのプレビュークラスは`test/mailers/previews`に置かれます。 `preview_path`オプションを変更することでこれを変更できます。 @@ -156,9 +156,9 @@ Conversation.statuses # => { "active" => 0, "archived" => 1 } ### メッセージベリファイア -メッセージベリファイア (message verifier) は、署名付きメッセージの生成と照合に利用できます。この機能は、「パスワードを保存 (remember me)」トークンや友人リストのような機密データを安全に転送するときに便利です。 +メッセージベリファイア(message verifier)は、署名付きメッセージの生成と照合に利用できます。この機能は、「パスワードを保存(remember me)」トークンや友人リストのような機密データを安全に転送するときに便利です。 -`Rails.application.message_verifier`メソッドは、 secret_key_baseで生成されたキーで署名された新しいメッセージベリファイアと、与えられたメッセージ照合名を返します。 +`Rails.application.message_verifier`メソッドは、secret_key_baseで生成されたキーで署名された新しいメッセージベリファイアと、与えられたメッセージ照合名を返します。 ```ruby signed_token = Rails.application.message_verifier(:remember_me).generate(token) @@ -195,9 +195,9 @@ end 詳細および想定されるユースケースについては[マニュアル](http://api.rubyonrails.org/v4.1.0/classes/Module/Concerning.html)を参照してください。 -### リモート `" "".html_safe + "<" # => "<" ``` -安全な引数であれば、(エスケープなしで)直接追加されます。 +安全な引数であれば、(エスケープなしで)直接追加されます。 ```ruby "".html_safe + "<".html_safe # => "<" @@ -1135,7 +1135,7 @@ NOTE: 定義は[`active_support/core_ext/string/output_safety.rb`](https://githu #### 各種変換 -経験上、上で説明したような連結 (concatenation) 操作を除き、どんなメソッドでも潜在的には文字列を安全でないものに変換してしまう可能性があることに常に注意を払う必要があります。`downcase`、`gsub`、`strip`、`chomp`、`underscore`などの変換メソッドがこれに該当します。 +経験上、上で説明したような連結(concatenation)操作を除き、どんなメソッドでも潜在的には文字列を安全でないものに変換してしまう可能性があることに常に注意を払う必要があります。`downcase`、`gsub`、`strip`、`chomp`、`underscore`などの変換メソッドがこれに該当します。 `gsub!`のような破壊的な変換を行なうメソッドを使うと、レシーバ自体が安全でなくなってしまいます。 @@ -1188,7 +1188,7 @@ NOTE: 定義は[`active_support/core_ext/string/filters.rb`](https://github.com/ # => "Oh dear! Oh dear!..." ``` -`:omission`オプションを指定することで、省略文字 (...) をカスタマイズすることもできます。 +`:omission`オプションを指定することで、省略文字(`...`)をカスタマイズすることも可能です。 ```ruby "Oh dear! Oh dear! I shall be late!".truncate(20, omission: "…") @@ -1229,7 +1229,7 @@ NOTE: 定義は[`active_support/core_ext/string/filters.rb`](https://github.com/ # => "👍👍👍…" ``` -`:omission`オプションを指定することで、省略文字 (...) をカスタマイズすることもできます。 +`:omission`オプションを指定することで、省略文字(`...`)をカスタマイズすることも可能です。 ```ruby "👍👍👍👍".truncate_bytes(15, omission: "🖖") @@ -1249,7 +1249,7 @@ NOTE: 定義は[`active_support/core_ext/string/filters.rb`](https://github.com/ # => "Oh dear! Oh dear!..." ``` -`:omission`オプションを指定することで、省略文字 (...) をカスタマイズすることもできます。 +`:omission`オプションを指定することで、省略文字(`...`)をカスタマイズすることも可能です。 ```ruby "Oh dear! Oh dear! I shall be late!".truncate_words(4, omission: "…") @@ -1357,7 +1357,7 @@ EOS "foo\n\nbar".indent(2, nil, true) # => " foo\n \n bar" ``` -[`indent!`][String#indent!]メソッドはインデントをその場で (破壊的に) 行います。 +[`indent!`][String#indent!]メソッドはインデントをその場で(破壊的に)行います。 NOTE: 定義は[`active_support/core_ext/string/indent.rb`](https://github.com/rails/rails/blob/8-0-stable/activesupport/lib/active_support/core_ext/string/indent.rb)にあります。 @@ -1425,7 +1425,7 @@ NOTE: 定義は[`active_support/core_ext/string/access.rb`](https://github.com/r [`last`][String#last]メソッドは、文字列末尾から`limit`文字分の部分文字列を返します。 -`str.last(n)` という呼び出しは、`n` > 0の場合は`str.from(-n)`と等価です。`n` == 0の場合は空文字列を返します。 +`str.last(n)`という呼び出しは、`n` > 0の場合は`str.from(-n)`と等価です。`n` == 0の場合は空文字列を返します。 NOTE: 定義は[`active_support/core_ext/string/access.rb`](https://github.com/rails/rails/blob/8-0-stable/activesupport/lib/active_support/core_ext/string/access.rb)にあります。 @@ -1477,7 +1477,7 @@ NOTE: 定義は[`active_support/core_ext/string/inflections.rb`](https://github. "equipment".singularize # => "equipment" ``` -Railsの関連付け (association) では、関連付けられたクラスにデフォルトで対応する名前を求める時にこのメソッドを使います。 +Railsの関連付け(association)では、関連付けられたクラスにデフォルトで対応する名前を求める時にこのメソッドを使います。 ```ruby # active_record/reflection.rb @@ -1494,7 +1494,7 @@ NOTE: 定義は[`active_support/core_ext/string/inflections.rb`](https://github. #### `camelize` -[`camelize`][String#camelize]メソッドは、レシーバをキャメルケース (冒頭を大文字にした単語をスペースなしで連結した語) にしたものを返します。 +[`camelize`][String#camelize]メソッドは、レシーバをキャメルケース(冒頭を大文字にした単語をスペースなしで連結した語)にしたものを返します。 ```ruby "product".camelize # => "Product" @@ -1602,7 +1602,7 @@ NOTE: 定義は[`active_support/core_ext/string/inflections.rb`](https://github. #### `dasherize` -[`dasherize`][String#dasherize]メソッドは、レシーバのアンダースコア文字をダッシュに置き換えます(訳注: ここで言うダッシュは実際には「ハイフンマイナス文字」(U+002D)です)。 +[`dasherize`][String#dasherize]メソッドは、レシーバのアンダースコア文字をダッシュに置き換えます(訳注: ここで言うダッシュは実際には「ハイフンマイナス文字(U+002D)」です)。 ```ruby "name".dasherize # => "name" @@ -1625,13 +1625,13 @@ NOTE: 定義は[`active_support/core_ext/string/inflections.rb`](https://github. #### `demodulize` -[`demodulize`][String#demodulize]メソッドは、フルパスの (qualified) 定数名を与えられると、パス部分を取り除いて右側の定数名だけにしたものを返します。 +[`demodulize`][String#demodulize]メソッドは、フルパスの(完全修飾)定数名を与えられると、パス部分を取り除いて右側の定数名だけにしたものを返します。 ```ruby "Product".demodulize # => "Product" -"Backoffice::UsersController".demodulize # => "UsersController" +"Backoffice::UsersController".demodulize # => "UsersController" "Admin::Hotel::ReservationUtils".demodulize # => "ReservationUtils" -"::Inflections".demodulize # => "Inflections" +"::Inflections".demodulize # => "Inflections" "".demodulize # => "" ``` @@ -1655,7 +1655,7 @@ NOTE: 定義は[`active_support/core_ext/string/inflections.rb`](https://github. #### `deconstantize` -[`deconstantize`][String#deconstantize]メソッドは、フルパスの定数を表す参照表現を与えられると、一番右の部分 (通常は定数名) を取り除きます。 +[`deconstantize`][String#deconstantize]メソッドは、フルパスの定数を表す参照表現を与えられると、一番右の部分(通常は定数名)を取り除きます。 ```ruby "Product".deconstantize # => "" @@ -1720,13 +1720,13 @@ NOTE: 定義は[`active_support/core_ext/string/inflections.rb`](https://github. "invoice_lines".classify # => "InvoiceLine" ``` -このメソッドは、フルパスの (qualified) テーブル名も扱えます。 +このメソッドは、フルパスの(完全修飾)テーブル名も扱えます。 ```ruby "highrise_production.companies".classify # => "Company" ``` -`classify`が返すクラス名は文字列であることにご注意ください。得られた文字列に対して`constantize` (後述) を実行することで実際のクラスオブジェクトを得られます。 +`classify`が返すクラス名は文字列であることにご注意ください。得られた文字列に対して`constantize`(後述)を実行することで実際のクラスオブジェクトを得られます。 NOTE: 定義は[`active_support/core_ext/string/inflections.rb`](https://github.com/rails/rails/blob/8-0-stable/activesupport/lib/active_support/core_ext/string/inflections.rb)にあります。 @@ -1762,7 +1762,7 @@ end このため、このメソッドは、同じ場所でRubyが定数を評価したときの値と必ずしも等価ではありません。 -メーラー (mailer) のテストケースでは、テストするクラスの名前からテスト対象のメーラーを取得するのに`constantize`メソッドを使います。 +メーラー(mailer)のテストケースでは、テストするクラスの名前からテスト対象のメーラーを取得するのに`constantize`メソッドを使います。 ```ruby # action_mailer/test_case.rb @@ -1779,13 +1779,13 @@ NOTE: 定義は[`active_support/core_ext/string/inflections.rb`](https://github. #### `humanize` -[`humanize`][String#humanize]メソッドは、属性名を (英語的に) 読みやすい表記に変換します。 +[`humanize`][String#humanize]メソッドは、属性名を(英語的に)読みやすい表記に変換します。 具体的には以下の変換を行います。 - * 引数に (英語の) 活用ルールを適用する(inflection)。 + * 引数に(英語の)活用ルールを適用する(inflection)。 * 冒頭にアンダースコアがある場合は削除する。 - * 末尾に「_id」がある場合は削除する。 + * 末尾に`_id`がある場合は削除する。 * アンダースコアが他にもある場合はスペースに置き換える。 * 略語を除いてすべての単語を小文字にする(downcase)。 * 最初の単語だけ冒頭の文字を大文字にする(capitalize)。 @@ -1842,7 +1842,7 @@ NOTE: 定義は[`active_support/core_ext/string/inflections.rb`](https://github. "User".foreign_key(false) # => "userid" ``` -関連付け (association) では、外部キー名を推測するときにこのメソッドを使います。たとえば`has_one`と`has_many`では以下を行っています。 +Railsの関連付け(association)では、外部キー名を推測するときにこのメソッドを使います。たとえば`has_one`と`has_many`では以下を行っています。 ```ruby # active_record/associations.rb @@ -1875,7 +1875,7 @@ The method [`downcase_first`][String#downcase_first] converts the first letter o "".downcase_first # => "" ``` -NOTE: Defined in `active_support/core_ext/string/inflections.rb`. +NOTE: 定義は`active_support/core_ext/string/inflections.rb`にあります。 [String#downcase_first]: https://api.rubyonrails.org/classes/String.html#method-i-downcase_first @@ -1969,13 +1969,13 @@ NOTE: 定義は[`active_support/core_ext/numeric/bytes.rb`](https://github.com/r これらのメソッドを[`from_now`][Duration#from_now]や[`ago`][Duration#ago]などと組み合わせることで、以下のように精密に日付を計算できます。 ```ruby -# Time.current.advance(months: 1) と等価 +# Time.current.advance(months: 1)と等価 1.month.from_now -# Time.current.advance(weeks: 2) と等価 +# Time.current.advance(weeks: 2)と等価 2.weeks.from_now -# Time.current.advance(months: 4, weeks: 5) と等価 +# Time.current.advance(months: 4, weeks: 5)と等価 (4.months + 5.weeks).from_now ``` @@ -2339,7 +2339,7 @@ Active Supportには配列のAPIが多数追加されており、配列に容易 [ [ 0, 1 ], [ 1, 0 ] ].excluding([ [ 1, 0 ] ]) # => [ [ 0, 1 ] ] ``` -[`second`][Array#second]、[`third`][Array#third]、[`fourth`][Array#fourth]、[`fifth`][Array#fifth]は、[`second_to_last`][Array#second_to_last]や[`third_to_last`][Array#third_to_last]と同様に、対応する位置の要素を返します (`first`と`last`は元からビルトインされています)。社会の智慧と建設的な姿勢のおかげで、今では[`forty_two`][Array#forty_two]も使えます (訳注: [Rails 2.2 以降](https://github.com/rails/rails/commit/9d8cc60ec3845fa3e6f9292a65b119fe4f619f7e)で使えます。「42」については、Wikipediaの[生命、宇宙、そして万物についての究極の疑問の答え](http://ja.wikipedia.org/wiki/%E7%94%9F%E5%91%BD%E3%80%81%E5%AE%87%E5%AE%99%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6%E4%B8%87%E7%89%A9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AE%E7%A9%B6%E6%A5%B5%E3%81%AE%E7%96%91%E5%95%8F%E3%81%AE%E7%AD%94%E3%81%88)を参照してください)。 +[`second`][Array#second]、[`third`][Array#third]、[`fourth`][Array#fourth]、[`fifth`][Array#fifth]は、[`second_to_last`][Array#second_to_last]や[`third_to_last`][Array#third_to_last]と同様に、対応する位置の要素を返します(`first`と`last`は元からビルトインされています)。社会の智慧と建設的な姿勢のおかげで、今では[`forty_two`][Array#forty_two]も使えます(訳注: [Rails 2.2以降](https://github.com/rails/rails/commit/9d8cc60ec3845fa3e6f9292a65b119fe4f619f7e)で使えます。「42」については、Wikipediaの[生命、宇宙、そして万物についての究極の疑問の答え](http://ja.wikipedia.org/wiki/%E7%94%9F%E5%91%BD%E3%80%81%E5%AE%87%E5%AE%99%E3%80%81%E3%81%9D%E3%81%97%E3%81%A6%E4%B8%87%E7%89%A9%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E3%81%AE%E7%A9%B6%E6%A5%B5%E3%81%AE%E7%96%91%E5%95%8F%E3%81%AE%E7%AD%94%E3%81%88)を参照してください)。 ```ruby %w(a b c d).third # => "c" @@ -2425,7 +2425,7 @@ NOTE: 定義は[`active_support/core_ext/array/extract_options.rb`](https://gith これらのオプションは標準の方法でローカライズできます。使えるキーは以下のとおりです。 -| オプション | I18n キー | +| オプション | I18nキー | | ---------------------- | ----------------------------------- | | `:two_words_connector` | `support.array.two_words_connector` | | `:words_connector` | `support.array.words_connector` | @@ -2479,7 +2479,7 @@ Contributor.limit(2).order(:rank).to_xml 実際には、`to_xml`をすべての要素に送信し、結果をrootノードの下に集めます。すべての要素が`to_xml`に応答する必要があります。そうでない場合は例外が発生します。 -デフォルトでは、root要素の名前は最初の要素のクラス名を複数形にしてアンダースコア化(underscored)とダッシュ化(dasherized)したものになります。残りの要素も最初の要素と同じ型 (`is_a?`でチェックされます) に属し、ハッシュでないことが前提となっています。上の例で言うと「contributors」です。 +デフォルトでは、root要素の名前は最初の要素のクラス名を複数形にしてアンダースコア化(underscored)とダッシュ化(dasherized)したものになります。残りの要素も最初の要素と同じ型(`is_a?`でチェックされます)に属し、ハッシュでないことが前提となっています。上の例で言うと「contributors」です。 最初の要素と同じ型に属さない要素が1つでもある場合、rootノードには`objects`が使われます。 @@ -2558,13 +2558,13 @@ NOTE: 定義は[`active_support/core_ext/array/conversions.rb`](https://github.c ### ラッピング -[`Array.wrap`][Array.wrap]メソッドは、配列の中にある引数が配列 (または配列的なもの) になっていない場合に、それらを配列の中にラップします。 +[`Array.wrap`][Array.wrap]メソッドは、配列の中にある引数が配列(または配列的なもの)になっていない場合に、それらを配列の中にラップします。 特徴: * 引数が`nil`の場合、空の配列を返します。 * 上記以外の場合で、引数が`to_ary`に応答する場合は`to_ary`が呼び出され、`to_ary`の値が`nil`でない場合はその値を返します。 -* 上記以外の場合、引数を内側に含んだ配列 (要素が1つだけの配列) を返します。 +* 上記以外の場合、引数を内側に含んだ配列(要素が1つだけの配列)を返します。 ```ruby Array.wrap(nil) # => [] @@ -2576,7 +2576,7 @@ Array.wrap(0) # => [0] * 引数が`to_ary`に応答する場合、このメソッドが呼び出されます。`nil`が返された場合、`Kernel#Array`は`to_a`を適用しようと動作を続けますが、`Array.wrap`はその場で、引数を単一の要素として持つ配列を返します。 * `to_ary`から返された値が`nil`でも`Array`オブジェクトでもない場合、`Kernel#Array`は例外を発生しますが、`Array.wrap`は例外を発生せずに単にその値を返します。 -* このメソッドは引数に対して`to_a`を呼び出しませんが、この引数が `to_ary` に応答しない場合、引数を単一の要素として持つ配列を返します。 +* このメソッドは引数に対して`to_a`を呼び出しませんが、この引数が`to_ary`に応答しない場合、引数を単一の要素として持つ配列を返します。 特に最後の点については、いくつかの列挙型で比較する価値があります。 @@ -2739,11 +2739,11 @@ NOTE: 定義は[`active_support/core_ext/array/grouping.rb`](https://github.com/ * `value`が配列の場合、`key`を`:root`として、`key`を単数形化(singularize)したものを`:children`として再帰的な呼び出しを行います。 -* 値が呼び出し可能な(callable)オブジェクトの場合、引数が1つまたは2つ必要です。引数の数に応じて (`arity`メソッドで確認)、呼び出し可能オブジェクトを呼び出します。第1引数には`key`を`:root`として指定したもの、第2引数には`key`を単数形化したものが使われます。戻り値は新しいノードです。 +* 値が呼び出し可能な(callable)オブジェクトの場合、引数が1つまたは2つ必要です。引数の数に応じて(`arity`メソッドで確認)、呼び出し可能オブジェクトを呼び出します。第1引数には`key`を`:root`として指定したもの、第2引数には`key`を単数形化したものが使われます。戻り値は新しいノードです。 * `value`が`to_xml`メソッドに応答する場合、`key`を`:root`としてメソッドを呼び出します。 -* その他の場合、`key`を持つノードがタグとして作成されます。そのノードには`value`を文字列形式にしたものがテキストノードとして追加されます。`value`が`nil`の場合、"nil"属性が"true"に設定されたものが追加されます。`:skip_types`オプションが`true`でない (または`:skip_types`オプションがない) 場合、「type」属性も以下のマッピングで追加されます。 +* その他の場合、`key`を持つノードがタグとして作成されます。そのノードには`value`を文字列形式にしたものがテキストノードとして追加されます。`value`が`nil`の場合、"nil"属性が"true"に設定されたものが追加されます。`:skip_types`オプションが`true`でない場合(または`:skip_types`オプションがない場合)、「type」属性も以下のマッピングで追加されます。 ```ruby XML_TYPE_NAMES = { @@ -2992,7 +2992,7 @@ NOTE: 定義は[`active_support/core_ext/hash/keys.rb`](https://github.com/rails ### 値を扱う -#### `deep_transform_values` and `deep_transform_values!` +#### `deep_transform_values`と`deep_transform_values!` [`deep_transform_values`][Hash#deep_transform_values]メソッドは、ブロック操作で変換されたすべての値を持つ新しいハッシュを返します。その中には、rootハッシュと、ネストしたハッシュや配列のすべての値も含まれます。 @@ -3444,14 +3444,14 @@ INFO: 以下のメソッドは可能であれば`Time`オブジェクトを返 ##### `beginning_of_day`、`end_of_day` -[`beginning_of_day`][Date#beginning_of_day]メソッドは、その日の開始時点 (00:00:00) のタイムスタンプを返します。 +[`beginning_of_day`][Date#beginning_of_day]メソッドは、その日の開始時点(00:00:00)のタイムスタンプを返します。 ```ruby date = Date.new(2010, 6, 7) date.beginning_of_day # => Mon Jun 07 00:00:00 +0200 2010 ``` -[`end_of_day`][Date#end_of_day]メソッドは、その日の最後の時点 (23:59:59) のタイムスタンプを返します。 +[`end_of_day`][Date#end_of_day]メソッドは、その日の最後の時点(23:59:59)のタイムスタンプを返します。 ```ruby date = Date.new(2010, 6, 7) @@ -3470,14 +3470,14 @@ NOTE: 定義は[`active_support/core_ext/date/calculations.rb`](https://github.c ##### `beginning_of_hour`、`end_of_hour` -[`beginning_of_hour`][DateTime#beginning_of_hour]メソッドは、その時(hour)の最初の時点 (hh:00:00) のタイムスタンプを返します。 +[`beginning_of_hour`][DateTime#beginning_of_hour]メソッドは、その時(hour)の最初の時点(hh:00:00)のタイムスタンプを返します。 ```ruby date = DateTime.new(2010, 6, 7, 19, 55, 25) date.beginning_of_hour # => Mon Jun 07 19:00:00 +0200 2010 ``` -[`end_of_hour`][DateTime#end_of_hour]メソッドは、その時の最後の時点 (hh:59:59) のタイムスタンプを返します。 +[`end_of_hour`][DateTime#end_of_hour]メソッドは、その時の最後の時点(hh:59:59)のタイムスタンプを返します。 ```ruby date = DateTime.new(2010, 6, 7, 19, 55, 25) @@ -3490,14 +3490,14 @@ NOTE: 定義は[`active_support/core_ext/date_and_time/calculations.rb`](https:/ ##### `beginning_of_minute`、`end_of_minute` -[`beginning_of_minute`][DateTime#beginning_of_minute]は、その分の最初の時点 (hh:mm:00) のタイムスタンプを返します。 +[`beginning_of_minute`][DateTime#beginning_of_minute]は、その分の最初の時点(hh:mm:00)のタイムスタンプを返します。 ```ruby date = DateTime.new(2010, 6, 7, 19, 55, 25) date.beginning_of_minute # => Mon Jun 07 19:55:00 +0200 2010 ``` -[`end_of_minute`][DateTime#end_of_minute]メソッドは、その分の最後の時点 (hh:mm:59) のタイムスタンプを返します。 +[`end_of_minute`][DateTime#end_of_minute]メソッドは、その分の最後の時点(hh:mm:59)のタイムスタンプを返します。 ```ruby date = DateTime.new(2010, 6, 7, 19, 55, 25) @@ -3538,7 +3538,7 @@ NOTE: 定義は[`active_support/core_ext/date/calculations.rb`](https://github.c `DateTime`の拡張 ------------------------ -WARNING: `DateTime`は夏時間 (DST) ルールについては関知しません。夏時間の変更中は、メソッドの一部がこのとおりに動作しないエッジケースがあります。たとえば、[`seconds_since_midnight`][DateTime#seconds_since_midnight]メソッドが返す秒数が実際の総量と合わない可能性があります。 +WARNING: `DateTime`は夏時間(DST)ルールについては関知しません。夏時間の変更中は、メソッドの一部がこのとおりに動作しないエッジケースがあります。たとえば、[`seconds_since_midnight`][DateTime#seconds_since_midnight]メソッドが返す秒数が実際の総量と合わない可能性があります。 ### 計算 @@ -3636,7 +3636,7 @@ d.advance(years: 1, months: 1, days: 1, hours: 1, minutes: 1, seconds: 1) # => Tue, 06 Sep 2011 12:34:32 +0000 ``` -このメソッドは最初に、上で説明されている`Date#advance`に対する経過年(`:years`)、経過月 (`:months`)、経過週 (`:weeks`)、経過日 (`:days`) を元に移動先の日付を算出します。次に、算出された時点までの経過秒数を元に[`since`][DateTime#since]メソッドを呼び出し、時間を補正します。この実行順序には意味があります(極端なケースでは、順序が変わると計算結果も異なる場合があります)。この`Date#advance`の例はそれに該当し、これを延長することで、時間部分の相対的な計算順序がどのように影響するかを示せます。 +このメソッドは最初に、上で説明されている`Date#advance`に対する経過年(`:years`)、経過月(`:months`)、経過週(`:weeks`)、経過日(`:days`)を元に移動先の日付を算出します。次に、算出された時点までの経過秒数を元に[`since`][DateTime#since]メソッドを呼び出し、時間を補正します。この実行順序には意味があります(極端なケースでは、順序が変わると計算結果も異なる場合があります)。この`Date#advance`の例はそれに該当し、これを延長することで、時間部分の相対的な計算順序がどのように影響するかを示せます。 もし仮に日付部分を最初に計算し(前述したとおり、相対的な計算順序も影響します)、次に時間部分を計算すると、以下のような結果が得られます。 @@ -3654,7 +3654,7 @@ d.advance(seconds: 1).advance(months: 1) # => Thu, 01 Apr 2010 00:00:00 +0000 ``` -WARNING: `DateTime`は夏時間 (DST) を考慮しません。算出された時間が最終的に存在しない時間になっても警告やエラーは発生しません。 +WARNING: `DateTime`は夏時間(DST)を考慮しません。算出された時間が最終的に存在しない時間になっても警告やエラーは発生しません。 NOTE: 定義は[`active_support/core_ext/date_and_time/calculations.rb`](https://github.com/rails/rails/blob/8-0-stable/activesupport/lib/active_support/core_ext/date_and_time/calculations.rb)にあります。 @@ -3725,7 +3725,7 @@ DateTime.new(1582, 10, 4, 23) + 1.hour これらは同様に動作します。関連するドキュメントを参照し、以下の相違点についても把握しておいてください。 * [`change`][Time#change]メソッドは追加の`:usec`(マイクロ秒)オプションも受け取れます。。 -* `Time`は夏時間 (DST) を理解するので、以下のように夏時間を正しく算出できます。 +* `Time`は夏時間(DST)を理解するので、以下のように夏時間を正しく算出できます。 ```ruby Time.zone_default @@ -3960,7 +3960,7 @@ NOTE: 定義は[`active_support/core_ext/file/atomic.rb`](https://github.com/rai Active Supportは`NameError`に[`missing_name?`][NameError#missing_name?]メソッドを追加します。このメソッドは、引数として渡された名前が原因で例外が発生するかどうかをテストします。 -渡される名前はシンボルまたは文字列です。シンボルを渡した場合は単なる定数名をテストし、文字列を渡した場合はフルパス (完全修飾) の定数名をテストします。 +渡される名前はシンボルまたは文字列です。シンボルを渡した場合は単なる定数名をテストし、文字列を渡した場合はフルパス(完全修飾)の定数名をテストします。 TIP: シンボルは、`:"ActiveRecord::Base"`で行なっているのと同じようにフルパスの定数として表せます。シンボルがそのように動作するのは利便性のためであり、技術的に必要だからではありません。 @@ -3987,7 +3987,7 @@ NOTE: 定義は[`active_support/core_ext/name_error.rb`](https://github.com/rail Active Supportは[`is_missing?`][LoadError#is_missing?]を`LoadError`に追加します。 -`is_missing?`は、パス名を引数に取り、特定のファイルが原因で例外が発生するかどうかをテストします (".rb"拡張子が原因と思われる場合を除きます)。 +`is_missing?`は、パス名を引数に取り、特定のファイルが原因で例外が発生するかどうかをテストします(".rb"拡張子が原因と思われる場合を除く)。 たとえば、`ArticlesController`のアクションが呼び出されると、Railsは`articles_helper.rb`を読み込もうとしますが、このファイルは存在しないことがあります。ヘルパーモジュールは必須ではないので、Railsは読み込みエラーを例外扱いせずに黙殺します。しかし、ヘルパーモジュールが存在しないために別のライブラリが必要になり、それがさらに見つからないという場合が考えられます。Railsはそのような場合には例外を再発生させなければなりません。`is_missing?`メソッドは、この2つの場合を区別するために使われます。 diff --git a/guides/source/ja/active_support_instrumentation.md b/guides/source/ja/active_support_instrumentation.md index c61bae4cb52..6385589545a 100644 --- a/guides/source/ja/active_support_instrumentation.md +++ b/guides/source/ja/active_support_instrumentation.md @@ -94,10 +94,10 @@ Ruby on Railsでは、フレームワーク内の主なイベント向けのフ | `:action` | アクション | | `:request` | [`ActionDispatch::Request`][]オブジェクト | | `:params` | リクエストパラメータのハッシュ(フィルタされたパラメータは含まない) | -| `:headers` | リクエスト ヘッダー | -| `:format` | html/js/json/xml など | -| `:method` | HTTP リクエストメソッド(verb) | -| `:path` | リクエスト パス | +| `:headers` | リクエストヘッダー | +| `:format` | html/js/json/xmlなど | +| `:method` | HTTPリクエストメソッド(verb) | +| `:path` | リクエストパス | ```ruby { @@ -118,13 +118,13 @@ Ruby on Railsでは、フレームワーク内の主なイベント向けのフ | `:controller` | コントローラ名 | | `:action` | アクション | | `:params` | リクエストパラメータのハッシュ(フィルタされたパラメータは含まない) | -| `:headers` | リクエスト ヘッダー | -| `:format` | html/js/json/xml など | -| `:method` | HTTP リクエストメソッド(verb) | -| `:path` | リクエスト パス | +| `:headers` | リクエストヘッダー | +| `:format` | html/js/json/xmlなど | +| `:method` | HTTPリクエストメソッド(verb) | +| `:path` | リクエストパス | | `:request` | [`ActionDispatch::Request`][]オブジェクト | | `:response` | [`ActionDispatch::Response`][]オブジェクト | -| `:status` | HTTP ステータスコード | +| `:status` | HTTPステータスコード | | `:view_runtime` | ビューでかかった合計時間(ms) | | `:db_runtime` | データベースへのクエリ実行にかかった時間(ms) | @@ -161,7 +161,7 @@ Ruby on Railsでは、フレームワーク内の主なイベント向けのフ | キー | 値 | | ----------- | --------------------------------------- | -| `:status` | HTTP レスポンス コード | +| `:status` | HTTPレスポンスコード | | `:location` | リダイレクト先URL | | `:request` | [`ActionDispatch::Request`][]オブジェクト | @@ -641,7 +641,7 @@ end #### `cache_delete_matched.active_support` -このイベントは、[`RedisCacheStore`][ActiveSupport::Cache::RedisCacheStore]、 [`FileStore`][ActiveSupport::Cache::FileStore]、または[`MemoryStore`][ActiveSupport::Cache::MemoryStore]を使った場合にのみ発火します。 +このイベントは、[`RedisCacheStore`][ActiveSupport::Cache::RedisCacheStore]、[`FileStore`][ActiveSupport::Cache::FileStore]、または[`MemoryStore`][ActiveSupport::Cache::MemoryStore]を使った場合にのみ発火します。 | キー | 値 | | -------- | --------------------- | diff --git a/guides/source/ja/api_app.md b/guides/source/ja/api_app.md index ee584a13005..7a86f7d0866 100644 --- a/guides/source/ja/api_app.md +++ b/guides/source/ja/api_app.md @@ -14,11 +14,11 @@ Rails による API 専用アプリケーション APIアプリケーションについて --------------------------- -従来、Railsの「API」というと、プログラムからアクセスできるAPIをWebアプリケーションに追加することを指すのが通例でした。たとえば、GitHubが提供する[API](https://developer.github.com) はカスタムクライアントから利用できます。 +従来、Railsの「API」というと、プログラムからアクセスできるAPIをWebアプリケーションに追加することを指すのが通例でした。たとえば、GitHubが提供する[API](https://developer.github.com)はカスタムクライアントから利用できます。 近年、さまざまなクライアント側フレームワークが登場したことによって、Railsで構築したバックエンドサーバーを他のWebアプリケーションとネイティブアプリケーションの間で共有する手法が増えてきました。 -たとえば、X.comは自社のWebアプリケーションで [パブリックAPI](https://developer.x.com/)を利用しています。このWebアプリケーションは、JSONリソースを消費するだけの静的サイトとして構築されています。 +たとえば、X.comは自社のWebアプリケーションで[パブリックAPI](https://developer.x.com/)を利用しています。このWebアプリケーションは、JSONリソースを消費するだけの静的サイトとして構築されています。 多くの開発者が、Railsで生成したHTMLフォームやリンクをサーバー間のやりとりに使うのではなく、Webアプリケーションを単なるAPIクライアントにとどめて、JSON APIを利用するHTMLとJavaScriptの提供に専念するようになってきました。 @@ -41,10 +41,10 @@ APIアプリケーションの開発にすぐ役立つRailsの機能をいくつ - **developmentモード**: Railsアプリケーションのdevelopmentモードには開発に最適なデフォルト値が設定されているので、productionモードのパフォーマンスを損なわずに快適な開発環境を利用できます。 - **testモード**: developmentモードと同様です。 - **ログ出力**: Railsアプリケーションはすべてのリクエストをログに出力します。また、現在のモードに応じてログの詳細レベルが調整されます。developmentモードのログには、リクエスト環境、データベースクエリ、基本的なパフォーマンス情報などが出力されます。 -- **セキュリティ**: [IPスプーフィング攻撃](https://ja.wikipedia.org/wiki/IP%E3%82%B9%E3%83%97%E3%83%BC%E3%83%95%E3%82%A3%E3%83%B3%E3%82%B0) を検出・防御します。また、[タイミング攻撃](https://ja.wikipedia.org/wiki/%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E6%94%BB%E6%92%83) に対応できる暗号化署名を扱います。皆さんはIPスプーフィング攻撃やタイミング攻撃がどんなものかご存知ですか? +- **セキュリティ**: [IPスプーフィング攻撃](https://ja.wikipedia.org/wiki/IP%E3%82%B9%E3%83%97%E3%83%BC%E3%83%95%E3%82%A3%E3%83%B3%E3%82%B0)を検出・防御します。また、[タイミング攻撃](https://ja.wikipedia.org/wiki/%E3%82%BF%E3%82%A4%E3%83%9F%E3%83%B3%E3%82%B0%E6%94%BB%E6%92%83)に対応できる暗号化署名を扱います。皆さんはIPスプーフィング攻撃やタイミング攻撃がどんなものかご存知ですか? - **パラメータ解析**: URLエンコード文字列の代わりにJSONでパラメータを指定できます。JSONはRailsでデコードされ、`params`でアクセスできます。もちろん、ネストしたURLエンコードパラメータも扱えます。 - **条件付きGET**: Railsでは、`ETag`や`Last-Modified`を使った条件付き`GET`を扱えます。条件付き`GET`はリクエストヘッダを処理し、正しいレスポンスヘッダとステータスコードを返します。コントローラに - [**`stale?`**](https://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-stale-3F) チェックを追加するだけで、HTTPの細かなやりとりはRailsが代行してくれます。 + [**`stale?`**](https://api.rubyonrails.org/classes/ActionController/ConditionalGet.html#method-i-stale-3F)チェックを追加するだけで、HTTPの細かなやりとりはRailsが代行してくれます。 - **HEADリクエスト**: Railsは`HEAD`リクエストを透過的に`GET`リクエストに変換し、ヘッダだけを返します。これによって、すべてのRails APIで`HEAD`リクエストを確実に利用できます。 Rackミドルウェアのこうした既存の機能を自前で構築する方法も考えられますが、Railsのデフォルトのミドルウェアを「JSON生成専用」に使うだけでも多数のメリットが得られます。 @@ -291,7 +291,7 @@ Railsコントローラ内部で`send_file`メソッドを実行すると、`X-S フロントエンドサーバーでのファイル送信に使うヘッダ名は、該当する環境設定ファイルの[`config.action_dispatch.x_sendfile_header`][]で設定できます。 -主要なフロントエンドで`Rack::Sendfile`を使う方法について詳しくは、[`Rack::Sendfile`ドキュメント](https://www.rubydoc.info/gems/rack/Rack/Sendfile) を参照してください。 +主要なフロントエンドで`Rack::Sendfile`を使う方法について詳しくは、[`Rack::Sendfile`ドキュメント](https://www.rubydoc.info/gems/rack/Rack/Sendfile)を参照してください。 主要なサーバーでファイル送信アクセラレーションを有効にするには、ヘッダに次のような値を設定します。 @@ -337,7 +337,7 @@ fetch('/people', { - `ActionDispatch::Session::CookieStore` - `ActionDispatch::Session::MemCacheStore` -ここで注意が必要なのは、これらのミドルウェア(およびセッションキー)はデフォルトでは `session_options`に渡されることです。つまり、通常どおりに`session_store.rb`イニシャライザを追加して`use ActionDispatch::Session::CookieStore`を指定しただけではセッションは機能しません(補足: セッションは動作しますがセッションオプションが無視されるので、セッションキーがデフォルトで`_session_id`になります)。 +ここで注意が必要なのは、これらのミドルウェア(およびセッションキー)はデフォルトでは`session_options`に渡されることです。つまり、通常どおりに`session_store.rb`イニシャライザを追加して`use ActionDispatch::Session::CookieStore`を指定しただけではセッションは機能しません(補足: セッションは動作しますがセッションオプションが無視されるので、セッションキーがデフォルトで`_session_id`になります)。 そのため、セッション関連のオプションはイニシャライザで設定するのではなく、以下のように自分が使うミドルウェアが構築されるより前の場所(`config/application.rb`など)に配置して、使いたいオプションをミドルウェアに渡さなければなりません。 @@ -392,7 +392,7 @@ APIアプリケーション(`ActionController::API`を利用)には、デフ - `ActionController::DataStreaming`: `send_file`や`send_data`のサポート - `AbstractController::Callbacks`: `before_action`などのヘルパーをサポート - `ActionController::Rescue`: `rescue_from`をサポート -- `ActionController::Instrumentation`: Action Controllerで定義するinstrumentationフックをサポート(詳しくは[instrumentationガイド][] を参照) +- `ActionController::Instrumentation`: Action Controllerで定義するinstrumentationフックをサポート(詳しくは[instrumentationガイド][]を参照) - `ActionController::ParamsWrapper`: パラメータハッシュをラップしてネステッドハッシュにする(たとえばPOSTリクエスト送信時のroot要素が必須でなくなる) - `ActionController::Head`: コンテンツのないヘッダのみのレスポンスを返すのに用いる diff --git a/guides/source/ja/api_documentation_guidelines.md b/guides/source/ja/api_documentation_guidelines.md index 526754a95e2..07f0fb23ac1 100644 --- a/guides/source/ja/api_documentation_guidelines.md +++ b/guides/source/ja/api_documentation_guidelines.md @@ -6,7 +6,7 @@ API ドキュメント作成ガイドライン このガイドの内容: * 英文APIドキュメントを効果的に書く方法 -* ドキュメント作成用のスタイルガイド (Rubyコード開発用のスタイルガイドとは別) +* ドキュメント作成用のスタイルガイド(Rubyコード開発用のスタイルガイドとは別) -------------------------------------------------------------------------------- diff --git a/guides/source/ja/asset_pipeline.md b/guides/source/ja/asset_pipeline.md index 35bf249730c..bbd2634ac7a 100644 --- a/guides/source/ja/asset_pipeline.md +++ b/guides/source/ja/asset_pipeline.md @@ -1,7 +1,7 @@ アセットパイプライン ================== -本ガイドでは、アセットパイプライン (asset pipeline) について解説します。 +本ガイドでは、アセットパイプライン(asset pipeline)について解説します。 このガイドの内容: @@ -19,7 +19,7 @@ アセットパイプライン(asset pipeline)は、JavaScriptとCSSアセットの配信を処理するためのフレームワークを提供します。これは、HTTP/2のような技術や、アセットの連結や最小化といった技術を活用することによって行われます。アプリケーションは、最終的に他のgemのアセットと自動的に結合できるようになります。 -アセットパイプラインは [importmap-rails](https://github.com/rails/importmap-rails) gem、[sprockets](https://github.com/rails/sprockets) gem、[sprockets-rails](https://github.com/rails/sprockets-rails) gem によって実装されており、デフォルトで有効になっています。新しいアプリケーションを作成する際に、以下のように`--skip-asset-pipeline`オプションを渡すとアセットパイプラインを無効にできます。 +アセットパイプラインは[importmap-rails](https://github.com/rails/importmap-rails) gem、[sprockets](https://github.com/rails/sprockets) gem、[sprockets-rails](https://github.com/rails/sprockets-rails) gemによって実装されており、デフォルトで有効になっています。新しいアプリケーションを作成する際に、以下のように`--skip-asset-pipeline`オプションを渡すとアセットパイプラインを無効にできます。 ```bash $ rails new appname --skip-asset-pipeline @@ -198,7 +198,7 @@ pin "react", to: "https://cdn.skypack.dev/react" ### ピン留めしたモジュールをプリロードする -ウォーターフォール効果(ブラウザがネストの最も深いインポートに到達するまで次々とファイルを読み込まなければならなくなる現象)を避けるために、importmap-railsは[modulepreload links](https://developer.chrome.com/blog/modulepreload/)をサポートしています。`pin`したモジュールに`preload: true` を追加することでプリロードできるようになります。 +ウォーターフォール効果(ブラウザがネストの最も深いインポートに到達するまで次々とファイルを読み込まなければならなくなる現象)を避けるために、importmap-railsは[modulepreload links](https://developer.chrome.com/blog/modulepreload/)をサポートしています。`pin`したモジュールに`preload: true`を追加することでプリロードできるようになります。 以下のように、アプリ内で使うライブラリやフレームワークをプリロードしておくと、早い段階でダウンロードするようブラウザに指示できます。 @@ -222,7 +222,7 @@ NOTE: 最新のドキュメントについては[`importmap-rails`](https://gith Sprocketsの利用法 ----------------------------- -アプリケーションのアセットをWebで公開する素朴なアプローチは、`public`フォルダの`images`や `stylesheets`などのサブディレクトリにアセットを保存することでしょう。現代のWebアプリケーションは、アセットの圧縮やフィンガープリントの追加といった特定の方法で処理する必要があるため、これを手動で行うことは困難です。 +アプリケーションのアセットをWebで公開する素朴なアプローチは、`public`フォルダの`images`や`stylesheets`などのサブディレクトリにアセットを保存することでしょう。現代のWebアプリケーションは、アセットの圧縮やフィンガープリントの追加といった特定の方法で処理する必要があるため、これを手動で行うことは困難です。 Sprocketsは、設定済みディレクトリに保存されたアセットを自動的に前処理し、処理後にフィンガープリント追加、圧縮、ソースマップ生成といった設定可能な機能を使って`public/assets`フォルダに公開するように設計されています。 @@ -247,12 +247,12 @@ Sprocketsでアセットをコンパイルするとき、Sprocketsはどのト 上のマニフェストファイルは、`./app/assets/images`ディレクトリやそのサブディレクトリにあるすべてのファイル、`./app/javascript`ディレクトリや`./vendor/javascript`で直接JSとして認識されるすべてのファイルの内容をインクルードすることを意味しています。 -このマニフェストファイルは `./app/assets/stylesheets`ディレクトリにあるすべてのCSSを読み込みます(ただしサブディレクトリは含めません)。 +このマニフェストファイルは`./app/assets/stylesheets`ディレクトリにあるすべてのCSSを読み込みます(ただしサブディレクトリは含めません)。 `./app/assets/stylesheets`フォルダに`application.css`ファイルと`marketing.css`ファイルがあると仮定すると、ビューに`<%= stylesheet_link_tag "application" %>`または`<%= stylesheet_link_tag "marketing" %>`と書くことでこれらのスタイルシートを読み込めるようになります。 JavaScriptファイルは、デフォルトでは`assets`ディレクトリから読み込まれないことにお気づきでしょうか。その理由は、`./app/javascript`が既に`importmap-rails` gemのデフォルトのエントリポイントになっていて、`vendor`フォルダはダウンロードしたJSパッケージの置き場所になっているからです。 -`manifest.js`では、ディレクトリ全体ではなく、特定のファイルを読み込むために `link`ディレクティブを指定することも可能です。`link`ディレクティブでは、ファイルの拡張子を明示的に指定する必要があります。 +`manifest.js`では、ディレクトリ全体ではなく、特定のファイルを読み込むために`link`ディレクティブを指定することも可能です。`link`ディレクティブでは、ファイルの拡張子を明示的に指定する必要があります。 Sprocketsは、指定されたファイルを読み込んで必要に応じて処理し、1個のファイルに連結した後、(`config.assets.css_compressor`または`config.assets.js_compressor`の値に基づいて)圧縮を行います。圧縮することでファイルサイズが小さくなり、ブラウザのファイルダウンロードがより高速になります。 @@ -284,7 +284,7 @@ Railsでscaffoldやコントローラを生成すると、そのコントロー #### 探索パス -ファイルがマニフェストやヘルパーから参照されると、Sprocketsは`manifest.js`で指定されたすべての場所を探索してファイルを探します。探索パスは、Railsコンソールで [`Rails.application.config.assets.paths`](configuring.html#config-assets-paths)を調べることで表示できます。 +ファイルがマニフェストやヘルパーから参照されると、Sprocketsは`manifest.js`で指定されたすべての場所を探索してファイルを探します。探索パスは、Railsコンソールで[`Rails.application.config.assets.paths`](configuring.html#config-assets-paths)を調べることで表示できます。 #### indexファイルをフォルダのプロキシとして使う @@ -439,7 +439,7 @@ $ RAILS_ENV=production rails assets:precompile NOTE: 常に`.js`または`.css`で終わるコンパイル済みファイル名を指定してください。 -このコマンドは、`.sprockets-manifest-randomhex.json`(`randomhex` は16バイトのランダムな16進文字列を表す)も生成します。このJSONファイルには、すべてのアセットとそれぞれのフィンガープリントのリストが含まれます。これは、RailsヘルパーメソッドでマッピングリクエストをSprocketsに送信するのを避けるために使われます。 +このコマンドは、`.sprockets-manifest-randomhex.json`(`randomhex`は16バイトのランダムな16進文字列を表す)も生成します。このJSONファイルには、すべてのアセットとそれぞれのフィンガープリントのリストが含まれます。これは、RailsヘルパーメソッドでマッピングリクエストをSprocketsに送信するのを避けるために使われます。 以下は典型的なマニフェストファイルです。 ```json @@ -836,7 +836,7 @@ Sprockets.register_preprocessor "text/css", AddComment `jsbundling-rails` gemは、`yarn build --watch`プロセスを提供し、development環境で自動的に出力を生成します。production環境では`javascript:build`タスクを`assets:precompile`タスクに自動的にフックし、パッケージの依存関係がすべてインストールされ、すべてのエントリポイントに対してJavaScriptがビルドされるようにできます。 -**`importmap-rails`の代わりに使うのがよい場合**: JavaScriptコードがトランスパイルに依存している場合(例: [Babel](https://babeljs.io/)、[TypeScript](https://www.typescriptlang.org/)、 React JSXフォーマット)は、`jsbundling-rails`が正しい方法となります。 +**`importmap-rails`の代わりに使うのがよい場合**: JavaScriptコードがトランスパイルに依存している場合(例: [Babel](https://babeljs.io/)、[TypeScript](https://www.typescriptlang.org/)、React JSXフォーマット)は、`jsbundling-rails`が正しい方法となります。 ### Webpacker/Shakapacker @@ -866,7 +866,7 @@ JavaScriptを`importmap-rails`で処理し、CSSを`dartsass-rails`または`tai ### dartsass-rails -アプリケーションで [Sass](https://sass-lang.com/)を使いたい場合は、レガシーな`sassc-rails` gemの代わりにこの[`dartsass-rails`](https://github.com/rails/dartsass-rails) gemが提供されています。 +アプリケーションで[Sass](https://sass-lang.com/)を使いたい場合は、レガシーな`sassc-rails` gemの代わりにこの[`dartsass-rails`](https://github.com/rails/dartsass-rails) gemが提供されています。 `dartsass-rails` gemは、`sassc-rails` gemで使われていた[LibSass](https://sass-lang.com/blog/libsass-is-deprecated)(2020年に非推奨化)に代えてDart Sassの実装を利用しています。 この新しい`dartsass-rails` gemは`sassc-rails`とは異なり、Sprocketsと直接統合されているわけではありません。インストールや移行の手順については、[dartsass-rails gem](https://github.com/rails/dartsass-rails)のドキュメントを参照してください。 @@ -875,4 +875,4 @@ WARNING: 以前広く使われていた`sassc-rails` gemは、2019年以降メ ### tailwindcss-rails -[`tailwindcss-rails`](https://github.com/rails/tailwindcss-rails) gemは、Tailwind CSS v3フレームワークの[スタンドアロン実行可能版](https://tailwindcss.com/blog/standalone-cli)をラップしています。新しいアプリケーションを開発する際に、`rails new`コマンドに `--css tailwind`を指定することで利用できます。development環境では、Tailwindの出力を自動的に生成するための`watch`プロセスが提供されます。production環境では、`assets:precompile`タスクにフックします。 +[`tailwindcss-rails`](https://github.com/rails/tailwindcss-rails) gemは、Tailwind CSS v3フレームワークの[スタンドアロン実行可能版](https://tailwindcss.com/blog/standalone-cli)をラップしています。新しいアプリケーションを開発する際に、`rails new`コマンドに`--css tailwind`を指定することで利用できます。development環境では、Tailwindの出力を自動的に生成するための`watch`プロセスが提供されます。production環境では、`assets:precompile`タスクにフックします。 diff --git a/guides/source/ja/association_basics.md b/guides/source/ja/association_basics.md index ff81b5a2f48..73152a6df58 100644 --- a/guides/source/ja/association_basics.md +++ b/guides/source/ja/association_basics.md @@ -146,7 +146,7 @@ class Book < ApplicationRecord end ``` -![belongs_to 関連付けの図](images/association_basics/belongs_to.png) +![belongs_to関連付けの図](images/association_basics/belongs_to.png) NOTE: `belongs_to`関連付けで指定するモデル名は必ず「**単数形**」にしなければなりません。上記の例で、`Book`モデルの`author`関連付けを複数形(`authors`)にしてから`Book.create(authors: @author)`でインスタンスを作成しようとすると、`uninitialized constant Book::Authors`エラーが発生します。Railsは、関連付けの名前から自動的にモデルのクラス名を推測します。関連付け名を`:authors`にすると、Railsは本来の`Author`クラスではなく`Authors`という誤ったクラス名を探索してしまいます。 @@ -494,7 +494,7 @@ end 保存のいずれかがバリデーションエラーで失敗すると、割り当てステートメントは`false`を返し、割り当て自体がキャンセルされます。 -親オブジェクト(`has_one` 関連付けを宣言している側のオブジェクト)が保存されていない場合(つまり、`new_record?`が`true`を返す場合)、子オブジェクトはすぐには保存されません。親オブジェクトが保存されると、子オブジェクトは自動的に保存されます。 +親オブジェクト(`has_one`関連付けを宣言している側のオブジェクト)が保存されていない場合(つまり、`new_record?`が`true`を返す場合)、子オブジェクトはすぐには保存されません。親オブジェクトが保存されると、子オブジェクトは自動的に保存されます。 オブジェクトを保存せずに`has_one`関連付けにオブジェクトを割り当てるには、`build_association`メソッドを使います。このメソッドは、関連付けられたオブジェクトの新しい未保存のインスタンスを作成して、保存するかどうかを決定する前に作業可能にします。 @@ -1153,7 +1153,7 @@ NOTE: このメソッドは`collection.concat`と`collection.push`のエイリ - `has_one`: この関連付けは、それを宣言する現在のモデルがリレーションシップにおける「親」であることと、他方のモデルのインスタンスを「1個」所有していることを意味します。 -たとえば、供給元(suppliers)とそのアカウント(accounts)があるシナリオを考えてみましょう。アカウントが供給元を持っている/所有していると考えるよりも、供給元がアカウントを持っている/所有している (供給元が親になる) と考える方が自然です。したがって、正しい関連付けは次のようになります。 +たとえば、供給元(suppliers)とそのアカウント(accounts)があるシナリオを考えてみましょう。アカウントが供給元を持っている/所有していると考えるよりも、供給元がアカウントを持っている/所有している(供給元が親になる)と考える方が自然です。したがって、正しい関連付けは次のようになります。 - 1つの供給元が、1個のアカウントを所有する(has one)。 - 1個のアカウントは、1つの供給元に属する(belongs to)。 @@ -1376,10 +1376,10 @@ manager = employee.manager [connection.add_reference]: https://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_reference -単一テーブル継承 (STI) +単一テーブル継承(STI) ------------------------ -単一テーブル継承 (STI: Single Table Inheritance) は、複数のモデルを単一のデータベーステーブルに収納できるRailsのパターンです。これは、さまざまなエンティティに共通の属性や振る舞いを持たせつつ、エンティティ固有の振る舞いも持たせたい場合に便利です。 +単一テーブル継承(STI: Single Table Inheritance)は、複数のモデルを単一のデータベーステーブルに収納できるRailsのパターンです。これは、さまざまなエンティティに共通の属性や振る舞いを持たせつつ、エンティティ固有の振る舞いも持たせたい場合に便利です。 たとえば、`Car`、`Motorcycle`、`Bicycle`というモデルがあるとします。これらのモデルは`color`や`price`などのフィールドを共有しますが、モデルごとに固有の振る舞いもあるとします。さらに、モデルごとに独自のコントローラーもあるとします。 @@ -1525,7 +1525,7 @@ Vehicle.create!(type: "Car") ### STIで考慮すべき点 -[単一テーブル継承(STI)](#%E5%8D%98%E4%B8%80%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E7%B6%99%E6%89%BF-%EF%BC%88sti%EF%BC%89)は、サブクラス同士(およびその属性)にほとんど違いがない場合に最適ですが、すべてのサブクラスのすべての属性が1個のテーブルに収納されることになります。 +[単一テーブル継承(STI)](#単一テーブル継承(sti))は、サブクラス同士(およびその属性)にほとんど違いがない場合に最適ですが、すべてのサブクラスのすべての属性が1個のテーブルに収納されることになります。 この方法の欠点は、サブクラス固有の属性を(他のサブクラスで使われていない属性であっても)1個のテーブルに含めるため、テーブルが肥大化する可能性があることです。これについては、後述の[Delegated Types](#delegated-types)で解決できることがあります。 @@ -1536,7 +1536,7 @@ Vehicle.create!(type: "Car") Delegated Types ---------------- -Delegated types(委譲型)は、[単一テーブル継承(STI)](#%E5%8D%98%E4%B8%80%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E7%B6%99%E6%89%BF-%EF%BC%88sti%EF%BC%89)によるテーブル肥大化の問題を、`delegated_type`で解決します。このアプローチにより、共有属性をスーパークラスのテーブルに保存し、サブクラス固有の属性を別のテーブルに保存できるようになります。 +Delegated types(委譲型)は、[単一テーブル継承(STI)](#単一テーブル継承(sti))によるテーブル肥大化の問題を、`delegated_type`で解決します。このアプローチにより、共有属性をスーパークラスのテーブルに保存し、サブクラス固有の属性を別のテーブルに保存できるようになります。 ### Delegated Typesをセットアップする @@ -1623,11 +1623,11 @@ end | メソッド | 戻り値 | |---|---| | `Entry.entryable_types` | `["Message", "Comment"]` | -| `Entry#entryable_class` | Message または Comment | -| `Entry#entryable_name` | "message" または "comment" | +| `Entry#entryable_class` | MessageまたはComment | +| `Entry#entryable_name` | "message"または"comment" | | `Entry.messages` | `Entry.where(entryable_type: "Message")` | | `Entry#message?` | `entryable_type == "Message"`の場合trueを返す | -| `Entry#message` | `entryable_type == "Message"`の場合はメッセージレコードを返し、それ以外の場合は `nil` を返す| +| `Entry#message` | `entryable_type == "Message"`の場合はメッセージレコードを返し、それ以外の場合は`nil`を返す| | `Entry#message_id` | `entryable_type == "Message"`の場合は`entryable_id`を返し、それ以外の場合は`nil`を返す | | `Entry.comments` | `Entry.where(entryable_type: "Comment")` | | `Entry#comment?` | `entryable_type == "Comment"`の場合はtrueを返す | diff --git a/guides/source/ja/autoloading_and_reloading_constants.md b/guides/source/ja/autoloading_and_reloading_constants.md index 16f39f37c48..27ef784a73f 100644 --- a/guides/source/ja/autoloading_and_reloading_constants.md +++ b/guides/source/ja/autoloading_and_reloading_constants.md @@ -238,7 +238,7 @@ Railsアプリケーションのファイルが変更されると、クラスや デフォルトのRailsは、変更されたファイルをイベンテッドファイルモニタで検出しますが、自動読み込みパスを調べてファイル変更を検出することも可能です。これは、[`config.file_watcher`][]の設定で制御されます。 -Railsコンソールでは、`config.enable_reloading`の値にかかわらずファイルウォッチャーは動作しません(通常、コンソールセッションの最中に再読み込みが行われると混乱を招く可能性があるためです)。一般にコンソールセッションは、 個別のリクエストと同様に変化しない、一貫したアプリケーションクラスとモジュールのセットによって提供されることが望まれます。 +Railsコンソールでは、`config.enable_reloading`の値にかかわらずファイルウォッチャーは動作しません(通常、コンソールセッションの最中に再読み込みが行われると混乱を招く可能性があるためです)。一般にコンソールセッションは、個別のリクエストと同様に変化しない、一貫したアプリケーションクラスとモジュールのセットによって提供されることが望まれます。 ただし、コンソールで`reload!`を実行することで強制的に再読み込みできます。 diff --git a/guides/source/ja/autoloading_and_reloading_constants_classic_mode.md b/guides/source/ja/autoloading_and_reloading_constants_classic_mode.md index b29a97341e7..487d991bdb0 100644 --- a/guides/source/ja/autoloading_and_reloading_constants_classic_mode.md +++ b/guides/source/ja/autoloading_and_reloading_constants_classic_mode.md @@ -18,7 +18,7 @@ はじめに ------------ -INFO: 本ガイドでは、Rails 5.2 以前の`Classic`モード自動読み込みについて解説します。Rails 6.0 以降の`Zeitwerk`モードについては、[定数の自動読み込みと再読み込み (Zeitwerk)](autoloading_and_reloading_constants.html) を参照してください。 +INFO: 本ガイドでは、Rails 5.2以前の`Classic`モード自動読み込みについて解説します。Rails 6.0以降の`Zeitwerk`モードについては、[定数の自動読み込みと再読み込み (Zeitwerk)](autoloading_and_reloading_constants.html)を参照してください。 Ruby on Railsでコードを書き換えると、開発者がサーバーを再起動しなくても、プリロードされたかのように動作します。 @@ -71,7 +71,7 @@ module XML end ``` -ある場所における**ネスト(nesting)**とは、ネストしたクラスオブジェクトやモジュールオブジェクトをネストの内側のものから順に並べたコレクションとなります(訳注: Ruby内のある場所のネストを調べるには`Module.nesting`を使えます)。前述の例における(1)の位置のネストは以下のようになります。 +ある場所における**ネスト(nesting)**とは、ネストしたクラスオブジェクトやモジュールオブジェクトをネストの内側のものから順に並べたコレクションとなります(訳注: Ruby内のある場所のネストを調べるには`Module.nesting`を使えます)。前述の例における(1)の位置のネストは以下のようになります。 ```ruby [XML::SAXParser, XML] @@ -121,7 +121,7 @@ end [A::B, X::Y] ``` -このネストの末尾は`A`ではないどころか(そもそもこの`A`はネストに属してすらいません)、ネストに`X::Y`も含まれています。この`X::Y`と`A::B`は互いに独立しています。 +このネストの末尾は`A`ではなく(そもそもこの`A`はネストに属してすらいません)、ネストに`X::Y`も含まれています。この`X::Y`と`A::B`は互いに独立しています。 このネストは、Rubyインタプリタによって維持されている内部スタックであり、以下のルールに従って変更されます。 @@ -139,7 +139,7 @@ end ### クラスやモジュールの定義とは定数への代入のこと -以下のスニペットを実行するとクラスが (再オープンではなく) 新規作成されるとします。 +以下のスニペットを実行するとクラスが(再オープンではなく)新規作成されるとします。 ```ruby class C @@ -155,7 +155,7 @@ class Project < ApplicationRecord end ``` -上のコードは定数代入 (constant assignment) を行います。これは以下のコードと同等です。 +上のコードは定数代入(constant assignment)を行います。これは以下のコードと同等です。 ```ruby Project = Class.new(ApplicationRecord) @@ -236,13 +236,13 @@ end #### 相対定数を解決するアルゴリズム -コードの任意の場所で、ネストが空でなければその最初の要素となり、空の場合には`Object`となる**cref**を定義しましょう (訳注: crefはRuby内部におけるクラス参照 (class reference) の略であり、Rubyの定数が持つ暗黙のコンテキストです -- [関連記事](http://yugui.jp/articles/846) )。 +コードの任意の場所で、ネストが空でなければその最初の要素となり、空の場合には`Object`となる**cref**を定義しましょう(訳注: crefはRuby内部におけるクラス参照(class reference)の略であり、Rubyの定数が持つ暗黙のコンテキストです -- [関連記事](http://yugui.jp/articles/846))。 ここでは詳しく述べませんが、相対的な定数参照を解決するアルゴリズムは以下のようになります。 -1. ネストが存在する場合、この定数はそのネストの要素の中で順に探索される。それらの要素の先祖は探索されない (訳注: 本章で言う先祖 (ancestors) とは[クラス、モジュールのスーパークラスとインクルードしているモジュール](http://docs.ruby-lang.org/ja/2.2.0/method/Module/i/ancestors.html)のことです)。 +1. ネストが存在する場合、この定数はそのネストの要素の中で順に探索される。それらの要素の先祖は探索されない(訳注: 本章で言う先祖(ancestors)とは、[クラス、モジュールのスーパークラスとインクルードしているモジュール](http://docs.ruby-lang.org/ja/2.2.0/method/Module/i/ancestors.html)のことです)。 -2. 見つからない場合は、crefの先祖チェーン (継承チェーン) を探索する。 +2. 見つからない場合は、crefの先祖チェイン(継承チェイン)を探索する。 3. 見つからない場合、crefで`const_missing`が呼び出される。`const_missing`のデフォルトの実装は`NameError`を発生するが、これはオーバーライド可能。 @@ -250,7 +250,7 @@ Railsの自動読み込みは**このアルゴリズムをエミュレートし #### 修飾済み定数を解決するアルゴリズム -修飾済み (qualified) 定数は以下のようなものです。 +修飾済み(qualified)定数は以下のようなものです。 ```ruby Billing::Invoice @@ -260,7 +260,7 @@ Billing::Invoice INFO: `::Billing::Invoice`のように先頭にコロンを2つ置くと、最初のセグメントを相対から絶対に変えることができます。こうすることで、この`Billing`はトップレベルの定数としてのみ参照されるようになります。 -2番目の`Invoice`定数は`Billing`で修飾されています。この定数の解決方法についてはこの後で説明します。ここで、修飾する側のクラスやモジュールオブジェクト (上の例で言う`Billing`) を**親**(parent)と定義します。修飾済み定数を解決するアルゴリズムは以下のようになります。 +2番目の`Invoice`定数は`Billing`で修飾されています。この定数の解決方法についてはこの後で説明します。ここで、修飾する側のクラスやモジュールオブジェクト(上の例で言う`Billing`)を**親**(parent)と定義します。修飾済み定数を解決するアルゴリズムは以下のようになります。 1. この定数はその親と先祖の中から探索される。Ruby 2.5以降では、先祖オブジェクトに挟まれている`Object`はスキップされる。`Kernel`や`BasicObject`は従来どおりチェックされる。 @@ -288,7 +288,7 @@ Railsの自動読み込みは**このアルゴリズムをエミュレートし * `A`という定数は既に存在しない可能性がある。この定数は何らかのコードによって`Object`から削除されているかもしれない。 -* たとえ`A`という定数が存在するとしても、かつて`A`という名前を持っていたクラスまたはモジュールは既に存在していない可能性がある。たとえば、定数が1つ削除された後に別の定数代入 (constant assignment) が行われたとすると、一般的にはそれは別のオブジェクトを指していると考えるべき。 +* たとえ`A`という定数が存在するとしても、かつて`A`という名前を持っていたクラスまたはモジュールは既に存在していない可能性がある。たとえば、定数が1つ削除された後に別の定数代入(constant assignment)が行われたとすると、一般的にはそれは別のオブジェクトを指していると考えるべき。 * そのような状況で`A`という同じ名前の定数が再度代入されると、その`A`は同じく「A」という名前を持つ別の新しいクラスまたはモジュールを指す可能性すらある。 @@ -302,7 +302,7 @@ Railsの自動読み込みは**このアルゴリズムをエミュレートし [定数の再読み込み](#定数の再読み込み)が有効になっていると、`Kernel#load`が使われ、ファイルを繰り返し実行できるようになります。 -本ガイドでは「読み込み」(load)という言葉を、指定されたファイルがRailsによって解釈されるという程度の緩やかな意味で使っていますが、実際のメカニズムとしてはフラグに応じて`Kernel#load`や`Kernel#require`が使われます。 +本ガイドでは「読み込み」(load)という言葉を、指定されたファイルがRailsによって解釈されるという程度の緩やかな意味で使っていますが、実際のメカニズムとしてはフラグに応じて`Kernel#load`や`Kernel#require`が使われます。 自動読み込みが可能となる状況 @@ -366,7 +366,7 @@ require 'erb' `config.autoload_paths`は環境固有の設定ファイルからは変更できません。 -`autoload_paths`の値を調べることもできます。生成したRailsアプリケーションでは以下のようになります (ただし編集してあります)。 +`autoload_paths`の値を調べることもできます。生成したRailsアプリケーションでは以下のようになります(ただし整形してあります)。 ```bash $ bin/rails r 'puts ActiveSupport::Dependencies.autoload_paths' @@ -421,7 +421,7 @@ Rubyは、`class`や`module`キーワードの後ろに置かれる定数を探 逆に、`ApplicationController`がそれまでに出現していなかった場合、この定数は「見つからない(missing)」と見なされ、Railsによって自動読み込みがトリガーされます。 -Railsは、`ApplicationController`を読み込むために`autoload_paths`にあるパスを順に処理します。最初に`app/assets/application_controller.rb`が存在するかどうかを確認します。見つからない場合 (これが通常です)、次のパスで`app/controllers/application_controller.rb`の探索を続行します。 +Railsは、`ApplicationController`を読み込むために`autoload_paths`にあるパスを順に処理します。最初に`app/assets/application_controller.rb`が存在するかどうかを確認します。見つからない場合(これが通常です)、次のパスで`app/controllers/application_controller.rb`の探索を続行します。 見つかったファイルで`ApplicationController`が定義されていればOKです。定義されていない場合は`LoadError`が発生します。 @@ -501,7 +501,7 @@ app/models/post.rb ### 修飾済み参照 -修飾済み (qualified) 定数が見つからない場合、この定数は親の名前空間では探索されません。しかしここで注意すべき点が1つあります。定数が見つからない場合、そのトリガーが相対的な参照だったのか、修飾済み参照だったのかをRailsは区別できません。 +修飾済み(qualified)定数が見つからない場合、この定数は親の名前空間では探索されません。しかしここで注意すべき点が1つあります。定数が見つからない場合、そのトリガーが相対的な参照だったのか、修飾済み参照だったのかをRailsは区別できません。 以下の例について考察してみましょう。 @@ -555,7 +555,7 @@ end ### 一般的な手順 -相対参照が「見つからない(missing)」と報告される場所は、相対参照がヒットしたcrefです。修飾済み参照が「見つからない」と報告される場所は、修飾済み参照の親です(**cref**の定義については本章の[相対定数を解決するアルゴリズム](#相対定数を解決するアルゴリズム)を、**parent**の定義については同じく[修飾済み定数を解決するアルゴリズム](#修飾済み定数を解決するアルゴリズム)を参照してください)。 +相対参照が「見つからない(missing)」と報告される場所は、相対参照がヒットしたcrefです。修飾済み参照が「見つからない」と報告される場所は、修飾済み参照の親です(**cref**の定義については本章の[相対定数を解決するアルゴリズム](#相対定数を解決するアルゴリズム)を、**parent**の定義については同じく[修飾済み定数を解決するアルゴリズム](#修飾済み定数を解決するアルゴリズム)を参照してください)。 定数`C`を任意の状況で自動読み込みする手順を擬似言語で表現すると以下のようになります。 @@ -578,7 +578,7 @@ loop do if "#{dir}/#{ns.underscore}/c.rb"ファイルが存在する load/require "#{dir}/#{ns.underscore}/c.rb" - if 定数Cが定義済みである + if定数Cが定義済みである return else raise LoadError @@ -943,7 +943,7 @@ $ bin/rails r 'Image; p Hotel::Image' 2>/dev/null Image # これはHotel::Imageではない! ``` -`Hotel::Image`を評価するコードは、(おそらく`require_dependency`を使って) `app/models/hotel/image.rb`を事前に読み込み済みの状態にしておく必要があります。 +`Hotel::Image`を評価するコードは、(おそらく`require_dependency`を使って)`app/models/hotel/image.rb`を事前に読み込み済みの状態にしておく必要があります。 ただしこの方法を使うと、Rubyインタプリタが以下の警告を出力します。 @@ -1028,7 +1028,7 @@ c.user # 驚くべきことにUserで問題が生じない c.user # NameError: uninitialized constant C::User ``` -これは、親の名前空間に既に定数が存在していることが検出されたためです([修飾済み参照](#%E8%87%AA%E5%8B%95%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-%E4%BF%AE%E9%A3%BE%E6%B8%88%E3%81%BF%E5%8F%82%E7%85%A7)を参照)。 +これは、親の名前空間に既に定数が存在していることが検出されたためです([修飾済み参照](#%E8%87%AA%E5%8B%95%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-%E4%BF%AE%E9%A3%BE%E6%B8%88%E3%81%BF%E5%8F%82%E7%85%A7)を参照)。 純粋なRubyの場合と同様、`BasicObject`の直系の子孫オブジェクトの中では以下のように常に絶対定数パスをお使いください。 diff --git a/guides/source/ja/classic_to_zeitwerk_howto.md b/guides/source/ja/classic_to_zeitwerk_howto.md index 1981a961b29..418f9e2950b 100644 --- a/guides/source/ja/classic_to_zeitwerk_howto.md +++ b/guides/source/ja/classic_to_zeitwerk_howto.md @@ -148,7 +148,7 @@ VATはヨーロッパの税制のことです。`app/models/vat.rb`では`VAT` これはZeitwerkで最もありがちな問題で、略語が関係しています。このエラーメッセージが生じた理由を考えてみましょう。 -`classic`オートローダーは、すべて大文字の`VAT`を自動読み込みできます。その理由は、オートローダーの入力に`const_missing `の定数名が使われるからです。`VAT`という定数に対して`underscore`が呼び出されて`vat`が生成され、これを元に`vat.rb`というファイルを検索することで、ファイルが正常に見つかります。 +`classic`オートローダーは、すべて大文字の`VAT`を自動読み込みできます。その理由は、オートローダーの入力に`const_missing`の定数名が使われるからです。`VAT`という定数に対して`underscore`が呼び出されて`vat`が生成され、これを元に`vat.rb`というファイルを検索することで、ファイルが正常に見つかります。 新しいZeitwerkオートローダーの入力はファイルシステムです。`vat.rb`というファイルがあると、Zeitwerkは`vat`に対して`camelize`を呼び出し、冒頭のみが大文字の`Vat`が生成されます。これにより、`Vat`という定数名が定義されていることが期待されます。以上がエラーメッセージの内容です。 diff --git a/guides/source/ja/command_line.md b/guides/source/ja/command_line.md index 301a81bd67e..fe147e80245 100644 --- a/guides/source/ja/command_line.md +++ b/guides/source/ja/command_line.md @@ -196,7 +196,7 @@ Use Ctrl-C to stop INFO: サーバーを起動する際には`bin/rails s`のように"s"というエイリアスが使えます。 -リッスンするポートは`-p` オプションで指定できます。`-e` オプションでサーバーの環境を変更できます。デフォルトではdevelopment(開発)環境で実行されます。 +リッスンするポートは`-p`オプションで指定できます。`-e`オプションでサーバーの環境を変更できます。デフォルトではdevelopment(開発)環境で実行されます。 ```bash $ bin/rails server -e production -p 4000 @@ -231,7 +231,7 @@ Rails: NOTE: ジェネレータgemをインストールしたり、プラグインに付属しているジェネレータをインストールしたりすることで、ジェネレータを追加できます。自分でジェネレータを作成することも可能です。 -ジェネレータを使うと、アプリケーションを動かすのに必要な [**ボイラープレートコード**](https://ja.wikipedia.org/wiki/%E3%83%9C%E3%82%A4%E3%83%A9%E3%83%BC%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89)(定形コード)を書かなくて済むため、多くの時間を節約できます。 +ジェネレータを使うと、アプリケーションを動かすのに必要な[**ボイラープレートコード**](https://ja.wikipedia.org/wiki/%E3%83%9C%E3%82%A4%E3%83%A9%E3%83%BC%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%B3%E3%83%BC%E3%83%89)(定形コード)を書かなくて済むため、多くの時間を節約できます。 それではコントローラジェネレータを使って、コントローラを作ってみましょう。どんなコマンドを使えばよいかをジェネレータに聞いてみましょう。 @@ -446,7 +446,7 @@ irb> helper.my_custom_helper INFO: DBコンソールコマンドを実行するときに`bin/rails db`のように「db」というエイリアスが使えます。 -データベースを複数使っている場合(マルチプルデータベース)、 `bin/rails dbconsole` はデフォルトでprimaryデータベースに接続します。接続するデータベースは、`--database`または`--db` で指定できます。 +データベースを複数使っている場合(マルチプルデータベース)、`bin/rails dbconsole`はデフォルトでprimaryデータベースに接続します。接続するデータベースは、`--database`または`--db`で指定できます。 ```bash $ bin/rails dbconsole --database=animals @@ -552,7 +552,7 @@ Database schema version 20180205173523 `bin/rails notes`は、特定のキーワードで始まるコードコメントを検索して表示します。`bin/rails notes --help`で利用法を表示できます。 -デフォルトでは、`app`、`config`、`db`、`lib`、`test`ディレクトリにある、拡張子が `.builder`、`.rb`、`.rake`、`.yml`、`.yaml`、`.ruby`、`.css`、`.js`、`.erb`のファイルの中から、「FIXME」「OPTIMIZE」「TODO」キーワードで始まるコメントを検索します(訳注: コメントのキーワードが`[FIXME]`のように`[]`で囲まれていると検索されません)。 +デフォルトでは、`app`、`config`、`db`、`lib`、`test`ディレクトリにある、拡張子が`.builder`、`.rb`、`.rake`、`.yml`、`.yaml`、`.ruby`、`.css`、`.js`、`.erb`のファイルの中から、「FIXME」「OPTIMIZE」「TODO」キーワードで始まるコメントを検索します(訳注: コメントのキーワードが`[FIXME]`のように`[]`で囲まれていると検索されません)。 ```bash $ bin/rails notes @@ -667,11 +667,11 @@ Railsにはminitestと呼ばれるテストフレームワークが付属して `tmp:`名前空間には、`Rails.root/tmp`ディレクトリを作成・削除する以下のタスクがあります。 -* `bin/rails tmp:cache:clear` clears `tmp/cache`. -* `bin/rails tmp:sockets:clear` clears `tmp/sockets`. -* `bin/rails tmp:screenshots:clear` clears `tmp/screenshots`. -* `bin/rails tmp:clear` clears all cache, sockets, and screenshot files. -* `bin/rails tmp:create` creates tmp directories for cache, sockets, and pids. +* `bin/rails tmp:cache:clear`: `tmp/cache/`以下を削除します。 +* `bin/rails tmp:sockets:clear`: `tmp/sockets/`以下を削除します。 +* `bin/rails tmp:screenshots:clear`: `tmp/screenshots/`以下を削除します。 +* `bin/rails tmp:clear`: キャッシュ、ソケット、スクリーンショットをすべて削除します。 +* `bin/rails tmp:create`: キャッシュ、ソケット、スクリーンショットを置くための`tmp/`ディレクトリを作成します。 ### その他のタスク diff --git a/guides/source/ja/configuring.md b/guides/source/ja/configuring.md index 11defa9328b..7c29acda2d9 100644 --- a/guides/source/ja/configuring.md +++ b/guides/source/ja/configuring.md @@ -51,7 +51,7 @@ NOTE: 設定をクラスに直接適用する必要がある場合は、イニ ### Railsバージョンごとのデフォルト値 -[`config.load_defaults`] はターゲットバージョンとそれ以前のすべてのバージョンのデフォルトの設定値を読み込みます。たとえば、`config.load_defaults 6.1`はバージョン6.1までの全バージョンのデフォルトを読み込みます。 +[`config.load_defaults`]はターゲットバージョンとそれ以前のすべてのバージョンのデフォルトの設定値を読み込みます。たとえば、`config.load_defaults 6.1`はバージョン6.1までの全バージョンのデフォルトを読み込みます。 [`config.load_defaults`]: https://api.rubyonrails.org/classes/Rails/Application/Configuration.html#method-i-load_defaults @@ -254,7 +254,7 @@ Rails全般に対する設定を行うには、`Rails::Railtie`オブジェク #### `config.add_autoload_paths_to_load_path` -自動読み込みパスを`$LOAD_PATH`に追加しなければならないかどうかを指定します。`zeitwerk`モードでは`config/application.rb`で`false` に設定することが推奨されます。 +自動読み込みパスを`$LOAD_PATH`に追加しなければならないかどうかを指定します。`zeitwerk`モードでは`config/application.rb`で`false`に設定することが推奨されます。 Zeitwerkは内部的に絶対パスを使っており、`:zeitwerk`モードで動作するアプリケーションには`require_dependency`が不要なので、モデル、コントローラ、ジョブなどは`$LOAD_PATH`に入れておく必要がありません。 これを`false`に設定すると、Rubyが相対パスで`require`呼び出しを解決する際にこれらのディレクトリをチェックする必要がなくなり、Bootsnapの作業とメモリを節約できます。 @@ -303,7 +303,7 @@ end #### `config.autoflush_log` ログのファイル出力をバッファリングせず、即座に書き出す設定を有効にします。 -デフォルトは `true` です。 +デフォルトは`true`です。 #### `config.autoload_lib(ignore:)` @@ -392,8 +392,6 @@ NOTE: `bin/rails credentials`コマンドでこの値を認識させるために デフォルトでは、`config/credentials/#{Rails.env}.key`があればそのパスを使い、なければ`config/master.key`を使います。 -`config/master.key` otherwise. - NOTE: `bin/rails credentials`コマンドでこの値を認識させるために、必ず`config/application.rb`ファイルか`config/environments/#{Rails.env}.rb`ファイルで設定しなければなりません。 #### `config.debug_exception_response_format` @@ -432,7 +430,7 @@ NOTE: NokogiriのHTML5パーサーはJRubyではサポートされていない #### `config.enable_reloading` `config.enable_reloading`がtrueの場合、アプリケーションのクラスとモジュールが変更されると、Webリクエスト間に再読み込みされます。 -デフォルトは `development`環境では`true`、`production`環境では`false`です。 +デフォルトは`development`環境では`true`、`production`環境では`false`です。 述語`config.reloading_enabled?`も定義されています。 @@ -445,13 +443,13 @@ NOTE: NokogiriのHTML5パーサーはJRubyではサポートされていない 例外が発生したときに`ShowException`ミドルウェアによって呼び出される例外アプリケーションを設定します。 デフォルト値は`ActionDispatch::PublicExceptions.new(Rails.public_path)`です。 -例外アプリケーションは `ActionDispatch::Http::MimeNegotiation::InvalidType`エラーを処理する必要があります。このエラーは、クライアントが無効な`Accept`ヘッダーまたは`Content-Type`ヘッダーを送信したときに発生します。 +例外アプリケーションは`ActionDispatch::Http::MimeNegotiation::InvalidType`エラーを処理する必要があります。このエラーは、クライアントが無効な`Accept`ヘッダーまたは`Content-Type`ヘッダーを送信したときに発生します。 デフォルトの`ActionDispatch::PublicExceptions`アプリケーションは自動的にこれを行い、`Content-Type`を`text/html`に設定し、`406 Not Acceptable`ステータスを返します。 このエラーを処理しないと、`500 Internal Server Error`が発生します。 -例外アプリケーションとして`Rails.application.routes` `RouteSet` を使う場合にも、この特殊な処理が必要になります。次のような感じになります。 +例外アプリケーションとして`Rails.application.routes`や`RouteSet`を使う場合にも、この特殊な処理が必要になります。次のような感じになります。 ```ruby # config/application.rb @@ -533,7 +531,7 @@ Rails.application.config.filter_redirect += ["s3.amazonaws.com", /private-match/ #### `config.hosts` -`Host`ヘッダの有効性を確認するために使われる、「文字列」「正規表現」「`IPAddr`」の配列です。[HostAuthorization ミドルウェア](#actiondispatch-hostauthorization)で使われ、DNSリバインディング攻撃を防ぐのに役立ちます。 +`Host`ヘッダの有効性を確認するために使われる、「文字列」「正規表現」「`IPAddr`」の配列です。[HostAuthorizationミドルウェア](#actiondispatch-hostauthorization)で使われ、DNSリバインディング攻撃を防ぐのに役立ちます。 #### `config.javascript_path` @@ -600,7 +598,7 @@ NGINXやApacheなどのサーバーソフトウェアが静的ファイルを配 #### `config.railties_order` Railties/Engineの読み込み順序を手動で指定できます。 -デフォルトは `[:all]` です。 +デフォルトは`[:all]`です。 ```ruby config.railties_order = [Blog::Engine, :main_app, :all] @@ -614,7 +612,7 @@ config.railties_order = [Blog::Engine, :main_app, :all] #### `config.relative_url_root` [サブディレクトリにデプロイする](configuring.html#サブディレクトリにデプロイする(相対url-rootの利用))ことをRailsに指示します。 -デフォルトは `ENV['RAILS_RELATIVE_URL_ROOT']` です。 +デフォルトは`ENV['RAILS_RELATIVE_URL_ROOT']`です。 #### `config.reload_classes_only_on_change` @@ -718,7 +716,7 @@ CSSの圧縮に用いるプログラムを定義します。このオプショ #### `config.assets.js_compressor` -JavaScriptの圧縮に使うプログラムを定義します。指定できる値は `:terser`、`:closure`、`:uglifier`、`:yui`です。それぞれ `terser` gem、`closure-compiler` gem、`uglifier` gem、`yui-compressor` gemに対応します。 +JavaScriptの圧縮に使うプログラムを定義します。指定できる値は`:terser`、`:closure`、`:uglifier`、`:yui`です。それぞれ`terser` gem、`closure-compiler` gem、`uglifier` gem、`yui-compressor` gemに対応します。 #### `config.assets.gzip` @@ -796,7 +794,7 @@ end * `system_tests`: システムテスト生成に用いる統合ツールを定義します。デフォルト値は`:test_unit`です。 -* `orm`: 使うORM (オブジェクトリレーショナルマッピング) を指定します。デフォルト値は`false`であり、この場合はActive Recordが使われます。 +* `orm`: 使うORM(オブジェクトリレーショナルマッピング)を指定します。デフォルト値は`false`であり、この場合はActive Recordが使われます。 * `resource_controller`: `rails generate resource`の実行時にどのジェネレータでコントローラを生成するかを指定します。デフォルト値は`:controller`です。 @@ -1048,7 +1046,7 @@ config.middleware.delete Rack::MethodOverride [`Error#full_message`][ActiveModel::Error#full_message]エラーフォーマットをi18nのロケールファイルで上書きしてよいかどうかを制御するboolean値です。デフォルト値は`false`です。 -`true`に設定すると、`full_message`はロケールファイルの属性とモデルレベルでフォーマットを探索します。デフォルトのフォーマットは`"%{attribute} %{message}"`で、`attribute`は属性名、`message`はバリデーション固有のメッセージです。以下の例では、すべての `Person`属性と、特定の`Person`属性(`age`)のフォーマットをオーバーライドしています。 +`true`に設定すると、`full_message`はロケールファイルの属性とモデルレベルでフォーマットを探索します。デフォルトのフォーマットは`"%{attribute} %{message}"`で、`attribute`は属性名、`message`はバリデーション固有のメッセージです。以下の例では、すべての`Person`属性と、特定の`Person`属性(`age`)のフォーマットをオーバーライドしています。 ```ruby class Person @@ -1062,7 +1060,7 @@ end ```yml en: - activemodel: # または activerecord: + activemodel: # またはactiverecord: errors: models: person: @@ -1103,7 +1101,7 @@ Log4rのインターフェイスまたはデフォルトのRuby Loggerクラス #### `config.active_record.primary_key_prefix_type` -主キーカラムの命名法を変更するのに使います。Railsでは、主キーカラムの名前にデフォルトで`id`が使われます (なお`id`にする場合は値の設定は不要です)。`id`以外に以下の2つを指定できます。 +主キーカラムの命名法を変更するのに使います。Railsでは、主キーカラムの名前にデフォルトで`id`が使われます(なお`id`にする場合は値の設定は不要です)。`id`以外に以下の2つを指定できます。 * `:table_name`: たとえばCustomerクラスの主キーは`customerid`になります * `:table_name_with_underscore`: たとえばCustomerクラスの主キーは`customer_id`になります @@ -1475,7 +1473,7 @@ Active Recordの複数のインスタンスがトランザクション内で同 カラムでシリアライザが明示的に指定されていない場合に使うシリアライザーの実装です。 -歴史的に `serialize`と`store`は異なるシリアライザ実装を利用可能ですが、デフォルトでは`YAML`を利用します。しかし、このフォーマットはあまり効率的ではなく、慎重に採用しないとセキュリティの脆弱性の原因となる可能性があります。 +歴史的に`serialize`と`store`は異なるシリアライザ実装を利用可能ですが、デフォルトでは`YAML`を利用します。しかし、このフォーマットはあまり効率的ではなく、慎重に採用しないとセキュリティの脆弱性の原因となる可能性があります。 そのため、データベースのシリアライズには、従来よりも厳格かつ限定的なフォーマットを選択することが推奨されます。 @@ -1590,7 +1588,7 @@ ActiveRecord::Base.connection この数値を検討するときは、`database.yml`で設定されているデータベースコネクションのプールサイズと調和させなければなりません。コネクションプールのサイズは、フォアグラウンドのスレッド(Webサーバーやジョブワーカーのスレッド)とバックグラウンドのスレッドを両方とも扱えるサイズにする必要があります。 -Railsはプロセスごとに、この個数のスレッドを用いて非同期クエリを処理するグローバル クエリエグゼキュータを1つ作成します。したがって、プールサイズは`thread_count + global_executor_concurrency + 1`以上である必要があります。たとえば、Webサーバーの最大スレッド数が3で、`global_executor_concurrency`が4に設定されている場合、プールサイズは8以上にする必要があります。 +Railsはプロセスごとに、この個数のスレッドを用いて非同期クエリを処理するグローバルクエリエグゼキュータを1つ作成します。したがって、プールサイズは`thread_count + global_executor_concurrency + 1`以上である必要があります。たとえば、Webサーバーの最大スレッド数が3で、`global_executor_concurrency`が4に設定されている場合、プールサイズは8以上にする必要があります。 #### `config.active_record.yaml_column_permitted_classes` @@ -1738,7 +1736,7 @@ Active Record暗号化で利用する圧縮ライブラリを設定します。 #### `config.active_record.protocol_adapters` -データベースコネクションをURLで構成する場合、このオプションはプロトコルと背後のデータベースアダプタへのマッピングを提供します。たとえば、環境変数で `DATABASE_URL=mysql://localhost/database`を指定するとRailsは`mysql`を`mysql2`アダプタにマッピングしますが、アプリケーションでこれらのマッピングを以下のようにオーバーライドすることも可能です。 +データベースコネクションをURLで構成する場合、このオプションはプロトコルと背後のデータベースアダプタへのマッピングを提供します。たとえば、環境変数で`DATABASE_URL=mysql://localhost/database`を指定するとRailsは`mysql`を`mysql2`アダプタにマッピングしますが、アプリケーションでこれらのマッピングを以下のようにオーバーライドすることも可能です。 ```ruby config.active_record.protocol_adapters.mysql = "trilogy" @@ -1833,7 +1831,7 @@ CSRFトークンの正当性をそれらが生成されたメソッドやアク #### `config.action_controller.always_permitted_parameters` -デフォルトで許可される許可リストパラメータのリストを設定します。デフォルト値は `['controller', 'action']`です。 +デフォルトで許可される許可リストパラメータのリストを設定します。デフォルト値は`['controller', 'action']`です。 #### `config.action_controller.enable_fragment_cache_logging` @@ -1864,7 +1862,7 @@ Rendered recordings/threads/_thread.html.erb in 1.5 ms [cache miss] #### `config.action_controller.raise_on_open_redirects` -外部リダイレクトをオプトインにすることで、アプリケーションが意図せずに外部ホストにリダイレクトされること (オープンリダイレクト(open redirect)とも呼ばれます) から保護します。 +外部リダイレクトをオプトインにすることで、アプリケーションが意図せずに外部ホストにリダイレクトされること(オープンリダイレクト(open redirect)とも呼ばれます)から保護します。 この設定が`true`の場合、外部ホストを含むURLが[`redirect_to`][]に渡されると、`ActionController::Redirecting::UnsafeRedirectError`が発生します。オープンリダイレクトを許可する必要がある場合は、`redirect_to`呼び出しに`allow_other_host: true`オプションを追加できます。 @@ -1946,7 +1944,7 @@ HTTPヘッダーで使われるハッシュです。このヘッダーはデフ #### `config.action_dispatch.tld_length` -アプリケーションで使うトップレベルドメイン(TLD) の長さを指定します。デフォルト値は`1`です。 +アプリケーションで使うトップレベルドメイン(TLD)の長さを指定します。デフォルト値は`1`です。 #### `config.action_dispatch.ignore_accept_header` @@ -2087,9 +2085,9 @@ end `config.action_dispatch.show_exceptions`設定は、リクエストへの応答中にAction Pack(具体的には[`ActionDispatch::ShowExceptions`](/configuring.html#actiondispatch-showexceptions)ミドルウェア)が発生した例外を処理する方法を指定します。 -値を`:all`に設定すると、例外をrescueして対応するエラーページを表示するようにAction Packを構成します。たとえば、Action Packは `ActiveRecord::RecordNotFound`例外をrescueし、`public/404.html`にあるコンテンツをステータスコード`404 Not found`でレンダリングします。 +値を`:all`に設定すると、例外をrescueして対応するエラーページを表示するようにAction Packを構成します。たとえば、Action Packは`ActiveRecord::RecordNotFound`例外をrescueし、`public/404.html`にあるコンテンツをステータスコード`404 Not found`でレンダリングします。 -値を`:rescueable`に設定すると、[`config.action_dispatch.rescue_responses`](#config-action-dispatch-rescue-responses)リストで定義されている例外についてはrescueし、その他すべてはraiseするようAction Packを構成します。 たとえば、Action Packは`ActiveRecord::RecordNotFound`をrescueしますが、`NoMethodError`をraiseします。 +値を`:rescueable`に設定すると、[`config.action_dispatch.rescue_responses`](#config-action-dispatch-rescue-responses)リストで定義されている例外についてはrescueし、その他すべてはraiseするようAction Packを構成します。たとえば、Action Packは`ActiveRecord::RecordNotFound`をrescueしますが、`NoMethodError`をraiseします。 値を``:none`に設定すると、Action Packがすべての例外をraiseするように構成されます。 @@ -2106,7 +2104,7 @@ end レスポンスに`Last-Modified`ヘッダーと`ETag`ヘッダーの両方が存在する場合に、`ActionDispatch::ETag`ミドルウェアが`ETag`ヘッダーを`Last-Modified`ヘッダーよりも優先するかどうかを設定します。 -`true`に設定すると、両方のヘッダーが存在する場合、「[RFC 7232 セクション 6](https://datatracker.ietf.org/doc/html/rfc7232#section-6)」で指定されているように`ETag`のみが考慮されます。 +`true`に設定すると、両方のヘッダーが存在する場合、「[RFC 7232セクション6](https://datatracker.ietf.org/doc/html/rfc7232#section-6)」で指定されているように`ETag`のみが考慮されます。 `false`に設定すると、両方のヘッダーが存在する場合、両方のヘッダーがチェックされ、レスポンスが新しいと見なされるためには両方が一致する必要があります。 @@ -2281,7 +2279,7 @@ ERBテンプレートを`# frozen_string_literal: true`マジックコメント #### `config.action_view.prepend_content_exfiltration_prevention` -`form_tag`ヘルパーと`button_to`ヘルパーが、HTMLをブラウザセーフにする (ただし技術的には無効な) HTMLタグをHTMLの冒頭で生成するかどうかを決定します。このHTMLタグは、先行する「閉じていないタグ」がそのHTMLタグの内容をキャプチャできないことを保証します。デフォルト値は`false`です。 +`form_tag`ヘルパーと`button_to`ヘルパーが、HTMLをブラウザセーフにする(ただし技術的には無効な)HTMLタグをHTMLの冒頭で生成するかどうかを決定します。このHTMLタグは、先行する「閉じていないタグ」がそのHTMLタグの内容をキャプチャできないことを保証します。デフォルト値は`false`です。 #### `config.action_view.sanitizer_vendor` @@ -2476,9 +2474,9 @@ config.action_mailer.show_previews = false #### `config.action_mailer.deliver_later_queue_name` -デフォルトの配信ジョブ (`config.action_mailer.delivery_job`を参照)で用いるActive Jobキューを指定します。 +デフォルトの配信ジョブ(`config.action_mailer.delivery_job`を参照)で用いるActive Jobキューを指定します。 -このオプションを`nil`に設定すると、配送ジョブはデフォルトの Active Jobキュー ([`config.active_job.default_queue_name`][]を参照)に送信されます。 +このオプションを`nil`に設定すると、配送ジョブはデフォルトのActive Jobキュー ([`config.active_job.default_queue_name`][]を参照)に送信されます。 メーラークラスはこれをオーバーライドすることで別のキューを利用できます。これはデフォルトの配信ジョブを使う場合にのみ適用されることに注意してください。メーラーがカスタムジョブを使っている場合、そのキューが使われます。 @@ -2670,7 +2668,7 @@ Rails内部ステートのほとんどの局所性(locality)を設定しま `:zone`に設定すると、`to_time`メソッドは受信者のタイムゾーンを利用します。 `:offset`に設定すると、`to_time`メソッドはUTCオフセットを利用します。 -`false` の場合、`to_time`メソッドは代わりにローカルシステムのUTCオフセットに変換します。 +`false`の場合、`to_time`メソッドは代わりにローカルシステムのUTCオフセットに変換します。 デフォルト値は、`config.load_defaults`のターゲットバージョンによって異なります。 @@ -2712,7 +2710,7 @@ Rails内部ステートのほとんどの局所性(locality)を設定しま #### `config.active_support.raise_on_invalid_cache_expiration_time` -`Rails.cache`の`fetch`または`write`に無効な`expires_at`または `expires_in`時刻を指定した場合に、`ArgumentError`を発生させるかどうかを指定します。 +`Rails.cache`の`fetch`または`write`に無効な`expires_at`または`expires_in`時刻を指定した場合に、`ArgumentError`を発生させるかどうかを指定します。 オプションは`true`と`false`です。 `false`の場合、例外は`handled`として報告され、代わりにログに出力されます。 @@ -3241,7 +3239,7 @@ production: Railsには[SQLite3](https://www.sqlite.org)のサポートが組み込まれています。SQLiteは軽量かつ専用サーバーの不要なデータベースアプリケーションです。SQLiteは、production環境の負荷に耐えるよう、より適切に設定されますが、production環境の負荷が高すぎる場合はSQLiteが過負荷になる可能性があります。Railsで新規プロジェクトを作成するとデフォルトでSQLiteが指定されますが、これはいつでも後から変更できます。 -以下はデフォルトの接続設定ファイル(`config/database.yml`)に含まれる、開発環境用の接続設定です。 +以下はデフォルトのコネクション設定ファイル(`config/database.yml`)に含まれる、開発環境用のコネクション設定です。 ```yaml development: @@ -3251,7 +3249,7 @@ development: timeout: 5000 ``` -NOTE: Railsでデータ保存用にSQLite3データベースが採用されている理由は、設定なしですぐに使えるからです。RailsではSQLiteの他にMySQL(MariaDB含む)やPostgreSQLなども使えますし、データベース接続用のプラグインも多数あります。production環境で何らかのデータベースを使う場合、そのためのアダプタはたいていの場合探せば見つかります。 +NOTE: Railsでデータ保存用にSQLite3データベースが採用されている理由は、設定なしですぐに使えるからです。RailsではSQLiteの他にMySQL(MariaDB含む)やPostgreSQLなども使えますし、データベースコネクション用のプラグインも多数あります。production環境で何らかのデータベースを使う場合、そのためのアダプタはたいていの場合探せば見つかります。 #### MySQLやMariaDBデータベースを設定する @@ -3423,7 +3421,7 @@ end ### サブディレクトリにデプロイする(相対URL rootの利用) -Railsアプリケーションの実行は、アプリケーションのrootディレクトリ (`/`など) で行なうことが前提となっています。この節では、アプリケーションをディレクトリの下で実行する方法について説明します。 +Railsアプリケーションの実行は、アプリケーションのrootディレクトリ(`/`など)で行なうことが前提となっています。この節では、アプリケーションをディレクトリの下で実行する方法について説明します。 ここでは、アプリケーションを"/app1"ディレクトリにデプロイしたいとします。これを行なうには、適切なルーティングを生成できるディレクトリをRailsに指示する必要があります。 @@ -3485,7 +3483,7 @@ Rails環境の設定 一部の設定については、Railsの外部から環境変数の形で与えることも可能です。以下の環境変数は、Railsの多くの部分で認識されます。 -* `ENV["RAILS_ENV"]`: Railsが実行される環境 (production、development、testなど) を定義します。 +* `ENV["RAILS_ENV"]`: Railsが実行される環境(production、development、testなど)を定義します。 * `ENV["RAILS_RELATIVE_URL_ROOT"]`: [アプリケーションをサブディレクトリにデプロイする](configuring.html#サブディレクトリにデプロイする(相対url-rootの利用))ときにルーティングシステムがURLを認識するために使われます。 diff --git a/guides/source/ja/constant_autoloading_and_reloading.md b/guides/source/ja/constant_autoloading_and_reloading.md index e76fdefc235..de4c69507a5 100644 --- a/guides/source/ja/constant_autoloading_and_reloading.md +++ b/guides/source/ja/constant_autoloading_and_reloading.md @@ -69,7 +69,7 @@ module XML end ``` -ある場所における*ネスト*とは、ネストしたクラスおよびモジュールオブジェクトをネストの内側のものから順に並べたコレクションとなります(訳注: Ruby内のある場所のネストを調べるには`Module.nesting`を使います)。前述の例における(1)の位置のネストは以下のようになります。 +ある場所における*ネスト*とは、ネストしたクラスおよびモジュールオブジェクトをネストの内側のものから順に並べたコレクションとなります(訳注: Ruby内のある場所のネストを調べるには`Module.nesting`を使います)。前述の例における(1)の位置のネストは以下のようになります。 ```ruby [XML::SAXParser, XML] @@ -111,7 +111,7 @@ end [A::B, X::Y] ``` -このネストは`A`で終わっていないだけでなく (そもそもこの`A`はネストに属してすらいません)、ネストに`X::Y`も含まれています。この`X::Y`と`A::B`は互いに独立しています。 +このネストは`A`で終わっていないだけでなく(そもそもこの`A`はネストに属してすらいません)、ネストに`X::Y`も含まれています。この`X::Y`と`A::B`は互いに独立しています。 このネストは、Rubyインタプリタによって維持されている内部スタックであり、以下のルールに従って変更されます。 @@ -127,11 +127,11 @@ end ここで興味深いのは、ブロックがスタックに何の影響も与えないという事実です。特に、`Class.new`や`Module.new`に渡される可能性のあるブロックは、`new`メソッドによって定義されるクラスやモジュールをネストにプッシュしません。この点が、ブロックを使わずに何らかの形でクラスやモジュールを定義する場合と異なる点の一つです。 -`Module.nesting`を使うことで、任意の位置にあるネストを検査 (inspect) できます。 +`Module.nesting`を使うことで、任意の位置にあるネストを検査(inspect)できます。 ### クラスやモジュールの定義とは定数への代入のこと -以下のスニペットを実行するとクラスが (再オープンではなく) 新規作成されるとします。 +以下のスニペットを実行するとクラスが(再オープンではなく)新規作成されるとします。 ```ruby class C @@ -147,7 +147,7 @@ class Project < ActiveRecord::Base end ``` -上のコードは定数代入 (constant assignment) を行います。これは以下のコードと同等です。 +上のコードは定数代入(constant assignment)を行います。これは以下のコードと同等です。 ```ruby Project = Class.new(ActiveRecord::Base) @@ -228,13 +228,13 @@ end #### 相対定数を解決するアルゴリズム -ネストが空でなければその最初の要素、空の場合には`Object`を、コードの任意の場所での*cref*というようにしましょう (訳注: crefはRuby内部におけるクラス参照 (class reference) の略であり、Rubyの定数が持つ暗黙のコンテキストです -- [関連記事](http://yugui.jp/articles/846) )。 +ネストが空でなければその最初の要素、空の場合には`Object`を、コードの任意の場所での*cref*というようにしましょう(訳注: crefはRuby内部におけるクラス参照(class reference)の略であり、Rubyの定数が持つ暗黙のコンテキストです -- [関連記事](http://yugui.jp/articles/846))。 詳細についてはここでは述べませんが、相対的な定数参照を解決するアルゴリズムは以下のようになります。 -1. ネストが存在する場合、この定数はそのネストの要素の中で順に探索される。それらの要素の先祖は探索されない (訳注: 本章で言う先祖 (ancestors) とは[クラス、モジュールのスーパークラスとインクルードしているモジュール](http://docs.ruby-lang.org/ja/2.2.0/method/Module/i/ancestors.html)のことです)。 +1. ネストが存在する場合、この定数はそのネストの要素の中で順に探索される。それらの要素の先祖は探索されない(訳注: 本章で言う先祖(ancestors)とは[クラス、モジュールのスーパークラスとインクルードしているモジュール](http://docs.ruby-lang.org/ja/2.2.0/method/Module/i/ancestors.html)のことです)。 -2. 見つからない場合は、crefの先祖チェーン (継承チェーン) を探索する。 +2. 見つからない場合は、crefの先祖チェイン(継承チェイン)を探索する。 3. 見つからない場合、crefに対して`const_missing`が呼び出される。`const_missing`のデフォルトの実装は`NameError`を発生するが、これはオーバーライド可能。 @@ -242,7 +242,7 @@ Railsの自動読み込みは**このアルゴリズムをエミュレートし #### 修飾済み定数を解決するアルゴリズム -修飾済み (qualified) 定数は以下のようなものです。 +修飾済み(qualified)定数は以下のようなものです。 ```ruby Billing::Invoice @@ -252,7 +252,7 @@ Billing::Invoice INFO: `::Billing::Invoice`のように先頭にコロンを2つ置くことで、最初のセグメントを相対から絶対に変えることができます。このようにすると、この`Billing`はトップレベルの定数としてのみ参照されるようになります。 -2番目の`Invoice`定数の方は`Billing`で修飾されています。この定数の解決方法についてはこの後で説明します。ここで、修飾する側のクラスやモジュールオブジェクト (上の例で言う`Billing`) を*親(parent)*と定義します。修飾済み定数を解決するアルゴリズムは以下のようになります。 +2番目の`Invoice`定数の方は`Billing`で修飾されています。この定数の解決方法についてはこの後で説明します。ここで、修飾する側のクラスやモジュールオブジェクト(上の例で言う`Billing`)を*親(parent)*と定義します。修飾済み定数を解決するアルゴリズムは以下のようになります。 1. この定数はその親と先祖の中から探索される。 @@ -268,17 +268,17 @@ Railsの自動読み込みは**このアルゴリズムをエミュレートし ### 親の名前空間 -定数パスで与えられた文字列を使うと、*親の名前空間* (parent namespace) が定義されます。親の名前空間は、定数パスからその右端のセグメントのみを除去した文字列になります。 +定数パスで与えられた文字列を使うと、**親の名前空間**(parent namespace)が定義されます。親の名前空間は、定数パスからその右端のセグメントのみを除去した文字列になります。 -たとえば、"A::B::C" という文字列の親の名前空間は "A::B" という文字列となり、"A::B" という文字列の親の名前空間は "A" となり、"A" という文字列の親の名前空間は "" となります。 +たとえば、"A::B::C"という文字列の親の名前空間は"A::B"という文字列となり、"A::B"という文字列の親の名前空間は"A"となり、"A"という文字列の親の名前空間は""となります。 しかし、クラスやモジュールについて考察する場合、親の名前空間の解釈にトリッキーな点が生じるので注意が必要です。例として、"A::B"という名前を持つモジュールMについて考察してみましょう。 -* 親の名前空間 "A" は、与えられた位置におけるネストの状態を反映していない可能性がある。 +* 親の名前空間"A"は、与えられた位置におけるネストの状態を反映していない可能性がある。 * `A`という定数は既に存在しなくなっている可能性がある。この定数は何らかのコードによって`Object`から削除されているかもしれない。 -* たとえ`A`という定数が存在するとしても、かつて`A`という名前を持っていたクラスまたはモジュールは既に存在しなくなっている可能性がある。たとえば、定数が1つ削除された後に別の定数代入 (constant assignment) が行われたとすると、一般的にはそれは別のオブジェクトを指していると考えるべき。 +* たとえ`A`という定数が存在するとしても、かつて`A`という名前を持っていたクラスまたはモジュールは既に存在しなくなっている可能性がある。たとえば、定数が1つ削除された後に別の定数代入(constant assignment)が行われたとすると、一般的にはそれは別のオブジェクトを指していると考えるべき。 * そのような状況で`A`という同じ名前の定数が再度代入されると、その`A`は同じく"A"という名前を持つ別の新しいクラスまたはモジュールを指す可能性すらありうる。 @@ -292,7 +292,7 @@ Railsの自動読み込みは**このアルゴリズムをエミュレートし [定数の再読み込み](#定数の再読み込み)が有効になっていると、`Kernel#load`が使われ、ファイルを繰り返し読み込めるようになります。 -本章では「読み込み」(load)という言葉を、指定されたファイルがRailsによって解釈されるという程度の緩やかな意味で用いていますが、実際のメカニズムとしてはフラグに応じて`Kernel#load`や`Kernel#require`が使われます。 +本章では「読み込み」(load)という言葉を、指定されたファイルがRailsによって解釈されるという程度の緩やかな意味で用いていますが、実際のメカニズムとしてはフラグに応じて`Kernel#load`や`Kernel#require`が使われます。 自動読み込みが可能となる状況 @@ -307,7 +307,7 @@ $ bin/rails runner 'p User.column_names' この場合、コンソール、テストスイート、アプリケーションのすべてについて自動読み込みが行われます。 -productionモードで起動された場合は、デフォルトでファイルの事前一括読み込み (eager loading) が行われるため、developmentモードのような自動読み込みはほとんど発生しません。ただし、事前一括読み込みにおいても自動読み込みが発生することがあります。 +productionモードで起動された場合は、デフォルトでファイルのeager loading(一括読み込み)が行われるため、developmentモードのような自動読み込みはほとんど発生しません。ただし、事前一括読み込みにおいても自動読み込みが発生することがあります。 以下の例で考察してみましょう。 @@ -340,13 +340,13 @@ require 'erb' * `test/mailers/previews`ディレクトリ。 -このコレクションは`config.autoload_paths`で設定できます。たとえば`lib`ディレクトリは以前はコレクションに含まれていましたが、現在は含まれていません。必要であれば、`config/application.rb`にあえて以下のコードを追加して (オプトイン)、`lib`ディレクトリをautoload_pathsに追加することもできます。 +このコレクションは`config.autoload_paths`で設定できます。たとえば`lib`ディレクトリは以前はコレクションに含まれていましたが、現在は含まれていません。必要であれば、`config/application.rb`にあえて以下のコードを追加して(オプトイン)、`lib`ディレクトリをautoload_pathsに追加することも可能です。 ```ruby config.autoload_paths += "#{Rails.root}/lib" ``` -`autoload_paths`の値を検査することもできます。生成したRailsアプリケーションでは以下のようになります (ただし編集済み)。 +`autoload_paths`の値を検査することもできます。生成したRailsアプリケーションでは以下のようになります(ただし編集済み)。 ```bash $ bin/rails r 'puts ActiveSupport::Dependencies.autoload_paths' @@ -392,7 +392,7 @@ Rubyは`class`や`module`キーワードの後ろに置かれる定数を探索 逆に、`ApplicationController`がそれまでに出現していなかった場合、この定数は「見つからない」ものと見なされ、Railsによって自動読み込みがトリガーされます。 -Railsは、`ApplicationController`を読み込むために`autoload_paths`にあるパスを順に処理します。最初に`app/assets/application_controller.rb`が存在するかどうかを確認します。見つからない場合 (これが通常です)、次のパスで`app/controllers/application_controller.rb`の探索を続行します。 +Railsは、`ApplicationController`を読み込むために`autoload_paths`にあるパスを順に処理します。最初に`app/assets/application_controller.rb`が存在するかどうかを確認します。見つからない場合(これが通常です)、次のパスで`app/controllers/application_controller.rb`の探索を続行します。 見つかったファイルで`ApplicationController`が定義されていればOKです。定義されていない場合は`LoadError`が発生します。 @@ -472,7 +472,7 @@ app/models/post.rb ### 修飾済み参照 -修飾済み (qualified) 定数が見つからない場合、この定数は親の名前空間では探索されません。しかしここで注意すべき点が1つあります。定数が見つからない場合、Railsはそのトリガーが相対的な参照であるか、修飾済み参照であるかを判定できなくなります。 +修飾済み(qualified)定数が見つからない場合、この定数は親の名前空間では探索されません。しかしここで注意すべき点が1つあります。定数が見つからない場合、Railsはそのトリガーが相対的な参照であるか、修飾済み参照であるかを判定できなくなります。 以下の例について考察してみましょう。 @@ -526,7 +526,7 @@ end ### 一般的な手順 -相対参照は、それらがヒットしたcrefからは見つからないと報告されます。修飾済み参照はその親からは見つからないと報告されます。(*cref*の定義については本章の[相対定数を解決するアルゴリズム](#相対定数を解決するアルゴリズム)を、*parent*の定義については同じく[修飾済み定数を解決するアルゴリズム](#修飾済み定数を解決するアルゴリズム)を参照してください) +相対参照は、それらがヒットしたcrefからは見つからないと報告されます。修飾済み参照はその親からは見つからないと報告されます(**cref**の定義については本章の[相対定数を解決するアルゴリズム](#相対定数を解決するアルゴリズム)を、*parent*の定義については同じく[修飾済み定数を解決するアルゴリズム](#修飾済み定数を解決するアルゴリズム)を参照してください)。 定数`C`を任意の状況で自動読み込みする手順を擬似言語で表現すると以下のようになります。 @@ -549,7 +549,7 @@ loop do if "#{dir}/#{ns.underscore}/c.rb"ファイルが存在する load/require "#{dir}/#{ns.underscore}/c.rb" - if 定数Cが定義済みである + if定数Cが定義済みである return else raise LoadError @@ -668,7 +668,7 @@ class Admin::UsersController < ApplicationController end ``` -Rubyは`User`を解決するために、1番目の例では`Admin`をチェックしますが、2番目の例はネストに属していないので`Admin`をチェックしません。([ネスト](#ネスト)および[解決アルゴリズム](#解決アルゴリズム)を参照) +Rubyは`User`を解決するために、1番目の例では`Admin`をチェックしますが、2番目の例はネストに属していないので`Admin`をチェックしません([ネスト](#ネスト)および[解決アルゴリズム](#解決アルゴリズム)を参照)。 残念ながら、Railsの自動読み込みはこの定数が見つからない箇所でネストが発生しているかどうかを認識しないので、通常のRubyと同じように振る舞うことができません。特に`Admin::User`はどちらの場合にも自動読み込みされます。 @@ -686,7 +686,7 @@ end ### 自動読み込みとSTI -単一テーブル継承 (STI: Single Table Inheritance) はActive Recordの機能の1つであり、モデルの階層構造を1つのテーブルに保存することができます。このようなモデルのAPIは階層構造を認識し、よく使われる要素がそこにカプセル化されます。たとえば以下のクラスがあるとします。 +単一テーブル継承(STI: Single Table Inheritance)はActive Recordの機能の1つであり、モデルの階層構造を1つのテーブルに保存できます。このようなモデルのAPIは階層構造を認識し、よく使われる要素がそこにカプセル化されます。たとえば以下のクラスがあるとします。 ```ruby # app/models/polygon.rb @@ -704,9 +704,9 @@ end `Triangle.create`は三角形を表す行を1つ作成し、`Rectangle.create`は四角形を表す行を1つ作成します。`id`が既存レコードのIDであれば、`Polygon.find(id)`は正しい種類のオブジェクトを返します。 -コレクションに対して実行されるメソッドは、階層構造も認識します。たとえば、三角形と四角形はどちらも多角形 (polygon) に含まれるため、`Polygon.all`はテーブル内のすべてのレコードを返します。Active Recordが返す結果セットでは、結果ごとに対応するクラスのインスタンスを返すように配慮されています。 +コレクションに対して実行されるメソッドは、階層構造も認識します。たとえば、三角形と四角形はどちらも多角形(polygon)に含まれるため、`Polygon.all`はテーブル内のすべてのレコードを返します。Active Recordが返す結果セットでは、結果ごとに対応するクラスのインスタンスを返すように配慮されています。 -種類は必要に応じて自動読み込みされます。たとえば、`Polygon.first`の結果が四角形 (rectangle) であり、`Rectangle`がその時点で読み込まれていなければ、Active Recordによって`Rectangle`が読み込まれ、そのレコードは正しくインスタンス化されます。 +種類は必要に応じて自動読み込みされます。たとえば、`Polygon.first`の結果が四角形(rectangle)であり、`Rectangle`がその時点で読み込まれていなければ、Active Recordによって`Rectangle`が読み込まれ、そのレコードは正しくインスタンス化されます。 ここまでは何の問題もありません。しかし、ルートクラスに基づいたクエリではなく、何らかのサブクラスを使わなければならない場合には事情が異なってきます。 @@ -745,7 +745,7 @@ WHERE "polygons"."type" IN ("Rectangle") これはバグではありません。`Rectangle`クラスのその時点で*既知*である子孫はクエリにすべて含まれています。 -コードの実行順序にかかわらず常に期待どおりに動作させる手段として、ルートクラスが定義されているファイルの最終行で、ツリーの末端 (leaf) を明示的に読み込むという方法があります。 +コードの実行順序にかかわらず常に期待どおりに動作させる手段として、ルートクラスが定義されているファイルの最終行で、ツリーの末端( leaf)を明示的に読み込むという方法があります。 ```ruby # app/models/polygon.rb @@ -932,7 +932,7 @@ $ bin/rails r 'Image; p Hotel::Image' 2>/dev/null Image # これはHotel::Imageではない ``` -`Hotel::Image`を評価するコードは、(おそらく`require_dependency`を用いて) `app/models/hotel/image.rb`を事前に読み込み済みの状態にしておく必要があります。 +`Hotel::Image`を評価するコードは、(おそらく`require_dependency`を用いて)`app/models/hotel/image.rb`を事前に読み込み済みの状態にしておく必要があります。 ただしこの方法を使う場合、Rubyインタプリタは以下のような警告を出力します。 @@ -1017,7 +1017,7 @@ c.user # 驚くべきことにUserで問題が生じない c.user # NameError: uninitialized constant C::User ``` -これは、親の名前空間に既に定数が存在していることが検出されたためです。([修飾済み参照](#%E8%87%AA%E5%8B%95%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-%E4%BF%AE%E9%A3%BE%E6%B8%88%E3%81%BF%E5%8F%82%E7%85%A7)を参照) +これは、親の名前空間に既に定数が存在していることが検出されたためです([修飾済み参照](#%E8%87%AA%E5%8B%95%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%81%BF%E3%81%AE%E3%82%A2%E3%83%AB%E3%82%B4%E3%83%AA%E3%82%BA%E3%83%A0-%E4%BF%AE%E9%A3%BE%E6%B8%88%E3%81%BF%E5%8F%82%E7%85%A7)を参照)。 純粋なRubyの場合と同様、`BasicObject`の直系の子孫オブジェクトの中では常に絶対定数パスをお使いください。 diff --git a/guides/source/ja/contributing_to_ruby_on_rails.md b/guides/source/ja/contributing_to_ruby_on_rails.md index 937b79da3fa..64d4fedf0b5 100644 --- a/guides/source/ja/contributing_to_ruby_on_rails.md +++ b/guides/source/ja/contributing_to_ruby_on_rails.md @@ -121,7 +121,7 @@ GitHubからRuby on Railsに送信されたプルリクエスト(pull request $ git checkout -b testing_branch ``` -続いて、このリモートブランチを使ってコードベースを更新します。たとえばJohnSmithという名前のGitHubユーザーが、Railsをforkして https://github.com/JohnSmith/rails の"orange"というトピックブランチにpushする場合は、以下を実行します。 +続いて、このリモートブランチを使ってコードベースを更新します。たとえばJohnSmithという名前のGitHubユーザーが、Railsをforkして`https://github.com/JohnSmith/rails`の"orange"というトピックブランチにpushする場合は、以下を実行します。 ```bash $ git remote add JohnSmith https://github.com/JohnSmith/rails.git @@ -179,7 +179,7 @@ Railsガイドの翻訳に貢献する Railsガイドを翻訳するボランティアも歓迎いたします。次の手順に沿って進めます。 -* https://github.com/rails/rails をforkする。 +* `https://github.com/rails/rails`を自分のGitHubアカウントにforkする。 * 翻訳先の言語名に対応するフォルダをsourceフォルダの下に追加する。たとえばイタリア語の場合は`guides/source/it-IT`フォルダを追加します。 * *guides/source*に置かれているコンテンツファイルをそのフォルダ内にコピーして翻訳する。 * HTMLファイルは**翻訳しないでください**(HTMLファイルは自動生成されます)。 @@ -307,7 +307,7 @@ Railsのコーディングを行う場合は、以下のシンプルなスタイ * インデントはスペース2個(Tab文字は使わない)。 * 行末にスペースを置かないこと。空行に不要なスペースを置かないこと。 * `private`や`protected`の直後の行は空行にせず、以降の行はインデントすること。 -* ハッシュの記法は Ruby 1.9 以降の書式を使うこと(`{ :a => :b }`より`{ a: :b }`が望ましい)。 +* ハッシュの記法はRuby 1.9以降の書式を使うこと(`{ :a => :b }`より`{ a: :b }`が望ましい)。 * `and`と`or`よりも`&&`と`||`が望ましい。 * クラスメソッドは`self.method`よりも`class << self`が望ましい。 * 引数はスペースなしの丸かっこ`my_method(my_arg)`で記述すること(丸かっこ+スペース`my_method( my_arg )`や丸かっこなし`my_method my_arg`は使わない)。 @@ -345,11 +345,11 @@ Inspecting 1 file Railsには、変更をプッシュするときにテストスイートをフル実行する規約はありません。特に、[rails-dev-box][]で推奨されているワークフローを用いてソースコードを`/vagrant`にマウントすると、railtiesのテストに時間がかかります。 -現実的な妥協案として、作成したコードによって影響が生じるかどうかをテストしましょう。railtiesで変更が発生していない場合は、影響を受けるコンポーネントのすべてのテストスイートを実行しましょう。すべてのテストがパスすれば、それだけで貢献を提案できます。Rails では、他の箇所で生じた予想外のエラーを検出するために[Buildkite][]を利用しています。 +現実的な妥協案として、作成したコードによって影響が生じるかどうかをテストしましょう。railtiesで変更が発生していない場合は、影響を受けるコンポーネントのすべてのテストスイートを実行しましょう。すべてのテストがパスすれば、それだけで貢献を提案できます。Railsでは、他の箇所で生じた予想外のエラーを検出するために[Buildkite][]を利用しています。 [Buildkite]: https://buildkite.com/rails/rails -#### Rails 全体のテストを実行する +#### Rails全体のテストを実行する すべてのテストを実行するには以下のようにします。 @@ -593,7 +593,7 @@ def changed_method end ``` -この新しいフレームワークのデフォルトを設定するには、 `Rails::Application::Configuration#load_defaults`で新しい値を設定します。 +この新しいフレームワークのデフォルトを設定するには、`Rails::Application::Configuration#load_defaults`で新しい値を設定します。 ```ruby @@ -638,7 +638,7 @@ end ### Gemfile.lockを更新する -変更内容によっては、gem依存関係のアップグレードも必要になることがあります。そのような場合は、`bundle update` を実行して正しい依存関係バージョンを反映し、変更の`Gemfile.lock`ファイルにコミットしてください。 +変更内容によっては、gem依存関係のアップグレードも必要になることがあります。そのような場合は、`bundle update`を実行して正しい依存関係バージョンを反映し、変更の`Gemfile.lock`ファイルにコミットしてください。 ### 変更をコミットする @@ -676,7 +676,7 @@ $ git commit -a 箇条書きも追加できます。 -- 箇条書きはダッシュ (-)かアスタリスク (*) で始めること +- 箇条書きはダッシュ`-`かアスタリスク`*`で始めること - 箇条書きの行は72文字目で折り返し、読みやすさのために 追加行の冒頭にスペース2つを置いてインデントします @@ -754,7 +754,7 @@ $ git push fork my_new_branch プルリクのベースリポジトリ(プルリク送信先)には、`rails/rails`とその`main`ブランチを指定してください。 プルリクのヘッドリポジトリ(プルリク送信元)には、自分のリポジトリ(`自分のユーザー名/rails`など)と、自分が作成したブランチ名を指定してください。 -十分確認したら、「create pull request」ボタン をクリックします。 +十分確認したら、「create pull request」ボタンをクリックします。 プルリクメッセージ画面が開いたら、まず自分が行った変更が過不足なく含まれていることを確認します。Rails用のプルリクメッセージテンプレートに沿って、送信したいパッチの詳細をプルリクメッセージに記入し、内容がひと目でわかるタイトルを付けます。以上の作業が終わったら「Send pull request」をクリックします。 diff --git a/guides/source/ja/debugging_rails_applications.md b/guides/source/ja/debugging_rails_applications.md index 8d95f708167..47e4848b32e 100644 --- a/guides/source/ja/debugging_rails_applications.md +++ b/guides/source/ja/debugging_rails_applications.md @@ -1,7 +1,7 @@ Rails アプリケーションのデバッグ ============================ -本ガイドでは、Ruby on Rails アプリケーションのさまざまなデバッグ技法をご紹介します。 +本ガイドでは、Ruby on Railsアプリケーションのさまざまなデバッグ技法をご紹介します。 このガイドの内容: @@ -288,7 +288,7 @@ logger.tagged("BCX") { logger.tagged("Jason") { logger.info "Stuff" } } # "[BCX] ログ出力は、Railsアプリケーションのパフォーマンスに常に小さな影響を与えます。ログをディスクに保存する場合は特にそうです。さらに、場合によっては小さな影響とは言い切れないこともあります。 -ログレベル`:debug`は、`:fatal`と比べてはるかに多くの文字列が評価および(ディスクなどに)出力されるため、パフォーマンスに与える影響がずっと大きくなります。 +ログレベル`:debug`は、`:fatal`と比べてはるかに多くの文字列が評価(およびディスクなどに出力)されるため、パフォーマンスに与える影響がずっと大きくなります。 他にも、以下のように`Logger`の呼び出しを多数実行した場合には落とし穴に注意する必要があります。 @@ -304,7 +304,7 @@ logger.debug "Person attributes hash: #{@person.attributes.inspect}" logger.debug { "Person attributes hash: #{@person.attributes.inspect}" } ``` -渡したブロックの内容(ここでは文字列の式展開)は、debug が有効になっている場合にしか評価されません。この方法によるパフォーマンスの改善は、大量のログを出力しているときでないとそれほど実感できないかもしれませんが、それでも採用する価値があります。 +渡したブロックの内容(ここでは文字列の式展開)は、debugが有効になっている場合にしか評価されません。この方法によるパフォーマンスの改善は、大量のログを出力しているときでないとそれほど実感できないかもしれませんが、それでも採用する価値があります。 INFO: 本セクションは[Stack OverflowでのJon Cairnsによる回答](https://stackoverflow.com/questions/16546730/logging-in-rails-is-there-any-performance-hit/16546935#16546935)として書かれたものであり、[cc by-sa 4.0](https://creativecommons.org/licenses/by-sa/4.0/)ライセンスに基づいています。 @@ -358,7 +358,7 @@ Processing by PostsController#index as HTML (rdbg) ``` -デバッグセッションはいつでも終了可能です。アプリケーションの実行は`continue`(または`c`)コマンドで継続可能です。 また、デバッグセッションとアプリケーションの両方を終了させたい場合は、`quit`(または `q`)コマンドを使います。 +デバッグセッションはいつでも終了可能です。アプリケーションの実行は`continue`(または`c`)コマンドで継続可能です。また、デバッグセッションとアプリケーションの両方を終了させたい場合は、`quit`(または`q`)コマンドを使います。 ### コンテキスト @@ -391,7 +391,7 @@ Processing by PostsController#index as HTML - `info`(`i`): 現在のフレームに関する情報を表示する - `backtrace`(`bt`): バックトレースと付加情報を表示する -- `outline` (or `o`, `ls`): 現在のスコープで利用可能なメソッド、定数、ローカル変数、インスタンス変数を表示する +- `outline`(または`o`、`ls`): 現在のスコープで利用可能なメソッド、定数、ローカル変数、インスタンス変数を表示する #### `info`コマンド @@ -806,7 +806,7 @@ NOTE: 1回のリクエストで出力できるコンソールは1つだけです ### 設定 -* `config.web_console.allowed_ips`: 認証済みの IPv4/IPv6アドレスとネットワークのリストです(デフォルト値: `127.0.0.1/8、::1`)。 +* `config.web_console.allowed_ips`: 認証済みのIPv4/IPv6アドレスとネットワークのリストです(デフォルト値: `127.0.0.1/8、::1`)。 * `config.web_console.whiny_requests`: コンソール出力が抑制されている場合にメッセージをログ出力します(デフォルト値: `true`)。 `web-console`はサーバー上の純粋なRubyコードをリモート評価できるので、production環境では絶対に使わないください。 @@ -838,7 +838,7 @@ derailed_benchmark gemの[README](https://github.com/schneems/derailed_benchmark * [Query Trace](https://github.com/ruckus/active-record-query-trace/tree/master): ログにクエリ元のトレースを追加します。 * [Exception Notifier](https://github.com/smartinez87/exception_notification/tree/master): Railsアプリケーションでのエラー発生時用の、メーラーオブジェクトとメール通知送信テンプレートのデフォルトセットを提供します。 * [Better Errors](https://github.com/charliesome/better_errors): Rails標準のエラーページを新しい表示に置き換えて、ソースコードや変数検査などのコンテキスト情報を見やすくしてくれます。 -* [RailsPanel](https://github.com/dejan/rails_panel): Rails開発用のChrome機能拡張です。これがあればdevelopment.logでtailコマンドを実行する必要がなくなります。Railsアプリケーションのリクエストに関するすべての情報をブラウザ上 (Developer Toolsパネル) に表示できます。 +* [RailsPanel](https://github.com/dejan/rails_panel): Rails開発用のChrome機能拡張です。これがあればdevelopment.logでtailコマンドを実行する必要がなくなります。Railsアプリケーションのリクエストに関するすべての情報をブラウザ上のDeveloper Toolsパネルに表示できます。 db時間、レンダリング時間、トータル時間、パラメータリスト、出力したビューなども表示されます。 * [Pry](https://github.com/pry/pry): もう1つのIRBであり、開発用の実行時コンソールです。 diff --git a/guides/source/ja/development_dependencies_install.md b/guides/source/ja/development_dependencies_install.md index 38246bd4a53..3642d966a19 100644 --- a/guides/source/ja/development_dependencies_install.md +++ b/guides/source/ja/development_dependencies_install.md @@ -55,7 +55,7 @@ Railsのテストの中には追加のツールに依存しているものもあ NOTE: Redisのドキュメントでは、パッケージマネージャによるRedisインストールは推奨されていません(パッケージマネージャーが古いため)。Redisをソースからインストールしてサーバーを立ち上げる方法については、[Redisドキュメント][Redis install]に詳しく記載されています。 -NOTE: Active Recordのテストは、少なくともMySQLとPostgreSQLとSQLite3で**必ず**パスしなければなりません。 単一のアダプタでしかテストされていないパッチは却下されます(変更とテストの内容が特定のアダプタに限定されない場合を除く)。 +NOTE: Active Recordのテストは、少なくともMySQLとPostgreSQLとSQLite3で**必ず**パスしなければなりません。単一のアダプタでしかテストされていないパッチは却下されます(変更とテストの内容が特定のアダプタに限定されない場合を除く)。 以下は、OSごとの追加ツールのインストール方法です。 diff --git a/guides/source/ja/documents.yaml b/guides/source/ja/documents.yaml index a8923b2a917..0f5989d2896 100644 --- a/guides/source/ja/documents.yaml +++ b/guides/source/ja/documents.yaml @@ -20,7 +20,7 @@ - name: Active Record マイグレーション url: active_record_migrations.html - description: Active Recordのマイグレーション (migration) を使って、データベースを構造化された方法で整然と変更する方法について解説します。 + description: Active Recordのマイグレーション(migration)を使って、データベースを構造化された方法で整然と変更する方法について解説します。 - name: Active Record バリデーション url: active_record_validations.html @@ -51,7 +51,7 @@ - name: レイアウトとレンダリング url: layouts_and_rendering.html - description: Action ControllerとAction Viewが提供する基本的なレイアウト機能について解説します。画面出力 (レンダリング) とリダイレクト、content_forブロックとパーシャル (部分テンプレート) の利用方法についても解説します。 + description: Action ControllerとAction Viewが提供する基本的なレイアウト機能について解説します。画面出力(レンダリング)やリダイレクト、content_forブロックとパーシャル(部分テンプレート)の利用方法についても解説します。 - name: Action View ヘルパー url: action_view_helpers.html @@ -89,7 +89,7 @@ - name: Action Text の概要 url: action_text_overview.html - description: Action Text を使ったリッチテキスト形式のデータの取り扱い方法について解説します。 + description: Action Textを使ったリッチテキスト形式のデータの取り扱い方法について解説します。 - name: Active Job の基礎 url: active_job_basics.html @@ -97,7 +97,7 @@ - name: Active Storage の概要 url: active_storage_overview.html - description: Active Record のモデルにファイルを添付する方法について解説します。 + description: Active Recordモデルにファイルを添付する方法について解説します。 - name: Action Cable の概要 url: action_cable_overview.html @@ -150,19 +150,19 @@ name: Rails の初期化プロセス work_in_progress: true url: initialization.html - description: Rails 内部の初期化プロセスについて解説します。 + description: Rails内部の初期化プロセスについて解説します。 - name: Rails の自動読み込みと再読み込み url: autoloading_and_reloading_constants.html - description: Rails 内部の自動読み込みや再読み込みの動作について解説します。 + description: Rails内部の自動読み込みや再読み込みの動作について解説します。 # - # name: Rails の自動読み込みと再読み込み (Classic) # url: autoloading_and_reloading_constants_classic_mode.html -# description: Rails 内部の自動読み込みや再読み込みの動作について解説します。(Classic モード) +# description: Rails 内部の自動読み込みや再読み込みの動作について解説します。(Classic モード) - name: Classic から Zeitwerk への移行 url: classic_to_zeitwerk_howto.html - description: Rails アプリケーションを Classic モードから Zeitwerk モードに移行する手順を解説します。 + description: RailsアプリケーションをClassicモードからZeitwerkモードに移行する手順を解説します。 - name: Rails のキャッシュ機構 url: caching_with_rails.html @@ -223,7 +223,7 @@ - name: Rails ジェネレータとテンプレート入門 url: generators.html - description: 新しいジェネレータを拡張に追加したり、ビルトインのRailsジェネレータの要素に別の要素を提供したりする方法 (scaffoldジェネレータに別のテストスタブを提供するなど) について解説します。 + description: 新しいジェネレータを拡張に追加したり、ビルトインのRailsジェネレータの要素に別の要素を提供したりする方法(scaffoldジェネレータに別のテストスタブを提供するなど)について解説します。 - name: Rails エンジン入門 url: engines.html diff --git a/guides/source/ja/engines.md b/guides/source/ja/engines.md index e6b80d6f1ef..da5c3d50c8e 100644 --- a/guides/source/ja/engines.md +++ b/guides/source/ja/engines.md @@ -18,20 +18,20 @@ Rails エンジン入門 Railsにおけるエンジンの役割 ----------------- -エンジン (engine) は、ホストとなるRailsアプリケーションに機能を提供するミニチュア版Railsアプリケーションとみなせます。この場合、ホストとなるRailsアプリケーションは、実際にはエンジンに「ターボをかけた」ようなものにすぎず、`Rails::Application`クラスは`Rails::Engine`から多くの振る舞いを継承します。 +Railsのエンジン(engine)は、ホストとなるRailsアプリケーションに機能を提供するミニチュア版Railsアプリケーションとみなせます。この場合、ホストとなるRailsアプリケーションは、実際にはエンジンに「ターボをかけた」ようなものにすぎず、`Rails::Application`クラスは`Rails::Engine`から多くの振る舞いを継承します。 すなわち、エンジンとアプリケーションは、細かな違いを除けばほぼ同じであると考えられます。本ガイドでもこの点をたびたび確認します。エンジンとアプリケーションは、同じ構造を共有しています。 エンジンはプラグインとも密接に関連します。エンジンやプラグインは、どちらも共通の`lib`ディレクトリ構造を共有し、どちらも`rails plugin new`ジェネレータを用いて生成されます。両者の違いは、Railsはエンジンを一種の「完全なプラグイン」とみなしている点です。これは、エンジンを生成する際にジェネレータコマンドで`--full`を与えることからもわかります。このガイドでは、実際には`--mountable`オプションを使います。このオプションは、`--full`のオプション以外にもいくつかの機能を追加します。 -以後本ガイドでは「完全なプラグイン (full plugin)」を単に「エンジン」と呼びます。エンジンがプラグインになることも、プラグインがエンジンになることもできます。 +以後本ガイドでは「完全なプラグイン(full plugin)」を単に「エンジン」と呼びます。エンジンがプラグインになることも、プラグインがエンジンになることもできます。 -本ガイドでの説明用に作成するエンジンには「blorgh」(blogのもじり) という名前を付けます。このエンジンはホストアプリケーションにブログ機能を追加し、記事とコメントを作成できます。本ガイドでは、最初にこのエンジンを単体で動作するようにし、次にこのエンジンをアプリケーションにフックします。 +本ガイドでの説明用に作成するエンジンには「blorgh」(blogのもじり)という名前を付けます。このエンジンはホストアプリケーションにブログ機能を追加し、記事とコメントを作成できます。本ガイドでは、最初にこのエンジンを単体で動作するようにし、次にこのエンジンをアプリケーションにフックします。 エンジンはホストアプリケーションから分離しておくこともできます。「分離」とは、あるアプリケーションが`articles_path`のようなルーティングヘルパーによってパスを提供できるとすると、そのアプリケーションのエンジンも同じく`articles_path`というヘルパーによってパスを提供でき、しかも両者が衝突しないということです。エンジンを分離すると、コントローラ名、モデル名、テーブル名はすべて名前空間化されます。これについては本ガイドで後述します。 ここで、ぜひ理解しておくべき重要な点があります。アプリケーションは **いかなる場合も** エンジンよりも優先されます。ある環境において、最終的な決定権を持つのはアプリケーション自身です。エンジンはアプリケーションの動作を大幅に変更するものではなく、アプリケーションを単に拡張するものです。 -その他のエンジンに関するドキュメントについては、[Devise](https://github.com/plataformatec/devise) (親アプリケーションに認証機能を提供するエンジン) や [Thredded](https://github.com/thredded/thredded) (フォーラム機能を提供するエンジン) を参照してください。この他に、[Spree](https://github.com/spree/spree) (eコマースプラットフォーム) や[Refinery CMS](https://github.com/refinery/refinerycms) (CMSエンジン) などもあります。 +その他のエンジンに関するドキュメントについては、[Devise](https://github.com/plataformatec/devise) (親アプリケーションに認証機能を提供するエンジン)や[Thredded](https://github.com/thredded/thredded) (フォーラム機能を提供するエンジン)を参照してください。この他に、[Spree](https://github.com/spree/spree) (eコマースプラットフォーム)や[Refinery CMS](https://github.com/refinery/refinerycms) (CMSエンジン)などもあります。 最後に、エンジン機能はJames Adam、Piotr Sarnacki、Railsコアチーム、そして多くの人々の助けなしでは実現できなかったでしょう。彼らに会うことがあったら、ぜひ感謝の気持ちをお伝えください。 @@ -108,7 +108,7 @@ mount Blorgh::Engine => "/blorgh" gem "blorgh", path: "engines/blorgh" ``` -Gemfileを更新したら、いつものように`bundle install`を実行するのを忘れないこと。エンジンを通常のgemと同様に`Gemfile`に記述すると、Bundlerはgemと同様にエンジンを読み込み、`blorgh.gemspec`ファイルを解析し、`lib`以下に置かれているファイル(この場合`lib/blorgh.rb`)をrequireします。このファイルは、(`lib/blorgh/engine.rb`に置かれている) `blorgh/engine.rb`ファイルをrequireし、`Blorgh`という基本モジュールを定義します。 +Gemfileを更新したら、いつものように`bundle install`を実行するのを忘れないこと。エンジンを通常のgemと同様に`Gemfile`に記述すると、Bundlerはgemと同様にエンジンを読み込み、`blorgh.gemspec`ファイルを解析し、`lib`以下に置かれているファイル(この場合`lib/blorgh.rb`)をrequireします。このファイルは、(`lib/blorgh/engine.rb`に置かれている)`blorgh/engine.rb`ファイルをrequireし、`Blorgh`という基本モジュールを定義します。 ```ruby require "blorgh/engine" @@ -135,7 +135,7 @@ end NOTE: `Engine`クラスの定義に含まれる`isolate_namespace`の行を変更・削除しないことを**強く**推奨します。この行が変更されると、生成されたエンジン内のクラスがアプリケーションと衝突する**可能性があります**。 -名前空間を分離するということは、`bin/rails g model`の実行によって生成されたモデル(ここでは `bin/rails g model article`を実行したとします)は`Article`にならず、名前空間化されて`Blorgh::Article`になるということです。さらにモデルのテーブルも名前空間化され、単なる`articles`ではなく`blorgh_articles`になります。コントローラもモデルと同様に名前空間化されます。`ArticlesController`というコントローラは`Blorgh::ArticlesController`になり、このコントローラのビューは`app/views/articles`ではなく`app/views/blorgh/articles`に置かれます。メーラーも同様に名前空間化されます。 +名前空間を分離するということは、`bin/rails g model`の実行によって生成されたモデル(ここでは`bin/rails g model article`を実行したとします)は`Article`にならず、名前空間化されて`Blorgh::Article`になるということです。さらにモデルのテーブルも名前空間化され、単なる`articles`ではなく`blorgh_articles`になります。コントローラもモデルと同様に名前空間化されます。`ArticlesController`というコントローラは`Blorgh::ArticlesController`になり、このコントローラのビューは`app/views/articles`ではなく`app/views/blorgh/articles`に置かれます。メーラーも同様に名前空間化されます。 最後に、ルーティングもエンジン内で分離されます。これは名前空間化の最も重要な部分の1つであり、これについては本ガイドの[ルーティング](#ルーティング)セクションで後述します。 @@ -226,7 +226,7 @@ invoke test_unit scaffoldジェネレータが最初に行なうのは、`active_record`ジェネレータの呼び出しです。これはマイグレーションの生成とそのリソースのモデルを生成します。ここでご注目いただきたいのは、マイグレーションは通常の`create_articles`ではなく`create_blorgh_articles`という名前で呼ばれるという点です。これは`Blorgh::Engine`クラスの定義で呼び出される`isolate_namespace`メソッドによるものです。このモデルも名前空間化されるので、`Engine`クラス内の`isolate_namespace`呼び出しによって、`app/models/article.rb`ではなく`app/models/blorgh/article.rb`に置かれます。 -続いて、そのモデルに対応する`test_unit`ジェネレータが呼び出され、(`test/models/article_test.rb`ではなく)`test/models/blorgh/article_test.rb` にモデルのテストが置かれます。フィクスチャも同様に(`test/fixtures/articles.yml`ではなく)`test/fixtures/blorgh/articles.yml`に置かれます。 +続いて、そのモデルに対応する`test_unit`ジェネレータが呼び出され、(`test/models/article_test.rb`ではなく)`test/models/blorgh/article_test.rb`にモデルのテストが置かれます。フィクスチャも同様に(`test/fixtures/articles.yml`ではなく)`test/fixtures/blorgh/articles.yml`に置かれます。 その後、そのリソースに対応する行が`config/routes.rb`ファイルに挿入され、エンジンで使われます。ここで挿入される行は単に`resources :articles`となっています。これにより、そのエンジンで使われる`config/routes.rb`ファイルが以下のように変更されます。 @@ -238,7 +238,7 @@ end このルーティングは、`YourApp::Application`クラスではなく`Blorgh::Engine`オブジェクトに基づいていることにご注目ください。これにより、エンジンのルーティングがエンジン自身に制限され、[testディレクトリ](#testディレクトリ)セクションで説明したように特定の位置にマウントできるようになります。ここでは、エンジンのルーティングがアプリケーション内のルーティングから分離されていることにもご注目ください。詳細については本ガイドの[ルーティング](#ルーティング)セクションで解説します。 -続いて`scaffold_controller`ジェネレータが呼ばれ、`Blorgh::ArticlesController`という名前のコントローラを生成します (生成場所は`app/controllers/blorgh/articles_controller.rb`です)。このコントローラに関連するビューは`app/views/blorgh/articles`となります。このジェネレータは、コントローラ用のテスト (`test/controllers/blorgh/articles_controller_test.rb`) とヘルパー (`app/helpers/blorgh/articles_helper.rb`) も同時に生成します。 +続いて`scaffold_controller`ジェネレータが呼ばれ、`Blorgh::ArticlesController`という名前のコントローラを生成します(生成場所は`app/controllers/blorgh/articles_controller.rb`です)。このコントローラに関連するビューは`app/views/blorgh/articles`となります。このジェネレータは、コントローラ用のテスト(`test/controllers/blorgh/articles_controller_test.rb`)とヘルパー(`app/helpers/blorgh/articles_helper.rb`)も同時に生成します。 このジェネレータによって生成されるものはすべて正しく名前空間化されます。このコントローラのクラスは、以下のように`Blorgh`モジュール内で定義されます。 @@ -279,7 +279,7 @@ end root to: "articles#index" ``` -これで、ユーザーが (`/articles`ではなく) エンジンのルートパスをブラウザで表示すると記事の一覧が表示されるようになりました。つまり、わざわざ`http://localhost:3000/blorgh/articles`と指定しなくても`http://localhost:3000/blorgh`と指定すれば済むようになります。 +これで、ユーザーが(`/articles`ではなく)エンジンのrootパスをブラウザで表示すると、記事の一覧が表示されるようになりました。つまり、わざわざ`http://localhost:3000/blorgh/articles`と指定しなくても`http://localhost:3000/blorgh`と指定すれば済むようになります。 ### commentsリソースを生成する @@ -339,7 +339,7 @@ NOTE: この`has_many`は`Blorgh`モジュールの中にあるクラスの中 <%= render "blorgh/comments/form" %> ``` -続いて、この行を出力に含めるためのパーシャル (部分テンプレート) も必要です。`app/views/blorgh/comments`にディレクトリを作成し、`_form.html.erb`というファイルを作成します。このファイルの中に以下のパーシャルを記述します。 +続いて、この行を出力に含めるためのパーシャル(部分テンプレート)も必要です。`app/views/blorgh/comments`にディレクトリを作成し、`_form.html.erb`というファイルを作成します。このファイルの中に以下のパーシャルを記述します。 ```html+erb

New comment

@@ -406,7 +406,7 @@ Missing partial blorgh/comments/_comment with {:handlers=>[:erb, :builder], "/Users/ryan/Sites/side_projects/blorgh/app/views" ``` -このエラーは、コメントの表示に必要なパーシャルをエンジンが見つけられないためです。Railsはアプリケーションの (`test/dummy`) `app/views`を最初に検索し、続いてエンジンの`app/views`ディレクトリを検索します。見つからない場合はエラーになります。エンジン自身は`blorgh/comments/comment`を検索すべきであることを認識しています。これは、エンジンが受け取るモデルオブジェクトが`Blorgh::Comment`クラスに属しているためです。 +このエラーは、コメントの表示に必要なパーシャルをエンジンが見つけられないためです。Railsはアプリケーションの(`test/dummy`)`app/views`を最初に検索し、続いてエンジンの`app/views`ディレクトリを検索します。見つからない場合はエラーになります。エンジン自身は`blorgh/comments/comment`を検索すべきであることを認識しています。これは、エンジンが受け取るモデルオブジェクトが`Blorgh::Comment`クラスに属しているためです。 さしあたって、コメントテキストを出力する役目をこのパーシャルに担ってもらわなければなりません。`app/views/blorgh/comments/_comment.html.erb`ファイルを作成し、以下の記述を追加します。 @@ -490,7 +490,7 @@ Copied migration [timestamp_1]_create_blorgh_articles.blorgh.rb from blorgh Copied migration [timestamp_2]_create_blorgh_comments.blorgh.rb from blorgh ``` -最初のタイムスタンプ (`[timestamp_1]`) は現在時刻、次のタイムスタンプ (`[timestamp_2]`) は現在時刻に1秒追加した値になります。タイムスタンプがこのようになっている理由は、アプリケーションの既存のマイグレーションがすべて完了した後でエンジンのマイグレーションを実行する必要があるためです。 +最初のタイムスタンプ(`[timestamp_1]`)は現在時刻、次のタイムスタンプ(`[timestamp_2]`)は現在時刻に1秒追加した値になります。タイムスタンプがこのようになっている理由は、アプリケーションの既存のマイグレーションがすべて完了した後でエンジンのマイグレーションを実行する必要があるためです。 アプリケーションのコンテキストでマイグレーションを実行するには、単に`bin/rails db:migrate`を実行します。`http://localhost:3000/blog`でエンジンにアクセスすると、記事は空の状態です。これは、アプリケーションの内部で作成されたテーブルはエンジンの内部で作成されたテーブルとは異なるためです。新しくマウントしたエンジンでもっといろいろやってみましょう。アプリケーションの動作は、エンジンを単体で動かしているときと同じであることがわかります。 @@ -514,7 +514,7 @@ $ bin/rails db:migrate SCOPE=blorgh VERSION=0 通常のアプリケーションであれば、記事やコメントの作者を表す何らかの`User`クラスが備わっているかもしれません。しかしそのクラス名が`User`とは限らず、アプリケーションによっては`Person`というクラスかもしれません。このような状況に対応するために、このエンジンでは`User`クラスとの関連付けをハードコードしないようにすべきです。 -ここでは話を簡単にするため、アプリケーションがユーザーを表すために持つクラスは`User`であるとします (この後でもっとカスタマイズしやすくします)。このクラスは、アプリケーションで以下のコマンドを実行して生成できます。 +ここでは話を簡単にするため、アプリケーションがユーザーを表すために持つクラスは`User`であるとします(この後でもっとカスタマイズしやすくします)。このクラスは、アプリケーションで以下のコマンドを実行して生成できます。 ```bash $ bin/rails generate model user name:string @@ -587,7 +587,7 @@ Copied migration [timestamp]_add_author_id_to_blorgh_articles.blorgh.rb from blo $ bin/rails db:migrate ``` -これですべての部品が定位置に置かれ、ある記事 (article) を、`users`テーブルのレコードで表される作者 (author) に関連付けるアクションが実行されるようになりました。この記事は`blorgh_articles`テーブルで表されます。 +これですべての部品が定位置に置かれ、ある記事(article)を、`users`テーブルのレコードで表される作者(author)に関連付けるアクションが実行されるようになりました。この記事は`blorgh_articles`テーブルで表されます。 最後に、作者名を記事のページに表示しましょう。以下のコードを`app/views/blorgh/articles/_article.html.erb`の"Title"出力の上に追加します。 @@ -676,7 +676,7 @@ WARNING: この設定では、このクラス名をクラスそのものでは 次は、新しい記事を1つ作成してみましょう。記事の作成はこれまでとまったく同様に行えます。1つだけ異なるのは、このクラスの動作を学ぶために`config/initializers/blorgh.rb`の設定をエンジンで使う点です。 -ここでは、クラスで使うAPIがどんなものでなければならないかだけが重要です(どんなクラスであるかについては厳密な依存はありません)。エンジンで使うクラスで必須となるメソッドは`find_or_create_by`のみです。このメソッドはそのクラスのオブジェクトを1つ返します。もちろん、このオブジェクトは何らかの形で参照可能な識別子 (id) を持つ必要があります。 +ここでは、クラスで使うAPIがどんなものでなければならないかだけが重要です(どんなクラスであるかについては厳密な依存はありません)。エンジンで使うクラスで必須となるメソッドは`find_or_create_by`のみです。このメソッドはそのクラスのオブジェクトを1つ返します。もちろん、このオブジェクトは何らかの形で参照可能な識別子(id)を持つ必要があります。 #### 一般的なエンジンの設定 @@ -742,7 +742,7 @@ end エンジンのモデルやコントローラは、メインのRailsアプリケーション側でそれらのクラスを再オープン(再定義)することで拡張できます。 -オーバーライドは専用の`app/overrides`ディレクトリに配置できます。これはオートローダーで無視され、 `to_prepare`コールバックでプリロードされます。 +オーバーライドは専用の`app/overrides`ディレクトリに配置できます。これはオートローダーで無視され、`to_prepare`コールバックでプリロードされます。 ```ruby # config/application.rb diff --git a/guides/source/ja/error_reporting.md b/guides/source/ja/error_reporting.md index 9b7a434e282..f70f2070541 100644 --- a/guides/source/ja/error_reporting.md +++ b/guides/source/ja/error_reporting.md @@ -91,7 +91,7 @@ Railsのエラーレポーターには、エラー通知用の4つのメソッ #### エラーを通知して握りつぶす -[`Rails.error.handle`][] は、ブロック内で発生したエラーを通知してから、そのエラーを**握りつぶします**。ブロックの外の残りのコードは通常通り続行されます。 +[`Rails.error.handle`][]は、ブロック内で発生したエラーを通知してから、そのエラーを**握りつぶします**。ブロックの外の残りのコードは通常通り続行されます。 ```ruby result = Rails.error.handle do @@ -115,7 +115,7 @@ end #### エラーを通知して再度raiseする -[`Rails.error.record`][] はすべての登録済みレポーターにエラーを通知し、その後エラーを再度raiseします。残りのコードは実行されません。 +[`Rails.error.record`][]はすべての登録済みレポーターにエラーを通知し、その後エラーを再度raiseします。残りのコードは実行されません。 ```ruby Rails.error.record do @@ -222,7 +222,7 @@ end 1 + 1 # TypeErrorsはIOErrorsではないので、ここは「実行されない」 ``` -上の`TypeError`はRailsのエラー通知レポーターにキャプチャされません。通知されるのは `IOError`およびその子孫インスタンスだけです。その他のエラーは通常どおりraiseします。 +上の`TypeError`はRailsのエラー通知レポーターにキャプチャされません。通知されるのは`IOError`およびその子孫インスタンスだけです。その他のエラーは通常どおりraiseします。 ### 通知を無効にする diff --git a/guides/source/ja/form_helpers.md b/guides/source/ja/form_helpers.md index 625ae02a7f5..3424ead95ea 100644 --- a/guides/source/ja/form_helpers.md +++ b/guides/source/ja/form_helpers.md @@ -296,7 +296,7 @@ HTML出力は以下のようになります。 * フォームの`action`属性には適切な値`action="/books"`が自動的に入力されます。書籍を更新する場合は`action="/books/42"`のようになります。 * フォームのフィールド名は`book[...]`でスコープ化されます。つまり、`params[:book]`はこれらのフィールドの値をすべて含むハッシュになります。入力名の重要性について詳しくは、本ガイドの[フォーム入力の命名規約と`params`ハッシュ](#フォーム入力の命名規約とparamsハッシュ)の章を参照してください。 -* 送信ボタンには、適切なテキスト値 (この場合は「Create Book」) が自動的に入力されます。 +* 送信ボタンには、適切なテキスト値(この場合は「Create Book」)が自動的に入力されます。 TIP: 通常、フォーム入力にはモデル属性が反映されますが、必ずしもそうである必要はありません。モデル属性以外にも必要な情報がある場合は、フォームにフィールドを含めておけば、`params[:book][:my_non_attribute_input]`のようにアクセスできます。 @@ -394,7 +394,7 @@ resolve("Article") { [:article] } TIP: リソースを宣言すると、いくつかの副作用があります。リソースの設定や利用方法について詳しくは、[ルーティングガイド](routing.html#リソースベースのルーティング-railsのデフォルト)を参照してください。 -WARNING: モデルで[単一テーブル継承(STI: single-table inheritance)](association_basics.html#単一テーブル継承-(sti))を使っている場合、親クラスがリソースを宣言されていてもサブクラスでレコード識別を利用できません。その場合は`:url`と`:scope`(モデル名)を明示的に指定する必要があります。 +WARNING: モデルで[単一テーブル継承(STI: single-table inheritance)](association_basics.html#単一テーブル継承(sti))を使っている場合、親クラスがリソースを宣言されていてもサブクラスでレコード識別を利用できません。その場合は`:url`と`:scope`(モデル名)を明示的に指定する必要があります。 [`record.persisted?`]: https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-persisted-3F @@ -705,7 +705,7 @@ Railsでは、個別の日付時刻コンポーネント向けのセレクトボ ユーザーにどのタイムゾーンにいるのかを尋ねる必要がある場合は、非常に便利な[`time_zone_select`][]ヘルパーが使えます。 -通常は、ユーザーが選択可能なタイムゾーンオプションのリストを提供する必要があります。定義済みの [`ActiveSupport::TimeZone`][]オブジェクトのリストがなければ作業が面倒になる可能性があります。`time_with_zone`ヘルパーはこのリストをラップしているので、次のように書けます。 +通常は、ユーザーが選択可能なタイムゾーンオプションのリストを提供する必要があります。定義済みの[`ActiveSupport::TimeZone`][]オブジェクトのリストがなければ作業が面倒になる可能性があります。`time_with_zone`ヘルパーはこのリストをラップしているので、次のように書けます。 ```erb <%= form.time_zone_select :time_zone %> @@ -794,7 +794,7 @@ NOTE: `belongs_to`関連付けのフィールドをレンダリングすると ``` -NOTE: 引数の順序は、 `collection_select`の場合と`select`の場合で異なっていることにご注意ください。`collection_select`では、第1引数に値のメソッド(上の例では`:id`)、第2引数にテキストラベルのメソッド(上の例では`:name`)を指定します。`select`ヘルパーで選択肢を指定する場合の引数の順序はこれと逆である点にご注意ください(テキストラベルが最初で次が値)。前述のコード例では`["Berlin", 1]`となります。 +NOTE: 引数の順序は、`collection_select`の場合と`select`の場合で異なっていることにご注意ください。`collection_select`では、第1引数に値のメソッド(上の例では`:id`)、第2引数にテキストラベルのメソッド(上の例では`:name`)を指定します。`select`ヘルパーで選択肢を指定する場合の引数の順序はこれと逆である点にご注意ください(テキストラベルが最初で次が値)。前述のコード例では`["Berlin", 1]`となります。 [`collection_select`]: https://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-collection_select @@ -886,7 +886,7 @@ NOTE: 引数の順序は、 `collection_select`の場合と`select`の場合で ### CSVファイルのアップロード例 -`file_field`を使う場合、`params`ハッシュ内のオブジェクトは [`ActionDispatch::Http::UploadedFile`][]のインスタンスです。アップロードされたCSVファイルのデータをアプリケーションのレコードに保存する方法の例を次に示します。 +`file_field`を使う場合、`params`ハッシュ内のオブジェクトは[`ActionDispatch::Http::UploadedFile`][]のインスタンスです。アップロードされたCSVファイルのデータをアプリケーションのレコードに保存する方法の例を次に示します。 ```ruby require "csv" @@ -988,7 +988,7 @@ end <%= render partial: f %> ``` -`f`が`ActionView::Helpers::FormBuilder`のインスタンスである場合、このコードは`form`パーシャルを生成し、そのパーシャルオブジェクトをフォームビルダーに設定します。このフォームビルダーのクラスが`LabellingFormBuilder`の場合 、代わりに`labelling_form`パーシャルがレンダリングされます。 +`f`が`ActionView::Helpers::FormBuilder`のインスタンスである場合、このコードは`form`パーシャルを生成し、そのパーシャルオブジェクトをフォームビルダーに設定します。このフォームビルダーのクラスが`LabellingFormBuilder`の場合、代わりに`labelling_form`パーシャルがレンダリングされます。 `LabellingFormBuilder`などのフォームビルダーのカスタマイズでは、実装の詳細が隠蔽されます(上記の単純な例ではやり過ぎのように思えるかもしれません)。フォームでカスタム要素をどの程度頻繁に利用するかに応じて、`FormBuilder`クラスを拡張するか、ヘルパーを作成するかなど、さまざまなカスタマイズから選択することになります。 @@ -1004,7 +1004,7 @@ end HTMLフォーム自体にはユーザー入力データに対する固有の構造が定められておらず、生成されるのは名前と値の文字列のペアだけであることにご注意ください。アプリケーションで使われる配列やハッシュは、Railsで利用するパラメータ命名規約による結果です。 -NOTE: `params`ハッシュ内のフィールドは、[コントローラで許可](#コントローラでパラメータを許可する) しておく必要があります。 +NOTE: `params`ハッシュ内のフィールドは、[コントローラで許可](#コントローラでパラメータを許可する)しておく必要があります。 ### 基本構造 @@ -1147,7 +1147,7 @@ WARNING: 配列パラメータは、`checkbox`ヘルパーとの相性がよく ### モデルをネステッド属性用に構成する -特定のモデル(この場合は`Person`)に関連付けられているレコードを編集するために、Active Recordは [`accepts_nested_attributes_for`][]メソッドを介したモデルレベルのサポートを提供します。 +特定のモデル(この場合は`Person`)に関連付けられているレコードを編集するために、Active Recordは[`accepts_nested_attributes_for`][]メソッドを介したモデルレベルのサポートを提供します。 ```ruby class Person < ApplicationRecord diff --git a/guides/source/ja/getting_started.md b/guides/source/ja/getting_started.md index e988bf2bf45..6ec76a376ef 100644 --- a/guides/source/ja/getting_started.md +++ b/guides/source/ja/getting_started.md @@ -1,7 +1,7 @@ Rails をはじめよう ============ -このガイドでは、Ruby on Rails(以下 Rails)を初めて設定して実行するまでを解説します。 +このガイドでは、Ruby on Rails(以下Rails)を初めて設定して実行するまでを解説します。 このガイドの内容: @@ -38,7 +38,7 @@ Railsの哲学には、以下の2つの主要な基本理念があります。 ## Railsプロジェクトを新規作成する -TIP: 事前設定済みのDev Container開発環境を含む新規Railsアプリを作成できます。Dev Containerは、Railsを始める最短の方法です。手順については、[Dev Containerでの開発ガイド](getting_started_with_devcontainer.html) を参照してください。 +TIP: 事前設定済みのDev Container開発環境を含む新規Railsアプリを作成できます。Dev Containerは、Railsを始める最短の方法です。手順については、[Dev Containerでの開発ガイド](getting_started_with_devcontainer.html)を参照してください。 本ガイドを最大限に活用するには、以下の手順を1つずつすべて実行するのがベストです。どの手順もサンプルアプリケーションを動かすのに必要なものであり、それ以外のコードや手順は不要です。 @@ -53,7 +53,7 @@ Railsをインストールする前に、必要な要件が自分のシステム * Ruby * SQLite3 -TIP: 訳注:GitHubが提供するクラウド開発環境『[Codespaces](https://github.co.jp/features/codespaces)』には、[公式のRuby on Railsテンプレート](https://github.com/codespaces/templates)が用意されています。`Use this template`ボタンから、ワンクリックでRailsを動かせるクラウド開発環境が手に入ります。(参考: [GitHub Codespaces を利用する - Rails Girls](https://railsgirls.jp/install/codespaces)) +TIP: 訳注:GitHubが提供するクラウド開発環境『[Codespaces](https://github.co.jp/features/codespaces)』には、[公式のRuby on Railsテンプレート](https://github.com/codespaces/templates)が用意されています。`Use this template`ボタンから、ワンクリックでRailsを動かせるクラウド開発環境が手に入ります。(参考: [GitHub Codespacesを利用する - Rails Girls](https://railsgirls.jp/install/codespaces)) #### Rubyをインストールする @@ -108,7 +108,7 @@ Railsには、ジェネレータというスクリプトが多数付属してい $ rails new blog ``` -これにより、Blogという名前のRails アプリケーションが`blog`ディレクトリに作成され、`Gemfile`というファイルで指定されているgemファイルが`bundle install`コマンドによってインストールされます。 +これにより、Blogという名前のRailsアプリケーションが`blog`ディレクトリに作成され、`Gemfile`というファイルで指定されているgemファイルが`bundle install`コマンドによってインストールされます。 TIP: `rails new --help`を実行すると、Railsアプリケーションビルダで使えるすべてのコマンドラインオプションを表示できます。 @@ -124,7 +124,7 @@ $ cd blog | ----------- | ------- | |app/|このディレクトリには、アプリケーションのコントローラ、モデル、ビュー、ヘルパー、メーラー、ジョブ、そしてアセットが置かれます。以後、本ガイドでは基本的にこのディレクトリを中心に説明を行います。| |bin/|このディレクトリには、アプリケーションを起動する`rails`スクリプトが置かれます。セットアップ・アップデート・デプロイに使うスクリプトファイルもここに置けます。 -|config/|このディレクトリには、アプリケーションの各種設定ファイル(ルーティング、データベースなど)が置かれます。詳しくは[Rails アプリケーションの設定項目](configuring.html) を参照してください。| +|config/|このディレクトリには、アプリケーションの各種設定ファイル(ルーティング、データベースなど)が置かれます。詳しくは[Rails アプリケーションの設定項目](configuring.html)を参照してください。| |config.ru|アプリケーションの起動に使われるRackベースのサーバー用のRack設定ファイルです。Rackについて詳しくは、[RackのWebサイト](https://rack.github.io/)を参照してください。| |db/|このディレクトリには、現在のデータベーススキーマと、データベースマイグレーションファイルが置かれます。| |Dockerfile|Dockerの設定ファイルです。| @@ -162,7 +162,7 @@ TIP: Windowsの場合は、`bin`フォルダの下にあるスクリプトをRub TIP: JavaScriptアセットの圧縮にはJavaScriptランタイムが必要です。JavaScriptランタイムが環境にない場合は、起動時に`execjs`エラーが発生します。macOSやWindowsにはJavaScriptランタイムが同梱されています。`therubyrhino`はJRubyユーザー向けに推奨されているランタイムであり、JRuby環境下ではデフォルトでアプリケーションの`Gemfile`に追加されます。サポートされているランタイムについて詳しくは[ExecJS](https://github.com/sstephenson/execjs#readme)を参照してください。 -Railsで起動されるWebサーバーは、Railsにデフォルトで付属している[Puma](http://puma.io/)です。Webアプリケーションが実際に動作しているところを確認するには、ブラウザを開いて [http://localhost:3000](http://localhost:3000) を表示してください。以下のようなRailsのデフォルト情報ページが表示されます。 +Railsで起動されるWebサーバーは、Railsにデフォルトで付属している[Puma](http://puma.io/)です。Webアプリケーションが実際に動作しているところを確認するには、ブラウザを開いて[http://localhost:3000](http://localhost:3000)を表示してください。以下のようなRailsのデフォルト情報ページが表示されます。 ![Rails起動ページのスクリーンショット](images/getting_started/rails_welcome.png) @@ -174,7 +174,7 @@ Railsの起動ページは、新しいRailsアプリケーションの「スモ Railsで「Hello」と表示するには、少なくとも「**ルーティング**」「**コントローラ**」「**ビュー**」が必要です。ルーティングは、リクエストをどのコントローラに振り分けるかを決定します。コントローラは、アプリケーションに対する特定のリクエストを受け取って処理します。コントローラの *アクション* は、リクエストを扱うのに必要な処理を実行します。ビューは、データを好みの書式で表示します。 -実装の面から見れば、ルーティングはRubyの[DSL(Domain-Specific Language)](https://ja.wikipedia.org/wiki/ドメイン固有言語) で記述されたルールです。コントローラはRubyのクラスで、そのクラスのpublicメソッドがアクションです。ビューはテンプレートで、多くの場合HTMLの中にRubyコードも含んでいます。 +実装の面から見れば、ルーティングはRubyの[DSL(Domain-Specific Language)](https://ja.wikipedia.org/wiki/ドメイン固有言語)で記述されたルールです。コントローラはRubyのクラスで、そのクラスのpublicメソッドがアクションです。ビューはテンプレートで、多くの場合HTMLの中にRubyコードも含んでいます。 それではルーティングを1個追加してみましょう。`config/routes.rb`を開き、`Rails.application.routes.draw`ブロックの冒頭に以下を書きます。 @@ -437,7 +437,7 @@ end ここでは、`<% %>`と`<%= %>`という2種類のERBタグが使われています。`<% %>`タグは「この中のRubyコードを評価する」という意味です。`<%= %>`タグは「この中のRubyコードを評価し、返された値を出力する」という意味です。 これらのERBタグの中には、通常のRubyプログラムで書けるコードなら何でも書けますが、読みやすさのため、ERBタグにはなるべく短いコードを書く方がよいでしょう。 -上のコードでは、`@articles.each`が返す値は画面に出力したくないので`<% %>` で囲んでいますが、(各記事の)`article.title` が返す値は画面に出力したいので`<%= %>` で囲んでいます。 +上のコードでは、`@articles.each`が返す値は画面に出力したくないので`<% %>`で囲んでいますが、(各記事の)`article.title`が返す値は画面に出力したいので`<%= %>`で囲んでいます。 ブラウザでを開くと最終的な結果を確認できます(`bin/rails server`を実行しておくことをお忘れなく)。このときの動作は以下のようになります。 @@ -683,7 +683,7 @@ form_helpers.html)を参照してください。 そこで、さまざまな値を個別に渡すのではなく、それらの値を含む1個のハッシュを渡します。しかしその場合も、ハッシュ内でどのような値が許されているかを厳密に指定しなければなりません。これを怠ると、悪意のあるユーザーがブラウザ側でフィールドをこっそり追加して、機密データを上書きする可能性が生じるので危険です。ただし実際には、`params[:article]`をフィルタなしで`Article.new`に直接渡すと、Railsが`ForbiddenAttributesError`エラーを出してこの問題を警告するようになっています。そこで、Railsの**Strong Parameters**という機能を用いて`params`をフィルタすることにします。ここで言うstrongとは、`params`を[強く型付けする](https://en.wikipedia.org/wiki/Strong_and_weak_typing)(strong typing)とお考えください。 -それでは、`app/controllers/articles_controller.rb`の末尾に `article_params`というprivateメソッドを追加し、`params`をフィルタしましょう。さらに、`create`アクションでこのメソッドを使うように変更します。 +それでは、`app/controllers/articles_controller.rb`の末尾に`article_params`というprivateメソッドを追加し、`params`をフィルタしましょう。さらに、`create`アクションでこのメソッドを使うように変更します。 ```ruby class ArticlesController < ApplicationController @@ -722,7 +722,7 @@ TIP: Strong Parametersについて詳しくは、[Action Controller の概要 § #### バリデーションとエラーメッセージの表示 -これまで見てきたように、リソースの作成は単独のステップではなく、複数のステップで構成されています。その中には、無効なユーザー入力を適切に処理することも含まれます。Railsには、無効なユーザー入力を処理するために**バリデーション**(validation: 検証)という機能が用意されています。バリデーションとは、モデルオブジェクトを保存する前に自動的にチェックするルールのことです。チェックに失敗した場合は保存を中止し、モデルオブジェクトの `errors` 属性に適切なエラーメッセージが追加されます。 +これまで見てきたように、リソースの作成は単独のステップではなく、複数のステップで構成されています。その中には、無効なユーザー入力を適切に処理することも含まれます。Railsには、無効なユーザー入力を処理するために**バリデーション**(validation: 検証)という機能が用意されています。バリデーションとは、モデルオブジェクトを保存する前に自動的にチェックするルールのことです。チェックに失敗した場合は保存を中止し、モデルオブジェクトの`errors`属性に適切なエラーメッセージが追加されます。 それでは、`app/models/article.rb`モデルにバリデーションをいくつか追加してみましょう。 @@ -876,7 +876,7 @@ end `edit`で使うフォームの見た目は、`new`で使うフォームの見た目と同じになりそうです。それどころか、Railsのフォームビルダーとリソースフルルーティングのおかげで、コードすら同じになります。フォームビルダーは、モデルオブジェクトが既に保存されている場合は`edit`用のフォームを、モデルオブジェクトが保存されていない場合は`new`用のフォームを自動的に構成するので、状況に応じて適切なリクエストを行えます。 -どちらのフォームにも同じコードが使われているので、**パーシャル**(partial: 部分テンプレートとも呼ばれます)と呼ばれる共有ビューにまとめることにします。以下の内容で `app/views/articles/_form.html.erb` を作成してみましょう。 +どちらのフォームにも同じコードが使われているので、**パーシャル**(partial: 部分テンプレートとも呼ばれます)と呼ばれる共有ビューにまとめることにします。以下の内容で`app/views/articles/_form.html.erb`を作成してみましょう。 ```html+erb <%= form_with model: article do |form| %> @@ -904,7 +904,7 @@ end 上記のコードは`app/views/articles/new.html.erb`のフォームと同じですが、すべての`@article`を`article`に置き換えてある点にご注目ください。パーシャルのコードは共有されるので、特定のインスタンス変数に依存しないようにするのがベストプラクティスです(コントローラのアクションで設定されるインスタンス変数に依存すると、他で使い回すときに不都合が生じます)。代わりに、記事をローカル変数としてパーシャルに渡します。 -[`render`]( https://api.rubyonrails.org/classes/ActionView/Helpers/RenderingHelper.html#method-i-render) でパーシャルを使うために、`app/views/articles/new.html.erb`を以下の内容で置き換えてみましょう。 +[`render`]( https://api.rubyonrails.org/classes/ActionView/Helpers/RenderingHelper.html#method-i-render)でパーシャルを使うために、`app/views/articles/new.html.erb`を以下の内容で置き換えてみましょう。 ```html+erb

New Article

@@ -926,7 +926,7 @@ TIP: パーシャルについて詳しくは、[レイアウトとレンダリ #### 仕上げ -これで、記事のeditページ(など)にアクセスして記事を更新できるようになりました。最後に、`app/views/articles/show.html.erb` の末尾に以下のようなeditページへのリンクを追加してみましょう。 +これで、記事のeditページ(など)にアクセスして記事を更新できるようになりました。最後に、`app/views/articles/show.html.erb`の末尾に以下のようなeditページへのリンクを追加してみましょう。 ```html+erb

<%= @article.title %>

@@ -940,7 +940,7 @@ TIP: パーシャルについて詳しくは、[レイアウトとレンダリ ### 記事を削除する -いよいよCRUDのDまで到達しました。リソースの削除はリソースの作成や更新よりもシンプルなので、必要なのは削除用のルーティングとコントローラのアクションだけです。削除用のルーティングは、`DELETE /articles/:id`リクエストを`ArticlesController`の `destroy`アクションに対応付けます。 +いよいよCRUDのDまで到達しました。リソースの削除はリソースの作成や更新よりもシンプルなので、必要なのは削除用のルーティングとコントローラのアクションだけです。削除用のルーティングは、`DELETE /articles/:id`リクエストを`ArticlesController`の`destroy`アクションに対応付けます。 それでは、`app/controllers/articles_controller.rb`の`update`アクションの下に典型的な`destroy`アクションを追加してみましょう。 @@ -1000,7 +1000,7 @@ end rootパスにリダイレクトすることに決めたのは、そこが記事へのメインのアクセスポイントだからです。しかし状況によっては、たとえば`articles_path`にリダイレクトすることもあります。 -それでは、`app/views/articles/show.html.erb` の下部に削除用ボタンを追加して、ページの記事を削除できるようにしましょう。 +それでは、`app/views/articles/show.html.erb`の下部に削除用ボタンを追加して、ページの記事を削除できるようにしましょう。 ```html+erb

<%= @article.title %>

@@ -1018,7 +1018,7 @@ rootパスにリダイレクトすることに決めたのは、そこが記事 上のコードでは、`data`オプションを使って"Destroy"リンクのHTML属性`data-turbo-method`と`data-turbo-confirm`を設定しています。どちらの属性も、新しいRailsアプリケーションにデフォルトで含まれている[Turbo](https://turbo.hotwired.dev/)にフックします。 `data-turbo-method="delete"`を指定すると、`GET`リクエストではなく`DELETE`リクエストが送信されます。 -`data-turbo-confirm="Are you sure?"` を指定すると、リンクをクリックしたときに「Are you sure?」ダイアログが表示され、ユーザーが「キャンセル」をクリックするとリクエストを中止します。 +`data-turbo-confirm="Are you sure?"`を指定すると、リンクをクリックしたときに「Are you sure?」ダイアログが表示され、ユーザーが「キャンセル」をクリックするとリクエストを中止します。 以上でできあがりです!記事のリスト表示も、個別表示も、作成も、更新も、削除も思いのままです。CRUDバンザイ! @@ -1029,7 +1029,7 @@ rootパスにリダイレクトすることに決めたのは、そこが記事 ### 第2のモデルを追加する -先ほど`Article`モデルの作成に使ったのと同じジェネレーターを見てみましょう。今回は、`Article`モデルへの参照を保持する`Comment` モデルを作成します。ターミナルで以下のコマンドを実行します。 +先ほど`Article`モデルの作成に使ったのと同じジェネレーターを見てみましょう。今回は、`Article`モデルへの参照を保持する`Comment`モデルを作成します。ターミナルで以下のコマンドを実行します。 ```bash $ bin/rails generate model Comment commenter:string body:text article:references @@ -1361,7 +1361,7 @@ end Railsの「concern(関心事)」とは、大規模なコントローラやモデルの理解や管理を楽にする手法の1つです。複数のモデル(またはコントローラ)が同じ関心を共有していれば、concernを介して再利用できるというメリットもあります。concernはRubyの「モジュール」で実装され、モデルやコントローラが担当する機能のうち明確に定義された部分を表すメソッドをそのモジュールに含めます。なおモジュールは他の言語では「ミックスイン」と呼ばれることもよくあります。 -concernは、コントローラやモデルで普通のモジュールと同じように使えます。`rails new blog` でアプリを作成すると、`app/`内に以下の2つのconcernsフォルダも作成されます。 +concernは、コントローラやモデルで普通のモジュールと同じように使えます。`rails new blog`でアプリを作成すると、`app/`内に以下の2つのconcernsフォルダも作成されます。 ``` app/controllers/concerns diff --git a/guides/source/ja/getting_started_with_devcontainer.md b/guides/source/ja/getting_started_with_devcontainer.md index 1a2f0cf96c9..51f21c952df 100644 --- a/guides/source/ja/getting_started_with_devcontainer.md +++ b/guides/source/ja/getting_started_with_devcontainer.md @@ -27,7 +27,7 @@ Dockerのインストールが完了したら、Dockerアプリケーション ### VS Codeをインストールする -Visual Studio Code(VS Code)は、Microsoftによって開発されたオープンソースのコードエディタです。VS Codeの dev container拡張機能を利用することで、コンテナ内の(またはコンテナにマウントされた)フォルダを開けばVisual Studio Codeの機能をすべて利用できるようになります。プロジェクトフォルダ内の[devcontainer.json](https://code.visualstudio.com/docs/devcontainers/containers#_create-a-devcontainerjson-file)ファイルは、明確に定義されたツールや、ランタイムスタックを用いてdev containerにアクセス(または作成)する方法をVS Codeに指示します。これにより、コンテナを直ちに起動して、ターミナルコマンドへのアクセスやコードのデバッグを行うことも、拡張機能の利用も可能になります。 +Visual Studio Code(VS Code)は、Microsoftによって開発されたオープンソースのコードエディタです。VS Codeのdev container拡張機能を利用することで、コンテナ内の(またはコンテナにマウントされた)フォルダを開けばVisual Studio Codeの機能をすべて利用できるようになります。プロジェクトフォルダ内の[devcontainer.json](https://code.visualstudio.com/docs/devcontainers/containers#_create-a-devcontainerjson-file)ファイルは、明確に定義されたツールや、ランタイムスタックを用いてdev containerにアクセス(または作成)する方法をVS Codeに指示します。これにより、コンテナを直ちに起動して、ターミナルコマンドへのアクセスやコードのデバッグを行うことも、拡張機能の利用も可能になります。 VS Codeは、[公式Webサイト](https://code.visualstudio.com/)からダウンロードしてインストールできます。 @@ -44,7 +44,7 @@ dev container拡張機能は、[マーケットプレイス](https://marketplace Railsにはジェネレーターと呼ばれる多数のスクリプトが付属しており、特定のタスクの作業を開始するのに必要なものをすべて生成することで開発作業を容易にするように設計されています。新規アプリケーションを作成するジェネレーターもその1つで、新しいRailsアプリケーションの基本部分はこのジェネレータが提供するので、自分でアプリケーションを作成する必要はありません。`rails-new`ツールは、新しいRailsアプリケーションを作成するときにこのジェネレーターを利用します。 -NOTE: 以下の例では、UNIX系 OSのターミナルプロンプトを`$`で表していますが、環境によっては他のプロンプトが表示されるようにカスタマイズされている可能性もあります。 +NOTE: 以下の例では、UNIX系OSのターミナルプロンプトを`$`で表していますが、環境によっては他のプロンプトが表示されるようにカスタマイズされている可能性もあります。 `rails-new`でアプリを生成するには、ターミナルを開き、ファイルを作成する権限があるディレクトリに移動して、以下のコマンドを実行します。 diff --git a/guides/source/ja/i18n.md b/guides/source/ja/i18n.md index 28728bd454f..e7bf91e65c0 100644 --- a/guides/source/ja/i18n.md +++ b/guides/source/ja/i18n.md @@ -3,7 +3,7 @@ Rails 国際化(I18n)API RubyのI18n(国際化・多言語化: **internationalization**の略)gemはRuby on Rails 2.2以降からRailsに同梱されています。このgemは、アプリケーションの文言を英語以外の**別の1つの言語に翻訳**する機能や、**多言語サポート**機能を簡単かつ拡張可能な方式で導入するためのフレームワークを提供します。 -アプリケーションの「国際化」プロセスといえば、使われるすべての文言やロケール固有の要素 (日付や通貨フォーマットなど) の抽象化までの作業を指すのが普通です。一方、「ローカライズ(localization)」とは、具体的な翻訳方法を提供したり、そのためのフォーマットを提供したりすることを指します。[^(1]) +アプリケーションの「国際化」プロセスといえば、使われるすべての文言やロケール固有の要素(日付や通貨フォーマットなど)の抽象化までの作業を指すのが普通です。一方、「ローカライズ(localization)」とは、具体的な翻訳方法を提供したり、そのためのフォーマットを提供したりすることを指します。[^(1]) Railsアプリケーションを**国際化する**プロセスでは、以下を行う必要があります。 @@ -104,14 +104,14 @@ en: hello: "Hello world" ``` -上の例は、「`:en`というロケールでは、"hello"というキーは"Hello world"という文字列に対応付けられる」という意味です。Rails内部の文字列はすべてこのように国際化されています。具体例については、Active Modelのバリデーションメッセージ一覧([`activemodel/lib/active_model/locale/en.yml`][activemodel en.yml]ファイル)やActive Supportの日付時刻フォーマット一覧([`activesupport/lib/active_support/locale/en.yml`][activesupport en.yml] ファイル)を参照してください。デフォルトの(シンプルな)バックエンドの訳文は、YAMLや標準のRubyハッシュに保存できます。 +上の例は、「`:en`というロケールでは、"hello"というキーは"Hello world"という文字列に対応付けられる」という意味です。Rails内部の文字列はすべてこのように国際化されています。具体例については、Active Modelのバリデーションメッセージ一覧([`activemodel/lib/active_model/locale/en.yml`][activemodel en.yml]ファイル)やActive Supportの日付時刻フォーマット一覧([`activesupport/lib/active_support/locale/en.yml`][activesupport en.yml]ファイル)を参照してください。デフォルトの(シンプルな)バックエンドの訳文は、YAMLや標準のRubyハッシュに保存できます。 I18nライブラリでは、**English**を**デフォルトのロケール**として扱います。デフォルトのロケールに他の言語を指定しなかった場合は、訳文の検索に`:en`が使われます。 NOTE: [いくつかの議論][discussions]を経た結果、RailsのI18nライブラリではロケールキーの扱いについて **実用に則したアプローチ** を採用しています。つまり、`:en`や`:pl`のようないわゆる**ロケール**(言語)部分のみをロケールキーとして採用しました。`:en-US`や`:en-GB`のような、言語と地域(あるいは方言)を分離した表記法は、ロケールキーとしては使われていません。 実際、国際化されたアプリケーションの多くは、`:cs`、`:th`、`:es`(それぞれチェコ語、タイ語、スペイン語)のような言語部分のみをロケール表記として採用しています。しかし、同じ言語グループに属していても、地域による違いが重要になることもあります。端的な例として、`:en-US`の通貨記号は`$`(ドル)ですが、`:en-GB`の通貨記号は`£`(ポンド)です。上のように、このような地域ごとの違いを言語から分離することについては何も問題はありません。この場合に必要なのは、"English - United Kingdom"というロケールを`:en-GB`辞書に追加することだけです。 -**訳文読み込みパス** (`I18n.load_path`) はファイルへのパスの配列であり、自動的に読み込まれます。このパスを設定することで、訳文のディレクトリ構造やファイル命名スキームをカスタマイズできます。 +**訳文読み込みパス**(`I18n.load_path`)はファイルへのパスの配列であり、自動的に読み込まれます。このパスを設定することで、訳文のディレクトリ構造やファイル命名スキームをカスタマイズできます。 NOTE: I18のバックエンドは、訳文が初めて参照されるときに遅延読み込みを行います。これにより、訳文を既に公開した後でもバックエンドを他のものに差し替えることができます。 @@ -200,7 +200,7 @@ end ほぼ同じ方法で、**サブドメイン**を使ってロケールを設定することもできます。 ```ruby -# リクエストのサブドメインからロケールを取り出す (http://it.application.local:3000のような形式) +# リクエストのサブドメインからロケールを取り出す(http://it.application.local:3000のような形式) # この動作をローカルPCで行なうためには # /etc/hostsファイルに以下のように記述する必要がある # 127.0.0.1 it.application.local @@ -246,7 +246,7 @@ end これで要件は満たされるでしょう。これによってURLが読みにくくなるようなことはほとんどありませんが、ロケール情報がURLの末尾にぶらさがることになるのも確かです。さらにアプリケーションの設計面から見れば、ロケールはアプリケーションドメインの他の部分よりも構造上の上位に位置するのだから、ロケール情報もURLの上位に置くべきという考え方もあります。 -その場合は、URLを`http://www.example.com/en/books`(英語ロケールを読み込む)や `http://www.example.com/nl/books`(オランダ語ロケールを読み込む)のような形式にするとよいでしょう。これは、"`default_url_options`の設定をオーバーライドする" 手法で達成できます。以下のようにルーティングで[`scope`][scope] 設定する必要があります。 +その場合は、URLを`http://www.example.com/en/books`(英語ロケールを読み込む)や`http://www.example.com/nl/books`(オランダ語ロケールを読み込む)のような形式にするとよいでしょう。これは、"`default_url_options`の設定をオーバーライドする" 手法で達成できます。以下のようにルーティングで[`scope`][scope]を設定する必要があります。 ```ruby # config/routes.rb @@ -416,7 +416,7 @@ end ![rails i18n demo translation missing](images/i18n/demo_translation_missing.png) -NOTE: Railsは`t` (`translate`) ヘルパーメソッドを自動的にビューに追加するので、`I18n.t`のように書かずに済みます。さらに、このヘルパーは訳文が見つからない場合にエラーメッセージを `` でラップして表示してくれます。 +NOTE: Railsは`t`(`translate`)ヘルパーメソッドを自動的にビューに追加するので、`I18n.t`のように書かずに済みます。さらに、このヘルパーは訳文が見つからない場合にエラーメッセージを``でラップして表示してくれます。 ### 訳文を与えて文字列を国際化する @@ -440,7 +440,7 @@ pirate: ![rails i18n demo translated to English](images/i18n/demo_translated_en.png) -URLを変更して、海賊語のロケールを渡すと (`http://localhost:3000?locale=pirate`)、以下のように表示されます。 +URLを変更して、海賊語のロケールを渡すと(`http://localhost:3000?locale=pirate`)、以下のように表示されます。 ![rails i18n demo translated to pirate](images/i18n/demo_translated_pirate.png) @@ -711,7 +711,7 @@ I18n.t "welcome", deep_interpolation: true, app_name: "book store" #### 遅延探索 -Railsには、 ロケールを「ビュー」内部で参照するときに便利な方法が実装されています。以下のような辞書があるとします。 +Railsには、ロケールを「ビュー」内部で参照するときに便利な方法が実装されています。以下のような辞書があるとします。 ```yaml es: @@ -750,7 +750,7 @@ end ### 複数形化 -英語を含む多くの言語では、ある名詞には単数形が1種類のみ、複数形も一種類のみがあります(例: "1 message"と"2 messages")。その他の言語([アラビア語][Ar]、[日本語][Ja]、[ロシア語][Ru] など多数)では文法がさまざまに異なっており、[複数形][plural]の数が英語より多いものもあれば少ないものもあります。これらに対応するため、I18n APIでも柔軟性の高い複数形化機能を備えています。 +英語を含む多くの言語では、ある名詞には単数形が1種類のみ、複数形も一種類のみがあります(例: "1 message"と"2 messages")。その他の言語([アラビア語][Ar]、[日本語][Ja]、[ロシア語][Ru]など多数)では文法がさまざまに異なっており、[複数形][plural]の数が英語より多いものもあれば少ないものもあります。これらに対応するため、I18n APIでも柔軟性の高い複数形化機能を備えています。 `:count`という式展開変数には特殊な役割が与えられており、通常の訳文への式展開に使われるほかに、複数形化バックエンドによって定義される複数形化ルールに沿って適切な複数形を選択するのにも使われます。デフォルトでは、英語の複数形化ルールのみが適用されます。 @@ -1164,10 +1164,10 @@ I18n APIでは以下の例外が定義されています。これらの例外は | 例外 | 理由 | |---|---| | `I18n::MissingTranslationData` | リクエストされたキーに対応する訳文が見つからない | -| `I18n::InvalidLocale` | I18n.localeに設定されたロケールが無効 (`nil`など) | +| `I18n::InvalidLocale` | I18n.localeに設定されたロケールが無効(`nil`など)| | `I18n::InvalidPluralizationData` | countオプションが渡されたが訳文データが複数形化に対応していない | | `I18n::MissingInterpolationArgument` | 訳文側で必要な式展開用の引数が渡されなかった | -| `I18n::ReservedInterpolationKey` | 訳文に含まれる式展開の変数名に予約済みの変数名(`scope`か`default`)が使われている | +| `I18n::ReservedInterpolationKey` | 訳文に含まれる式展開の変数名に予約済みの変数名(`scope`か`default`)が使われている | | `I18n::UnknownFileType` | `I18n.load_path`に追加されたファイル種別をバックエンドが認識できない | #### `I18n::MissingTranslationData`の処理方法をカスタマイズする @@ -1246,7 +1246,7 @@ Ruby on Rails 2.2から導入されたI18nサポートは、現在も進化し 脚注 --------- -[^(1]:) あるいは、[Wikipedia][wiki i18n] によれば「国際化とは、技術上の実装変更を伴わずに多数の言語や地域への適合を行なうための、ソフトウェアアプリケーションの設計プロセスである。ローカライズとは、ロケール固有のコンポーネントを追加したりテキストを翻訳したりすることによってソフトウェアを特定の言語や地域に適合させるプロセスである。」となっています。 +[^(1]:) あるいは、[Wikipedia][wiki i18n]によれば「国際化とは、技術上の実装変更を伴わずに多数の言語や地域への適合を行なうための、ソフトウェアアプリケーションの設計プロセスである。ローカライズとは、ロケール固有のコンポーネントを追加したりテキストを翻訳したりすることによってソフトウェアを特定の言語や地域に適合させるプロセスである。」となっています。 [^(2]:) 他のバックエンドを使う場合、別のフォーマットが利用できる可能性もありますが、別のフォーマットが必須となる可能性もあります。たとえば、GetTextバックエンドはGetTextファイルを読み込めます。 diff --git a/guides/source/ja/layouts_and_rendering.md b/guides/source/ja/layouts_and_rendering.md index 3d14a126626..3f6ae8d503e 100644 --- a/guides/source/ja/layouts_and_rendering.md +++ b/guides/source/ja/layouts_and_rendering.md @@ -840,9 +840,9 @@ WARNING: これらのアセットタグヘルパーは、指定の場所にア [`javascript_include_tag`][]ヘルパーは、指定されたソースごとにHTML ` ``` -www.attacker.com サイト上のログファイルには以下のように出力されます。 +www.attacker.comサイト上のログファイルには以下のように出力されます。 ``` GET http://www.attacker.com/_app_session=836c1c25278e5b321d6bea4f19cb57e2 @@ -976,7 +976,7 @@ Content-Type: text/html 安全でないクエリ生成 ----------------------- -Rackがクエリパラメータを解析する方法とActive Recordがパラメータを解釈する方法の組み合わせに問題があり、`where`句が本来の意図に反して`IS NULL`のデータベースクエリを生成してしまう可能性がありました。[CVE-2012-2660](https://groups.google.com/forum/#!searchin/rubyonrails-security/deep_munge/rubyonrails-security/8SA-M3as7A8/Mr9fi9X4kNgJ)、[CVE-2012-2694](https://groups.google.com/forum/#!searchin/rubyonrails-security/deep_munge/rubyonrails-security/jILZ34tAHF4/7x0hLH-o0-IJ) および [CVE-2013-0155](https://groups.google.com/forum/#!searchin/rubyonrails-security/CVE-2012-2660/rubyonrails-security/c7jT-EeN9eI/L0u4e87zYGMJ)のセキュリティ問題に対応するため、Railsの動作をデフォルトでセキュアにする`deep_munge`メソッドが導入されました。 +Rackがクエリパラメータを解析する方法とActive Recordがパラメータを解釈する方法の組み合わせに問題があり、`where`句が本来の意図に反して`IS NULL`のデータベースクエリを生成してしまう可能性がありました。[CVE-2012-2660](https://groups.google.com/forum/#!searchin/rubyonrails-security/deep_munge/rubyonrails-security/8SA-M3as7A8/Mr9fi9X4kNgJ)、[CVE-2012-2694](https://groups.google.com/forum/#!searchin/rubyonrails-security/deep_munge/rubyonrails-security/jILZ34tAHF4/7x0hLH-o0-IJ)および[CVE-2013-0155](https://groups.google.com/forum/#!searchin/rubyonrails-security/CVE-2012-2660/rubyonrails-security/c7jT-EeN9eI/L0u4e87zYGMJ)のセキュリティ問題に対応するため、Railsの動作をデフォルトでセキュアにする`deep_munge`メソッドが導入されました。 以下は、`deep_munge`が実行されなかった場合に攻撃者に利用される可能性のある脆弱なコードの例です。 @@ -1016,7 +1016,7 @@ HTTPセキュリティヘッダー #### `X-Frame-Options` -[`X-Frame-Options`][]ヘッダーは、ブラウザがページを ``、`