Ruby on Rails

Ruby on Railsの新規プロジェクトを作成する

はじめに

今回Ruby on Railsで新規プロジェクトを作成することになったのでその手順をまとめていきます。
毎回作成のたびに調べながらあと何があったっけって考えるので備忘録としての意味も込めています。

MacRuby on Railsの環境構築をする手順は以下の記事にまとめてあるのでまだの人はこちらを参考にしてください。

初心者でも簡単!MacでRuby on Railsの環境構築をするこの記事ではMacOSにRuby on Railsをインストールする手順を解説しています。初心者の方にもわかりやすいように1つ1つ手順を意味も説明しながら解説しています。...

作成手順

開発環境

MacOS Mojave バージョン 10.41.1
ruby 2.5.0
Rails 5.2.1

Gemfileの作成とRailsのインストール

最初にRailsプロジェクトを作成していきます。
プロジェクト用のディレクトリを作成し、そのディレクトリ内でGemfileを作成していきます。
今回はsample-appというディレクトリを作成していきます。


$ mkdir sample-app
$ cd sample-app/
$ bundle init
Writing new Gemfile to /path/to/directry_name/Gemfile 

Gemfileが作成されるので編集していきます。
編集する箇所はgem "rails"の行のコメントアウトを外すだけです。


# frozen_string_literal: true
  
source "https://rubygems.org"

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

gem "rails" #ここのコメントアウトを外す

次にRailsをインストールしていきます。
--path vendor/bundleをつけることでプロジェクト内のvender/bundleという場所にgemがインストールされます。
これをつけないといけないのは最初だけでこれ以降はbundle installだけで大丈夫です。


$ bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/..........
Fetching gem metadata from https://rubygems.org/.
Resolving dependencies...
Fetching rake 12.3.1
Installing rake 12.3.1
Fetching concurrent-ruby 1.1.3
Installing concurrent-ruby 1.1.3
︙
︙
Fetching rails 5.2.1
Installing rails 5.2.1
Bundle complete! 1 Gemfile dependency, 41 gems now installed.
Bundled gems are installed into `./vendor/bundle`

これでインストールが完了です。
ポイントとしては普段では


$ gem install rails
$ rails new project-app

とすろのが一般的ですが、このようにしない理由としては、このやり方ではシステムのgemにインストールされてしまうのでシステムのgemをクリーンに保つために、vender/bundleに入れることでプロジェクトごとに別の場所にインストールして環境の依存度を減らすためにしています。

railsプロジェクトの作成

Railsのインストールができたので、実際にRailsプロジェクトを作成します。
オプションについてはあとで説明していくのでそれを見ながら作成したいプロジェクトに応じてオプションは適宜つけはずししてください。


$ bundle exec rails new . -B -d mysql --skip-test --skip-coffee

1つずつ説明すると、
まず先ほどvender/bundleに入れたのでbundle execで呼び出します。

rails newの後の「.」 現在のディレクトリに作成するという意味です。
-B Railsプロジェクト作成時にbundle installを行わないようにするものです
-d mysql DBmysqlに変更しています。デフォルトはsqlite3です。
–skip-test railsのデフォルトのminitestを使わないようにします。最近ではテストツールとしてRspecを使うのが主流なのでRspecを使う前提でつけています。
–skip-coffee javascriptをより簡単にかけるようになるRailsデフォルトで入っているcoffeeスクリプトを使わないようにします。

今回つけませんでしたが、
「–skip-turbolinks」というのもturbolinksをオフにするためのオプションで、今回は特につけませんでしたがつけるかつけないかで意見が分かれる部分です。turbolinksはページ遷移をAjaxに置き換え、JavaScriptCSSのパースを省略することで高速化するデフォルトで入っているgemですが、うまくやらないとjavascriptの読み込みがうまくいかなかったりとデメリットもあります。

他のオプションは$ rails new -hで確認できるので確認するといいかと思います。

Gitリポジトリの設定

Railsプロジェクトの作成が完了しましたので、Gitリポジトリの設定をして開発を進めていけるようにします。
先ほどのrails newの時点で.gitファイルは作成されていると思うのでgitコマンドが使えるかと思います。もしなければgit initしましょう。

先に.gitignoreをいじっておきます。.gitignoreではgit管理に含めないファイルを設定していきます。
基本的にはrails newの時点でRailsデフォルトの設定のものを作成してくれているのでプラスで設定したいものだけを書き換えます。
先ほど/vender/bundleにGemがインストールされるように設定したので、これを含めないように設定します。


# See https://help.github.com/articles/ignoring-files for more about ignoring files.
# 
# If you find yourself ignoring temporary files generated by your text editor
# or operating system, you probably want to add a global ignore instead:
#   git config --global core.excludesfile '~/.gitignore_global'

# Ignore bundler config.
/.bundle
/vendor/bundle #追加

# Ignore all logfiles and tempfiles.
/log/*
/tmp/*
!/log/.keep
!/tmp/.keep

# Ignore uploaded files in development
/storage/*
!/storage/.keep

/node_modules
/yarn-error.log

/public/assets
.byebug_history

# Ignore master key for decrypting credentials and more.
/config/master.key

これで完了です。ではGitリポジトリに紐付けていきましょう。


$ git add .
$ git commit -m "initial commit"
$ git remote add origin https://github.com/username/project_name.git
$ git push -u origin master

git remoteの部分はgithubでリポジトリを作成した際に指示されるのでそのURLを使いましょう。bitbucketなどでも同様です。

タイムゾーンの設定

タイムゾーンをJSTに設定します。
config/application.rbに以下を追加します。

    
config.time_zone = 'Tokyo'
config.active_record.default_timezone = :local

dotenvで環境変数を設定できるようにする

例えばパスワードといったgit管理に入れたくないものや各開発環境に応じて違うものを環境変数として設定してENV['HOGEHOGE']のようにアクセスできるようにします。
プライベートリポジトリならまだしもパブリックリポジトリでAPIキーなどをそのまま貼り付けていたらやばいことになってしまいます。

デフォルトでRailsでは環境変数を使うことができますが、ローカル環境で共通で使うことになるので複数プロジェクトで名前が競合する可能性があります。
dotenvを使うことでプロジェクトごとに環境変数を設定することができます。

Gemfileに以下を追加し、bundle installしましょう。


gem 'dotenv-rails'

カレントディレクトリ(appディレクトリなどがある階層)に、「.env」というファイルを作成し、ここに設定していきます。
具体的な書き方は以下でデータベースの設定をしていくのでそこで説明していきます。

データベースの設定

今回はmysqlを使用していきます。先ほどrails newをするときにmysqlを使用するオプションをつけたかと思います。
railsではconfig/database.ymlにデータベースの設定を書いていきます。


default: &default
  adapter: mysql2
  charset: utf8mb4
  collation: utf8mb4_bin
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: <%= ENV['RAILS_DATABASE_HOST'] %>
  username: <%= ENV['RAILS_DATABASE_USERNAME'] %>
  password: <%= ENV['RAILS_DATABASE_PASSWORD'] %>

development:
  <<: *default
  database: sample-app_development

test:
  <<: *default
  database: sample-app_test

production:
  <<: *default
  database: sample-app_production

このように設定しました。
databaseの部分がsample-app_developmentのようになっていますが、{プロジェクト名}_developmentのようになっているかと思います。test,productionも同様です。


charset: utf8mb4
collation: utf8mb4_bin
encoding: utf8mb4

この部分が重要で、デフォルトではutf8で設定されていて、このままでも良いのですが、絵文字など記録できないのでutf8mb4にするのが無難かと思います。一応後からでも変更できるので状況に合わせて設定しましょう。


host: <%= ENV['RAILS_DATABASE_HOST'] %>
username: <%= ENV['RAILS_DATABASE_USERNAME'] %>
password: <%= ENV['RAILS_DATABASE_PASSWORD'] %>

この部分が先ほどの環境変数です。今回はdotenvを使用しているのでカレントディレクトリに「.env」を作成します。


RAILS_DATABASE_HOST='localhost'
RAILS_DATABASE_USERNAME='username'
RAILS_DATABASE_PASSWORD='password'

内容は自分の環境に応じて適宜変更してください。

加えて「.env」gitignoreに追加しましょう。git管理に入れないために隔離したものを管理下から外さないと意味がありません。

ではデータベースの作成をしていきます。


$ bundle exec rake db:create RAILE_ENV=development
Created database 'sample-app_development'
Created database 'sample-app_test'

これでデータベースの作成が完了です。

Railsサーバーの起動

設定が完了したので起動していきましょう


$ rails s
=> Booting Puma
=> Rails 5.2.1 application starting in development 
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.0 (ruby 2.5.0-p0), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop

ブラウザで確認していきましょう。

無事確認できました。

まとめ

今回Railsのプロジェクト作成の手順をまとめていきました。あくまでも僕の手順なので状況に応じて取捨選択をしながらやれればと思います。

参考にした記事

https://qiita.com/yuitnnn/items/b45bba658d86eabdbb26