Help us understand the problem. What is going on with this article?

【2019年度版】Railsの環境構築から動作確認までの手順を理解しながらやった(Mac, MySQL)

More than 1 year has passed since last update.

はじめに

Rails環境の既存プロジェクトの開発をしていると、なかなかRailsプロジェクトを1から開発することはありません。そうなると、プロジェクトの作り方が身につかないので、勉強がてらやってみました。

前提

  • Homebrewをインストールして
  • Homebrewからrbenvや、mysqlをインストールして
  • rbenvからRubyをインストールします

Rubyがインストールできれば、gem(Rubyのパッケージ管理ツール)が使えるので、gemからbundler(gemのver.管理ツール)やRailsをインストールします。

ここらへんの設定は、省略します。

その辺の設定は以下を参考にしてください。

環境

  • macOS HighSierra 10.13.6
  • Rails 5.2.0
  • Ruby 2.5.1
  • mysql 5.7.22
    • mysqlはdockerに作成
  • Docker version 18.03.1-ce

グローバルにあるRubyをなるべく汚さずに環境構築

Railsチュートリアルや入門書には、以下のように、GemパッケージとしてのRailsや、Railsプロジェクトをインストールするのを見ます。

$ gem install rails
$ rails new project

これだと、グローバルにgemがインストールされてしまいます。自分の場合だとrbenvを使っているので、

/Users/ユーザ名/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems

にインストールされるでしょう。

一生、1つのプロジェクトのみで開発する場合や、複数プロジェクト開発でも使用するパッケージのバージョンを1つ1つ合わせるなら別ですが、自分はその予定ではないので、グローバルなRubyにはBundlerだけインストールされてる状態にします。

以下、参考図←ちなみに、図はdraw.ioで、赤い注釈はSkitchで作成。それぞれ便利でした。

スクリーンショット 2019-03-16 15.17.15.png

図を見てもらうとわかりやすいですが、Rubyのバージョンは、プロジェクト毎にrbenvで管理します。そして、それぞれのgemのバージョンは、プロジェクト毎にBundlerで管理したいので、プロジェクト内にインストールします。ちなみに、RailsもGemのパッケージで、これもプロジェクト内インストールすることで、プロジェクト毎に任意のバージョンにできます。

ちなみに、この後の説明で出て来ますが、Railsプロジェクトを立ち上げるために、開発用サーバを起動するコマンドを実行しますが、

以下の2つのコマンドには違いがあります。

$ bundle exec rails s

こちらは、(おそらく同階層にある)RailsプロジェクトのGemfileで指定された環境でのサーバ起動

$ rails s

こちらは、グローバル環境でのサーバ起動です。今ままで区別わからず起動してました。

ここら辺の話は、この記事が参考になりました。

では、作業ディレクトリを作ります。

Railsプロジェクトをインストールするための作業するディレクトリを作成

作業ディレクトリの作成
$ mkdir my_blog
$ cd my_blog

この作業ディレクトリ名が、プロジェクト名になります。

次に、プロジェクト内のBundlerでGemを管理するために、Gemfileを作ります。

Gemfileの作成

Gemfileの作成
$ bundle init

Writing new Gemfile to /Users/ユーザー名/~/Gemfile

Gemfile内にあるgem "rails"のコメントアウトだけ消します。

スクリーンショット 2019-03-16 16.58.09.png

インストールが完了したら、Railsプロジェクトの作成をします。

Railsプロジェクトの作成

Railsプロジェクトの作成
$ bundle exec rails new . -d mysql
  • -d で使用するDBを指定
  • .でカレントディレクトリにRailsプロジェクトを作成する。という指定
Railsプロジェクトの作成
$ bundle exec rails new . -d mysql
       exist
      create  README.md
      create  Rakefile
      create  .ruby-version
      create  config.ru
      create  .gitignore
    conflict  Gemfile
Overwrite /Users/ユーザー名/~/Gemfile? (enter "h" for help) [Ynaqdhm]

実行すると、Gemfileを上書きしていいかと問われるので、Yesする。あとは、プロジェクトに必要なgemのインストールですね。

補足

自分の環境に限ったことかもしれませんが、rails newして、Gemfileを上書きしようとしたら、以下のようなエラーが出ました。

...
Permission denied @ rb_sysopen - /Users/ユーザ名/my_blog/Gemfile

書き込みの権限がなかったので、変更したら、Gemfileの上書きができました。

~/my_blog ❯❯❯ ll
-r--r--r--  1 ryosuke  staff   144B  3 16 16:57 Gemfile

$ chmod 644 Gemfile

~/my_blog ❯❯❯ ll

-rw-r--r--  1 ryosuke  staff   144B  3 16 16:57 Gemfile

Railsなど、必要なgemのインストール

Railsインストール
$ bundle install --path=vendor/bundle -j4

これで、グローバルのRuby配下じゃなく、プロジェクト(my_blog)ディレクトリ配下にあるvendor/bundleディレクトリ内にgemがインストールされます。

スクリーンショット 2019-03-16 17.25.50.png

また、オプションの-j4をつけることで、並列処理してくれる(らしい)ので、インストールが早くなります。

参考: https://qiita.com/camelmasa/items/5ca27ab398f105f86c76

DB作成

まず、config/database.ymlにあるhost,username,password,databaseを、ご自身のMySQLや、今回のプロジェクトに合わせて変更してください。
セキュリティ上、詳しく書けません。←なので自分以上に初心者の方は、ここでつまづきそうな予感。。

$ bundle exec rails db:create

Created database 'my_blog_development'
Created database 'my_blog_test'

MySQLにログインして、DBが作成された事を確認します。

mysql> show databases;
+-----------------------------------+
| Database                          |
+-----------------------------------+
| my_blog_development               |
| my_blog_test                      |
+-----------------------------------+

DBが出来た事を確認できました(他のDBなどは省略してます)。

ローカルサーバの立ち上げ

$ bundle exec rails s

ブラウザで http://localhost:3000/ にアクセスして

スクリーンショット 2019-03-16 17.53.17.png

こんなん出ればOKです。

以上です!

作成手順(説明なし版)

実行するコマンドだけ取り上げると

# 作業ディレクトリの作成
$ mkdir my_blog
$ cd my_blog

# Gemfileの作成
$ bundle init

# Railsプロジェクトの作成
$ bundle exec rails new . -d mysql

# Railsなど、必要なgemのインストール
$ bundle install --path=vendor/bundle -j4

# DB作成
$ bundle exec rails db:create

# ローカルサーバの立ち上げ
$ bundle exec rails s

エンジニア名乗るなら、これくらいは15分でサクッと作れるようになりたいですね。

参考

ryosuketter
偏差値50台 大学理系院卒、一部上場企業でWebエンジニア(3年目)半人前レベル。普通の34歳おっさんでも頑張ったら一人前のフロントエンドエンジニアになれるのか?の検証 Qiita です。
https://note.com/ryosuketter
life-a-tm
人生のイベントや日常生活に密着した比較サイト、情報サイト等様々なウェブサービスを企画・開発・運営
https://life.a-tm.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away