#contents ** Ruby on Railsとは何か? [#gf5a86ee] - Webアプリケーションフレームワーク - 公式サイト: http://rubyonrails.org/ - Railsガイド: http://guides.rubyonrails.org/ - 必要となる知識 -- Ruby -- SQLite -- Linux/vim -- html/css/javascript/jQuery ** 必要となるツール [#m20127c5] - Ruby - RubyGem - Rails - SQLite(Macでは標準でプリインストール) - 各バージョン確認 $ ruby -v ruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin10.0] $ rails -v Rails 2.3.14 $ gem -v 1.3.5 $ sqlite3 -version 3.6.12 ** MVCとは何か? [#p8756d5b] - Model:データに関するいろいろ - View:見た目に関するいろいろ - Controller:MとVをとりもつもの ** はじめてのRailsプロジェクト [#y1a8922d] + railsコマンドでプロジェクトを作成 + Webサーバーを起動・ブラウザで確認 + DB/Model/View/Controller/URL + 2に戻る $ mkdir railsprojects $ cd railsprojects/ $ rails new myapp create create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create config/initializers create config/locales create db create doc create lib create lib/tasks create log create public/images create public/javascripts create public/stylesheets create script/performance create test/fixtures create test/functional create test/integration create test/performance create test/unit create vendor create vendor/plugins create tmp/sessions create tmp/sockets create tmp/cache create tmp/pids create Rakefile create README create app/controllers/application_controller.rb create app/helpers/application_helper.rb create config/database.yml create config/routes.rb create config/locales/en.yml create db/seeds.rb create config/initializers/backtrace_silencers.rb create config/initializers/inflections.rb create config/initializers/mime_types.rb create config/initializers/new_rails_defaults.rb create config/initializers/session_store.rb create config/initializers/cookie_verification_secret.rb create config/environment.rb create config/boot.rb create config/environments/production.rb create config/environments/development.rb create config/environments/test.rb create script/about create script/console create script/dbconsole create script/destroy create script/generate create script/runner create script/server create script/plugin create script/performance/benchmarker create script/performance/profiler create test/test_helper.rb create test/performance/browsing_test.rb create public/404.html create public/422.html create public/500.html create public/index.html create public/favicon.ico create public/robots.txt create public/images/rails.png create public/javascripts/prototype.js create public/javascripts/effects.js create public/javascripts/dragdrop.js create public/javascripts/controls.js create public/javascripts/application.js create doc/README_FOR_APP create log/server.log create log/production.log create log/development.log create log/test.log ** ファイル構成をみていこう [#if707478] - appフォルダ:Model, View, Controller - config:設定ファイル - db:データベースに関するもの - Gemfile:必要なライブラリ一覧 ** Webサーバーを立ち上げよう [#z70cdede] - WEBrick(標準の開発用サーバー)の起動 $ cd myapp/ $ rails server => Booting WEBrick => Rails 3.2.9 application starting in development on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2012-12-29 19:11:47] INFO WEBrick 1.3.1 [2012-12-29 19:11:47] INFO ruby 1.9.2 (2012-04-20) [x86_64-darwin10.8.0] [2012-12-29 19:11:47] INFO WEBrick::HTTPServer#start: pid=22257 port=3000 - Rails 2.3.14の場合 &color(red){※ rails serverコマンド利用不可(MacOS 10.6.8 / ruby 1.8.7 / Rails 2.3.14)}; $ ruby script/server webrick => Booting WEBrick => Rails 2.3.14 application starting on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2012-12-29 16:19:53] INFO WEBrick 1.3.1 [2012-12-29 16:19:53] INFO ruby 1.8.7 (2012-02-08) [universal-darwin10.0] [2012-12-29 16:19:54] INFO WEBrick::HTTPServer#start: pid=412 port=3000 - ブラウザでの確認(ポート番号を3000に指定) http://localhost:3000 ** scaffoldを使ってみよう [#s57c2c53] - scaffold:簡易的にDB/Model/View/Controller/URLを設計・生成 $ rails generate scaffold User name:string email:string intro:text invoke active_record create db/migrate/20130101040551_create_users.rb create app/models/user.rb invoke test_unit create test/unit/user_test.rb create test/fixtures/users.yml invoke resource_route route resources :users invoke scaffold_controller create app/controllers/users_controller.rb invoke erb create app/views/users create app/views/users/index.html.erb create app/views/users/edit.html.erb create app/views/users/show.html.erb create app/views/users/new.html.erb create app/views/users/_form.html.erb invoke test_unit create test/functional/users_controller_test.rb invoke helper create app/helpers/users_helper.rb invoke test_unit create test/unit/helpers/users_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/users.js.coffee invoke scss create app/assets/stylesheets/users.css.scss invoke scss create app/assets/stylesheets/scaffolds.css.scss - myapp > app > controllers, models, viewsにユーザファイルが作成 - myapp > db > DBファイルとmigration(DBを設定する)ファイルが生成 - migrationファイルをDBに反映(下記コマンドでテーブル作成) $ rake db:migrate == CreateUsers: migrating ==================================================== -- create_table(:users) -> 0.0029s == CreateUsers: migrated (0.0042s) =========================================== - 有効なルーティング(URL)一覧を表示 $ rake routes users GET /users(.:format) users#index POST /users(.:format) users#create new_user GET /users/new(.:format) users#new edit_user GET /users/:id/edit(.:format) users#edit user GET /users/:id(.:format) users#show PUT /users/:id(.:format) users#update DELETE /users/:id(.:format) users#destroy - サーバー起動 $ rails server - ブラウザで確認(下記URLが有効) http://localhost:3000/users - Name, Email, Introにデータを入力・編集・削除可能になっていることを確認 ** ブログシステムを作ろう [#pf2e5f58] + Projectを作る(rails new ...) + Post(Model/DB/Controller/URL/View) + Comment(Model/DB/URL/Controller/View) *** Projectを作る [#x67e695e] - 「blog」プロジェクトを作成(--skip-bundleオプションは新規でgemをインストール不要の意味) $ rails new blog --skip-bundle - JavaScript Runtimeの導入 $ cd blog $ vim Gemfile # 下記をアンコメント gem 'therubyracer', :platforms => :ruby $ bundle install # therubyracerのインストール - therubyracerのインストール段階で下記エラー発生 $ bundle install Fetching gem metadata from https://rubygems.org/........... Fetching gem metadata from https://rubygems.org/.. Using rake (10.0.3) Using i18n (0.6.1) Using multi_json (1.5.0) Using activesupport (3.2.9) Using builder (3.0.4) Using activemodel (3.2.9) Using erubis (2.7.0) Using journey (1.0.4) Using rack (1.4.1) Using rack-cache (1.2) Using rack-test (0.6.2) Using hike (1.2.1) Using tilt (1.3.3) Using sprockets (2.2.2) Using actionpack (3.2.9) Using mime-types (1.19) Using polyglot (0.3.3) Using treetop (1.4.12) Using mail (2.4.4) Using actionmailer (3.2.9) Using arel (3.0.2) Using tzinfo (0.3.35) Using activerecord (3.2.9) Using activeresource (3.2.9) Using bundler (1.2.3) Using coffee-script-source (1.4.0) Using execjs (1.4.0) Using coffee-script (2.2.0) Using rack-ssl (1.3.2) Using json (1.7.6) Using rdoc (3.12) Using thor (0.16.0) Using railties (3.2.9) Using coffee-rails (3.2.2) Using jquery-rails (2.1.4) Using rails (3.2.9) Using ref (1.0.2) Using sass (3.2.4) Using sass-rails (3.2.5) Using sqlite3 (1.3.6) Installing therubyracer (0.11.0) with native extensions Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension. /Users/yujishimojo/.rvm/rubies/ruby-1.9.2-p320/bin/ruby extconf.rb checking for main() in -lpthread... yes checking for main() in -lobjc... yes checking for v8.h... no *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/Users/yujishimojo/.rvm/rubies/ruby-1.9.2-p320/bin/ruby --with-pthreadlib --without-pthreadlib --with-objclib --without-objclib --enable-debug --disable-debug --with-v8-dir --without-v8-dir --with-v8-include --without-v8-include=${v8-dir}/include --with-v8-lib --without-v8-lib=${v8-dir}/lib /Users/yujishimojo/.rvm/gems/ruby-1.9.2-p320/gems/therubyracer-0.11.0/ext/v8/build.rb:42:in `build_with_system_libv8': unable to locate libv8. Please see output for details (RuntimeError) from extconf.rb:22:in `<main>' The Ruby Racer requires libv8 ~> 3.11.8 to be present on your system in order to compile and link, but it could not be found. In order to resolve this, you will either need to manually install an appropriate libv8 and make sure that this build process can find it. If you install it into the standard system path, then it should just be picked up automatically. Otherwise, you'll have to pass some extra flags to the build process as a hint. If you don't want to bother with all that, there is a rubygem that will do all this for you. You can add following line to your Gemfile: gem 'libv8', '~> 3.11.8' We hope that helps, and we apologize, but now we have to push the eject button on this install. thanks, The Mgmt. Gem files will remain installed in /Users/yujishimojo/.rvm/gems/ruby-1.9.2-p320/gems/therubyracer-0.11.0 for inspection. Results logged to /Users/yujishimojo/.rvm/gems/ruby-1.9.2-p320/gems/therubyracer-0.11.0/ext/v8/gem_make.out An error occurred while installing therubyracer (0.11.0), and Bundler cannot continue. Make sure that `gem install therubyracer -v '0.11.0'` succeeds before bundling. - libv8が無いことが原因のため同ファイルをインストール $ gem install libv8 Fetching: libv8-3.11.8.4.gem (100%) Building native extensions. This could take a while... Successfully installed libv8-3.11.8.4 1 gem installed Installing ri documentation for libv8-3.11.8.4... Installing RDoc documentation for libv8-3.11.8.4... - libv8がインストールされていることを確認 $ gem list --local *** LOCAL GEMS *** actionmailer (3.2.9) actionpack (3.2.9) activemodel (3.2.9) activerecord (3.2.9) activeresource (3.2.9) activesupport (3.2.9) arel (3.0.2) builder (3.1.4, 3.0.4) bundler (1.2.3) coffee-rails (3.2.2) coffee-script (2.2.0) coffee-script-source (1.4.0) erubis (2.7.0) execjs (1.4.0) hike (1.2.1) i18n (0.6.1) journey (1.0.4) jquery-rails (2.1.4) json (1.7.6, 1.7.5) libv8 (3.11.8.4) mail (2.5.3, 2.4.4) mime-types (1.19) multi_json (1.5.0) polyglot (0.3.3) rack (1.4.1) rack-cache (1.2) rack-ssl (1.3.2) rack-test (0.6.2) rails (3.2.9) railties (3.2.9) rake (10.0.3) rdoc (3.12) ref (1.0.2) rubygems-bundler (1.1.0) rvm (1.11.3.5) sass (3.2.4) sass-rails (3.2.5) sprockets (2.8.2, 2.2.2) sqlite3 (1.3.6) thor (0.16.0) tilt (1.3.3) treetop (1.4.12) tzinfo (0.3.35) uglifier (1.3.0) - 再度bundle installを実行しインストール成功 $ bundle install Fetching gem metadata from https://rubygems.org/........... ... ... Installing therubyracer (0.11.0) with native extensions Using uglifier (1.3.0) Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed. - データベースの初期化 $ rake db:create *** Postモデルを作ろう [#p68b1837] - モデルを作成(rails g = rails generateでも可) $ rails g model Post title:string content:text invoke active_record create db/migrate/20130101080138_create_posts.rb create app/models/post.rb invoke test_unit create test/unit/post_test.rb create test/fixtures/posts.yml $ rake db:migrate *** Postsコントローラーを作ろう [#bc9a0781] - コントローラーを作成 $ rails g controller Posts create app/controllers/posts_controller.rb invoke erb create app/views/posts invoke test_unit create test/functional/posts_controller_test.rb invoke helper create app/helpers/posts_helper.rb invoke test_unit create test/unit/helpers/posts_helper_test.rb invoke assets invoke coffee create app/assets/javascripts/posts.js.coffee invoke scss create app/assets/stylesheets/posts.css.scss *** ルーティングの設定をしよう [#cdcad02f] - config/routes.rbを編集(下記を追加) resources :posts - routes.rbで定義したルーティングを表示 $ rake routes posts GET /posts(.:format) posts#index POST /posts(.:format) posts#create new_post GET /posts/new(.:format) posts#new edit_post GET /posts/:id/edit(.:format) posts#edit post GET /posts/:id(.:format) posts#show PUT /posts/:id(.:format) posts#update DELETE /posts/:id(.:format) posts#destroy - 上記「posts#index」は当該URLに対して「postsコントローラー」の「index」メソッド(アクション)を実行するという意味