環境変数と.gitignoreを使用してAPIキーを非公開にする手順
はじめに
こんにちは。
私はプログラミングスクールRUNTEQでRuby on Railsを主に学習しているmockeyと申します。
先日のスクール内イベント、『BUTTLE OF RUNTEQ』にて初めてOpenAI APIを使用したアプリを作成しました。
その際APIキーの取り扱いがセキュリティの観点から非常に重要であると学んだので学習記録として執筆します。
作成したアプリはこちらです。
この記事で分かること
- .envファイルについて
- .gitignoreファイルについて
- なぜAPIキーをGitHubにアップロードしてはいけないのか
- gem 'dotenv-rails' について
バージョン
- Ruby 3.2.3
- Rails 7.1.3.1
- PosgresSQL 14.11
- tailwindcss 3.4.3
- daisyUI 4.11.1
- 開発環境 Docker
- デプロイ render.com
前提
この記事ではAPIキーの取り扱いに焦点を当てているので、APIキーの取得方法に関する記載はありません。
ご了承ください。
なぜAPIキーをGitHubに公開してはいけないのか?
APIキーはサービスやアプリケーションが特定のAPIにアクセスするための認証情報です。
これをGitHubで公開すると、以下のようなリスクがあります。
-
不正利用のリスク
悪意を持った人が無断でAPIキーを使用しAPIにアクセスする可能性があります。
これにより、APIの利用上限を超えてしまったり、料金が発生するリスクがあります。 -
セキュリティのリスク
APIキーを持っている人は、APIを通じてサービスにアクセスできるので、不正アクセスやデータ漏洩のリスクがあります。
これらのリスクを避けるために、APIキーを公開リポジトリに載せないようにすることが重要です。
.envファイルの作成
まず、プロジェクトのルートディレクトリに.envファイルを作成して取得したAPIキーを設定します。
(ここではOpenAI APIの想定)
.envファイルは、環境変数を定義するためのファイルです。このファイルはプロジェクトのルートディレクトリに配置され、APIキーやデータベースの認証情報などの機密情報を含む環境変数を定義するために使用されます(chat GPTより)
OPENAI_API_KEY=取得したAPIキーを記載
.envファイルをGitHubにアップロードしないように、.gitignoreファイルに追加します。
これにより、.envファイルがリポジトリに含まれないようになります。
.gitignoreに.envを追加する
次に.gitignoreファイルに「.env」を追記します。
もし.gitignoreファイルがない場合は、プロジェクトのルートディレクトリに作成します。
.gitignoreファイルは、Gitで管理しないファイルやディレクトリを指定するためのファイルです。このファイルに記述されたパターンに一致するファイルやディレクトリは、Gitによって追跡されず、リポジトリにコミットされません。(chat GPTより)
/.env
つまりこのように書くことで、 .envファイルがGitHubに載らないようにできるということです。
アプリ内では ENV['変数名'] のように使用することで、設定された環境変数を取得します。
.gitignoreファイルが動作していることを確認するために、以下のコマンドをターミナルで実行してみてください。
.envファイルがリポジトリに含まれていないことが確認できます。
git status
gem 'dotenv-rails'のインストール
Railsアプリケーションでdotenvを使用して環境変数を読み込みます。
.env ファイルに設定された環境変数をRailsアプリケーションに読み込むためのGemです。
これにより、APIキーなどの機密情報をコードに直接書かずに済みます。
gem 'dotenv-rails', groups: [:development, :test]
bundle insatllを実行してインストールします。
bundle install
Rails
Dotenv will automatically load when your Rails app boots. See Customizing Rails to change which files are loaded and when. (READMEより)
つまり、Railsのアプリが起動した際に自動的にdotenv-railsはロードされるので、特別な設定は不要です。
動作確認
dotenvが正しく動作しているかRailsコンソールで確認してみます。
rais console
コンソール起動後に以下のコマンドを実行してみます。
irb(main):001> puts ENV['OPENAI_API_KEY']
.envに記載したAPIキーがターミナルに表示されたら、正しく読み込めていることが確認できます。
おわりに
初めての記事執筆なので読みづらい点もあったかと思いますが、ここまでご覧いただきありがとうございました。
セキュリティ面を考えてアプリ開発をすることは今後も必要なスキルだと思うので、gemの導入の際にも内容を確認しながら実装していきたいと思います。
Discussion