さて、この頃python関係がメインになりつつあるこのブログですが、ちょっと真似て作ってみたよ、という嬉しい連絡をいただきました。
その際にちょっと問題となることがあったので、ここで注意喚起がてら環境変数を初心者でもちゃんと利用する癖を付けようという記事を一つ。
環境変数って何?
以下IT用語辞典からの引用です。
環境変数とは、OSが設定値などを永続的に保存し、利用者や実行されるプログラムから設定・参照できるようにしたもの。プログラムの実行時などに必要となる、利用者やコンピュータごとに内容が異なる設定値などを記録するために用いられる。
http://e-words.jp/w/%E7%92%B0%E5%A2%83%E5%A4%89%E6%95%B0.html
つまりは、OS(自分の場合はmacです)自体に、設定値が保存できるのです。GASでいうところのpropertyだと思っていただければいいです。
データ形式は、変数名と設定値、要はkey:valueなので、非常によく使う形かと思います。
なぜ環境変数を使わなければいけないのか?
この疑問の答えは、シンプルに言えば以下の質問と同義です。
環境変数を使わない場合と使った場合で何が異なるのでしょう?
それを理解するためには、環境変数を利用した場合と、利用していない場合のコードを比較してみましょう。
【環境変数を利用した場合】
import os
token = os.environ["token"]
【環境変数を利用しない場合】
token = "xxxxxxx" #トークン等を直接入力
何が違うでしょうか?
シンプルにコード内部にトークンなどの値が直接含まれるか否かという点が異なります。なんだそんなことかと思われるかもしれませんが、これが非常に重要なんです。
なぜコード内にトークン等秘密にすべき情報を含めてはいけないか?
さて、みなさんgithub/bitbucketなどを使ってコードを管理することはありますでしょうか?
チームで開発したり、履歴を残したりしたい人にとっては必須のツールかと思います。この時リモートレポジトリにアップロードするのは何になるでしょうか?
.pyとなっているコードそのものですよね。ということは、コード内に秘密にすべきトークン系の情報をのせていると、そのままそれがgithubとうにuploadされてしまいます。まぁprivate repositoryで個人開発する分にはそこまで大きなリスクではないのですが、チーム開発や人にレポジトリを公開する時は大きな問題です。
環境変数の設定方法
さて、呼び出し方法はシンプルなので、わかりました。じゃぁどうやってそもそも設定すればいいの?というのがノンプロには問題です。ここはターミナルを利用しましょう。
ターミナルを開いてみる
Launchedpadをクリックして、アプリ一覧を開いてみます。そうすると以下のような画面がでます。

この画面の中で、”ターミナル”で検索するか、その他>ターミナルといくと、ターミナルが開きます。


ターミナルで実行すること
やることは以下のコマンドを打つだけです。以下はpyではなく、ターミナルで実行コマンドです。
export "token"=xxxxxx
自分のOS全体に環境変数として設定してもいいですが、それだと重複があった場合に判別が難しくなります。そのため、基本は仮想環境(virtualenv/venvなど)をアクティベートしてから、その仮想環境内だけで利用する環境変数を設定していくがベターです。
【ターミナルコマンド】
cd [newenvname]
source [newenvname]/bin/activate
cdでディレクトリに移動します、移動した後にsourceコマンドでbin/activateを呼び出して仮想環境をアクティベートさせます。その上で、上のexportコマンドを実行することで、仮想環境内に環境変数を設定していきます。
まとめ
基本ブログで記事を書く時は環境変数を使ってコードを書かないようにしています。それは、読んでいただく方が読みやすくなるようにです。
そのため、実際にコードを作成される時は是非忘れずに書き換えて作っていってください。
私のコードに限らず、たまーにgithubにもハードコーディングされたIDやtoken情報などが。。。
是非みなさんも気をつけてください。