Railsポートフォリオサイトを作る #1.rails newからrails sまで

Railsを使ったポートフォリオサイトを作るためにやったこと、躓いたこと、工夫したこと等を備忘的にまとめていきます。
レビューアプリとSNS両方の性質を持つ「Revorite」というWebアプリを作っていこうと思います。


# rails newの下準備
```
$ cd ~/projects
$ mkdir revorite
$ cd revorite
$ bundle init
```
アプリ用ディレクトリを作成し、`bundle init`で`Gemfile`を生成。
こうすることでシステムのgemと分離してアプリ用のgemをbundle管理することができる。

生成された`Gemfile`の`# gem "rails"`のコメント（#）を以下の通り外しておく。
またバージョン指定が必要な場合ここで指定（今回はrails5.2でインストールする）

```Gemfile:Gemfile
# frozen_string_literal: true

source "https://rubygems.org"

git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }

gem "rails", '~> 5.2.4'
```
準備ができたら以下コマンドでRailsをインストール。bundler経由（※1）で`vendor/bundle`配下にgemがインストールされる（※2）。
`bundle install --path vendor/bundle`

※1: bundler経由でインストールすることで、各種gemのバージョン依存問題が生じないよう、自動で調整してインストールしてくれる。
※2:  `--path vendor/bundle`のオプションは次回以降は不要。自動で指定されるため。


# rails newを実行
```
$ bundle exec rails new . -B -d mysql --skip-test
```
bundler経由でgemをインストールした場合、rails newもbundler経由で行う必要があるので注意。
new以降のオプションは、「カレントディレクトに（`.`）」「`bundle install`はせず（`-B`）」「データベースにはMySQLを指定し（`-d mysql`）」「railsのデフォルトのテスト機能（minitest）を使わない（`--skip-test`）」、を意味する。
他にも指定可能なオプションは多数あるがここでは割愛。
`Gemfile`を上書きして良いか、と聞かれるのでyesを入力。

# 各種gemをインストール
`Gemfile`にインストールする各種gemを記述。

```Gemfile:Gemfile
gem 'haml-rails'
gem 'erb2haml'
gem 'font-awesome-sass'
gem 'devise'
```
後で追加も可能のため、何も記述しなくともOK
ここで`bundle install`を実行したところ、下記エラーが発生。

```
Bundler could not find compatible versions for gem "sprockets":
  In snapshot (Gemfile.lock):
    sprockets (= 4.0.0)

  In Gemfile:
    sass-rails (~> 5.0) was resolved to 5.1.0, which depends on
      sprockets (< 4.0, >= 2.8)

    rails (>= 5.2.4.2, ~> 5.2.4) was resolved to 5.2.4.2, which depends on
      sprockets-rails (>= 2.0.0) was resolved to 3.2.1, which depends on
        sprockets (>= 3.0.0)

Running `bundle update` will rebuild your snapshot from scratch, using only
the gems in your Gemfile, which may resolve the conflict.
```
`Gemfile.lock`にはsprocketsは4.0.0とあるけど、sass-railsの5.1.0を使うには4未満（かつ2.8以上）じゃないとダメやぞ！ってことなんだと思う。
`bundle update`を実行することでsprocketsのバージョンが自動的に3.7.2に変更され、上述のエラーは解消された。

# Gitの登録
各種gemのインストールが終わったところで、Gitのローカルリポジトリを作成し、リモートリポジトリへの紐付け、プッシュまでを行う。
GitHubでリモートリポジトリは事前に作成しておくこと。
### ローカルリポジトリの登録
```
$ git init
$ git add *
$ git commit -m "initial commit" 
```
### リモートリポジトリに紐付け、初回プッシュ
```
$ git remote add origin https://github.com/345dvl/revorite
$ git push origin master
``` 
これで、今回のアプリをGitで管理できるようになりました。
スクールではGitHub Desktopを使ってコミットやプッシュ、プルなど実行していましたが、今回は全てコマンドラインで実行。実務を考えるとどちらも出来た方が良いと思うので、今回のアプリ開発では可能な限りコマンドラインでGit管理していこうと思います。

# いざ、起動
Rails含む各種gemのインストールが完了したため、いよいよRailsを起動
`rails s`

起動を確認後、Localhostに接続。
無事、Railsの初期画面が表示されました。これでアプリの土台はひとまず完成です。
記事にするとあっさりですが、これだけでも結構時間がかかりました。とりあえず環境構築を乗り越えたので一安心。

# まとめ
初めてのQiita記事の投稿となりましたが、思ったより時間がかかりました…。およそ3時間ほど。
もし誤りなどありましたらコメントや[Twitter](https://twitter.com/345dvl)でご指摘いただけると嬉しいです。この記事が他の方の参考になれば幸いです。
次はDB設計や機能の整理などを記事にできたらいいな…。


# 参考にさせていただいた記事
[新規Railsプロジェクトの作成手順まとめ](https://qiita.com/yuitnnn/items/b45bba658d86eabdbb26)
[rails new 手順書](https://qiita.com/youcune/items/312178c54c65f3ab4d42)
[Bundlerを使ったGem管理について](https://qiita.com/mochikichi321/items/ee0b7133524816f73e60)
[bundle install と bundle updateの違いについて](https://qiita.com/lasershow/items/1a048d03ddaaba98171e)