Open remotelocal opened 9 years ago
RailsCasts (Ryan Bates) : 極めて質の高い (ほぼ) 無料のスクリーンキャスト
PeepCode: 質の高い商用のスクリーンキャスト
Code School: プログラミングを対話的に学習できるコース
Rails Guides: トピック毎に分類された最新の Rails リファレンス (日本語版: Railsガイド)
RailsCasts (Ryan Bates): さっきも RailsCasts を紹介しましたっけ?そのぐらい RailsCasts はお勧めです。
Ruby Mineでrails チュートリアルをやるための設定 https://github.com/perfectionist/sample_project/wiki
~/.gemrc
install: --no-rdoc --no-ri
update: --no-rdoc --no-ri
gem installの際ドキュメントを無視できる
あっ でもそしたらDashでgemのダウンロードできなくなっちゃうかも。
Gemfileについて
=と書くとbundle installの実行時に必ずアップグレードが行われますが、~> 4.0.0と書くとマイナーなアップグレードしか行われないことになります
gitのalias
git config --global alias.co checkout
手順の最後として、Gitのコミットメッセージを入力するときに使用するエディタを設定できます。Sublime Text、TextMate、gVim、MacVimなどのGUIエディタを使用する場合、シェルから離れずシェル内で起動するようフラグを付けてください16。
$ git config --global core.editor "subl -w"
"subl -w" の部分は、TextMateの場合は "mate -w"、gVimの場合は"gvim -f"、MacVimの場合は"mvim -f" にそれぞれ置き換えます。
rails_12factor gemが追加されている点に注目してください。これは画像やスタイルシートなどの静的なアセットを提供するためにHerokuで使用されます。
--without productionオプションを追加すると、 本番用のgem (この場合はpgとrails_12factor) はローカルの環境にはインストールされません (Bundlerでreadlineエラーが発生した場合は、Gemfileにgem ’rb-readline’を追加してください)。上で追加したgemは本番環境のみで使用するためのものなので、このコマンドを今実行してもgemはローカルに追加されません。このコマンドを実行するのは、後の本番環境に備えてGemfile.lockを更新し、pg gemとrails_12factor gem、Rubyバージョンの指定を含めておく必要があるためです。以下を実行して変更をコミットできます。
第一章読破。30~40分くらいかな?
(第1章でも書きましたが、Bundlerでreadlineエラーが発生した場合は、Gemfileにgem ’rb-readline’を追加してください)。
現在のGemfileに対応するバージョンのRakeが確実に実行されるようにするために、bundle execを使用してrakeを実行します
rakeに-T dbオプションを付けて実行すると他にもさまざまなデータベースタスクが用意されているのがわかります。
$ bundle exec rake -T db
rakeで実行可能なタスクをすべて表示するには以下を実行します。
$ bundle exec rake -T
2章中断します。(10分ほど読みました。)リスト2.3 Usersコントローラの骨格。まで。
@記号で始まる変数はRubyではインスタンス変数と呼ばれます
2章読破。20分。
RSpecの学習方法として。 Code SchoolのRSpecコースの履修を検討してみるのもよいでしょう
Railsでセッション変数の暗号化に使用するための、いわゆる秘密トークン (secret token) を必ず更新することが重要です
config/initializers/secret_token.rb
# Be sure to restart your server when you modify this file.
# Your secret key is used for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
# You can use `rake secret` to generate a secure secret key.
# Make sure your secret_key_base is kept private
# if you're sharing your code publicly.
require 'securerandom'
def secure_token
token_file = Rails.root.join('.secret')
if File.exist?(token_file)
# Use the existing token.
File.read(token_file).chomp
else
# Generate a new token and store it in token_file.
token = SecureRandom.hex(64)
File.write(token_file, token)
token
end
end
SampleApp::Application.config.secret_key_base = secure_token
heroku logs
Railsのgenerateスクリプトでは、 underscoreメソッドを使ってキャメルケースをスネークケースに変換しています
結合テスト (RSpec では リクエストspec と呼んでいます) は、ユーザーがアプリケーションを使う際の一連のアクションをシミュレーションします。結合テストは、アプリケーションの各ページが正常に動作するかどうかをテストしてくれる強力なツールです。手動でブラウザを操作してテストする必要がなくなり、Capybaraを併用すれば自然言語 (英語) に近い文法でテストを記述する事もできます (Capybara以外にも、Cucumberという振舞駆動開発用ツールが有名です。詳細については8.3で紹介します)。
与えられた課題の解決法に今ひとつ確信が持てないときは、(テストを書かずに) まず試しにアプリケーションコードだけを書いてみて、どんな解決方法があるのか模索してみる方が良い結果を得られることもあります (エクストリーム・プログラミング (Extreme Programming) という開発手法では、この模索段階をスパイク (spike) と呼んでいます)。そして解決策が明確になった段階で、テスト駆動開発でコードを清書するという方法もありえます。
結合テストのジェネレータ
$ rails generate integration_test static_pages
invoke rspec
create spec/requests/static_pages_spec.rb
RSpec はダブルクォート (") で囲まれた文字列を無視しますので、
csrf_meta_tagsは、Web攻撃手法のひとつであるクロスサイトリクエストフォージェリー (cross-site request forgery: CSRF)を防ぐために使われるRailsのメソッドです。
3章の終盤でGuard、Sporkの言及があり、テストの機械があればこれを積極的に導入したい。 Guardは自動でRSPECを走らせるものでSporkはテストの高速化です。
3章読み終わり。多分40分くらいかな。
Railsチュートリアル を終えた後には「 Beginning Ruby」、「The Well-Grounded Rubyist」、「The Ruby Way」などの純粋なRubyについての本を読むことをお勧めします。
Railsコンソールでは、スタックから抜けるにはCtrl-C を押し、完全にコンソールを終了するにはCtrl-Dを押します。
Railsコンソールでは、スタックから抜けるにはCtrl-C を押し、完全にコンソールを終了するにはCtrl-Dを押します。
まじか。Setting.ymlが更新されない理由がここにあったな。
試してみたけど、やっぱりSettings.ymlの値は更新されなかったです。
attr_accessor :name, :email
ユーザー名とメールアドレスに対応するアトリビュートアクセサをそれぞれ作成します。このコードは、2.2.2でも説明したように、@nameおよび@emailインスタンス変数について、取り出し(get) と割り当て(set) を行う "ゲッター" と "セッター" というメソッドをそれぞれ作成します。
課題:Ruby API のオンラインマニュアルを見つけて、Hashクラスのmergeメソッドについて読んでみてください。
4章Done。40分くらいかな?
モックアップ (Webの文脈ではよく ワイヤーフレームと呼ばれます)
IE9以下に対応
!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
scssは同一要素をネストで表現できる。
#logo {
...
}
#logo:hover {
....
}
#logo {
.....
&:hover {
......
}
}
同じ色を繰り返し表現できるように、変数っぽくできます。
$lightGray: #999;
.
.
.
h2 {
.
.
.
color: $lightGray;
}
.
.
.
footer {
.
.
.
color: $lightGray;
}
実際、Bootstrapフレームワークでは、多くの色に対して変数名を定義しています。定義されている変数はBootstrapページの「LESS変数一覧」で参照することができます
LESSではアットマーク@を使用しているのに対して、Sassはドルマーク$を使っていることはすぐにわかります。話を戻して、Bootstrapの変数の一覧表を見ると、薄い灰色に対して以下の変数名が与えられることに気が付きます。
@grayLight: #999; これは、bootstrap-sassというgemを使えば、SCSSでも同様に$grayLightという変数が使えることを意味しています。先ほど定義した$lightGrayというカスタム変数に代わりに、用意された変数を使ってみましょう。
詳細なルーティングの扱いについてはRailsガイドの「Rails ルーティング」を参照することをお勧めします。 http://railsguides.jp/routing.html
path書式を使用する一般的な規約に従い、リダイレクトの場合のみurl書式を使用します。これは、HTTP標準では技術的にリダイレクト後にフルURLが要求されるためです
shared exampleを使うとテストが簡潔に書ける。こんな感じ。
shared_examples_for "all static pages" do
it { should have_content(heading) }
it { should have_title(full_title(page_title)) }
end
describe "Home page" do
before { visit root_path }
let(:heading) { 'Sample App' }
let(:page_title) { '' }
it_should_behave_like "all static pages"
it { should_not have_title('| Home') }
end
5章読破。いろいろ集中できなくてとぎれとぎれで1時間20分くらいはかかってしまったきがする。
ほとんどのマイグレーションが可逆です。これは、db:rollbackというRakeタスクで変更を取り消せることを意味します。これを“マイグレーションの取り消し (migrate down)”と呼びます。
Railsコンソールを使用してデータモデルを調べてみましょう。現時点ではデータベースを変更したくないので、コンソールをサンドボックスモードで起動します。
$ rails console --sandbox
Loading development environment in sandbox
Any modifications you make will be rolled back on exit
>>
環境を整えるためにテスト環境用データベースを作成するコマンドを実行するのはこれが初めてです。
$ bundle exec rake test:prepare
モデルの属性をテストすることは良い習慣です。なぜなら、モデルの属性についてテストをすることで、そのモデルが応答すべきメソッドの一覧が一目で分かるからです。
テストで使われているrespond_toメソッドは、Rubyのrespond_to?メソッドを暗黙的に使っています。respond_to?メソッドは、シンボルを1つ引数として受け取り、そのシンボルが表すメソッドまたは属性に対して、オブジェクトが応答する場合はtrueを返し、応答しない場合はfalseを返します。
コメントアウトし、失敗するテストを書き、そして検証のコメントアウトを解除することで、そのテストをパスさせられるかどうかを確認します。この手続きは、このような単純なテストでは、大げさで気取ったものに感じられるかもしれません。しかし著者はこれまでに、実際には見当違いなことをテストしている「単純な」テストを山ほど見てきました。テスト駆動開発を慎重に進めることは、結局は「私たちが正しい事項をテストしている」という自信を得る為の唯一の方法なのです。(上で紹介したコメントアウトのテクニックは、コードはあってもテストがどこにもないようなひどいアプリケーションを急いで救出するときにも役に立ちます)。
素晴らしい正規表現エディタであるRubular (図6.4) が必要不可欠です11。RubularのWebサイトは、正規表現を作るための美しく対話的なインターフェイスを持っています。また、手軽な正規表現のクイックリファレンスにもなります。Rubularのサイトをブラウザで開き、表6.1の表現をひとつずつ入力して結果を確かめながら正規表現を学ぶことをぜひともお勧めします。正規表現について学んだことがなくても、Rubularを使えば2〜3時間ほどで慣れることができます (注: リスト6.14の正規表現をRubularで使う場合、冒頭の\Aと末尾の\zの文字は含めないでください)。
読み終わったら次はこれがおすすめらしい。
最後に、Ruby on Railsチュートリアルを読み終えた経験豊富なプログラマの方には、さらに高度な話題を扱っている「The Well-Grounded Rubyist」(David A. Black 著) または「Eloquent Ruby」(Russ Olsen 著) をお勧めします。あるいは、トピック別に書かれている「The Ruby Way」(Hal Fulton 著) を読んでみるのも良いでしょう。