Edited at

WindowsでDocker+Rails(MySQL)環境を作る+便利なツール紹介


This is 何?

WindowsでDocker+Rails環境を作る手順書と便利なツールの紹介です。

とりあえず動かせるようになるのが目的のため、「Dockerとは」「なぜDockerなのか」や各種コマンドの意味などは省略しています。

基本的にメンティーの方に伝える様に書きましたが、独学で勉強されている方などにも役に立つかもと思って公開しています。

普段はMacを使っており動作確認ができないので、違う箇所があったらコメント欄・編集リクエストにてご指摘ください:bow:

アプリは全て無料で使用できるもののみ載せています。

環境


  • Windows10 Home(64bit)

Railsを動かすために入れるもの


  • Docker Toolbox

  • Ruby 2.5.1

  • Rails5.2.1(mysql8.0.17)

アプリ開発に便利なツールその1(すぐに役立つもの)


  • Visual Studio Code

  • TortoiseGit

  • WinMerge

アプリ開発に便利なツールその2(必要になったらいれるもの)


  • A5:SQL Mk-2

  • RLogin

  • WinSCP

  • PuTTY

  • Clibor


Docker

Windows上で開発を進めるのは少し難しい場合があるので、Dockerという仮想化技術を使います。

すごく雑に説明すると仮想のLinuxマシンをWindows上に立てる技術です。

WindowsでDockerを使う場合、Docker for WindowsまたはDocker ToolBoxを使います。

Docker for WindowsにはHyper-Vという仮想化機能が必要ですが、Windows 10 Homeではこの機能を使えない為Docker ToolBoxを使います(Proを使っている場合はDocker for Windowsを使います)。


0. CPU仮想化有効の確認

CPU仮想化が有効になっているか確認し、無効であれば有効にします。


1. Docker Toolboxのダウンロード

Install Docker Toolbox on WindowsからDocker Toolboxをダウンロードします(Toolbox Releasesのリンクの最新版からexeファイルをダウンロード)

(Legacy desktop solutionって書いてあって悲しい)

(VirtualBox同梱なのすごい)


2. Docker Toolboxのインストール

ダウンロードしたファイルを開いてインストーラを起動。

基本的にデフォルト選択のまま進めていって大丈夫です。


3. Terminal起動

Docker Quickstart Terminalをダブルクリックで開き、しばらく待ちます。

クジラ絵文字が画面に表示されたら下記コマンドを入力して、Docker version 19.03.1, build 74b1e89のようなバージョン情報が返ってきたらインストール完了です。

$ docker --version

($は入力しません)

途中Docker Hubのアカウント作成を求められるかもしれません。

とりあえず今(イメージのPullをするだけ)は不要、またいつでも作れるのでスキップして構いません。


Ruby & Rails

RubyとRailsをDockerで動かす準備をします。


1. Dockerコンテナを作る準備

任意の場所にフォルダを作ります。今回はc:\projects\rails_practiceに作ったと仮定します。

下記テキストファイルたちを作ります。

(DockerfileGemfileに拡張子は必要ありません)

rails_practiceフォルダ

- Dockerfile
- docker-compose.yml
- Gemfile
- Gemfile.lock
- mysqlフォルダ
- confdフォルダ
- default_authentication.cnf

それぞれ、下記のスクリプトをコピーして保存します。


Dockerfile

FROM ruby:2.5.1

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp


docker-compose.yml

version: '2'

services:
db:
image: mysql:8.0.17
restart: always
environment:
MYSQL_ROOT_PASSWORD: "password"
volumes:
- ./mysql/volumes:/var/lib/mysql
- ./mysql/confd:/etc/mysql/conf.d
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
environment:
USER: "root"
PASSWORD: "password"


(mysql8.0.17は2019年8月18日現在の最新版)


Gemfile

source 'https://rubygems.org'

gem 'rails', '5.2.1'


default_authentication.cnf

[mysqld]

default_authentication_plugin= mysql_native_password

(Gemfile.lockは空で構いません)


2. Dockerコンテナのビルド

コマンドプロンプトを開き、下記コマンドを入力します。

(コマンドプロンプトはWindowsキー→cmd.exeと入力→Enterキーで立ち上がります)

$ cd c:\projects\rails_practice

$ docker-compose build

cdChange Directoryの意味、指定ディレクトリ(フォルダ)に移動するというコマンドです。

docker-composeコマンドはdocker-compose.ymlファイルのあるディレクトリに移動して実行します。


3. Railsアプリを作る

rails newでRailsアプリが作れる準備が整いました。

下記コマンドを実行するとRailsアプリが作成されます。

エクスプローラでフォルダ(c:\projects\rails_practice)を開くと、たくさんのファイルが作られているのを確認できます。

$ docker-compose run web rails new . --force --database=mysql --skip-bundle

今回はRailsとデータベースを別々の仮想マシン上で動かしています。

rails newで作られる設定ファイルでは同じマシン上で動かすことが想定されているので、設定ファイルを修正します。

また、併せてデータベースのログイン情報をdocker-compose.ymlで指定したものを受け取るように修正します。

configフォルダのdatabase.ymlをテキストエディタで開き、16〜18行目を下記のように修正します。

# 修正前

username: root
password:
host: localhost
# 修正後
username: <%= ENV.fetch("USER") %>
password: <%= ENV.fetch("PASSWORD") %>
host: db


4. データベースを作成する

$ docker-compose run web rails db:create


5. Railsアプリが立ち上がることを確認する

下記コマンドをコマンドプロンプトで入力します。

$ docker-compose up

ログが表示されたのちに下記のような表示で止まったら無事Railsサーバが立ち上がっています。

web_1  | => Booting Puma

web_1 | => Rails 5.2.3 application starting in development
web_1 | => Run `rails server -h` for more startup options
web_1 | Puma starting in single mode...
web_1 | * Version 3.12.1 (ruby 2.5.1-p57), codename: Llamas in Pajamas
web_1 | * Min threads: 5, max threads: 5
web_1 | * Environment: development
web_1 | * Listening on tcp://0.0.0.0:3000
web_1 | Use Ctrl-C to stop

Webブラウザを開いてlocalhost:3000とアドレスバーに入力します。

老若男女たちがYay! You’re on Rails!と言っているイラストが表示されたら環境構築は完了です。

おつかれさまでした!

dockerはCtrl+Cキーで終了します。


6. よく使うコマンド

docker-composeコマンドは$ cd c:\projects\rails_practiceしてから入力します。


  • Dockerコンテナ上でRailsアプリを立ち上げる

    $ docker-compose up

  • Railsアプリを終了し、Dockerコンテナを終了する

    $ docker-compose down

  • Dockerコンテナ上でマイグレーションを行う

    $ docker-compose run web rails db:migrate


  • A server is already running.と言われたら

    Ctrl+Cキーを入力し、$ rm tmp/pids/server.pidを実行して再度docker-compose upします。

dockerコマンド、docker-composeコマンドはたくさんあります。

気になった時に調べてみてください。


各種ツールその1

プログラミングをするのに便利なツールの紹介です。


Visual Studio Code(テキストエディタ)

Visual Studio Code

Microsoftが提供している無料のテキストエディタです。よくVSCodeと省略されます。

軽量でプラグインも多く、MacとWindows(とLinux)のマルチプラットフォームで提供されています。

同じくMicrosoftが提供しているVisual Studioは統合開発環境(IDE)で異なるものです。

プラグインのインストール

インストールが完了したらVSCodeを起動します。

一番左側の列に並んでいるアイコン群の中の■が二重になったようなアイコンをクリックするとEXTENSIONSと表示されます。ここで各種プラグインを検索してインストールできます。

インストール、アンインストールが簡単にできるので、色々検索して試してみると面白いと思います。


  • Bracket Pair Colorizer 2

    bracketとは(){}[]などのかっこのことです。対になっているかっこが色つきで表示されて見やすくなります。


  • GitLens — Git supercharged

    今カーソルがいる行のGitの履歴を表示してくれるプラグインです。


Ruby、Rails関連のプラグインはたくさんありますが、Windows自体にRubyを入れる必要があるものが多いので、ここには記載しません。

超便利なので、慣れてきたら調べて導入してみるとよいと思います。

WindowsにRubyをインストールする手順はRailsGirlsの記事が詳しいです。


Git

Git(64-bit Git for Windows Setup)

バージョン管理を行うためのアプリです。

ダウンロードが完了したらインストーラをダブルクリックし、インストールを行います。


TortoiseGit

TortoiseGit

GitをGUI(コマンドではなくマウスで扱える画面)で使えるアプリです。

日本語版がいい場合、上記ページ内でスクロールするとJapaneseがあるので、64bit版をクリックしてダウンロードします。

ダウンロードが完了したらTortoiseGit本体(TortoiseGit-2.x.x.x-64bit.msi)をダブルクリックしてインストールし、完了後日本語パック(TortoiseGit-LanguagePack-2.x.x.x-64bit-ja.msi)をインストールします。

インストールが完了すると適当なフォルダで右クリックするとTortoiseGitのメニューが表示されるようになります。

設定は手元に環境ができず書けませんが、ひとまず設定から自分のGitアカウント(ユーザ名とメールアドレス)を入力しておくとよいと思います。

Gitをコマンド入力で扱いたい場合も、右クリックのメニューからGitBashで行えるようになります。


WinMerge

WinMerge

ファイルの差分をチェックする際に便利なアプリです。

インストールした時点でおそらく設定されるかと思いますが、されない場合、TortoiseGitの設定でこのアプリをデフォルトに設定しておくとgit addする際の差分のチェックがしやすくなります。


各種ツールその2

Webアプリを開発しはじめて、しばらくたって「なんか不便だな」と感じ始めたときに導入するととても便利なツールたちです。


A5:SQL Mk-2

公式サイト

Windows用のデータベースクライアントです(軽量・多機能・各種DB対応)。

すごく雑に説明すると、データベースの中身をエクセルのように表形式で確認・問い合わせ・更新できるアプリです。

Vector版、Microsoft Store版どちらでも構いません。わたしは以前Vector版を使っていました(Microsoft Store版がなかったという説もある)。


RLogin

公式サイト

Windows用端末エミュレータです。

すごく雑に説明すると、どこかのサーバに接続する時に使うアプリです。


WinSCP

公式サイト

Windows用のFTP、FTPS、SFTPクライアントプログラムです。

すごく雑に説明すると、どこかのサーバに接続してエクスプローラみたいな画面でファイルをアップロード・ダウンロードできるアプリです。


PuTTY

公式サイト

Windows用端末エミュレータ。

基本的にRLoginで事足りますが、ssh-keygenが同梱されているのが嬉しい。


Clibor

公式サイト

クリップボード履歴管理アプリ。

コピーした数個前までの履歴を保存・呼び出しができたり、定型文の登録ができたりするアプリです。


以上です。

よいエンジニアリングライフをお過ごしください:tada: