1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

1Password で .env ファイルを管理して開発環境構築を高速化する

Posted at

概要

本記事では、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

スクリプトの特徴

  • 差分チェック: ローカルとリモートの環境変数ファイルを比較
  • 安全な更新: ユーザーの確認を得てからアップロード
  • エラーハンドリング: 失敗時の適切なエラーメッセージ表示
  • 一時ファイル管理: 比較用の一時ファイルを適切に削除

参考 URL

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?