概要
本記事では、1Password の CLI ツールを活用して .env ファイルを安全に管理し、開発環境の構築を高速化する方法について詳しく解説します。従来の手動での環境変数設定から、1Password を活用した自動化された環境構築への移行により、新規開発者のオンボーディング時間を大幅に短縮できます。
従来の開発環境構築の課題
1. 環境変数の手動設定による時間の浪費
- 開発者が環境変数を手動で設定する必要がある
- 設定漏れや誤った値の設定によるエラーが頻発
- 新規開発者のオンボーディングに時間がかかる
- 環境変数の管理が属人化しやすい
2. 環境の不整合
- 開発者間で環境変数の値が異なる
- 本番環境と開発環境の設定差異
- 環境変数の更新時の同期漏れ
これらの課題を解決するため、1Password を活用した環境変数管理システムの導入を決定しました。
1Password CLI の設定
初期設定
# 1Password CLI のインストール
brew install 1password-cli
# 1Password へのサインイン
op signin
環境変数ファイルの保存
1Password のドキュメント機能を使用して .env ファイルを安全に保存します:
# .env ファイルを1Passwordに保存
cat .env | op document create ".env" --vault "project-secrets"
Makefile による自動化
環境構築の自動化
# Makefile
RUN := run --rm
DOCKER_COMPOSE_RUN := docker compose $(RUN)
args := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
init:
@make install_1pass_cli
@make refresh_env
@make build
@make install_dependencies
@make db_setup
install_1pass_cli:
brew install 1password-cli
refresh_env:
echo "[Enter your sign-in address] と表示された場合、[your-org.1password.com] と入力してid/passを指定してください。"
eval $(op signin); op document get ".env" --vault "project-secrets" > .env
upload_env:
sh upload_envfile.sh
build:
docker compose build
rebuild:
docker compose build --force-rm --no-cache
install_dependencies:
${DOCKER_COMPOSE_RUN} web ~~~~~~
db_setup:
${DOCKER_COMPOSE_RUN} web ~~~~~~
up:
docker compose up
upd:
docker compose up -d
down:
docker compose down
設定の特徴
-
ワンコマンド初期化:
make initで開発環境を一括構築 - 1Password 連携: 環境変数を 1Password から自動取得
- Docker 統合: Docker Compose との連携で一貫した環境構築
環境変数ファイルの同期スクリプト
アップロードスクリプトの実装
#!/bin/bash
# upload_envfile.sh
echo "sign in to 1password"
eval $(op signin) > /dev/null;
echo "sign in success!"
if op document get ".env" --vault "project-secrets" > /tmp/.env_remote; then
if diff /tmp/.env_remote .env > /dev/null; then
echo "diffがありません"
else
echo "========"
diff /tmp/.env_remote .env
echo "========"
echo ".envファイルをアップロードしますか? (y/n): "
read yn
case $yn in
[Yy]*)
if eval $(op signin); cat .env | op document edit ".env" --vault "project-secrets"; then
echo ".envファイルが正常にアップロードされました"
else
echo ".envファイルのアップロードに失敗しました"
fi
;;
[Nn]*) echo "アップロードをキャンセルしました" ;;
*) echo "無効な入力です。アップロードをキャンセルしました" ;;
esac
fi
rm /tmp/.env_remote
else
echo ".envファイルは1passwordに存在しません"
fi
スクリプトの特徴
- 差分チェック: ローカルとリモートの環境変数ファイルを比較
- 安全な更新: ユーザーの確認を得てからアップロード
- エラーハンドリング: 失敗時の適切なエラーメッセージ表示
- 一時ファイル管理: 比較用の一時ファイルを適切に削除