Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
環境変数について / Introduction to Environment Variables
Search
Takuya Mukohira
June 19, 2018
Programming
0
360
環境変数について / Introduction to Environment Variables
苫小牧高専 情報処理同好会 JoshoLTの発表資料
Takuya Mukohira
June 19, 2018
Tweet
Share
More Decks by Takuya Mukohira
See All by Takuya Mukohira
Podcasting Guide 2024
mktakuya
3
980
『インタプリタの作り方』の紹介 / Let's enjoy crafting interpreters
mktakuya
1
810
マネジメントとコミュニケーションとプロトコルと / kichijojipm-34
mktakuya
1
810
自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 / Kaigi on Rails 2023
mktakuya
1
1.5k
Podcast配信システムを自作したら捗った話 / kichijojipm-28
mktakuya
0
2.6k
趣味と趣味の掛け算で技術を学んでいく話 / 2020-11-27
mktakuya
0
330
ゆるふわなPodcastのすすめ / kichijojipm-22
mktakuya
0
1.2k
コーチLT / Rails Girls Tokyo 12th
mktakuya
1
1k
プログラミングと一人暮らし 〜Nature Remoで遊ぶ編〜 / prolt-2019
mktakuya
1
300
Other Decks in Programming
See All in Programming
CSC509 Lecture 12
javiergs
PRO
0
160
TypeScriptでライブラリとの依存を限定的にする方法
tutinoko
3
690
Make Impossible States Impossibleを 意識してReactのPropsを設計しよう
ikumatadokoro
0
220
聞き手から登壇者へ: RubyKaigi2024 LTでの初挑戦が 教えてくれた、可能性の星
mikik0
1
130
アジャイルを支えるテストアーキテクチャ設計/Test Architecting for Agile
goyoki
9
3.3k
よくできたテンプレート言語として TypeScript + JSX を利用する試み / Using TypeScript + JSX outside of Web Frontend #TSKaigiKansai
izumin5210
6
1.7k
Micro Frontends Unmasked Opportunities, Challenges, Alternatives
manfredsteyer
PRO
0
110
watsonx.ai Dojo #4 生成AIを使ったアプリ開発、応用編
oniak3ibm
PRO
1
140
Kaigi on Rails 2024 〜運営の裏側〜
krpk1900
1
230
Flutterを言い訳にしない!アプリの使い心地改善テクニック5選🔥
kno3a87
1
190
どうして僕の作ったクラスが手続き型と言われなきゃいけないんですか
akikogoto
1
120
광고 소재 심사 과정에 AI를 도입하여 광고 서비스 생산성 향상시키기
kakao
PRO
0
170
Featured
See All Featured
Building Applications with DynamoDB
mza
90
6.1k
The Power of CSS Pseudo Elements
geoffreycrofte
73
5.3k
Testing 201, or: Great Expectations
jmmastey
38
7.1k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
Adopting Sorbet at Scale
ufuk
73
9.1k
Producing Creativity
orderedlist
PRO
341
39k
Side Projects
sachag
452
42k
Build The Right Thing And Hit Your Dates
maggiecrowley
33
2.4k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
Optimizing for Happiness
mojombo
376
70k
How GitHub (no longer) Works
holman
310
140k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
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を使うとディレクトリごとに 環境変数を切り替えられる。