$30 off During Our Annual Pro Sale. View Details »

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

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

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

Takuya Mukohira

June 19, 2018
Tweet

More Decks by Takuya Mukohira

Other Decks in Programming

Transcript

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

    ޲ฏ୎໼NLUBLVZB

    View Slide

  2. 向平卓矢 / Takuya Mukohira
    • @mktakuya
    • 情報工学科出身 専攻科2年
    • 高専プロコン2018 課題部門

    View Slide

  3. 環境変数について

    View Slide

  4. 環境変数とは
    • OSが提供するデータ共有機能。

    プロセスを越えてグローバル変数的な使い方ができる。
    • システムにより定義されるものと

    ユーザが定義するものがある。
    • シェルで echo $OSTYPE すると

    "linux-gnu" とか "darwin" とか出る。
    • その他の有名ドコロは $PATH とか $EDITOR とか

    $HTTP_PROXY とか。

    View Slide

  5. 環境変数とは
    • 環境変数は自分で定義することもできる
    • export VAR="hogehoge" とか
    • シェルの設定ファイルに書くとか

     $HOME/.bashrc とか

     $HOME/.tcshrc とか

     $HOME/.profile とか
    • 定義方法はシェルによって異なる

     bash: export VAR='hogehoge' # だいたいこっちでOK

     tcsh: setenv VAR 'hogehoge' # jocalc

    View Slide

  6. 自作のプログラムから利用する
    • 環境変数は自分のプログラムから利用することが出来る。
    • 【C言語】

    getenv("VAR"); // stdlib.h必要

    【Ruby】

    ENV['VAR']

    【Python】

    os.environ['VAR'] # osモジュールのimport必要

    View Slide

  7. 環境変数の使いドコロ
    • 自作のプログラムの設定情報を格納するのにも利用できる
    • ユーザ名やパスワード、トークンなど外部サービスの

    認証情報や、データベースの接続先などを格納し、

    コード上から利用するためにも使う。
    • その他、コードとは分離すべき設定を格納する。

    View Slide

  8. View Slide

  9. 認証情報を

    環境変数に格納する

    View Slide

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

    View Slide

  11. MinimalなTwitter Bot

    View Slide

  12. MinimalなTwitter Bot
    ˢೝূ৘ใΛϋʔυίʔσΟϯά

    ɹɹɹɹɹɹʢϕλॻ͖ʣ͍ͯ͠Δ
    ˞্هτʔΫϯྨ͸ద౰ͳ΍ͭͰ͢

    View Slide

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

    → 認証情報の漏えい、アカウント乗っ取り
    • ソースコードを他人に渡したい時どうする……?
    • 実装(コード)と設定(認証情報)が密に結合している
    • 手元のPCではテスト用アカウントを、本番環境では本番用
    のアカウントを使う、といった事をしたい時どうする……?

    View Slide

  14. ॳ৺ऀ͕"84Ͱϛεͬͯෆਖ਼ར༻͞Εͯ ੥ٻɺٽ͖ͦ͏ʹͳ͓ͬͨ࿩ɻ
    IUUQTRJJUBDPNNPDIJ[VLJLPUBSPJUFNTBF⒎BFC
    悲しい実例
    • ハッカソンでAWSを使った

    アプリを開発
    • AWSの認証情報を

    GitHubに公開してしまう
    • アクセスキーを抜かれて

    不正利用され、$6,000請求

    (日本円で66万円くらい?)
    • AWSの中の人の慈悲で

    払わなくて済む

    View Slide

  15. 認証情報を環境変数に格納する
    ˢγΣϧͷઃఆϑΝΠϧ౳ʹ௥هʢ͜ͷϑΝΠϧ͸ެ։͠ͳ͍ʣ
    ˢ؀ڥม਺͔Βೝূ৘ใΛऔಘʢίʔυ͸ެ։ͯ͠΋େৎ෉ʣ

    View Slide

  16. 開発用・本番用で認証情報を分ける
    • 開発中→テスト用の鍵アカウント

    本番環境→本アカウント をコードの変更無しで実現できる

    View Slide

  17. The Twelve Factor App
    • プログラミング言語やフレームワークに依存しない、

    いい感じのSaaSを作るための12の方法論。
    • Herokuの人が提唱。
    IUUQTGBDUPSOFUKB

    View Slide

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

    設定をコードから厳密に分離する。
    • 設定とは

    ・データベースサーバやキャッシュサーバ等への接続情報

    ・外部サービスの認証情報

    ・その他、デプロイごとの値
    • 判断基準:コードベースを今すぐオープンソースにできるか

    View Slide

  19. 複数の環境をひとつのコードベースで
    • ひとつのコードベースで複数のデプロイを実現可能
    • 本番とステージングでDBやメールアカウントを分けたり、

    ステージングは無料プラン、本番では有料プランを使う等

    View Slide

  20. View Slide

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

    View Slide

  22. プロジェクトごとに環境変数を分ける
    • プロジェクトごとに環境変数を分けたい事がある。
    • 例えば……

     プロジェクトA: TwitterアカウントA用の認証情報

     プロジェクトB: TwitterアカウントB用の認証情報
    • シェルの設定ファイルに書くと、

    全プロジェクト共通で環境変数が設定されてしまう。

    View Slide

  23. direnvの導入
    • https://github.com/direnv/direnv

    An environment switcher for the shell.
    • ディレクトリごとに環境変数を切替えられる。
    • ディレクトリAに移動すると

    プロジェクトA用の環境変数が設定され、

    ディレクトリBに移動すると

    プロジェクトB用の環境変数が設定される。
    • macOSやLinuxの各ディストリ、各種BSDに対応。

    View Slide

  24. direnvの導入
    • インストールや設定、詳しい使い方は公式のREADME参照
    • ディレクトリ移動すると環境変数がswitchされるデモ

    View Slide

  25. View Slide

  26. まとめ
    • 環境変数というモノがある。
    • 認証情報やコードから分離すべき設定を

    環境変数に格納してコード上から参照できる。
    • direnvを使うとディレクトリごとに

    環境変数を切り替えられる。

    View Slide