【Ruby】開発までの準備を、"勇者タケシの旅立ち"で例えてみる。

>
追記
■2019/5/3
・bundlerについて追記
・サーバー起動コマンドについて追記

どうも、Ruby on rails学習中のぼん(@wallkicker)です。

今回はRailsを使った**プロジェクトの開始からデータベースの接続まで**の
大まかな流れを、**勇者タケシが冒険に出るまで**に例えて書きたいと思います。


■開発環境：cloud9
■読んでほしい人：Railsでの開発を始める準備をしたい人


#大まかな流れ
![勇者タケシ.png](https://qiita-image-store.s3.amazonaws.com/0/250884/1cb21059-ccbc-5a55-03a3-a02e6f7b2dc8.png)

【実際の行動】
1：プロジェクトを作る
↓
2：プロジェクト内にgitを用意する
↓
3：サーバーを起動する
↓
4：データベース作る
↓
5：Railsサーバの起動と接続の確認


##1：プロジェクトの作成
![1.png](https://qiita-image-store.s3.amazonaws.com/0/250884/e5f7805a-28d6-e49e-d8c3-12827b1accde.png)


まず、自分のプロジェクトを作りましょう。
ゲームでいえば、**自分の名前を付けた勇者のファイルを作るのと同じです。**

`rails new` コマンドによって、プロジェクトを作ることができます。
例として、プロジェクト名は勇者「Takeshi」としています。

```
1｜$ cd ~/environment/
2｜$ rails new Takeshi --database=mysql --skip-test
```

1行目：cloud9上では、`作成したワークスペース名＝environment`となるようです。
2行目：```プロジェクト作成コマンド　--オプション```という構成です。

ここで、2行目のコマンドを入力すると`bundle install`も自動的に実行されます。
`bundle install`を別で実行する場合は
`--skip-bundlebundle` のオプションをつけることでスキップが可能です。
※`install`については下記の【bundleについて】に記述しています。

###【オプションについて】
プロジェクトを作成する際に、オプションをつけることができます。
ゲームでいえば、**操作する際のキーコンフィングを設定するのと同じです。**

`--database=mysql` ：MySQLを使用する。
`--skip-test` ：自動テストをスキップする

ここで、`--database=mysql`を記載しない場合、sqlite3を使用することになります。
記載しない場合が下記です。`adapter: sqlite3`となっていますね。

```/config/database.yml
default: &default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
```


`--database=mysql`を記載した場合は下記のような表示になるはず。
`adapter: mysql2`となっていますね。

```/config/database.yml
default: &default  
adapter: mysql2  
encoding: utf8  
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>  
username: root  
password:
host: localhost
```

###【bundlerについて】
RubyやRailsで使用するライブラリの管理ツール。
Gemfileにライブラリ名とバージョンを記述することで
`bundle install`のコマンドにより一括インストールが可能。


##2：gitでバージョン管理を開始
![2.png](https://qiita-image-store.s3.amazonaws.com/0/250884/fac409f4-8c6b-1794-cc83-3cebb1b7c8d8.png)

バージョン管理を行うために、gitを準備しましょう。
ゲームでいえば、**セーブ機能を使うための準備です。**
gitがなければ、選んだ道とは異なる道を選択しようとしても
ロードして戻ることができません。

まず、作成したプロジェクトのディレクトリへ移動します。

```
$ cd Takeshi
```
下記コマンドにより、Takeshi内にgitを準備します。

```
$ git init
$ git add .
$ git commit -m "init Rails Project"
```

##3：サーバの起動
![3.png](https://qiita-image-store.s3.amazonaws.com/0/250884/80f77ced-c82c-d80e-ec61-01277bd66f6d.png)

作成したプロジェクトとデータベースの接続を行います。
剣や回復アイテムを入れるための、
**勇者の持ち物を入れるポーチの準備をします。**

下記コマンドにより、サーバを起動します。

```
$ sudo service mysqld start
```

##4：データベースの作成
![4.png](https://qiita-image-store.s3.amazonaws.com/0/250884/7a9c83b4-52fc-d13b-0644-f7a5329cd0a8.png)

作ったデータベースに、アプリケーション用のデータベースを作成します。
実際に、**勇者のポーチを作ります。**

```
$ rails db:create
```

##5：Railsサーバの起動と接続の確認
![5.png](https://qiita-image-store.s3.amazonaws.com/0/250884/853890d9-96f7-a969-fbbf-6049ea189e00.png)

**勇者のポーチができているかどうかの確認です。**
下記の画面が表示されれば、接続成功です。

```
$ rails s -b $IP -p $PORT
```
![rails データベース接続成功.JPG](https://qiita-image-store.s3.amazonaws.com/0/250884/c40004dd-6c69-20d2-6b9a-b953b6cb5911.jpeg)

ここで上記のコマンドは下記の意味です。
`rails s`：  サーバー起動のためのコマンド。`rails server`でも起動が可能。
`-b`： IPを指定するためのオプション
`-p`： ポートを指定するためのオプション。

`$IP`と`$PORT`は環境変数です。
ターミナル上で`echo $IP`と入力することで現在の設定値を確認することができます。

さぁ、これで**冒険に出る用意ができました！**

プロジェクトの作成ができれば、**MVCの作成**に入ることができると思います。
ここまでの手順をテンポよくできるようにして、
効率よくアイディアを形にしていきたいですね。

それでは！