外部のサービスを使おうとすると、鍵(APIキー)を渡されます。さて、これをどこに書けばいいのか。分からないから、とりあえず動く場所・・・コードの中に直接書く。動く。そのまま忘れる。
第8講の車検で「鍵が直書きされていないか」を点検し、第10講では「エラー文を貼る前に鍵を伏せる」と予告しました。この講はその本編です。鍵の正しい置き場所を覚えて、直書きから卒業します。
合鍵にたとえます。
家の合鍵を、どこに置くか。玄関マットの下は、便利です。誰でも取れるからです。そして誰でも取れるということは、泥棒も取れるということです。合鍵は、家の外から見えない場所・・・金庫なり、信頼できる人のポケットなりに置くのが常識です。
コードに鍵を直書きするのは、玄関マットの下と同じです。コードは、自分で思っているよりずっと人目に触れます。AIへの相談で貼る。エラー文と一緒に見せる。リポジトリを公開する。第13講で見たとおり、履歴に一度入れば、消したつもりでも残る。コードとは、いずれ誰かに見せるものなのです。
そこで、鍵の置き場所を分離します。使うのが環境変数(プログラムの外側に置く設定値)です。
仕組みはこうです。コードには「鍵そのもの」ではなく、「API_KEYという名前の環境変数を読む」とだけ書く。鍵の実物は、コードの外・・・実行する環境ごとに用意された置き場に置く。手元のパソコンなら .env という名前のファイルが定番で、公開先のサービスにも専用の設定画面があります。こうすると、コードをどれだけ人に見せても、鍵は見えません。公開されるのは「合鍵は金庫にある」という文だけで、金庫の中身は出ていかない形です。
もう1ついいことがあります。手元では練習用の鍵、公開先では本物の鍵、と環境ごとに中身を差し替えられる。コードは1つのまま、値だけが場所ごとに変わる。これが「外側に置く」ことの、もう1つの便利さです。
どこまでを環境変数に置くべきか。目安は単純で、それが漏れたら困るか。環境ごとに変わるか。どちらかに当てはまれば外に置く。両方に当てはまらない値(画面の文言、色の指定など)は、コードに書いてよい値です。
自分のプロジェクトの、"外に出してはいけない値"の棚卸しをします。
紙に、思い当たるものを書き出してください。外部サービスの鍵、パスワード、第10講にも出てきた接続用の文字列、自分のメールアドレス・・・。
自分の一枚しかない人は、おそらく1つも無いはずです。それを確認できたら合格。あわせて、いつか鍵を持つ日のために、質問例1を眺めて「この仕分けをAIに頼めるのか」と知っておいてください。
実物で外部サービスを使っている人は、書き出した値がいまどこにあるか、1つずつ突き止めてください。コードの中に直書きを見つけたら、それが今日の収穫です。慌てて自分で直さず、質問例3で引っ越しの手順を出してもらってから動いてください。
そのまま貼って使えます。
2つ目の書き方が、そのまま作法の見本です。鍵そのものは、AIにも貼らない。「こういう種類の値」という説明で、判定には十分です。
公開リポジトリに、鍵を上げること。
これは、この講座に出てくる事故の中で、いちばん速く燃え広がるものです。公開リポジトリを自動で巡回して、鍵を探し続けている拾い手が世界中にいます。うっかり上げた鍵は、数分から数時間で拾われ、あなたの名義でサービスを使い倒されます。「無名な個人の練習用リポジトリだから、誰も見ていない」は通用しません。巡回しているのは機械なので、有名も無名も関係ないのです。
もし上げてしまったことに気づいたら、削除より先にやることがあります。鍵の無効化(そのサービスの管理画面で、その鍵を失効させて、新しい鍵を作り直すこと)です。第13講で見たとおり、履歴からは簡単に消えません。消す努力より、その鍵をただの文字列に変えてしまうほうが、確実で速い。順番だけ覚えてください。無効化が先、片づけは後。