バイセル Tech Blog

バイセル Tech Blogは株式会社BuySell Technologiesのエンジニア達が知見・発見を共有する技術ブログです。

ヘッダー画像

環境構築をコマンドでまとめてみた

はじめに

こちらは バイセルテクノロジーズ Advent Calendar 2022 の 23 日目の記事です。 前日の記事は高谷さんの「全社員がSQLを書けるようBQの権限やデータソースを整理して運用している話(後編)」でした。

こんにちは!株式会社バイセルテクノロジーズのテクノロジー戦略本部に所属している田中です。

弊社では買取管理システムGYROというサービスを開発・運用しています。

GYROはGKE上にマイクロサービスとして構築されています。以下の図のようなリポジトリ群から成り立っており、今まではローカルで環境構築をする際には各リポジトリに対して環境構築のコマンドを一つずつ実行していました。

GYROの構成

この記事ではGYROの環境構築をコマンドでまとめて簡略化できたので、その方法を紹介します。

背景

直近3ヶ月でチームにjoinするメンバーが増えて、環境構築に関する質問が増えていました。Slackで新たにオンボーディング専用のチャンネルを作り、詰まっているところを共有して回答していました。 これには質問する側も回答する側もお互いに時間を取られていました。

環境構築中での質問

環境構築の資料に従って、記載されている順番に環境構築用のコマンドを実行していけば環境構築が終わるようになっていました。 資料にはコマンドを打つときの注意事項や手順が羅列されているだけだったため、作業者が読み解いてコマンドを実行する必要がありました。

そのため、以下の図のようにコマンドを実行する順番を間違えてしまうことやコマンドの打ち間違えが発生し、正常に環境構築が終わらないことがあり問題となっていました。今回は環境構築の手順を見直しました。

コマンドの実行ミス

取り組んだこと

それでは具体的にやったことをまとめていきます。

バックエンド(Rails)

まず、環境構築を行うそれぞれのリポジトリで実行していた各コマンドを、1つのコマンドで実行できるシェルスクリプトの中にまとめました。そして、Makefileから作成したシェルスクリプトを呼び出すことにしました。

Makefileにまとめるということも検討しましたが、もし今後複雑な手順になった場合にシェルスクリプトに切り出してあると改修しやすいと判断しました。

Makefile内で以下のようにsetupコマンドを設定しました。

setup:
    ./scripts/setup.sh ${GITHUB_USER_NAME_AND_TOKEN}

実行する際には make setup GITHUB_USER_NAME_AND_TOKEN=<githubのusername>:<personal access token> と指定して実行します。

*プライベートリポジトリで管理されたgemをbundle installできるように、GitHubのユーザ名とPersonal access tokenの設定が必要となります。

./scripts/setup.shの中身は以下の通りです。

export BUNDLE_GITHUB__COM=$1
cp .env.sample .env
git submodule update --init
make build
docker-compose up -d
docker-compose exec app bin/rails db:create
make db-migrate-up
make seed_fu

このように各リポジトリで一行ずつ打っていたコマンドをまとめて実行するようにしました。

コマンドをまとめることで、コマンドの打ち間違いや実行の順番の間違いが発生しなくなり、Slackでの質問数を削減できました。

Before

以下の手順を8つのリポジトリ全てに繰り返し実行していました。

*BFFに関してはdocker-compose up -dまで実行

  1. .env.sampleからコピーして .env ファイルを作成
  2. git submoduleで管理しているフィルを更新
  3. GitHubのユーザ名とPersonal access tokenの設定
  4. make build
  5. docker-compose up -d
  6. docker-compose exec app bin/rails db:create
  7. make db-migrate-up
  8. make seed_fu

After

各リポジトリで、以下のコマンドを実行するのみになりました。

  1. make setup GITHUB_USER_NAME_AND_TOKEN=<githubのusername>:<personal access token>

フロントエンド(Vue.js)

package.jsonscriptssetupコマンドを追加しました。

"scripts": {
    "setup": "brew install pyenv && pyenv install 2.7.18 && pyenv local 2.7.18 && yarn global add n && sudo n 10.15.1 && yarn && cp .env .env.local"
  }

事前にyarnのインストールした後に、yarn run setupと打つだけで環境構築をすることができるようになりました。

以前はnodeやpythonのバージョンを個人でそれぞれで設定していました。

nodeやpythonのバージョンを統一することで誰でも同じように再現することが可能になりました。

Before

  1. yarnのインストール
  2. pythonのインストール
  3. pythonのバージョン指定
  4. npmのインストール
  5. nodeのバージョンを指定
  6. .envからコピーして .env.local ファイルを作成

After

以下のコマンドを実行するのみになりました。

  1. yarnのインストール
  2. yarn run setup

まとめ

コマンドやスクリプトを用意したことで1時間ほどでローカル環境を立てられるようになりました。

またコマンド1つで実行できるようになったことで、手順を修正する場合にはコマンド内の処理を修正するだけで済む様になり、手順書の更新なども不要になったので、保守コストも削減できました。実際に環境構築に関する質問はなくなりました。

この記事が環境構築の手順をのみならず、繰り返し行なっている作業を簡略化・効率化するきっかけに、少しでも参考になれば幸いです。

最後に、バイセルではエンジニアを募集しています。少しでも気になった方はぜひご応募お待ちしています。

hrmos.co

明日のバイセルテクノロジーズ Advent Calendar 2022は小林さんの「実務で使った React-Hook-Form × Zod の事例紹介」です。そちらも是非読んでみてください!