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
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Takuya Mukohira
June 19, 2018
Programming
0
440
環境変数について / Introduction to Environment Variables
苫小牧高専 情報処理同好会 JoshoLTの発表資料
Takuya Mukohira
June 19, 2018
Tweet
Share
More Decks by Takuya Mukohira
See All by Takuya Mukohira
最近読んで良かった本 / Yokohama North Meetup #10
mktakuya
0
1.7k
Podcasting Guide 2024
mktakuya
3
1.8k
『インタプリタの作り方』の紹介 / Let's enjoy crafting interpreters
mktakuya
1
1.4k
マネジメントとコミュニケーションとプロトコルと / kichijojipm-34
mktakuya
1
1k
自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 / Kaigi on Rails 2023
mktakuya
1
2.8k
Podcast配信システムを自作したら捗った話 / kichijojipm-28
mktakuya
0
2.9k
趣味と趣味の掛け算で技術を学んでいく話 / 2020-11-27
mktakuya
0
380
ゆるふわなPodcastのすすめ / kichijojipm-22
mktakuya
0
1.4k
コーチLT / Rails Girls Tokyo 12th
mktakuya
1
1.2k
Other Decks in Programming
See All in Programming
「ブロックテーマでは再現できない」は本当か?
inc2734
0
990
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.9k
高速開発のためのコード整理術
sutetotanuki
1
400
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.8k
そのAIレビュー、レビューしてますか? / Are you reviewing those AI reviews?
rkaga
6
4.6k
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
570
インターン生でもAuth0で認証基盤刷新が出来るのか
taku271
0
190
開発者から情シスまで - 多様なユーザー層に届けるAPI提供戦略 / Postman API Night Okinawa 2026 Winter
tasshi
0
200
Package Management Learnings from Homebrew
mikemcquaid
0
220
humanlayerのブログから学ぶ、良いCLAUDE.mdの書き方
tsukamoto1783
0
190
QAフローを最適化し、品質水準を満たしながらリリースまでの期間を最短化する #RSGT2026
shibayu36
2
4.4k
プロダクトオーナーから見たSOC2 _SOC2ゆるミートアップ#2
kekekenta
0
210
Featured
See All Featured
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
93
Fashionably flexible responsive web design (full day workshop)
malarkey
408
66k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
35
2.4k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
7.9k
Skip the Path - Find Your Career Trail
mkilby
0
56
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
220
Side Projects
sachag
455
43k
Utilizing Notion as your number one productivity tool
mfonobong
3
220
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2k
Chasing Engaging Ingredients in Design
codingconduct
0
110
A Modern Web Designer's Workflow
chriscoyier
698
190k
Visualization
eitanlees
150
17k
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を使うとディレクトリごとに 環境変数を切り替えられる。