Ruby on Rails完全初心者がとりあえずアプリをデプロイするまで

#1. 何するの？
Ruby on Railsというフレームワークを使って簡単なWebアプリを作り、それをネット上で一般に公開（デプロイ）します。コーディングは一切不要です。
何番煎じだ、という内容ですが自分でやったことのまとめとして残しておきます。
ちなみに作ったのはこういうものです。コメントの書き込み・編集・消去ができます。↓
https://myblog-test-o2.herokuapp.com/posts
#2. Web開発初心者の３大障壁
自分はWeb開発は全くの初心者なのですが、ちょっとかじって見た中で大変だなと思ったのが以下の3点。

- 環境構築でつまずく！
- サーバーとかデータベースとか謎！
- ローカルで実行できたけど、デプロイってどうやんの？？

特にデプロイはかなり謎でした・・・（最初は意味すらわからなかった）
で、どうやって乗り越えたかというと
環境設定・サーバーなど→AWS Cloud9で楽々！
デプロイ→HerokuとGithubで楽々！
でした。
#3. 利用するサービス
いずれもユーザー登録をお願いします。今回のような範囲で使う分にはどれも無料です。
・Github
https://github.com/
・AWS Cloud9
https://aws.amazon.com/jp/cloud9/
・Heroku
https://jp.heroku.com/
#4. 早速やってみよう
#### Cloud9にRailsをインストール
まずはCloud9にアクセスします。
Create a new workspaceで新しいワークスペースを作りましょう。
Workspace nameとDescriptionは適当にお願いします。
<img width="858" alt="4ad6ec44832123dbfe6de2d516d21ef7.png" src="https://qiita-image-store.s3.amazonaws.com/0/206583/d27c7515-618b-cc94-92d4-9578fdab58f0.png">
テンプレートとしてBlankを選んでCreate workspaceしましょう。
ページ下部にコマンドラインが現れたと思います。まずは

```
$ sudo gem install rails
```
でRuby on Railsをインストールしましょう。しばらくして「Successfully installed rails-X.X.X」となったら完了です。

####早速アプリを作ってみよう！
```
$ rails new memoapp
```
とすると、memoappという名前のフォルダができ、アプリが生成されます。

```
$ cd memoapp
$ rails g scaffold post user:string content:text
$ rails db:migrate
$ rails assets:precompile
```
とすると、scaffoldという機能を利用して、メモアプリが自動生成されます。ここで

```
$ rails s -b $IP -p $PORT
```
として、画面上部のPreview→Preview Running Applicationとして
https://newapp-[ユーザー名].c9users.io/posts
にアクセスすると、アプリが動いていることが確認できます。New Postからメモを残せます。
<img width="258" alt="2d15d6676c5a51211c9103d45fff869b.png" src="https://qiita-image-store.s3.amazonaws.com/0/206583/3a8732b4-8a71-be2c-d063-1e0c106affef.png">
ただこれはまだローカルで実行しているだけなのでデプロイはされていません。
一度control+Cでアプリを落としておきましょう。

#### Herokuを使う準備
ここからGithubとHerokuを使ってデプロイしていきます。
まずHerokuではsqlite3が使えないので、Gemfileを編集します。
newapp/memoappにあるGemfileを以下のように編集してください。

```
gem 'sqlite3'
```
となっているのを

```
gem 'sqlite3', group: :development
gem 'pg', group: :production
```
に変更。
そのあと、コマンドラインで

```
$ bundle
```
を実行してください。次にnewapp/memoapp/config/database.ymlを編集します。

```
production:
  <<: *default
  database: db/production.sqlite3
```
の部分を

```
production:
  <<: *default
  adapter: postgresql
  encoding: unicode
  pool: 5
```
に変更してください。ymlファイルのインデントは必ず**半角スペース2個**です！

#### Githubと連携しよう
まずコマンドライで以下を実行します。

```
$ git init
$ git add -A
$ git commit -m "first commit"
```
次に
https://github.com/
に移動しましょう。＋マークからNew Repositoryを選んで・・・
<img width="976" alt="3f3935357ad04fc06132b9236f1df24f.png" src="https://qiita-image-store.s3.amazonaws.com/0/206583/b7619c84-4f21-b181-ea4d-2a786d4ebe20.png">
repository nameをmemoappとして、Create Repositoryします。
<img width="1030" alt="3b29d7769bcd10d20b8041cae67ac6d6.png" src="https://qiita-image-store.s3.amazonaws.com/0/206583/9c0bf7ca-7fb4-83e4-12c1-6ac27696fd3b.png">
この部分を後で使います。

####SSH接続しよう
Cloud9のコマンドラインに戻ります。

```
$ cat ~/.ssh/id_rsa.pub
```
とすると、ssh-rsaで始まるなにやらすごく長いものが出てきます。これがGithubに接続するのに必要な鍵となります。（他の人には教えないように！）

またGithubの方でSettingsに移動します。
<img width="511" alt="7a35e8d0d605068fad5f6e847a0e8cfd.png" src="https://qiita-image-store.s3.amazonaws.com/0/206583/6f411569-2552-4908-bb93-f72d8216f3a2.png">
SSH and GPG keysを選びます。
<img width="264" alt="c5d27506c9e53ae7ea114c1204734dde.png" src="https://qiita-image-store.s3.amazonaws.com/0/206583/a932b77d-73ba-793a-148c-57ee5ba4de8b.png">
緑色の「SSH Keys」をクリックして、タイトルをcloud9とし、先ほどの公開鍵をコピペして、Add SSH Keyします。
<img width="785" alt="fedf339fb7f7120baee5ecb0525b1a70.png" src="https://qiita-image-store.s3.amazonaws.com/0/206583/ed6972c9-b0a3-95df-23c8-789220556e8d.png">

Githubのmemoappレポジトリから先ほどのアレをコピーします。
<img width="1030" alt="3b29d7769bcd10d20b8041cae67ac6d6.png" src="https://qiita-image-store.s3.amazonaws.com/0/206583/5d263566-12b7-b05c-5869-6adcd62bb4b4.png">
cloud９のコマンドラインから

```
$ git push コピペしたやつ master
```
で、Githubとの連携は完了です！

####Herokuでデプロイする
```
$ heroku create サーバーの名前
```
として今回のアプリ用のサーバーを立てます。サーバー名は自由につけられますが、他の人と被ってはいけないので、memoapp-[名前]-[日付]などとして重複を避けてください。
あとはコマンドラインで

```
$ git push heroku master
$ heｒoku run rails db:migrate
```
とします。

次にhttps://dashboard.heroku.com/
にログインして先ほど作ったサーバー名（memoapp-[名前]-[日付]とか）をクリック。
DeployのタブからDeployment MethodをGithubに。
App connected to GitHubからGithubへの連携をオンにし、
Automatic deploysをオン（enabled)にします。
最後にDeploy Branchをして、Viewでアプリの稼働を確認します。
<img width="1025" alt="5fb93cb78a24a86ba2fc97d6518c999f.png" src="https://qiita-image-store.s3.amazonaws.com/0/206583/4a995d0a-6e2e-91e5-aea2-5073749be5b7.png">

どうだったでしょうか？無料のサービスだけで、自分のアプリケショーンをWebに公開することができました。これをきっかけに、どんどん機能を充実させて自分だけのアプリを作ってみてはいかがでしょうか？

#5. 参考にさせていただいたもの
https://www.sejuku.net/blog/8178
https://rails-study.net/github/
https://qiita.com/seltzer/items/d52a31c558a30c857a3f
https://railstutorial.jp/