Herokuとデプロイについて

# はじめに

今のところherokuを使うことが多いので

やり方は他にもあると思いますが、学習したものをまず忘れないように書いていきます。

# heroku

クラウド上で開発環境をクラウド上で管理できるサービスとしてのプラットフォーム、「Paas」です。

[Herokuとは？](https://agency-star.co.jp/column/heroku/)

# クラウドサービスって・・・

こちらでは[クラウドサービスとは？](https://jpn.nec.com/cloud/smb/column/01/index.html)
以下のように説明されています。

> クラウド（クラウド・コンピューティング）は、コンピューターの利用形態のひとつです。インターネットなどのネットワークに接続されたコンピューター（サーバー）が提供するサービスを、利用者はネットワーク経由で手元のパソコンやスマートフォンで使います。

>クラウドの特長のひとつは、利用にあたって、コンピューター（サーバー）の所在地（どこ？）が意識されない点です。たとえるならば、雲（クラウド）の中にあるコンピューターを地上から利用しているようなイメージです。そして、クラウドの形態で提供されるサービスを「クラウドサービス」と言います。

>従来のコンピューターの利用形態では、利用者は手元のパソコンの中にあるソフトウェアやデータを利用していました。しかしクラウドサービスでは、ネットワークを経由して、雲（クラウド）の中にあるソフトウェアやデータをサービスの形でつかうのです。


<br>

:high_brightness: わかりやすい！！:high_brightness:

<br>


大きく4つに分かれます。

「SaaS」「PaaS」「IaaS」「DaaS」

そのうちの一つが「Paas」です。


### 「Paas」 (Platform as a Service)
インターネット経由での、仮想化されたアプリケーションやサーバやデータベースなどのアプリケーション実用用のプラットフォーム機能の提供を行うサービス
( AWS、Microsoft Azure、Google App Engine )

#### 「Saas」 (Software as a Service)
電子メール、グループウェア、顧客管理、財務会計などのソフトウェア機能の提供を行うサービス
( Google Apps, Salesforce, サイボウズoffice )

#### 「Iaas」 (Infrastructure as a Service)

主にデベロッパー向けに仮想マシンを提供するもの
( IDCFクラウド, VDC PRO, Dropbox)

#### 「Daas」　(Desktop as a Service)

(Microsoft Virtual Desktop, IBM Smart Business Desktop, Citrix XenDesktop )

<br>

...STaaS ..BaaS  ..XaaS...

4つと思いきや・・

まだたくさんありますね・・。

詳しくは↓


[DigitalMarketingbog: SaaS、PaaS、IaaS、DaaSって何？](https://digitalidentity.co.jp/blog/seo/seo-tech/saas-paas-iaas-daas-kaisetsu.html)

[ferret: クラウドサービスの「SaaS」「PaaS」「IaaS」「DaaS」の違いとは？
](https://ferret-plus.com/11981)


# デプロイの流れ

## Heroku CLIをインストール（初めのみ）

```terminal

 % brew tap heroku/brew && brew install heroku

```
できたかチェックします。

```terminal

% heroku --version 

(このような表示が出てきます。)
# heroku/7.47.7 darwin-x64 node-v12.16.2
```

Herokuにログインします。

```terminal

% heroku login --interactive

(Emailとパスワードを入力します。)
=> Enter your Heroku credentials.
=> Email:　(メールアドレスが最初に自動で表示される場合は何も入力せずにenterを押します。)

=> Password:　
(ログインできるとこのように表示されます。↓)
Logged in as "~"

```

# rails_12factorを導入

gemfileに追記します。

静的アセットファイルやログの保存先をHeroku用に微調整してくれるGemです。

```terminal:Gemfile

group :production do
  gem 'rails_12factor'
end

```

インストールします。

```terminal

% bundle install

```

Herokuに反映するにはgit上にも反映させる必要があります。
githubでも、直接でも。
こんな感じで。

```terminal

% git add .

% git commit -m "gem rails_12factorの追加"

```

これは！前回勉強しましたので、

貼っときましょう。

[[Git]基本的なコマンド入門](https://qiita.com/sumiiii/items/754a5c3c190210b212bb)

# Heroku上にアプリケーションを作成する

アプリを作っていきます。
使われている名前を入力すると「使ってるよ！」的なことを言われるので注意です。

```terminal

 % heroku create picapp-30464
                 (↑アプリの名前)決める
```

出来たか確認してみます。

```terminal

% git config --list | grep heroku


(このようなものが表示されます。)
remote.heroku.url=https://git.heroku.com/picapp-30464.git
remote.heroku.fetch=+refs/heads/*:refs/remotes/heroku/*
```

# HerokuでMySQLを使用できるようにする
（デフォルトはPostgreSQL）

`ClearDBアドオン`を使用します。
こちらはMySQLを使用するためのツールです。

```terminal

% heroku addons:add cleardb

```

## mysql2への変更

ClearDBデータベースのURLを確認

```terminal

heroku config | grep CLEARDB_DATABASE_URL

```

設定を変更、
（ClearDBデータベースのURLを変数heroku_cleardbに格納）

```terminal

% heroku_cleardb=`heroku config:get CLEARDB_DATABASE_URL`

```

データベースの再設定です。

```terminal

% heroku config:set DATABASE_URL=mysql2${heroku_cleardb:5}

```

# Heroku上で非公開の値を管理する

`credentials.ym.enc`ファイルを利用します。
外部にもたらしたくない情報を扱う際に用いるファイルです。

`master.key`があれば内容を確認できます。
暗号文を複合する鍵の役目を持ったファイルです。
非常に重要なファイルなのでリモートリポジトリで反映されるのが好ましくないので「.gitignore」に記述されています。（Gitで管理されない仕組み）


中身を見てみます。

```terminal

% EDITOR="vi" bin/rails credentials:edit

(今回は確認だけです。)
(ファイルの抜け方)
escキー
: キー
qキー
enter

```

# Heroku上に環境変数を設定、master.keyを設定

`環境変数`
OSが提供するデータの一つで、どのディレクトリがファイルからでも参照できる変数です。


```terminal

例）　heroku config:set 環境変数名="値"
         ↓ （ こう ）
% heroku config:set RAILS_MASTER_KEY=`cat config/master.key`

```

環境変数の設定を確認します。
「RAILS_MASTER_KEY」があったら成功です。

```terminal

 % heroku config

```

# アプリケーションをpushする



```terminal

% git push heroku master

```

# Herokuでマイグレーションをする

```terminal

% heroku run rails db:migrate

```

公開情報を確認してみます。

```terminal

% heroku apps:info

```

<br>

デプロイできました！！  Yes!!

![lucky_yotsuba_clover_girl.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/892628/2656b7dc-699e-bac6-39f8-bb2cf8d4f64b.png)

# エラーになった場合

エラーログを確認して原因を確認します。

`エラーログ`
アプリケーションなどのシステム実行時に発生したエラーを記録したものです。

```terminal

% heroku logs

```

ログの最後の10行を表示するためのオプションを使用するとこのようになります。

```terminal

% heroku logs --tail --app picapp-30464
                           (↑アプリケーション名)

```

# デプロイ済みのアプリに変更を加えた場合

Herokuにもまた「push」してデータベースを変更した場合は再度「migrate」をします。


### 環境変数を設定し忘れた場合

「push」してしまった後に設定し忘れたことに気づいたら、
設定してファイルの変更がない場合は空のコミットを作成し共に「push」してあげるとできます。

```terminal

% git commit --allow -empty -m "空のコミット"

(その後に)

% git push heroku master

```

# まとめ

リンク切れしてしまうといった困ったこともあるみたいですが簡単にデプロイできるので便利です！！

これを機に近々もう少し深掘りしてみたいと思います。
ちょっと時間かかってしまったので続きは次回にします:fire:


# 参考

Basic認証のやり方も書いてあり忘れたときにも良いです！！

[hideo blog：Rails で作った app を Heroku へデプロイする手順](https://samoant.com/heroku/)