Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Vagrantで作るRails開発環境構築
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Tetsushi Hasesaku
September 03, 2018
Programming
320
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vagrantで作るRails開発環境構築
Vagrantで作るRails開発環境構築
Tetsushi Hasesaku
September 03, 2018
More Decks by Tetsushi Hasesaku
See All by Tetsushi Hasesaku
コードリファクタリングの手引き
hare8563
2
700
Dockerで作るRails実行環境
hare8563
0
340
VagrantとDockerで作る、ポータブル開発環境
hare8563
2
830
Other Decks in Programming
See All in Programming
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
740
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
460
GKE アップグレード前に知っておきたい Blue/Green と PDB の関係
stkk
0
130
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
130
LL言語やWebフレームワークのPostgreSQL対応 〜DBの機能がユーザーに届くまで〜
kentaroutakeda
0
110
AI駆動開発にグラフDBを重ねてみた
satoshi256kbyte
2
580
仕様駆動開発の消費期限
watany
20
9.2k
片田舎のおっさん、 Swift Buildのダイアモンド問題解決の不具合修正PRを出すが、解決方法がキャッシュをしないようにすることであり、ビルド時間が伸びると言われてマージされないので高速化もする/swiftbuild
yimajo
0
340
MySQLとPostgreSQLって何が違うの?
akagami
0
150
XHTMLが残したもの
yosuke_furukawa
PRO
1
330
[DroidKaigi 26] How We Moved from Android Studio to Slack
thisaay
0
150
[PyCon KR 2026] More Variants, More Diversity for AI Accelerators
achimnol
0
130
Featured
See All Featured
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
260
Tips & Tricks on How to Get Your First Job In Tech
honzajavorek
1
710
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
320
Believing is Seeing
oripsolob
1
200
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
sira's awesome portfolio website redesign presentation
elsirapls
0
380
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
400
Producing Creativity
orderedlist
PRO
348
41k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
270
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
230
Transcript
Vagrantで作るRails開 発環境構築
自己紹介 晴佐久 哲士 (ハレサク テツシ) ピクシブ株式会社 中途入社1ヶ月 サーバサイドエンジニア 好きな言語はC++ 趣味は、プログラミングとCG作成
2
Vagrant?
Vagrantとは • ホストマシンからゲストマ シンを便利に扱うための CLIツール • コードベースでVMの設定 を記述可能 4
Rails?
Railsとは Ruby on Rails • Rubyで使うサーバサイド フレームワーク • MVCアーキテクチャ •
“設定より規約”を意識した 開発スタイル
MVC
Vagrantで作ると何がいいの?
VagrantとDockerを使うメリット • 開発環境のポータビリティ性が高まる ◦ どこの、誰の、どんな環境でも構築可能 • 開発環境のバージョン管理が可能 • ディレクトリ共有でホストと開発環境間で効率的に作業が可 能
9
10 バージョン管理ができるため、構築が簡単 Gitからcloneすれ ばすぐに作れる
環境を同一化できるため、自分だけ動かないことはない 11
何かあった時のPCの移行も簡単 12
では、作って見ましょう
0. VagrantとVirtualBox のインストール
下記、リンクからそれぞれダウンロードとインス トールをお願いします VirtualBox:http://www.oracle.com/techn etwork/server-storage/virtualbox/downlo ads/index.html?ssSourceSiteId=otnjp Vagrant: https://www.vagrantup.com/
1. VagrantFile作成
VagrantFile 17 VMの構成を記述した、スクリプト VAGRANTFILE_API_VERSION="2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "centos/7"
config.vm.synced_folder ".", "/vagrant", type: "virtualbox" config.vm.network :forwarded_port, guest:8080, host:8080, id:"http" config.vm.provider "virtualbox" do |v| v.name = "vm_name" v.cpus = 2 v.memory = 1024 end end 構築のベースになる環境 (box) 構築するマシンの構成
テンプレ作成 環境を構築したいディレクトリ配下で、下記コマンド実行 vagrant init
VMの構成編集 今回は、以下のような構成にします ディストリビューション: centos7 CPUコア: 1 メモリ: 1024 ポートフォワード: localhost:8080
-> 3000
VMの構成編集 `vagrant init`で作成された、VagrantFileを編集 Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.network
:forwarded_port, guest: 3000, host: 8080 config.vm.provider "virtualbox" do |v| v.name = "spz-colab" v.cpus = 1 v.memory = 1024 end end
では、VMを立ち上げて見ましょう
VMの起動 vagrant up
VMに接続 vagrant ssh
2. ディレクトリ共有
vbguestプラグインのインストール VirtualBox にGuest Additionをインストールするプラグイン `vbguest`をインストール vagrant plugin install vagrant-vbguest
Vagrant ファイル修正 Vagrant.configure("2") do |config| config.vm.box = "centos/7" config.vm.synced_folder ".",
"/vagrant", nfs: true config.vm.network :private_network, ip: "192.168.33.57" config.vm.network :forwarded_port, guest: 3000, host: 8080 config.vm.provider "virtualbox" do |v| v.name = "spz-colab" v.cpus = 1 v.memory = 1024 end end 2行追加 ※ Macの場合はnfs共有で設定 しているが、Windowsの場合は nfsが使えないため、,nfs: trueの 部分は入れず、VirtualBoxの共 有機能を使うこと
ディレクトリ共有を反映 vagrant reload 修正を反映させるため、VMを再起動し直します
3. 初回起動時設定各種
3.1 ロケール
日本語ロケールの設定 VagrantFile内のconfigブロックの中に下記を記載 # ロケール設定 config.vm.provision :shell, inline: <<-SHELL localedef -i
ja_JP -f UTF-8 -A /usr/share/locale/locale.alias ja_JP.UTF-8 yum install -y ibus-kkc vlgothic-* localectl set-locale LANG=ja_JP.UTF-8 source /etc/locale.conf SHELL
3.2 MySQL
MySQLのインストール VagrantFile内のconfigブロックの外に下記を記載 定数を定義 MYSQL_RPM_PATH='https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'.freez e MYSQL_USER='root'.freeze MYSQL_PASSWORD="1q2w3e4r5t%=Z".freeze
MySQLのインストール VagrantFile内のconfigブロックの中に下記を記載 config.vm.provision :shell, inline:<<-SHELL yum update yum remove -y
mariadb-libs rm -rf /var/lib/mysql/ yum localinstall -y #{MYSQL_RPM_PATH} yum install -y mysql mysql-devel mysql-server mysql-utilities systemctl start mysqld.service systemctl enable mysqld.service tmp_password=`cat /var/log/mysqld.log | grep password | head -1 | awk -F' ' '{print $NF}'` mysql --user=#{MYSQL_USER} --password=\${tmp_password} --connect-expired-password -e "SET PASSWORD = PASSWORD('#{MYSQL_PASSWORD}');" SHELL
3.3 Ruby
Gitのインストール rbenvのインストールにgitが必要なので、インストール # vagrant内部で利用するGitのインストール config.vm.provision :shell, inline: <<-SHELL yum install
-y git yum install -y gcc gcc-c++ openssl-devel readline-devel SHELL
インストールするRubyバージョン指定 VagrantFile内のconfigブロックの外に下記を記載 定数を定義 MYSQL_RPM_PATH='https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm'.f reeze MYSQL_USER='root'.freeze MYSQL_PASSWORD="1q2w3e4r5t%=Z".freeze RUBY_VERSION="2.4.3".freeze 1行追加
各種Rubyに必要なものをインストール VagrantFile内のconfigブロックの中に下記を記載 config.vm.provision :shell, privileged: false, inline: <<-SHELL git clone
https://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile source ~/.bash_profile git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build rbenv install #{RUBY_VERSION} rbenv global #{RUBY_VERSION} rbenv rehash gem install bundler curl --silent --location https://rpm.nodesource.com/setup_8.x | bash - yum install -y nodejs SHELL
各種Rubyに必要なものをインストール VagrantFile内のconfigブロックの中に下記を記載 config.vm.provision :shell, privileged: false, inline: <<-SHELL git clone
https://github.com/sstephenson/rbenv.git ~/.rbenv echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile echo 'eval "$(rbenv init -)"' >> ~/.bash_profile source ~/.bash_profile git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build rbenv install #{RUBY_VERSION} rbenv global #{RUBY_VERSION} rbenv rehash gem install bundler curl --silent --location https://rpm.nodesource.com/setup_8.x | bash - yum install -y nodejs SHELL vagrantユーザでシェルを実 行するためのオプション
ここまでの設定を反映
Provisionを実行する vagrant provision
Provisionとは • `vagrant up`のタイミングで起動時に実行されるスクリプト • 本来は初回構築時に1回だけ呼ばれるスクリプトだが、 `vagrant provision`で明示的に実行することが可能
4. Rails プロジェクトの作成
Gemfileの作成 vagrant ssh cd /vagrant mkdir spz-colab cd spz-colab bundle
init ディレクトリ共有をしているディレクトリ配下にRailsのプロジェク トを作成する
rails のインストール bundle install --path vendor/bundle Gemfileの`#rails`のコメントアウトを外し、下記コマンド実行
Railsプロジェクトの作成 • カレントディレクトリ配下でRailsコマンドが実行できるようになったため、下記コマ ンドでRailsプロジェクトのディレクトリにする bundle exec rails new . -d
mysql
database.ymlの修正 • config/database.ymlの接続先を、VagrantFileに書いた情報を元に設定する default: &default adapter: mysql2 encoding: utf8 pool:
<%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: 1q2w3e4r5t%=Z socket: /var/lib/mysql/mysql.sock パスワードを追加
DBの作成 • Railsプロジェクトで使うDBを構築する • CLIから下記コマンドを入力 RAILS_ENV=development bundle exec rails db:create
Rails サーバの起動 • ここまでで、Railsの環境が整ったため、試しにRailsサーバ を起動してみる。下記コマンドで、Railsサーバを稼働させる RAILS_ENV=development bundle exec rails server
-b 0.0.0.0
Rails サーバの起動 • ここまでで、Railsの環境が整ったため、試しにRailsサーバ を起動してみる。下記コマンドで、Railsサーバを稼働させる RAILS_ENV=development bundle exec rails server
-b 0.0.0.0 ここの「-b 0.0.0.0」はどのIPアドレスからでもサーバにアクセスできるようにするオプション。 これをつけないとVMの内部からしかアクセスできないため、このオプションをつける
Rails サーバの起動 • ホストマシンから http://localhost:8080/ に接続し、下記の画面が表示されるこ とを確認できたら、開発環境の完成です
5. Railsに触れてみよう
MVCの作成 • Railsは最初に説明した通りMVCアーキテクチャで作成され る • 下記、コマンドを実行することで簡単にその構造を作成でき る bundle exec rails
generate scaffold user name:string
DBのマイグレーション • Scaffold で作成しただけだと、アプリケーション上のコード は作成できても、実際に使うDB上のテーブルは構築されて いない • これを行うのがマイグレーションという作業 bundle exec
rails db:migrate
User設定 • ここまでできたら、サーバを動かし http://localhost:8080/users に接続して見ましょう • ユーザ情報を管理するページへアクセスできたら問題ない です
ルーティング • 「`/users` でユーザ画面が見れたけど、 http://localhost:8080/ で直接遷移させたい」と言う場合 は、ルーティングを変更しましょう • config/routes.rb を修正することで、任意のルーティングを
張ることができる
Rails.application.routes.draw do resources :users # For details on the DSL
available within this file, see http://guides.rubyonrails.org/routing.html root to: "users#index" end rootをUserコント ローラのindexに 変更
(challenge) ユーザ名を保存するときに”spz”を 末尾につける • 最後に、Railsアプリケーションで、ユーザ名を保存するとき に末尾に「spz」をつけて保存してみるようにしましょう • あえて解答はつけないため、わからないことがあれば調べ つつ試して見てください
最後に
VMの終了 • 開発環境を動かし続けておく必要がなければ、VMを終了さ せましょう vagrant halt
VMを作り直したい場合 • VMが不要になったので削除したい、新しく作り直してクリー ンな環境にしたいといったときは、下記コマンドでVMを消去 しましょう vagrant destroy
では、Railsでどんどん開発をつづけ ていってください