環境変数をラップすることで処理を共通化でき、その結果として次のような利点が得られます。

  1. 環境変数の追加忘れを即座に検知できる
  2. 型からundefinedを取り除ける
  3. えとせとら

1. 環境変数の追加忘れを即座に検知できる

新しく参加したメンバーに環境変数の存在を伝え忘れたり、複数の開発環境を立ち上げた際に設定し忘れたりすることはよくありますよね。

以下のように環境変数をラップしておくことで、追加忘れを即座に検知できますし、
設定されていない変数の特定も容易になります。

export const env = {
  APP_DOMAIN: required('APP_DOMAIN', process.env.APP_DOMAIN)
};

function required(key: string, value: string | undefined): string {
  if (value === undefined) {
    throw new Error(`${key} is required, but is not defined.`);
  }

  return value;
}

2. 型からundefinedを取り除ける

process.env.*から取得できる値の型は、原則としてstring | undefinedです。
アプリケーション内で利用されることが前提の変数であるにもかかわらず、undefinedを許容すべきケースは多くありません。
しかも、このまま使うと実装側で毎回fallback処理を書く必要があり少々厄介です。

そこで、環境変数をラップして型から不要なundefinedを取り除くのです。
これは先ほどのコードでも実現できますし、他にもprocess.env.APP_DOMAIN || ''などの単純なfallbackを書くことでも実現可能です。(良し悪しは置いておく)

おわりに

今回紹介した内容以外にも、環境変数をラップすることで型のキャストを安全に行えるなど、多くのメリットがあります。
プロジェクトに応じた形でラップを導入し、保守性の高い環境変数管理を目指してみてください。

したがき 渋谷でWebフロントエンドDeveloperをやっている人。 最近はバックエンド領域の勉強に力をいれているらしい(らしい)。

TypeScriptに関連する記事

最新記事