Posted at

数年ぶりのRails入門【セットアップ編】

バックエンドの開発はいろいろあります。

ただ、個人開発程度なら「rails」でいいんじゃね?的な感じに僕の中でなってきましたので、数年ぶりにRailsに入信したいと思います。

強くてニューゲームで今回はセットアップ!やってきます。


注意事項

この記事書きながらセットアップしています。

なので、ベストプラクティスな方法ではないと思います。

ご容赦ください。


事前準備

dockerでセットアップやってくぜい!なので、dockerとdocker-composeくらいはlocalマシンに導入しといてください。


セットアップ


railsパクってくる

docker hubの公式rails imageがあるのですが、更新が止まってる?っぽいので、今回はこれを使って開発環境を作っていきます。

https://hub.docker.com/r/bitnami/rails


docker-composeの作成

以下のようなdocker-composeを作成し、保存します。


docker-compose.yml

version: "3.2"

services:
app:
image: bitnami/rails:5.2.3-0
volumes:
- type: bind
source: ./app
target: /app
ports:
- "3000:3000"
command: sleep infinity
db:
image: postgres:10
environment:
- "POSTGRES_USER=postgres"
- "POSTGRES_PASSWORD=mysecretpassword1234"


作成したら以下コマンドでコンテナを作成し、コンテナ内へ入ります。


コマンド

docker-compose up -d

docker-compose exec app bash


railsアプリの作成

カレントディレクトリは/appになっているので、railsアプリを作成します。(今回はdb=postgresでかつapiモードで作成します。)


コマンド

rails new . --api -d postgresql


そしたらpqのGem周りで怒られるので、エラーがでないように修正します。


コマンド

・エラー文

An error occurred while installing pg (1.1.4), and Bundler cannot continue.
Make sure that `gem install pg -v '1.1.4' --source 'https://rubygems.org/'` succeeds before bundling.
---
・対応
sudo apt-get update
sudo apt-get install libpq-dev
bundle install

bundle installでエラーが出なくなればokです。

最後にdatabaseの接続設定を行っておきましょう。(default部分を以下のように編集します。)


config/database.yml

default: &default

adapter: postgresql
encoding: unicode
host: db # 追記[docker-composeで記述したdbサーバを指定]
username: postgres # 追記
password: mysecretpassword1234 #追記
# For details on connection pooling, see Rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

以下コマンドでdatabaseが作成されることを確認します。


コマンド

rails db:create



railsの起動

すべての準備は整いました。

railsを起動してみます。


コマンド

rails s -b 0.0.0.0


スクリーンショット 2019-04-01 11.15.23.png


おわりに

docker使うとlocalが汚れないし、複数メンバーでの開発の場合、開発環境に差異が生まれにくい、かつ、高速で環境構築できるのでいいですね〜。

ただ、知見ないとハマりやすくはありますが。。。

railsの公式ページを見てるとv6がbetaバージョンで公開されていますね。

v6でどういった進化を遂げるか期待です!