カテゴリー
【Angular応用講座】Angularプロジェクトからenvironment.tsを捨ててうっかりCreadentials(個人情報)の漏洩を防ぐ
※ 当ページには【広告/PR】を含む場合があります。
2022/12/29

本記事執筆途中で2022年も終わりに近づいて来ました。
気持ちはもう店じまいですが、今年最後の締めくくりにAngularネタを紹介します。
今回は主題の通り、AngularプロジェクトをGithubで他のコラボレーターに共有する際に割と困る
以下、適当な既存のAngularプロジェクトから
おおまかな流れでは、
1. .envファイルの準備
2. dotenvとyargsのインストール
3. environment.tsファイルのリセット
となります。
さほど難しい内容ではないので、ポイントだけを軽く触れながら以降で解説してみます。
「.env」ファイルの準備
Angularに限らずnode.jsでのアプリケーション開発においては、自分だけが利用できるローカル環境だけで利用するパラメーターは、
特に自分だけが使えて、他人に見られると困る代表的なものは、有料クラウドサービスのAPIキーなどが挙げられます。
ここでは例として、
AWSのAPIアクセスキー
お手元のAngularプロジェクトに
.env
一例としてAWSのAPIアクセスキーの仕様で埋め込んだ
.env
AWS_ACCESS_KEY_ID=hoge123456789
AWS_SECRET_ACCESS_KEY=HOGE_HOGE_PIYO_PIYO
AWS_DEFAULT_REGION=ap-northeast-1
なお、gitには
.env
.gitignore
.env
#...
#👇追記
.env
dotenvとyargsの導入
Angularのビルド実行時に、.envファイルを呼び出すための
$ yarn add yargs dotenv -D
注意が必要なのは
dotenv
.env
.env
きちんと
.env
なお、Angularのデフォルト・プロジェクトでは
ts-node
package.json
$ yarn add ts-node -D
これで、今回必要なツールが導入されました。
次の項目では、スクリプトを作成していきましょう。
静的なenvironment.tsをAngularプロジェクトから除外する
それでは、
environment.ts
まずは
environment.ts
一例として、以下のようになっていたとします。
export const environment = {
production: false,
accessKeyId: 'hoge123456789',
secretAccessKey: 'HOGE_HOGE_PIYO_PIYO'
defaultRegion: 'ap-northeast-1'
};
見てのように、AWSのプライベートAPIキーが
environment.ts
そこで、これらの秘密情報は外部にもれないようにローカルの
.env
environment.ts
まずはAngularビルド時に、先程の
environment.ts
.env
package.json
const { writeFile, existsSync, mkdirSync } = require('fs');
const { argv } = require('yargs');
require('dotenv').config();
const environment = argv.environment;
const isProd = environment === 'prod';
const envDir = './src/environments';
existsSync(envDir) || mkdirSync(envDir);
const writeEnvFile = (targetPath: string, environmentFileContent: string) => {
writeFile(targetPath, environmentFileContent, (err: any) => {
if (err) { console.log(err); }
if (environmentFileContent !== '') {console.log(`${targetPath}へ書き込みました`);}
});
}
const devEnvContents = `//Generate environment ts file automatically via setenv script.
export const environment = {
production: ${isProd},
accessKeyId: '${process.env.AWS_ACCESS_KEY_ID}',
secretAccessKey: '${process.env.AWS_SECRET_ACCESS_KEY}',
defaultRegion: '${process.env.AWS_DEFAULT_REGION}'
};`;
const prodEnvContents = `//Generate environment ts file automatically via setenv script.
export const environment = {
production: ${isProd},
accessKeyId: '',
secretAccessKey: '',
defaultRegion: ''
};`;
if (isProd) {
writeEnvFile(`${envDir}/environment.prod.ts`, prodEnvContents);
writeEnvFile(`${envDir}/environment.ts`, prodEnvContents);
} else {
writeEnvFile(`${envDir}/environment.ts`, devEnvContents);
}
これで補助スクリプト準備は完了です。
ちなみに、プロダクション(公開版)ビルドの際はそもそもプライベートキーに依存するはずがないので、
environment.prod.ts
export const environment = {
production: true,
accessKeyId: '',
secretAccessKey: ''
defaultRegion: ''
};
では、このスクリプトがビルド直前に動作するように、
package.json
scripts
{
//...中略
"scripts": {
"ng": "ng",
//...中略
//👇追加
"conf:env": "rm -rf ./src/environments && ts-node ./setenv.ts",
//👇修正
"start": "yarn conf:env --environment=dev && ng serve",
"build": "yarn conf:env --environment=prod && ng build --prod",
//...以下略
}
では、この追加したnpmコマンドで
environment.ts
.env
$ yarn conf:env
./src/environments/environment.tsへ書き込みました
$ cat src/environments/environment.ts
//Generate environment ts file automatically via setenv script.
export const environment = {
production: false,
accessKeyId: 'hoge123456789',
secretAccessKey: 'HOGE_HOGE_PIYO_PIYO'
defaultRegion: 'ap-northeast-1'
};
ちゃんと生成されてそうなら、
src/environments
.gitignore
#...
#👇追記
environment.prod.ts
environment.ts
そして、この状態で一度
git commit
これでAngularプロジェクトをGitHubなどで公開してもプライベートなAPIキーなど見られると悪用されてしまいそうな情報は見えなくなります。 (※ただし、Gitのコミット履歴が残ったまま公開してしまうと、特定のコミットまで戻すことも可能なので、
environment.ts
serve/buildで動作確認
では最後にちゃんと
environment.ts
.env
$ yarn serve
念の為、プロダクションビルドも通るか確認しておきましょう。
$ yarn build
問題がなければ、無事にAngularプロジェクトから
environment.ts
参考サイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー