環境変数について / Introduction to Environment Variables

環境変数について / Introduction to Environment Variables

苫小牧高専 情報処理同好会 JoshoLTの発表資料

D56efd2db811cb782f1458df3888c82a?s=128

Takuya Mukohira

June 19, 2018
Tweet

Transcript

  1. 環境変数について 2018/06/19 情処LT(6月) ઐ߈Պ೥
 ޲ฏ୎໼NLUBLVZB

  2. 向平卓矢 / Takuya Mukohira • @mktakuya • 情報工学科出身 専攻科2年 •

    高専プロコン2018 課題部門
  3. 環境変数について

  4. 環境変数とは • OSが提供するデータ共有機能。
 プロセスを越えてグローバル変数的な使い方ができる。 • システムにより定義されるものと
 ユーザが定義するものがある。 • シェルで echo

    $OSTYPE すると
 "linux-gnu" とか "darwin" とか出る。 • その他の有名ドコロは $PATH とか $EDITOR とか
 $HTTP_PROXY とか。
  5. 環境変数とは • 環境変数は自分で定義することもできる • export VAR="hogehoge" とか • シェルの設定ファイルに書くとか
  $HOME/.bashrc

    とか
  $HOME/.tcshrc とか
  $HOME/.profile とか • 定義方法はシェルによって異なる
  bash: export VAR='hogehoge' # だいたいこっちでOK
  tcsh: setenv VAR 'hogehoge' # jocalc
  6. 自作のプログラムから利用する • 環境変数は自分のプログラムから利用することが出来る。 • 【C言語】
 getenv("VAR"); // stdlib.h必要
 【Ruby】
 ENV['VAR']


    【Python】
 os.environ['VAR'] # osモジュールのimport必要
  7. 環境変数の使いドコロ • 自作のプログラムの設定情報を格納するのにも利用できる • ユーザ名やパスワード、トークンなど外部サービスの
 認証情報や、データベースの接続先などを格納し、
 コード上から利用するためにも使う。 • その他、コードとは分離すべき設定を格納する。

  8. None
  9. 認証情報を
 環境変数に格納する

  10. 例えばTwitter Bot • Twitter APIと連携して動くプログラム • ユーザのフォローやツイートには認証が必要 • ユーザごとに異なる認証情報

  11. MinimalなTwitter Bot

  12. MinimalなTwitter Bot ˢೝূ৘ใΛϋʔυίʔσΟϯά
 ɹɹɹɹɹɹʢϕλॻ͖ʣ͍ͯ͠Δ ˞্هτʔΫϯྨ͸ద౰ͳ΍ͭͰ͢

  13. 認証情報のハードコーディングが良く ない理由 • 情報漏えいの危険性 • 完成したTwitter botをGitHubで公開!
 → 認証情報の漏えい、アカウント乗っ取り •

    ソースコードを他人に渡したい時どうする……? • 実装(コード)と設定(認証情報)が密に結合している • 手元のPCではテスト用アカウントを、本番環境では本番用 のアカウントを使う、といった事をしたい時どうする……?
  14. ॳ৺ऀ͕"84Ͱϛεͬͯෆਖ਼ར༻͞Εͯ ੥ٻɺٽ͖ͦ͏ʹͳ͓ͬͨ࿩ɻ IUUQTRJJUBDPNNPDIJ[VLJLPUBSPJUFNTBF⒎BFC 悲しい実例 • ハッカソンでAWSを使った
 アプリを開発 • AWSの認証情報を
 GitHubに公開してしまう

    • アクセスキーを抜かれて
 不正利用され、$6,000請求
 (日本円で66万円くらい?) • AWSの中の人の慈悲で
 払わなくて済む
  15. 認証情報を環境変数に格納する ˢγΣϧͷઃఆϑΝΠϧ౳ʹ௥هʢ͜ͷϑΝΠϧ͸ެ։͠ͳ͍ʣ ˢ؀ڥม਺͔Βೝূ৘ใΛऔಘʢίʔυ͸ެ։ͯ͠΋େৎ෉ʣ

  16. 開発用・本番用で認証情報を分ける • 開発中→テスト用の鍵アカウント
 本番環境→本アカウント をコードの変更無しで実現できる

  17. The Twelve Factor App • プログラミング言語やフレームワークに依存しない、
 いい感じのSaaSを作るための12の方法論。 • Herokuの人が提唱。 IUUQTGBDUPSOFUKB

  18. The Twelve Factor App • Ⅲ.設定 • Twelve Factor Appは設定を環境変数に格納し、


    設定をコードから厳密に分離する。 • 設定とは
 ・データベースサーバやキャッシュサーバ等への接続情報
 ・外部サービスの認証情報
 ・その他、デプロイごとの値 • 判断基準:コードベースを今すぐオープンソースにできるか
  19. 複数の環境をひとつのコードベースで • ひとつのコードベースで複数のデプロイを実現可能 • 本番とステージングでDBやメールアカウントを分けたり、
 ステージングは無料プラン、本番では有料プランを使う等

  20. None
  21. プロジェクトごとに 環境変数を分ける

  22. プロジェクトごとに環境変数を分ける • プロジェクトごとに環境変数を分けたい事がある。 • 例えば……
  プロジェクトA: TwitterアカウントA用の認証情報
  プロジェクトB: TwitterアカウントB用の認証情報 •

    シェルの設定ファイルに書くと、
 全プロジェクト共通で環境変数が設定されてしまう。
  23. direnvの導入 • https://github.com/direnv/direnv
 An environment switcher for the shell. •

    ディレクトリごとに環境変数を切替えられる。 • ディレクトリAに移動すると
 プロジェクトA用の環境変数が設定され、
 ディレクトリBに移動すると
 プロジェクトB用の環境変数が設定される。 • macOSやLinuxの各ディストリ、各種BSDに対応。
  24. direnvの導入 • インストールや設定、詳しい使い方は公式のREADME参照 • ディレクトリ移動すると環境変数がswitchされるデモ

  25. None
  26. まとめ • 環境変数というモノがある。 • 認証情報やコードから分離すべき設定を
 環境変数に格納してコード上から参照できる。 • direnvを使うとディレクトリごとに
 環境変数を切り替えられる。