Vue.jsでAPIを叩く際に、エンドポイントのベースURLを環境変数で管理する方法が分からずハマったので、備忘録としてまとめます。
バージョン
- Vue.js 3.3.11
記事の信頼性
- 独学で未経験から従業員300名以上の自社開発企業へ転職しました。
- 実務ではVue.jsとRailsを毎日書いています。
- 初心者や駆け出しエンジニアがつまづくポイントも身をもってよく理解しています。
問題
ぼくは今クイズアプリを作っているのですが、APIのエンドポイントを指定する際に、暫定的にURLをベタ書きしていました↓
const getQuizzes = async () => {
try {
const response = await axios.get('http://localhost:3000/api/v1/quizzes')
// 省略
} catch (error) {
// 省略
}
}
開発が進んできたのでそろそろベタ書きをやめて環境変数で管理しようとしたものの、開発環境と本番環境で参照するURLが異なるため、どのように使い分ければいいのか分かりませんでした、、。
解決策
結論としては以下の2ステップです。
.env
ファイルの作成- 環境変数の使用
順番に解説します。
1. .env
ファイルの作成
まずはルートディレクトリ直下に.env
ファイルを作成します。
ただし今回は開発環境と本番環境で参照するURLを分けたいので、.env.development
と.env.production
を作成します。
作成したら次のように記述します。
VITE_API_URL=http://localhost:3000
ぼくのプロジェクトではビルドにViteを使っているので、接頭にVITE_
をつける必要があります。
同じように本番環境用のenv.production
にも参照したいベースURLを記述しましょう。
なおVite以外のビルドツールを使っている場合は、VUE_APP_API_URL=http://localhost:3000
のようにVITE_
ではなくVUE_APP_
をつけてください。
②環境変数の使用
.env
ファイルが用意できたらあとは実際に使うだけです。
Viteを使っている場合、以下のように記述すればOKです。
// Vite の環境変数を読み込む
const API_URL = import.meta.env.VITE_API_URL;
const getQuizzes = async () => {
try {
const response = await axios.get(`${API_URL}/api/v1/quizzes`)
// 省略
} catch (error) {
// 省略
}
}
あとはVite側で自動的に.env
ファイルの命名規則にしたがって適切な環境変数を読み込んでくれます。
Vite以外のビルドツールの場合は微妙に書き方が異なり、以下のように記述する必要があります。
// Vite 以外の場合は微妙に書き方が違う
const API_URL = process.env.VUE_APP_API_URL;
const getQuizzes = async () => {
try {
const response = await axios.get(`${API_URL}/api/v1/quizzes`)
// 省略
} catch (error) {
// 省略
}
}
これで無事にAPIを呼び出してデータを取得することができました!
おわりに
今まではそもそもビルドツールを意識していなかったので、良い勉強の機会となりました!
コメント