Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】🚀 How to Upload Environment Variables to GitLab CI/CD

2025年09月14日に「Dev.to」が公開したITニュース「🚀 How to Upload Environment Variables to GitLab CI/CD」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

GitLab CI/CDで環境変数を安全に設定し、自動テストなどのパイプラインで利用する方法を解説。APIキーなどの秘密情報や設定値を直接コードに書かず、GitLabの機能で一元管理することで、安全かつ効率的な開発を実現する。

ITニュース解説

システムエンジニアを目指す皆さんにとって、開発したソフトウェアを効率的かつ安全にデプロイ(配置)する技術は非常に重要である。その中心となるのがCI/CD(継続的インテグレーション/継続的デリバリー)パイプラインと呼ばれる自動化の仕組みだ。特にGitLab CI/CDは、コードの変更を検知し、自動的にテスト、ビルド、デプロイを行うための強力なツールとして広く利用されている。

しかし、この自動化のプロセスにおいて、APIキーやデータベースの接続情報といった機密性の高い情報(いわゆる「秘密情報」や「シークレット」)や、開発環境と本番環境で異なる設定値(「環境変数」)をどのように扱うかは大きな課題となる。これらの情報をコードの中に直接書き込んでしまう「ハードコーディング」は、セキュリティ上の大きなリスクを伴う。コードが公開されたり、誤って共有されたりした場合に、機密情報が漏洩する可能性があるためだ。また、環境ごとに設定値を変更するたびにコードを修正するのは非効率的であり、エラーの原因にもなりやすい。

今回のニュース記事は、GitLab CI/CDパイプラインにおいて、これらの環境変数を安全かつ効率的に管理し、利用するための具体的な方法を解説している。その鍵となるのが、GitLabに組み込まれている「CI/CD変数」機能の活用である。

まず、環境変数をGitLabに登録する手順から見ていこう。これは、GitLabのウェブインターフェース上で行う。

  1. GitLabプロジェクトの設定画面へ移動: GitLabの左サイドバーにある「Settings(設定)」をクリックし、さらに「CI/CD」を選択する。ここにはCI/CDパイプラインに関する様々な設定項目が集約されている。

  2. 変数(Variables)セクションの操作: 「CI/CD」の設定画面内には「Variables(変数)」というセクションがある。ここで、パイプラインが利用する環境変数を管理する。新しい変数を追加するには、「Add variable(変数を追加)」ボタンをクリックする。

  3. 変数の設定: 変数を追加する際には、いくつかの項目を設定する必要がある。

    • Key(キー): ここには、後でパイプラインスクリプト内でこの変数を参照するために使う名前を指定する。この記事では、ENV_VARSという名前が指定されている。このENV_VARSが単なる一つの変数名ではなく、後述のValueに記述する複数のキーと値をまとめて格納するファイル名を意図している点が重要である。
    • Value(値): ここに実際の環境変数の内容を記述する。例えば、API_KEY=your_api_key DB_HOST=localhost DB_USER=root DB_PASSWORD=your_passwordのように、複数のキーと値をスペースで区切って記述する。値自体は引用符(")なしで直接記入する。GitLabは、このValueの内容を安全に保持し、パイプラインの実行時に指定されたKey名でアクセスできるようにする。
    • Type(タイプ): 変数の種類を選択する。通常は「Variable(変数)」を選択するが、ファイルとして扱う場合は「File(ファイル)」を選択することもできる。この記事の例では、Valueの内容をファイルとしてパイプラインに渡すため、「File」タイプが適切である可能性が高いが、具体的な設定指示としては書かれていない。しかし、後述の.gitlab-ci.ymlでの利用方法を見ると、Valueの内容全体を一つのファイルとして扱うことを意図していることがわかる。
    • Protected(保護): このチェックボックスをオンにすると、その変数は特定の保護されたブランチやタグでしか利用できなくなる。これは、本番環境向けの機密情報を保護する際によく使われる機能である。しかし、この記事の例では「deselect protect variable(保護変数の選択を解除する)」と指示されているため、任意のブランチでこの変数を利用できる設定にしていると考えられる。これは、開発段階でのテストや、本番以外の環境での利用を想定している場合に便利だ。
    • Masked(マスク): これをオンにすると、パイプラインのログに値が表示されなくなる。機密情報を含む変数の場合は、必ずオンにすべき設定である。
    • Expanded(展開): 変数内で別の変数を参照するかどうかを決定する。
    • Visible(可視): この例では「select visible(可視を選択)」と指示されているが、通常は変数設定のデフォルトで表示される項目であるため、特定の目的があるかもしれないが、一般的な利用では意識しなくても良い場合が多い。

これらの設定を行うことで、環境変数はGitLabのサーバー上に安全に格納され、直接コードリポジトリにコミットされることがなくなる。

次に、これらのGitLabに登録された環境変数を、実際のCI/CDパイプラインの中で利用する方法を.gitlab-ci.ymlという設定ファイルを使って見ていこう。.gitlab-ci.ymlは、GitLab CI/CDの処理内容を記述するYAML形式のファイルである。

以下は、記事に記載されている.gitlab-ci.ymlの抜粋である。

1Autotest:
2  stage: test
3  image: node:22
4  before_script:
5    - cat "$ENV_VARS" | tr -d '\r' > .env

この設定は、Autotestという名前のジョブ(パイプライン内の個別のタスク)を定義している。

  • stage: test: このジョブが「test」ステージで実行されることを示している。CI/CDパイプラインは通常、ビルド、テスト、デプロイといった複数のステージに分かれている。
  • image: node:22: このジョブを実行するための環境を指定している。ここでは、Node.jsバージョン22がインストールされたDockerイメージを使用することを意味する。パイプラインは通常、分離されたDockerコンテナ内で実行されるため、必要なツールやランタイムをこのimageで指定する。
  • before_script:: ここに記述されたコマンドは、そのジョブのメインスクリプトが実行される前に毎回実行される。今回の例では、ここでGitLabに登録した環境変数を取得し、利用可能な形式に変換する処理を行っている。
    • - cat "$ENV_VARS": ここが重要なポイントである。GitLabのCI/CD変数として設定した「Key」の名前(この記事の例ではENV_VARS)が、パイプラインの実行環境に自動的に環境変数として注入される。この時、GitLabのCI/CD変数を「File」タイプで設定した場合、そのValueの内容が一時的なファイルに書き出され、そのファイルパスが$ENV_VARSに格納される。もし「Variable」タイプの場合、$ENV_VARSにはValueの内容が文字列として格納される。記事のcatコマンドの利用方法から、Valueに記述した内容がファイルとして扱われていることが示唆される。catコマンドは、そのファイルの内容を標準出力に表示する。
    • | tr -d '\r': catコマンドの出力はパイプ(|)を使ってtrコマンドに渡される。tr -d '\r'は、入力からキャリッジリターン(\r)文字を削除するコマンドである。これは、Windows環境で作成されたテキストファイルなどで使われるCRLF(\r\n)形式の改行コードを、Unix/Linux環境で一般的なLF(\n)形式に変換するためによく使われる。これにより、環境依存によるスクリプトエラーを防ぐことができる。
    • > .env: trコマンドによって処理された最終的な出力は、リダイレクト(>)によって.envという名前のファイルに書き込まれる。.envファイルは、多くのモダンなアプリケーション開発において、環境変数を設定するための標準的な方法として利用されている。例えば、Node.jsのdotenvライブラリなどは、この.envファイルから自動的に環境変数を読み込んでアプリケーションに渡す。

このようにすることで、GitLabに登録された環境変数の値が、パイプラインの実行時に一時的に.envファイルとしてコンテナ内に生成され、その後のテストやビルドのプロセスでアプリケーションから利用可能になる。

この一連の仕組みを導入することで、多くのメリットが得られる。まず第一に、機密情報がソースコードリポジトリから完全に分離され、ハードコーディングが不要になるため、セキュリティが大幅に向上する。開発者は機密情報を知らなくてもパイプラインを実行できるようになり、誤ってコミットしてしまうリスクもなくなる。

次に、環境ごとの設定の管理が非常に容易になる。開発環境、ステージング環境、本番環境といった異なる環境で異なる設定値が必要な場合でも、GitLabのCI/CD変数にそれぞれの環境用の値を登録しておけば、.gitlab-ci.ymlファイルを変更することなく、環境に応じた設定を自動的に適用できる。これは、CI/CDパイプラインの保守性と柔軟性を高める上で非常に重要だ。

また、設定の変更も簡単になる。GitLabのウェブインターフェース上で変数の値を更新するだけで、次回以降のパイプライン実行時にその新しい値が適用される。これにより、設定ファイルを手動で編集したり、サーバーにファイルをアップロードしたりする手間が省け、作業の効率化が図れる。

結論として、GitLab CI/CDに環境変数を安全にアップロードし、パイプライン内で利用するこの方法は、モダンなソフトウェア開発において不可欠なプラクティスである。システムエンジニアとして、このような自動化とセキュリティのベストプラクティスを理解し、実践する能力は、これからのキャリアにおいて非常に強力な武器となるだろう。機密情報の安全な管理と効率的なパイプライン構築は、高品質なソフトウェアを継続的に提供するための土台となる。

関連コンテンツ

関連IT用語