今回は、初投稿ということもあり、見にくい箇所等があると思いますが、お許しください。本投稿では、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を利用する。
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でプロジェクトを開始するための手段を以下に述べる。
- Bitbucktアカウントの作成
- 公開鍵をクリップボードにコピーする
クラウド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を編集する必要がある。
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を表示するために、アクションの定義・ルーティングを行う。
class ApplicationController < ActionController::Base
protect_form_forgery with: :exception
def hello
render html: "Hello, world"
end
end
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)を加える。
class Micropost < ApplicationRecord
validates :content, length: {maximum: 140}
end
異なるデータモデル同士の関連付けを行う。ここでは、一人のユーザーに対して、複数のマイクロポストを持つとする。このことをコードで書くと、
class User < ApplicationRecord
has_many :microposts
end
class Micropost < ApplicationRecord
belongs_to :user
validates :content, length: {maximum: 140}
end
モデルの関連付けを行うことにより、TwitterのようなSNSが作成可能となる。次に、マイクロポストのコンテンツが存在しなければならない制限をかける。また、ユーザーモデルのバリデーションを追加する。
class Micropost < ApplicationRecord
belongs_to :user
validates :content, length: {maximum: 140}, presence: true
end
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のデータベースに反映させる