Railsプロジェクトの作り方を忘れてしまいがちなので、復習として記事にしておきます。
環境
- Ubuntu 22.04
- rbenv インストール済み
- ruby-build インストール済み
インストール方法はこちらに記載してあります。インストールしていない方は事前にインストールしてください。
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="~/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
rbenv -v
git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
sudo apt install -y build-essential libssl-dev zlib1g-dev
rbenv install --list
rbenv install 3.2.1
rbenv global 3.2.1
ruby -v
gem update
gem install bundler
bundle -v
Ruby のインストール
Ruby の最新安定バージョンが 3.2.1 なので今回はそれを使いましょう。.ruby-version ファイルを作成して使いたいバージョンを書き込みます。Ruby の最新バージョンは https://www.ruby-lang.org/ja/downloads/ で確認できます。
3.2.1
$ rbenv version
rbenv: version '3.2.1' is not installed (set by /path/to/repository/.ruby-version)
$ rbenv install # 必要なバージョンがインストールされていない場合はこちらを実行
$ rbenv version
3.2.1 (set by /path/to/repository/.ruby-version)
Rails のインストール
グローバルに rails がインストールされていない想定で、Gemfile を書いて rails コマンドを使えるようにしましょう。
$ bundle init
# gem "rails"
のコメントアウトを外します。
バージョンを指定しなければ最新バージョンがインストールされるので、バージョン指定はなくても大丈夫です。
# frozen_string_literal: true
source "https://rubygems.org"
gem "rails"
備考:バージョン指定する場合は gem "rails", "~> 6.0.1"
のように記載してください。このようにすると、6.0.x
まではアップデートできるようになります。
Gemfile を更新したら bundle install
を実行すると、rails コマンドが使えるようになります。
$ bundle install
備考:--path vendor/bundle
オプションは付けても付けなくても大丈夫です。付ける場合は後で .gitignore
に vendor/bundle
を追加するのを忘れないようにしましょう。
Rails リポジトリの初期化
rails new
を実行します。Gemfile は Y を押して上書きしてしまって大丈夫です。webpack を使うかどうかなどをオプションで設定できます。
$ bundle exec rails new . -B -d mysql --skip-turbolinks --skip-test --skip-git
exist
create README.md
create Rakefile
identical .ruby-version
create config.ru
conflict Gemfile
Overwrite /path/to/repository/Gemfile? (enter "h" for help) [Ynaqdhm] Y
......(以下省略)
バージョンを指定する場合は以下のようにします。
$ bundle exec rails new _6.0.1_ . -B -d mysql --skip-turbolinks --skip-test --skip-git
備考:オプションはこちらを参考にしました。
もし --skip-git
を指定しなかった場合はブランチが main
に変わってしまうので、元のブランチを checkout します。
$ git checkout master
代わりに --skip-git
を指定すると .gitignore
が作成されないようです。それでは困るので用意しましょう。
# 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 pidfiles, but keep the directory.
/tmp/pids/*
!/tmp/pids/
!/tmp/pids/.keep
# Ignore uploaded files in development.
/storage/*
!/storage/.keep
/tmp/storage/*
!/tmp/storage/
!/tmp/storage/.keep
/public/assets
# Ignore master key for decrypting credentials and more.
/config/master.key
Rails の最新バージョンがインストールされていることを確認しましょう。
$ cat Gemfile | grep '"rails"'
# Bundle edge Rails instead: gem "rails", github: "rails/rails", branch: "main"
gem "rails", "~> 7.0.4", ">= 7.0.4.2"
.gitignore
に vendor/bundle
を追加する場合はこのタイミングで行います。
Rails の依存パッケージをインストールします。
$ bundle install
DBの初期化と起動
パスワードは空でも良いのですが、最近のUbuntuではmysqlに空のパスワードを設定することを許可してくれないので、今回はデータベースのパスワードを設定しましょう。.env
にパスワードを記載して、環境ごとに読み込めるようにします。
gem 'dotenv-rails'
$ bundle install
MY_APP_DATABASE_PASSWORD='<ここにmysqlのrootパスワードを記載>'
MY_APP_DATABASE_PASSWORD=
default: &default
password: "<%= ENV.fetch("MY_APP_DATABASE_PASSWORD") { "" } %>"
.env
参考:
$ bundle exec rails db:create
$ bundle exec rails db:migrate
ここで db/schema.rb
が作成されます。
$ bundle exec rails server
http://localhost:3000
にアクセスできるか確認しましょう。
(URL が https になっていてアクセスできない場合があるようなので注意)
slim のインストール
gem 'slim-rails'
gem 'html2slim'
$ bundle install
# erb を slim に変換して erb を削除
$ bundle exec erb2slim app/views/ app/views/ --delete --trace
補足:undefined method 'exists?' for File:Class (NoMethodError)
というエラーが出た場合は、 File.exist? に書き換える。
$ bundle exec erb2slim app/views/ app/views/ --delete --trace
bundler: failed to load command: erb2slim (/home/yuinore/.rbenv/versions/3.2.1/bin/erb2slim)
/home/yuinore/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/html2slim-0.2.0/lib/html2slim/converter.rb:17:in `initialize': undefined method `exists?' for File:Class (NoMethodError)
erb = File.exists?(file) ? open(file).read : file
^^^^^^^^
Did you mean? exist?
- erb = File.exists?(file) ? open(file).read : file
+ erb = File.exist?(file) ? open(file).read : file
最近修正がマージされたようなのでしばらくしたら rubygems にも降ってくると思います。
rubocop のインストール
group :development do
gem 'rubocop', require: false
gem 'rubocop-performance', require: false
gem 'rubocop-rails', require: false
end
.rubocop.yml
を作成します。
require:
- rubocop-performance
- rubocop-rails
AllCops:
NewCops: enable
Style/Documentation:
Enabled: false
$ bundle install
$ bundle exec rubocop --autocorrect
$ bundle exec rubocop --autocorrect-all
annotate のインストール
annotate を使うとスキーマ情報をモデルに書き出してくれます。
group :development do
gem 'annotate'
end
$ bundle install
$ bundle exec rails g annotate:install
$ bundle exec rails db:migrate