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.2k
マネジメントとコミュニケーションとプロトコルと / kichijojipm-34
mktakuya
1
940
自分の道具を自作してつくる喜びを体感しよう、Railsで。 〜4年続いたPodcastを実例に〜 / Kaigi on Rails 2023
mktakuya
1
2.5k
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
Introduction to Git & GitHub
latte72
0
120
一人でAIプロダクトを作るための工夫 〜技術選定・開発プロセス編〜 / I want AI to work harder
rkaga
13
2.8k
マイコンでもRustのtestがしたい その2/KernelVM Tokyo 18
tnishinaga
2
2.3k
「リーダーは意思決定する人」って本当?~ 学びを現場で活かす、リーダー4ヶ月目の試行錯誤 ~
marina1017
0
240
学習を成果に繋げるための個人開発の考え方 〜 「学習のための個人開発」のすすめ / personal project for leaning
panda_program
1
110
CSC305 Summer Lecture 06
javiergs
PRO
0
100
TanStack DB ~状態管理の新しい考え方~
bmthd
2
340
Dart 参戦!!静的型付き言語界の隠れた実力者
kno3a87
0
210
Flutter로 Gemini와 MCP를 활용한 Agentic App 만들기 - 박제창 2025 I/O Extended Seoul
itsmedreamwalker
0
150
コーディングエージェント時代のNeovim
key60228
1
100
UbieのAIパートナーを支えるコンテキストエンジニアリング実践
syucream
2
720
AIエージェント開発、DevOps and LLMOps
ymd65536
1
350
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
64
7.9k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
36
2.5k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.5k
Done Done
chrislema
185
16k
Navigating Team Friction
lara
189
15k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
820
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.8k
Music & Morning Musume
bryan
46
6.7k
The Pragmatic Product Professional
lauravandoore
36
6.8k
The Cost Of JavaScript in 2023
addyosmani
53
8.8k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
53k
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を使うとディレクトリごとに 環境変数を切り替えられる。