はじめに
Rails環境の既存プロジェクトの開発をしていると、なかなかRailsプロジェクトを1から開発することはありません。そうなると、プロジェクトの作り方が身につかないので、勉強がてらやってみました。
前提
- Homebrewをインストールして
- Homebrewからrbenvや、mysqlをインストールして
- rbenvからRubyをインストールします
Rubyがインストールできれば、gem(Rubyのパッケージ管理ツール)が使えるので、gemからbundler(gemのver.管理ツール)やRailsをインストールします。
ここらへんの設定は、省略します。
その辺の設定は以下を参考にしてください。
- https://fukatsu.tech/environment-ruby-on-rails
- https://gabekore.org/mac-ruby-rails-overview
- https://techacademy.jp/magazine/4630
環境
- 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で作成。それぞれ便利でした。
図を見てもらうとわかりやすいですが、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の作成
$ bundle init
Writing new Gemfile to /Users/ユーザー名/~/Gemfile
Gemfile内にあるgem "rails"
のコメントアウトだけ消します。
インストールが完了したら、Railsプロジェクトの作成をします。
Railsプロジェクトの作成
$ bundle exec rails new . -d mysql
- -d で使用するDBを指定
-
.
でカレントディレクトリに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のインストール
$ bundle install --path=vendor/bundle -j4
これで、グローバルのRuby配下じゃなく、プロジェクト(my_blog
)ディレクトリ配下にあるvendor/bundleディレクトリ内にgemがインストールされます。
また、オプションの-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/ にアクセスして
こんなん出れば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分でサクッと作れるようになりたいですね。
参考
- https://qiita.com/yuitnnn/items/b45bba658d86eabdbb26
- https://qiita.com/youcune/items/222777415f00d19cccb4
- http://niwatako.tips/20150517/article211.html
- https://blog.tokoyax.com/entry/ruby/bundler
- https://utano.jp/entry/2016/07/rails-bundle-install-gem-inner-project/
- https://qiita.com/ryosuketter/items/445b1ffef8eac5b63415