この記事の目的
今週の初めに以下の手順通り、Homebrewのインストールから、Rubyのセットアップまで、開発環境の構築を行いました。
そして今週の終わりに、この手順を自動化するシェルスクリプトを作成しました。初めて作成して、自動化の有益性を実感したのでここに記します。
App/construct_dev.sh
以下がシェルするクリプトです。
#!/bin/bash
# 環境変数
RUBY_VERSION=2.7.1
MYSQL_VERSION=5.7
RAILS_VERSION=6.0.3
DATABASE_HOST=127.0.0.1
LDFLAGS="-L/usr/local/opt/openssl@1.1/lib"
# 必要なパッケージのインストール
sudo curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow
git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-cask fetch --unshallow
brew update
brew install ruby rbenv ruby-build mysql@$MYSQL_VERSION shared-mime-info gnu-sed
# プロジェクト配下に移動
cd ~/App
# Rubyのセットアップ
rbenv install -s $RUBY_VERSION
rbenv local $RUBY_VERSION
rbenv rehash
# rubyとmysqlそれぞれにパスを通す
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
echo 'export PATH="/usr/local/opt/mysql@'$MYSQL_VERSION'/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
# 環境変数の設定
cp .env.example .env
gsed -i 's/DATABASE_HOST="0.0.0.0"/DATABASE_HOST="'$DATABASE_HOST'"/' .env
# 外部ライブラリのバージョン管理
bundle config --local build.mysql2 --with-ldflags=$LDFLAGS
# ローカルのRailsをセットアップ
gem install rails -v $RAILS_VERSION
# DBの起動
brew services start mysql@$MYSQL_VERSION
# Railsアプリケーションのセットアップ
bundle install
rails db:create
rails db:migrate
rails db:seed
スクリプトの説明
ここではスクリプトの実行条件と実行手順などを説明します。
スクリプトの実行条件
- ローカルでgit cloneができる状態であること
- clone先にこのスクリプトファイルが存在すること
- リモートリポジトリに環境変数を管理する
.env.example
ファイルが存在すること
スクリプトの実行手順
① プロジェクトのクローン
$ git clone git@github.com:user_name/repogitory_name.git ~/App
② スクリプトの実行
この時、XcodeとHomebrewそれぞれのインストールのために、パスワードの入力が2回求められます。
$ bash ~/App/construct_dev.sh
③ Railsアプリの起動
$ rails s
④ ローカルホストにアクセス
スクリプトのこだわりポイント
-
環境構築の手順を極限まで省略していること
git clone以外の作業をほぼ自動化していること(素晴らしい!w -
バージョン管理を環境変数を用いて管理していること
これはまさにスクリプトで環境構築をする利点で、開発環境をコードで管理できるようになります -
Mac環境に合わせて、ファイル内の文字の置換に
gsed
を用いていること
gsed -i 's/DATABASE_HOST="0.0.0.0"/DATABASE_HOST="'$DATABASE_HOST'"/' .env
参考記事
gsedコマンドについて
mysql2がbundle installできないエラーについて
この記事は以上です!シェルスクリプトは初めて記述しましたが、とても便利で個人的に他にも作成してみたいと思いました!最後までお読み頂きありがとうございました!