direnv

GitHub Actionsでdirenvを使う

direnvをGitHub Actionsの作業工程に組み込んで.envrcファイルから環境変数を管理できます。 これが特に便利なのは以下の用途です。

基本的な使い方

direnv export ghaコマンドはGitHub Actionsにより要求される形式で環境変数を出力します。 以下は基本的な例です。

name: CI
on: [push, pull_request]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      
      - name: Install direnv
        run: |
          curl -sfL https://direnv.net/install.sh | bash
          echo "$HOME/.local/bin" >> $GITHUB_PATH
      
      - name: Load environment variables
        run: |
          direnv allow .
          direnv export gha > "$GITHUB_ENV"
      
      - name: Run tests
        run: |
          # .envrcからの環境変数は使えるようになっています
          echo "DATABASE_URL=$DATABASE_URL"
          make test

GitHub Actionsでのインストール方法

GitHub Actionsの作業工程でdirenvをインストールするにはいくつかの方法があります。

インストールスクリプトを使う(推奨)

- name: Install direnv
  run: |
    curl -sfL https://direnv.net/install.sh | bash
    echo "$HOME/.local/bin" >> $GITHUB_PATH

パッケージ管理器を使う

Ubuntuの実行器上では以下です。

- name: Install direnv
  run: sudo apt-get update && sudo apt-get install -y direnv

macOSの実行器では以下です。

- name: Install direnv
  run: brew install direnv

指定の版を使う

- name: Install direnv
  run: |
    wget -O direnv https://github.com/direnv/direnv/releases/download/v2.34.0/direnv.linux-amd64
    chmod +x direnv
    sudo mv direnv /usr/local/bin/

セキュリティ上の考慮事項

  1. 常にdirenv allowを使ってください : CIであっても、direnvは.envrcファイルを読み込むための陽な許可を要求します。
  2. 機密情報に注意 :機密扱いの環境変数をechoしたりログ出力したりしないでください。
  3. GitHub Actionsの機密情報を使ってください : 機密扱いの値はリポジトリにコミットするのではなくGitHub Actionsの機密情報に保管してください。

困ったときは

環境変数が使えない

GitHubの環境ファイルへ上塗りするために> "$GITHUB_ENV"を使っていることを確かめてください。

# 正
direnv export gha > "$GITHUB_ENV"

# 誤――標準出力へ印字されるだけ
direnv export gha

パーミッションが拒否されたエラーになります

direnvが実行可能でありPATHにあることを確かめてください。

- name: Install and setup direnv
  run: |
    curl -sfL https://direnv.net/install.sh | bash
    echo "$HOME/.local/bin" >> $GITHUB_PATH
    # 現在の工程でPATHを強制的に更新
    export PATH="$HOME/.local/bin:$PATH"
    direnv allow .
    direnv export gha >> "$GITHUB_ENV"

不具合対応

問題の不具合に対応する上で、direnvが何をしているのか調べられます。

- name: Debug direnv
  run: |
    direnv version
    direnv status
    cat .envrc
    direnv allow .
    direnv export gha

例:完全なNode.jsの作業工程

以下はNode.jsプロジェクトの完全な例です。

name: Node.js CI

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  test:
    runs-on: ubuntu-latest
    
    strategy:
      matrix:
        node-version: [18.x, 20.x]
    
    steps:
    - uses: actions/checkout@v4
    
    - name: Install direnv
      run: |
        curl -sfL https://direnv.net/install.sh | bash
        echo "$HOME/.local/bin" >> $GITHUB_PATH
    
    - name: Setup Node.js $
      uses: actions/setup-node@v4
      with:
        node-version: $
    
    - name: Load environment
      run: |
        # 存在しなければ .envrc を作成
        if [ ! -f .envrc ]; then
          cat > .envrc <<'EOF'
          export NODE_ENV=test
          export DATABASE_URL="postgresql://localhost/test_db"
          PATH_add node_modules/.bin
          EOF
        fi
        
        direnv allow .
        direnv export gha >> "$GITHUB_ENV"
    
    - name: Install dependencies
      run: npm ci
    
    - name: Run tests
      run: npm test
    
    - name: Run linter
      run: npm run lint

こちらも参照

日本語訳について

この日本語訳の原文はSetupです。

本文書の使用許諾は原文に従います。 翻訳の著作情報は以下の通りです。

MIT licence - Copyright (C) 2026 @gemmaro