Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
環境変数について / Introduction to Environment Variables
Takuya Mukohira
June 19, 2018
Programming
0
270
環境変数について / Introduction to Environment Variables
苫小牧高専 情報処理同好会 JoshoLTの発表資料
Takuya Mukohira
June 19, 2018
Tweet
Share
More Decks by Takuya Mukohira
See All by Takuya Mukohira
Podcast配信システムを自作したら捗った話 / kichijojipm-28
mktakuya
0
1.1k
趣味と趣味の掛け算で技術を学んでいく話 / 2020-11-27
mktakuya
0
230
ゆるふわなPodcastのすすめ / kichijojipm-22
mktakuya
0
910
コーチLT / Rails Girls Tokyo 12th
mktakuya
1
850
プログラミングと一人暮らし 〜Nature Remoで遊ぶ編〜 / prolt-2019
mktakuya
1
200
HMCC2019 Emoji SANPO
mktakuya
0
2.5k
スマホアプリとAPIサーバの開発について / Building mobile apps and web apis
mktakuya
0
1.5k
Rubyで便利な学校生活 / 20171118-aosc-yuruweb
mktakuya
0
290
進路・キャリアに関するぶっちゃけ話5連発 / 20170903-gyakuLT
mktakuya
0
200
Other Decks in Programming
See All in Programming
クラウド KMS の活用 / TOKYO BLOCKCHAIN TECH MEETUP 2022
odanado
PRO
0
190
アジャイルで不確実性に向き合うための開発タスクの切り方
tanden
4
1.1k
Getting Started With Data Structures
adoranwodo
1
260
SwiftUI+TCAに挑戦!NewsPicks iOSアプリのリアーキテクチャ/re-architecture-newspicks-ios-app-with-swiftui-and-tca
takehilo
0
400
僕が便利だと感じる Snow Monkey の特徴/20220723_Gifu_WordPress_Meetup
oleindesign
0
110
Google IO 2022 社内LT会 / What's new in Android development tools
shingo_kobayashi
0
400
kintone × LINE Bot で餃子検定Botを作った話
naberina
0
330
企業内スモールデータでのデータ解析
hamage9
0
890
Cloudflare WorkersでGoのHTTPサーバーを動かすライブラリを作った話
syumai
0
150
ふんわり理解するcontext
rukiadia
1
180
Recap CDN, Edge, WebAssembly | ワインと鍋.js#1
sadnessojisan
2
1.2k
パラメタライズドテスト
ledsun
0
220
Featured
See All Featured
4 Signs Your Business is Dying
shpigford
169
20k
Teambox: Starting and Learning
jrom
123
7.7k
VelocityConf: Rendering Performance Case Studies
addyosmani
316
22k
Become a Pro
speakerdeck
PRO
3
910
Intergalactic Javascript Robots from Outer Space
tanoku
260
25k
Six Lessons from altMBA
skipperchong
14
1.4k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
213
11k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
349
27k
5 minutes of I Can Smell Your CMS
philhawksworth
196
18k
Music & Morning Musume
bryan
35
4.3k
Producing Creativity
orderedlist
PRO
334
37k
Creatively Recalculating Your Daily Design Routine
revolveconf
207
10k
Transcript
環境変数について 2018/06/19 情処LT(6月) ઐ߈Պ ฏNLUBLVZB
向平卓矢 / Takuya Mukohira • @mktakuya • 情報工学科出身 専攻科2年 •
高専プロコン2018 課題部門
環境変数について
環境変数とは • OSが提供するデータ共有機能。 プロセスを越えてグローバル変数的な使い方ができる。 • システムにより定義されるものと ユーザが定義するものがある。 • シェルで echo
$OSTYPE すると "linux-gnu" とか "darwin" とか出る。 • その他の有名ドコロは $PATH とか $EDITOR とか $HTTP_PROXY とか。
環境変数とは • 環境変数は自分で定義することもできる • export VAR="hogehoge" とか • シェルの設定ファイルに書くとか $HOME/.bashrc
とか $HOME/.tcshrc とか $HOME/.profile とか • 定義方法はシェルによって異なる bash: export VAR='hogehoge' # だいたいこっちでOK tcsh: setenv VAR 'hogehoge' # jocalc
自作のプログラムから利用する • 環境変数は自分のプログラムから利用することが出来る。 • 【C言語】 getenv("VAR"); // stdlib.h必要 【Ruby】 ENV['VAR']
【Python】 os.environ['VAR'] # osモジュールのimport必要
環境変数の使いドコロ • 自作のプログラムの設定情報を格納するのにも利用できる • ユーザ名やパスワード、トークンなど外部サービスの 認証情報や、データベースの接続先などを格納し、 コード上から利用するためにも使う。 • その他、コードとは分離すべき設定を格納する。
None
認証情報を 環境変数に格納する
例えばTwitter Bot • Twitter APIと連携して動くプログラム • ユーザのフォローやツイートには認証が必要 • ユーザごとに異なる認証情報
MinimalなTwitter Bot
MinimalなTwitter Bot ˢೝূใΛϋʔυίʔσΟϯά ɹɹɹɹɹɹʢϕλॻ͖ʣ͍ͯ͠Δ ˞্هτʔΫϯྨదͳͭͰ͢
認証情報のハードコーディングが良く ない理由 • 情報漏えいの危険性 • 完成したTwitter botをGitHubで公開! → 認証情報の漏えい、アカウント乗っ取り •
ソースコードを他人に渡したい時どうする……? • 実装(コード)と設定(認証情報)が密に結合している • 手元のPCではテスト用アカウントを、本番環境では本番用 のアカウントを使う、といった事をしたい時どうする……?
ॳ৺ऀ͕"84Ͱϛεͬͯෆਖ਼ར༻͞Εͯ ٻɺٽ͖ͦ͏ʹͳ͓ͬͨɻ IUUQTRJJUBDPNNPDIJ[VLJLPUBSPJUFNTBF⒎BFC 悲しい実例 • ハッカソンでAWSを使った アプリを開発 • AWSの認証情報を GitHubに公開してしまう
• アクセスキーを抜かれて 不正利用され、$6,000請求 (日本円で66万円くらい?) • AWSの中の人の慈悲で 払わなくて済む
認証情報を環境変数に格納する ˢγΣϧͷઃఆϑΝΠϧʹهʢ͜ͷϑΝΠϧެ։͠ͳ͍ʣ ˢڥม͔ΒೝূใΛऔಘʢίʔυެ։ͯ͠େৎʣ
開発用・本番用で認証情報を分ける • 開発中→テスト用の鍵アカウント 本番環境→本アカウント をコードの変更無しで実現できる
The Twelve Factor App • プログラミング言語やフレームワークに依存しない、 いい感じのSaaSを作るための12の方法論。 • Herokuの人が提唱。 IUUQTGBDUPSOFUKB
The Twelve Factor App • Ⅲ.設定 • Twelve Factor Appは設定を環境変数に格納し、
設定をコードから厳密に分離する。 • 設定とは ・データベースサーバやキャッシュサーバ等への接続情報 ・外部サービスの認証情報 ・その他、デプロイごとの値 • 判断基準:コードベースを今すぐオープンソースにできるか
複数の環境をひとつのコードベースで • ひとつのコードベースで複数のデプロイを実現可能 • 本番とステージングでDBやメールアカウントを分けたり、 ステージングは無料プラン、本番では有料プランを使う等
None
プロジェクトごとに 環境変数を分ける
プロジェクトごとに環境変数を分ける • プロジェクトごとに環境変数を分けたい事がある。 • 例えば…… プロジェクトA: TwitterアカウントA用の認証情報 プロジェクトB: TwitterアカウントB用の認証情報 •
シェルの設定ファイルに書くと、 全プロジェクト共通で環境変数が設定されてしまう。
direnvの導入 • https://github.com/direnv/direnv An environment switcher for the shell. •
ディレクトリごとに環境変数を切替えられる。 • ディレクトリAに移動すると プロジェクトA用の環境変数が設定され、 ディレクトリBに移動すると プロジェクトB用の環境変数が設定される。 • macOSやLinuxの各ディストリ、各種BSDに対応。
direnvの導入 • インストールや設定、詳しい使い方は公式のREADME参照 • ディレクトリ移動すると環境変数がswitchされるデモ
None
まとめ • 環境変数というモノがある。 • 認証情報やコードから分離すべき設定を 環境変数に格納してコード上から参照できる。 • direnvを使うとディレクトリごとに 環境変数を切り替えられる。