Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

環境変数について

Slide 4

Slide 4 text

環境変数とは • OSが提供するデータ共有機能。
 プロセスを越えてグローバル変数的な使い方ができる。 • システムにより定義されるものと
 ユーザが定義するものがある。 • シェルで echo $OSTYPE すると
 "linux-gnu" とか "darwin" とか出る。 • その他の有名ドコロは $PATH とか $EDITOR とか
 $HTTP_PROXY とか。

Slide 5

Slide 5 text

環境変数とは • 環境変数は自分で定義することもできる • export VAR="hogehoge" とか • シェルの設定ファイルに書くとか
  $HOME/.bashrc とか
  $HOME/.tcshrc とか
  $HOME/.profile とか • 定義方法はシェルによって異なる
  bash: export VAR='hogehoge' # だいたいこっちでOK
  tcsh: setenv VAR 'hogehoge' # jocalc

Slide 6

Slide 6 text

自作のプログラムから利用する • 環境変数は自分のプログラムから利用することが出来る。 • 【C言語】
 getenv("VAR"); // stdlib.h必要
 【Ruby】
 ENV['VAR']
 【Python】
 os.environ['VAR'] # osモジュールのimport必要

Slide 7

Slide 7 text

環境変数の使いドコロ • 自作のプログラムの設定情報を格納するのにも利用できる • ユーザ名やパスワード、トークンなど外部サービスの
 認証情報や、データベースの接続先などを格納し、
 コード上から利用するためにも使う。 • その他、コードとは分離すべき設定を格納する。

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

認証情報を
 環境変数に格納する

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

MinimalなTwitter Bot

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

認証情報のハードコーディングが良く ない理由 • 情報漏えいの危険性 • 完成したTwitter botをGitHubで公開!
 → 認証情報の漏えい、アカウント乗っ取り • ソースコードを他人に渡したい時どうする……? • 実装(コード)と設定(認証情報)が密に結合している • 手元のPCではテスト用アカウントを、本番環境では本番用 のアカウントを使う、といった事をしたい時どうする……?

Slide 14

Slide 14 text

ॳ৺ऀ͕"84Ͱϛεͬͯෆਖ਼ར༻͞Εͯ ੥ٻɺٽ͖ͦ͏ʹͳ͓ͬͨ࿩ɻ IUUQTRJJUBDPNNPDIJ[VLJLPUBSPJUFNTBF⒎BFC 悲しい実例 • ハッカソンでAWSを使った
 アプリを開発 • AWSの認証情報を
 GitHubに公開してしまう • アクセスキーを抜かれて
 不正利用され、$6,000請求
 (日本円で66万円くらい?) • AWSの中の人の慈悲で
 払わなくて済む

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

The Twelve Factor App • Ⅲ.設定 • Twelve Factor Appは設定を環境変数に格納し、
 設定をコードから厳密に分離する。 • 設定とは
 ・データベースサーバやキャッシュサーバ等への接続情報
 ・外部サービスの認証情報
 ・その他、デプロイごとの値 • 判断基準:コードベースを今すぐオープンソースにできるか

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

プロジェクトごとに環境変数を分ける • プロジェクトごとに環境変数を分けたい事がある。 • 例えば……
  プロジェクトA: TwitterアカウントA用の認証情報
  プロジェクトB: TwitterアカウントB用の認証情報 • シェルの設定ファイルに書くと、
 全プロジェクト共通で環境変数が設定されてしまう。

Slide 23

Slide 23 text

direnvの導入 • https://github.com/direnv/direnv
 An environment switcher for the shell. • ディレクトリごとに環境変数を切替えられる。 • ディレクトリAに移動すると
 プロジェクトA用の環境変数が設定され、
 ディレクトリBに移動すると
 プロジェクトB用の環境変数が設定される。 • macOSやLinuxの各ディストリ、各種BSDに対応。

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

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