HerokuにRailsをデプロイする

RubyとRailsをインストールしてある前提で話を進めます。OSによってRubyのインストールの仕方は異なるので、その都度調べてインストールしてください。（Windowsの場合はストアからUbuntuをインストールしてRuby環境を作成することをお勧めします）
##Railsアプリを作成する
まず始めに、railsコマンドでアプリを作成します。

```
rails new sample_app
```
すると一通り必要なファイルやディレクトリが作成されます。

##Gemfileで必要なgem(ライブラリ)を揃える
次に、Bundlerをつかって開発に最低限必要なgemファイルをインストールします。Bundlerは開発環境直接にではなく、railsのアプリごとにgemファイルをインストールするコマンドツールです。Gemfileを編集します。

```Ruby:Gemfile
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.5.1'

gem 'rails', '~> 5.2.0'
gem 'bcrypt','~>3.1.11'
gem 'puma', '~> 3.11'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.2'
gem 'turbolinks', '~> 5'
gem 'jbuilder', '~> 2.5'
gem 'bootsnap', '>= 1.1.0', require: false
gem 'sqlite3', group: :development
gem 'pg',  group: :production
gem 'rails_12factor', group: :production

group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
  gem 'rspec-rails'
end

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :test do
  gem 'capybara', '>= 2.15', '< 4.0'
  gem 'selenium-webdriver'
  gem 'chromedriver-helper'
end

gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

```
`gem 'sqlite3', group: :development`は開発環境でsqlite3を使うため、`gem 'pg',  group: :production`は本番環境であるHerokuでPostgresqlを使うためにインストールするものです。こうすることによって、開発環境でいくらデータベースをいじっても、本番環境のデータベースには反映されません。

##データベースを設定する
データベースを設定します。`config/database.yml`のファイルを設定することによって、データベースを設定することができます。Herokuにデプロイする場合は上で記述した通り、開発環境をsqlite3、本番環境をPostgresqlに設定します。

```title:database.yml
# SQLite version 3.x
#   gem install sqlite3
#
#   Ensure the SQLite 3 gem is defined in your Gemfile
#   gem 'sqlite3'
#
default: &default
  adapter: sqlite3
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  timeout: 5000

development:
  <<: *default
  database: db/development.sqlite3

# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
  <<: *default
  database: db/test.sqlite3

production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5
```

##HelloWorldの表示
Hello Worldを表示させたいと思います。`app/controllers/application_controller.rb` に「Hello World」を表示させるhelloアクションを作成します。

```ruby:application_controller.rb
class ApplicationController < ActionController::Base
  def hello
    render html: "Hello World"    
  end
end
```
これでHelloWorldを表示させるアクションが作成できました。続いて、デフォルトで表示させるページにするため、`conig/routes.rb`を設定します。HerokuでRailsアプリを作成するには、`routes.rb`を設定しないとページが見つかりませんというエラーがでます。

```ruby:routes.rb
Rails.application.routes.draw do
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root to: 'application#hello'
end
```
「コントローラー名#アクション名」でルーティングを設定することができます。これでアプリは完成です。

```
rails s
````
とコマンドを入力し、http://localhost:3000 にアクセスすると、
<img width="771" alt="スクリーンショット 2018-08-18 15.29.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/267174/5d2196d8-00ae-a4fd-9849-39675ba0c3ed.png">
無事に表示されました。めでたし。

##Herokuにデプロイ
無事にアプリが作成できました。いよいよ本番環境へデプロイします。まず、[Heroku](https://jp.heroku.com/)のアカウントを作成してください。そして、[こちらのページ](https://devcenter.heroku.com/articles/heroku-cli)からheroku-cli（Herokuをコマンドラインから操作するツール）をインストールします。そしてコマンドラインからherokuにログインします。

```
heroku login
```
そしてHerokuアプリケーションを作成します。アプリケーション名はいつでも変えられます。ただし、名前は、他人と被らないようにしないといけません。

```
heroku create
```
そして、Heroku Gitというものに、作成したアプリをデプロイします。

```
git add .
git commit -m "First Commit"
git push heroku master
```
Heroku Gitではなく、GitHubを使用することも可能です。これでデプロイができました。作成したアプリにアクセスしてみると、
<img width="605" alt="スクリーンショット 2018-08-18 15.46.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/267174/83460c50-0566-563d-0c94-ea43c7cf5c3e.png">
無事にアプリが作成されました。以上が一通りのRailsのデプロイ方法となります。

##最後に
railsを調べてると、ページによってコマンドが多少異なります。`rake`というコマンドはバージョンが5からは`rails`で代用できます。また、Bundlerコマンドも結構違いがあるので、[こちらのページ](https://qiita.com/znz/items/5471e5826fde29fa9a80)が結構参考になりそうです。
あと、プログラミングを始めたばっかで、「Rails勉強したい」って方はぜひ[Railsチュートリアル](https://railstutorial.jp/)を一通りやってください。Railsだけでなくgitの基本的な使い方やテストやcssフレームワークのことなど、Web開発に関して基本的なことが一通り身につきます。すごいおすすめです。
##参照
[Ruby on Rails チュートリアル](https://railstutorial.jp/)
[ツールを使いたいだけの人のための bundler 入門 (例: vagrant + veewee)](https://qiita.com/znz/items/5471e5826fde29fa9a80)