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
420
環境変数について / 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
1.5k
『インタプリタの作り方』の紹介 / Let's enjoy crafting interpreters
mktakuya
1
1.3k
マネジメントとコミュニケーションとプロトコルと / kichijojipm-34
mktakuya
1
950
自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 / Kaigi on Rails 2023
mktakuya
1
2.6k
Podcast配信システムを自作したら捗った話 / kichijojipm-28
mktakuya
0
2.8k
趣味と趣味の掛け算で技術を学んでいく話 / 2020-11-27
mktakuya
0
360
ゆるふわなPodcastのすすめ / kichijojipm-22
mktakuya
0
1.4k
コーチLT / Rails Girls Tokyo 12th
mktakuya
1
1.1k
プログラミングと一人暮らし 〜Nature Remoで遊ぶ編〜 / prolt-2019
mktakuya
1
350
Other Decks in Programming
See All in Programming
CSC305 Lecture 02
javiergs
PRO
1
260
After go func(): Goroutines Through a Beginner’s Eye
97vaibhav
0
230
エンジニアとして高みを目指す、 利益を生み出す設計の考え方 / design-for-profit
minodriven
23
12k
開発者への寄付をアプリ内課金として実装する時の気の使いどころ
ski
0
350
iOS 17で追加されたSubscriptionStoreView を利用して5分でサブスク実装チャレンジ
natmark
0
580
GitHub Actions × AWS OIDC連携の仕組みと経緯を理解する
ota1022
0
240
複雑化したリポジトリをなんとかした話 pipenvからuvによるモノレポ構成への移行
satoshi256kbyte
1
760
CSC305 Lecture 01
javiergs
PRO
1
400
Your Perfect Project Setup for Angular @BASTA! 2025 in Mainz
manfredsteyer
PRO
0
120
Web フロントエンドエンジニアに開かれる AI Agent プロダクト開発 - Vercel AI SDK を観察して AI Agent と仲良くなろう! #FEC余熱NIGHT
izumin5210
3
380
株式会社 Sun terras カンパニーデック
sunterras
0
220
アメ車でサンノゼを走ってきたよ!
s_shimotori
0
140
Featured
See All Featured
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
37
2.9k
Git: the NoSQL Database
bkeepers
PRO
431
66k
Speed Design
sergeychernyshev
32
1.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
How to train your dragon (web standard)
notwaldorf
96
6.3k
The Power of CSS Pseudo Elements
geoffreycrofte
79
6k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Principles of Awesome APIs and How to Build Them.
keavy
127
17k
Code Review Best Practice
trishagee
72
19k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
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を使うとディレクトリごとに 環境変数を切り替えられる。