LoginSignup
8
4

More than 5 years have passed since last update.

Ruby on Rails チュートリアルで学んだことを残しておく

Last updated at Posted at 2017-07-06

 今回は、初投稿ということもあり、見にくい箇所等があると思いますが、お許しください。本投稿では、https://railstutorial.jp/で学んだことを列挙していきたいと考えています。間違った箇所等ございましたら、ご指摘してくださるとありがたいです。

第1章 Railsの環境構築 + heroku

1. Railsの環境構築

  • Rails のインストール
$ gem install rails -v 5.0.3
  • アプリケーションの実行
$ rails _5.0.3_ new アプリケーション名
  • Gemfileの編集

 development環境とproduction環境で、利用するデータベースを異なるものにするために、Gemfileを以下のように変更する。この場合、development環境ではsqlite3、production(本番)環境ではPostgreSQLを利用する。

Gemfile
source 'https://rubygems.org'

gem 'rails',        '5.0.3'
gem 'puma',         '3.9.1'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.2.0'
gem 'coffee-rails', '4.2.2'
gem 'jquery-rails', '4.3.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.6.4'

group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'byebug',  '9.0.6', platform: :mri
end

group :development do
  gem 'web-console',           '3.5.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '2.0.2'
  gem 'spring-watcher-listen', '2.0.1'
end

group :production do
  gem 'pg', '0.20.0'
end

# Windows環境ではtzinfo-dataというgemを含める必要があります
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
  • Railsサーバーの立ち上げ方

 ローカル上で、サーバーを立ち上げる時は、

$ rails server 

 クラウドIDE上で、サーバーを立ち上げる時は、

$rails server -b $IP -p $PORT

2. Gitによるバージョン管理

 Gitを使用する前に、設定を一回だけ行う必要がある。以下のコマンドを入力する。

$ git config --global user.name "名前"
$ git config --global user.email メールアドレス

 次に、新しいレポジトリの初期化を行い、プロジェクトのファイルをリポジトリに追加する。

$ git init
$ git add -A

 Gitにファイルを追加すると、ステージングという待機用リポジトリに追加され、コミットを待つ。安全のために、いきなりコミットするのを防いでいる。ステージングの状態を知るためには、以下のコマンドを入力する。

$ git status

 ステージングエリアで控えているファイルをコミットするためには、以下のコマンドを入力する。

$ git commit -m "コミット内容"

 ここで、-mとすることで、コミットメッセージを直接指定できる。-mを利用しない場合は、デフォルトでエディタが開き、そこでコミット内容を入力することができる。コミットの履歴を参照するためは、以下のコマンドを入力する。

$ git log

 万が一、ファイルを誤って削除してしまった場合には、以下のコマンドで削除前の状態に戻すことができる。-fとは強制的に上書きして元に戻すためのフラグである。

$ git checkout -f

 ブランチとは、リポジトリのコピーで、元のファイルを触れずに新しいコードを書くときなど、自由に変更することができる。通常、親リポジトリはmasterブランチといい、他のブランチを作成して、そこでの変更がうまくいけば、masterブランチにマージする。

$ git branch ブランチ名
$ git checkout ブランチ名

とすることで、ブランチを切り替える。ブランチに切り替えた状態で、コミットを行い、それをmasterブランチにマージする(統合する)ためには、

$ git checkout master
$ git merge [マージするブランチ名]
$ git push origin master

このとき、origin masterは省略して、git pushだけでもプッシュできる。

3. Bitbucketにソースコードをアップロードする

 Bitbucketにソースコードをプッシュすることにより、ソースコードのバックアップ・他の開発者との共同作業を可能にする。Gitリポジトリを扱うサービスとして、GitHubとBitbucketがある。Bitbucketは無料でリポジトリを非公開にできるため、今回はBitbucketを利用する。

 Bitbucketでプロジェクトを開始するための手段を以下に述べる。
1. Bitbucktアカウントの作成
2. 公開鍵をクリップボードにコピーする
 クラウドIDEを利用している場合、以下のコマンドで公開鍵を取得できる

$ cat ~/.ssh/id_rsa.pub

3.Bitbucketに公開鍵を追加する。右上にあるアバター画像をクリックして、[Bitbucket settings]、[SSH keys]を選択する。
4.Bitbuckeで、新しいレポジトリの作成を行う。

 ここまで、行えばローカル環境でのレポジトリをBitbucketにあるリモートリポジトリへプッシュすることができる。その時のコマンドは、

$ git remote add origin git@bitbucket.org:<username>/リポジトリ名.git
$ git push -u origin --all

4. デプロイする

 まず、デプロイとは、主にネットワークを通じて提供されるWebアプリケーションなどのシステム開発工程において、システムを利用可能な状態にすることである。Herokuは、ソースコードをバージョン管理にGitを使用していれば、Railsアプリケーションを簡単にデプロイすることができる。Herokuでは、PostgreSQLデータベースを使用するため、以下のようにGemfileを編集する必要がある。

Gemfile
source 'https://rubygems.org'

gem 'rails',        '5.0.3'
gem 'puma',         '3.9.1'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.2.0'
gem 'coffee-rails', '4.2.2'
gem 'jquery-rails', '4.3.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.6.4'

group :development, :test do
  gem 'sqlite3', '1.3.13'
  gem 'byebug',  '9.0.6', platform: :mri
end

group :development do
  gem 'web-console',           '3.5.1'
  gem 'listen',                '3.0.8'
  gem 'spring',                '2.0.2'
  gem 'spring-watcher-listen', '2.0.1'
end

group :production do
  gem 'pg', '0.20.0'
end

# Windows環境ではtzinfo-dataというgemを含める必要があります
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

編集が終わったら、

$ bundle install --without production

を入力する。--without producitionとすることでローカル環境には本番環境用のgemをインストールしないようにする。次に、Herokuのユーザー登録を行う。クラウドIDEを使用していない場合は、Heroku Toolbeltをインストールする必要がある。herokuコマンドでSSHキーを入力する。

$ heroku login
$ heroku keys:add

Herokuサーバーにアプリケーションの実行場所を作成する。

$ heroku create

Herokuにデプロイするために、Gitを用いて

$ git push heroku master

とする。

$ heroku rename [変更名]

とすることで、アプリケーション名を変更することができる。

第2章 Toyアプリケーションの作成

1. Scaffold機能によるアプリケーション作成

 まず、アプリケーションの作成を行う。

$ rails _5.0.3_ new toy_app

 1章と同様に、Gemfileを同じように変更し、gemのインストールを行う。

$ bundle install --without production

 Gitで、このアプリケーションのバージョン管理を行う。

$ git init
$ git add -A
$ git commit -m "first commit"

 Bitbucketにも、リポジトリを作成し、プッシュする。

$ git remote add origin git@bitbucket.org:<username>/アプリケーション名.git
$ git push -u origin --all

 Hello,worldを表示するために、アクションの定義・ルーティングを行う。

app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
 protect_form_forgery with: :exception

 def hello
  render html: "Hello, world"
 end

end
config/routes.rb
Rails.application.routes.draw do

 root 'application#hello'

end

 ファイルの編集を行ったら、コミットし、Herokuにプッシュする。

$ git commit -am "Add hello"
$ heroku create
$ git push heroku master

 次に、モデル及びビュー作成を行う。モデルとして、ユーザーモデルとマイクロポストモデルを作成する。ユーザーモデルの役割は、ユーザーの情報を管理する。マイクロポストモデルの役割は、ユーザーが投稿した内容の情報を管理する。各モデルが持つ属性値を次に示す。

ユーザーモデル マイクロポストモデル
id : integer id : integer
name : string content : text
email : string user_id : integer

 以上のモデルを作成するために、scaffold機能を利用する。

$ rails g scaffold User name:string email:string
$ rails db:migrate  

$ rails g scaffold MicroPosts content:text user_id:integer
$ rails db:migrate

 マイクロポストを投稿するときに、文字数制限(最大文字数が140)を加える。

app/models/micropost.rb
class Micropost < ApplicationRecord

 validates :content, length: {maximum: 140}

end

 異なるデータモデル同士の関連付けを行う。ここでは、一人のユーザーに対して、複数のマイクロポストを持つとする。このことをコードで書くと、

app/models/user.rb
class User < ApplicationRecord

 has_many :microposts

end
app/models/micropost.rb
class Micropost < ApplicationRecord

 belongs_to :user

 validates :content, length: {maximum: 140}

end

モデルの関連付けを行うことにより、TwitterのようなSNSが作成可能となる。次に、マイクロポストのコンテンツが存在しなければならない制限をかける。また、ユーザーモデルのバリデーションを追加する。

app/models/micropost.rb
class Micropost < ApplicationRecord

 belongs_to :user

 validates :content, length: {maximum: 140}, presence: true

end
app/models/user.rb
class User < ApplicationRecord

 has_many :microposts

 validates :name, presence: true
 validates :email, presence: true

end

2. コントローラとモデルのクラス階層

 モデルの継承構造について述べる。User、Micropostモデルは共にApplicationRecordクラスを継承している。また、ApplicationRecordクラスは、ActiveRecord::Baseクラスを継承している。よって、作成したモデルオブジェクトはデータベースにアクセスすることが可能となり、データベースのカラムをRubyの属性値かのように扱うことが可能となる。
 次に、コントローラの継承構造について述べる。Users、Micropostsコントローラ共にApplicationControllerクラスを継承している。また、ApplicationControllerクラスは、ActionController::Baseクラスを継承している。よって、Applicationコントローラで定義したルールは、アプリケーションの全てのアクションで反映される。

3. アプリケーションのデプロイ

 以上の内容を、Bitbucketとherokuに反映させる。

$ git status                      //ステージング状態の確認
$ git add -A                      //ファイルを全てステージング状態にする
$ git commit -m "Finish toy app"  //コミット
$ git push                        //Bitbucketにプッシュ                       
$ git push heroku                 //herokuにプッシュ
$ heroku run rails db:migrate     //herokuのデータベースに反映させる
8
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
4