1. マヂカル.fm
  2. 233: 仕事の9割は環境変数 ~ P..
2026-03-19 41:08

233: 仕事の9割は環境変数 ~ PATH、通ってますか? ~

spotify apple_podcasts

今回は「環境変数」について話しました。

環境変数って何/APIキー やfeature flagを管理できる/コードに直書きしない理由/.env/direnv/.envrc/設定ファイルとの違い/PATH

ユーモラスな言葉15個
四字熟語/エンブなんちゃら/黒い画面/ホゲイコール1/全部箱だろ/みちるだパスワード/指ハート/うわお/パンピー/何やねん/桜じゃないから/仕事の9割は環境変数/環境変数の夢にうなされてる/されるがまま/人間向け

▼ 名言ステッカーやアクリルキーホルダーなどのグッズが増えました🙌
https://suzuri.jp/magicalfm

 

▼ マヂカル.fmとは
関西人のプロダクトマネージャー@michiru_daと関西人(?)のソフトウェアエンジニアの@upamuneが週2で配信する雑談Podcast。

 

▼ お便りや感想はこちらからおまちしています。

X(旧Twitter): #magicalfm 
おたよりフォーム: https://magical.fm/hello
マシュマロ:https://marshmallow-qa.com/xno94s1ortkw63w?t=e1P9wQ

感想

まだ感想はありません。最初の1件を書きましょう!

サマリー

マジカルFMの今回のエピソードでは、リスナーからのリクエストに応え、「環境変数」について深く掘り下げました。みちるださんが最近のプロダクト開発で環境変数に直面した経験から、その基本的な概念と必要性が語られます。環境変数とは、アプリケーションの挙動をコードを修正せずに外部から動的に変更するための値であり、特にAPIキーのような機密情報をコードに直接埋め込まずに管理する上で不可欠です。これにより、セキュリティリスクを低減し、開発環境、テスト環境、本番環境といった異なる環境で異なる設定を適用することが可能になります。 また、フィーチャーフラグやポート番号の動的な設定など、多様な利用目的が紹介されました。環境変数は、設定ファイルと異なり、実行時に優先的に読み込まれることで、より柔軟な挙動制御を実現します。エピソードでは、環境変数を管理するためのツールとして`.env`ファイルと`direnv`が詳しく解説されました。`.env`はアプリケーションが読み込む設定ファイルである一方、`direnv`はディレクトリごとに環境変数を自動で設定・解除するシェルツールであり、開発者の利便性とセキュリティ向上に貢献します。 さらに、`PATH`環境変数という特別な環境変数についても触れられました。これは、コマンドを実行する際にシステムが実行ファイルを探すディレクトリのリストを定義するもので、開発者がコマンドのフルパスを毎回入力する手間を省く重要な役割を担っています。`direnv`は、この`PATH`を含む様々な環境変数をディレクトリ単位で管理できるため、異なるプロジェクトで異なるツールバージョンを使用する際などに非常に有効です。しかし、環境変数の設定は、特に非エンジニアにとっては複雑に感じられることもあります。エピソードの最後には、ターミナルで`ENV`コマンドを実行することで、現在設定されている環境変数の一覧を確認できることが紹介され、リスナーが実際に環境変数に触れる機会を提供しました。環境変数はシステムの柔軟性とセキュリティを支える重要な要素であり、その理解は現代のソフトウェア開発において不可欠であると強調されました。

オープニングとリスナーからのフィードバック
スピーカー 2
マヂカル.fmは関西人のプロダクトマネージャーみちるだと関西人x?のソフトウェアエンジニアのうぱみゅんが週2で配信する雑談ポッドキャストです。お願いします。
スピーカー 1
お願いします。
今日はなんとお便りが届いています。
スピーカー 2
マヂ友ネームmonoさん。
みちるださん、うぱみゅんさん、こんにちは。
いつも面白い配信ありがとうございます。
移動中や寝る前に過去回を聞き直しているのですが、
スピーカー 2
適当性って何?回や宣言的vs手続き的のようなみちるだテックシリーズがテーマも秀逸で勉強になるので好きです。
定期的にみちるだテック回があると嬉しいです。とのことです。
ありがとうございます。
スピーカー 1
ありがとうございます。
スピーカー 2
みちるだテック回ではなくてみちるだがうぱに質問する回なんだよ。
私の周りのマジともさんはテック回はよくわからないので聞き飛ばしていますという人もいらしたのですが、
スピーカー 2
ちょっとmonoさんのような役に立っている人が嬉しいなというところで、
今日はテック回2本撮り。
1本目は何かで言うと環境変数って何?ずっと思ってたよね。
環境変数とは?その必要性
スピーカー 2
頭の片隅で。
環境変数設定してくださいみたいな。
スピーカー 1
環境変数ってなんだよ。
スピーカー 2
環境変数というものにいつ出会ったかで言うと、
スピーカー 1
私と環境変数のでかい出会い。
スピーカー 2
これまでも環境変数という言葉は聞いたことがあったが、
一番直近で自分が目にして改めて何?ってなったと言うと、
自分が最近ちょっとこれまで担当していたものと別のプロダクトを担当するようになりましたと。
そのプロダクトを私自身も開発するための環境構築なるものをやっていますと。
恐らく共通のどのプロダクトでも、
うちのサービスだったら共通のこういう設定したらいいよみたいなものは既にやってあったので、
とりあえず自分のパソコンの中のコード、
眠っていたコードをとりあえず最新化したんですけど、
そしたらなんかうちのプロダクトだけで使う環境変数みたいなやつがあるから、
スピーカー 2
これ設定する必要ありますねみたいなのが引き継ぎのドキュメントに書いてあって、
いや何?と思って急に日本語出てきたと思って環境変数。
なんかそのコーディングするときってだいたいカタカナの言葉ばっかりなのに、
急に環境変数四字熟語出てきてこれ何やねん。
スピーカー 1
確かにね、言わないっすね。
スピーカー 2
英語は何なの?環境…
エンブバー、エンバイルメント。
エンブなんちゃらってそれのなんだっけ?
ディアエンブでしょ。
スピーカー 2
ディアエンブ?それ何?見たことあるんだけど。
なんかよく許可を求められますね。
危ないからね。
スピーカー 2
何なの?
コーディングしようとすると何かを許可してくださいっていう環境変数周りのアラートが最近よく目撃してます。
なので今日は環境変数を学びたい。
環境変数は珍しく言葉そのまんまのものなんですけど、
環境によって変わる値を使えますよっていう話なんですよ。
例えば、私があるすごいツールを開発しましたと。
でもそれはお天気サイトのAPIキーを設定するのが必要ですと。
そのツールは天気の内容を取って表示するアプリなんだけど、
お天気サイトのAPIキーが必要ですと。
それをみんなに使ってってやるんだけど、
みんなはそのAPIキーを設定する必要がありますよね。
スピーカー 1
コードの中にAPIキーを埋め込みたくないじゃないですか。
これがあれか。
まずここから解説しないといけないか。
なんとなく分かる気もするが、それは何でなのかからの方がいいかもしれない。
スピーカー 1
例えば、公開されているGitHubのリポジトリ。
会社関係なく私がそのお天気アプリをAPIキーを埋め込んで公開したら、
みんなそのAPIキーを使えちゃうから、
みんなが私としてリクエストできちゃうよね。
お天気アプリとかだったらまだいいけど、
Googleの連携とか、
環境変数の多様な利用目的
ストライプのAPIキーとか金融系のAPIキーだったら、
全部うちのストライプのアカウントから勝手に出金できちゃったりとか、
危ないですよね。
スピーカー 2
なるほど。
つまりやりたいことは、人によって変わるもの、変わる値、
その場合はそのお天気サイトのAPIキーを外から取れるようにしておきたいんですよ。
その人が動かす環境によって、
その値が動的に変わるようにしたい。
ミチラさんの環境で動かしたら、
みちるだパスワードみたいなAPIキーが入って動くようにしたい。
っていうのがモチベーション。
なるほど。
それってその利用用途は、
基本そのAPIキーの記録みたいな感じなんですか?
スピーカー 2
その人によって違う値を動かしたいのはなぜかで言うと、
セキュリティ的にそうしたいからっていうのが大きいという感じなんですか?
他にもその挙動を変えたいみたいなのがあって、
例えばですけど、デバッグみたいな環境変数の中に値が入っているときは、
すごい詳細にログを出すとか、
あとプロダクト開発でよく使われるフィーチャーフラグみたいな、
このフラグがオンのときはこの挙動をするみたいなのが、
よくあるじゃないですか、近代的なプロダクトだと。
フィーチャーフラグってめっちゃ難しいわけじゃなくて、
普通は出さないんだけど、
この条件がオンだったときは出すよみたいなものなんですよね、フィーチャーフラグは。
それってつまり、外部の何かしらの変数というか、値が、
設定を見て、
設定がオンだったらこう、みたいな話じゃないですか。
それを例えばよくあるフィーチャーフラグだったら、
何かどっかに保存されているデータベースとかの値を見て変えますけど、
スピーカー 1
それをただ動かしている、
手元で設定された変数を見て変えるようにするっていうのが環境変数なんですよ。
だからみんなの手元で、
よく使っている黒い画面あるじゃないですか、
ホゲイコール1みたいな、
環境変数の管理と企業での運用
スピーカー 1
普通なんかエクスポートって書くんですけど、
エクスポートホゲイコール1ってやったら、
ホゲっていう中には1が入ってるんですよね。
出た。何だっけ変数。
スピーカー 1
変数ね。
スピーカー 2
関数と変数がわからないやつだよ。
スピーカー 1
よく箱って言われますけど。
全部箱だろって。
どういうこと?
設定ファイルだったらイメージつきます。
スピーカー 2
設定ファイルのイメージつきます。
それです。それをファイルじゃなくて、
なんていうかな、1個の変数、
変数に入れたやつが環境変数なんですよ。
なるほど。環境変数って1個なんですか?
スピーカー 1
いやもう好きなだけ。
どの単位?
いや本当に、例えばそのアプリケーションを作るじゃない、
アプリ?何かそのツールを作るじゃないですか。
そこから自由にこの環境変数の名前を読みまして自由に定義できるんですよ。
だからウパミューンっていう名前の環境変数を読みますとかできて、
よくあるのはポート番号ってわかりますか?
スピーカー 2
それも聞いたことがありますね。
それって例えば3000とかで指定されてたら、3000って書いてたら、
ローカルホストコロン3000で動くみたいなやつですけど、
よくあるのは3000ってめっちゃみんなよく使うんですよね。
だからポート番号の縛りとして同じポートは2つ以上起動できないんですよ。
スピーカー 1
3000番が2つでできない。
だからどうするかっていうと、
よくあるアプリケーションはポートっていう環境変数に数値が入ってたら、
3000じゃなくてそっちを優先するみたいな感じなんで、
関連ファイルとツール: .envとdirenv
ポートイコール9999みたいな感じで環境変数に入れて起動したら、
そいつは9999番で動くみたいな。
そのアプリケーションのコードをいじらずに変数を変えるだけで、
アプリケーションの挙動を変えられるっていうのが、
つまり環境変数のやりたいことで、
スピーカー 1
フィーチャーフラグとかも言ったらそういうことじゃないですか。
スピーカー 2
その環境変数ってコードを管理している人から提供されるんですか?
完全に物によりますね。
それが不思議だなって思ったんですよ。
コードを管理してくれる人が全部提供してくれよっていう気持ちになった。
スピーカー 1
だってさっきの私がお天気ツール作ってAPIキー入れるって別に、
みんなが勝手にそのお天気サイトにログインして、
自分でGenerate APIキーみたいなのを押して貼り付けるから。
まあまあ。
じゃあその環境変数の箱だけ提供されてて中身は入れてねーみたいな。
そうそう。
スピーカー 1
基本的に自由で、それが普通の世界の話で、
企業にフォーカスすると、
スピーカー 1
企業の場合は例えばこの何とかキーみたいなのがあって、
それはワンパスワードにありますみたいな。
スピーカー 1
ワンパスワードの値を入力してねみたいな感じの運用がされることが多いですよね。
それが何でかというと、
ローカルっていう自分の開発者の手元の環境と、
あとはデブ環境、本番環境みたいなところで値を全部変えたい。
スピーカー 1
本番につながる外部のサービスのAPIキー。
なるほどね。
スピーカー 1
デブ環境のAPIキー。
みんなの手元は適当な用意されたAPIキーっていう感じに、
スピーカー 1
アプリケーションに修正せずに、
外から変数を渡してあげるだけで、
挙動を変えられるようにするっていうのがそれですね。
うーん、なるほど。
スピーカー 1
だからみちるださんが立ち上げようとしたやつは、
そのチームの人以外は別にそのアプリケーションを手元で開発しないから別に困らないんだけど、
そのチームの人は多分外部のサービスか認証みたいなのをやらないといけないから、
自分でパスワードとかキーをコピーしてきて、環境変数に設定しないといけないっていう。
環境変数をこれ入れないとダメですって書いてあったけど、
スピーカー 2
何の値を入れないといけないかあんまり分かってないな。
なるほど。
なんか環境、さっきのENVなんちゃらみたいなやつで思い出したんですけど、
スピーカー 2
それって最近Twitterでちょっと話題になってましたよね。
なんだっけ、なんかコーディングのエージェントに勝手に書き換えられちゃったみたいな。
ドットENV?
ドットENVかな。それとはまた別?
ドットENVもDRENVも環境変数を羅列しておくファイルなんですよ。
スピーカー 1
ドットENVみたいなやつにはこうやってバーってAPIキーイコールなんとかみたいな感じで羅列しておいて、
それは自分の手元にしかないファイルなんですね。
なんでGitHubとかにアップロードしないから、
ファイルには記述されてるから毎回10個ぐらいある環境変数を定義しなくても、
ドットENVのファイルの中に全部提供されてるから、
アプリケーションはそれを読んで起動できるっていうものなんですけど、
問題はそんなに記述されてるやつあったら、
クロードがそのドットENVファイルとか読んだら全部漏れるやんっていう話ですね。
スピーカー 2
漏れるんですか?
スピーカー 1
漏れますよ。
みんなどうしてるんですか?
スピーカー 1
それは私が禅の記事を書いたんですけど。
何?
スピーカー 2
私これ知らないで質問してるから。
スピーカー 1
なるほど。
スピーカー 2
桜じゃないから。
私のやつは2つの問題を解決していて、
スピーカー 1
まず1つはこの環境変数追加しといたんで、
ここにありますよ入れてくださいみたいなのがクソだるすぎるっていう問題を解消するのと、
手元にそういうこれありますよってやつを書いてたら、
そういうコーディングエジェントとかやべって読み取っちゃうっていうのがあるんですけど、
スピーカー 1
それを残さないんで、手元のファイルどこにも書かないから。
スピーカー 2
指ハートを見せられました。
1個目のやつはコードの提供者的に嬉しいってやつ?
設定ファイルとの比較と柔軟な挙動制御
どっちもか。
スピーカー 1
どっちもです。
スピーカー 2
そのコードを開発したり実行したりなってなった時に必要な環境変数を追加することにみんな気づけるみたいな感じですか?
スピーカー 1
1個目のやつはもっと進んでて、新しく環境変数みたいなの追加しましたと。
でもこれ秘密の値ですと。
スピーカー 1
普通はワンパスアウトにあるんでこれコピーして入れてくださいみたいな。
スピーカー 2
自分でやってねって。
それは2つの問題点があって、まず1つはめんどくさいし、その手順を知らないと何かどこにあるのか分かんない。
スピーカー 2
それはワンパスにあるかが分かんない。
スピーカー 1
ワンパスにあるか、Notionとかにあるのか、はたまた別のとこにあるのか、何の値を入れればいいか分かんないっていう問題が1つと、
あとはあれですね、よく分かんないけどとりあえず起動できなくなるっていう問題が。
スピーカー 2
知らないとね、分かんないんで。
スピーカー 1
そう、ありますと。あれ私何個言ったっけ?
2つの問題があるよって言ってた。
スピーカー 1
1個目詳細解説したら2つ目忘れたんだけど。
スピーカー 2
私が聞いた質問は、
嬉しさが、
嬉しさが気づけること、やらないといけないことに気づけることですかって聞いたら、もっと進んでますって言ってました。
あ、そうっすね。だから気づく必要がなくなるんですよ。
どういうこと?
なんで、私が言ったのは、
あ、秘密の値あるってなったら、勝手にそれをもう解決しに行ってくれる。
誰が?
ツールが。
どうやって?
その、AWSにシークレットマネージャーっていう秘密のことを管理するやつがいて、
あ、こいつ秘密のやつじゃんってなったら、勝手にその秘密のやつを取得して、手元にセットしてくれて、
スピーカー 1
それセットするときに別に手元のファイルに書き込むわけじゃないから、
そうなの?え?なんで?
え?だってそうしたらさっきの問題が起こるじゃないですか。
コーディングエージェントに読まれちゃう問題。
そうそう。だからそれが起きないんですよ。
え?じゃあもう環境変数は使わないってこと?
秘密ななんとかキーとか、環境変数の中でもさっき言ったみたいなフィーチャーフラグみたいな、
挙動を変えるものと、セキュアなキーとか。
こっちはセキュアな側は、別に使わなくてもいいです。
ディレクトリごとの環境変数管理とPATH
開発者側がちゃんと設定していれば。
すごい。今その自分の引き継ぎNotion見たら、
ポート番号的なやつが結構いっぱい。
こっちで開いてねーのやつな気がする。
スピーカー 1
なので環境変数はアプリケーションを変えずに、
アプリケーションの挙動を変えたいときに設定するものですね。
それって環境変数以外で解決することもできるんですか?
スピーカー 1
できます。例えばそれこそ設定ファイルとか。
そのメジャーな解決方法は環境変数なんですか?
場合による。
場合によりますね。
例えば、基本、自社のアプリケーションとかだったら、
環境変数だけみたいな感じですけど、
サポートするのが、自社のエンジニアたちしか困らないじゃないですか。
だから環境変数だけとかになったりするんですけど、
例えばクロードコードみたいなツールだったら、
設定ファイルもありますと。
でも環境変数も読みますみたいな感じになってるツールがほとんどで、
スピーカー 1
基本的には環境変数を一番先頭で優先するみたいな。
それでもしそこに無かったら設定ファイルを見るみたいな。
スピーカー 2
セッティング.jsonみたいな。
例えば、何だろうな。
無い環境変数を言っちゃうけど、
例えばクロードにクロードアンダースコアモデルみたいな環境変数があったとして、
グローバルの設定で、
私はソネットをデフォルトモデルにしますみたいな感じで書くじゃない。
設定するじゃないですか。
そうするとセッティング.jsonみたいなやつにはソネットっていうのが記録されるんですよ。
スピーカー 1
でもここのディレクトリではとか、
こういう今の軌道には最初からオーパスを使いたいんじゃいみたいな。
時はクロードコマンドの先頭に、
クロードアンダースコアモデルイコールオーパスみたいな感じで書いたら、
設定ファイルよりこっちが先に優先されるみたいな挙動になるツールが多いですね。
今のユースケースはめっちゃ雑な感想だとめっちゃエンジニアっぽいっていうか、
エンジニアの人向けのツールマジでいろんな設定をめっちゃカスタムできるから、
スピーカー 2
その細かいカスタムの一個だなみたいな感想を持ちました。
スピーカー 1
そうですね。環境変数を導入することですごい柔軟性が上がるんですよね。
いつもはこの設定でいいんだけど、心の時だけはこうしてほしいみたいな。
それは多分エンジニアの人にはいいんですけど、パンピー向けにはかなり多いなってなって、
うわおってなります。
何が多いですか?
スピーカー 2
設定できることが多すぎて何を設定したらいいかわからない。
多分それってあれですよね、設定ファイルでも同じことじゃないですか。
そうですね。
スピーカー 2
多分設定する方法があるのが結構基本って感じですね。
何の手段で設定するのかと何を設定するのかを決めないといけないので、
エンジニア向けのツールはそこが大変だなと思います。
スピーカー 1
それもディレクトリによって分けたいとか、ここだとこうしたいのも言ってしまえば環境じゃないですか。
このディレクトリ環境ではこうしたいみたいな。
スピーカー 1
なのでそういうディレクトリ、ローカルの中でもここのディレクトリとか、
レブ環境、本番環境も含め、
もう挙動を変えたい、変数を渡したいという時に使うのが環境変数。
じゃあどのディレクトリに置くかでどの範囲に適用するか決めるみたいな感じ。
環境変数は1個なのかな?
環境変数はディレクトリとは関係ないんですけど、
環境変数は何とかイコール何とかっていう風にただ設定できるものだと思ってください。
そうなった時に困ってくるのが、
例えばみちるだアプリケーションディレクトリに入ったら、
スピーカー 1
例えばみちるだイコール1っていう環境変数を設定して欲しいんだけど、
その他のディレクトリだとそんなの設定して欲しくないのよみたいな話があるんですけど、
スピーカー 1
それを解決するのがDIMってやつなんですね。
スピーカー 2
やばい、やばい。長かったけどちょっと忘れてた、存在を。
何?違い?違うんだ。
例えば他のディレクトリにいる時にみちるだ変数を表示しても何もセットされてないよってなるんですけど、
みちるだアプリケーションディレクトリに入ったらみちるだって表示したら1って返ってくる挙動が実現できるんですよDIMを使うと。
スピーカー 1
多分経験あると思うんですけど、アプリケーションのディレクトリにチェンジディレクトリCDって移動したら、
最初にめっちゃブワってプラスなんとかみたいな感じでめっちゃ変数名が羅列されるんですけど、
あれはその分環境変数がDIMによって展開されてるっていうことなんですね。
確かに入ったらめっちゃブワって出てくるところあるわ。
リア演武とドット演武?
スピーカー 1
はい。リア演武は人向け、人間向け、シェル向けと言えばいいのか。
スピーカー 2
あ、出てきた。
スピーカー 1
やつで、ドット演武はアプリケーションが読みにくくなるんですね。
なんでそのドット演武は一回忘れてください。
そうなんだ。人間がいじるのはリア演武が多いんですか?
それは…
場合による。難しいよ。
ドット演武もリア演武もいい感じに環境変数を扱うための一つのものだと思ってください。
リア演武もドット演武もファイルではありますか?
リア演武はツール名で、リア演武が見るファイルはドット演武RC。
ドット演武はまた別?
スピーカー 1
別です。
両方環境変数をいい感じにするやつです。
さっきの設定ファイルみたいな、セッティングとジェイソンは一応見れるじゃないですか。
スピーカー 2
ここにファイルあるなっていう。分かるから存在のイメージがつくんですけど、
今のドット演武とリア演武は見えないから。
見えるよ。
スピーカー 2
見えないよ。
スピーカー 1
どういうこと?
ファイルある?
ファイルとしてある?
ある。ドット演武RCって。
でも、そうか。
ドット演武RCとドット演武は別?
はい。
ドット演武はファイルではない?
スピーカー 1
ファイルです。両方ファイル。
スピーカー 2
じゃあどっちもファイルがあるんだ。
スピーカー 1
どっちもファイルで、ドット演武RCの方がちょっと広いっていう感じですかね。
ドット演武RCは本当に環境変数を何でも定義しますと。普通やり方は。
スピーカー 1
つまり、例えば何だろうな、うちとかでやってるのはみんないろんな方法でツールをインストールするんですよ。
だからちょっとよくわからないからホームブリューっていうやつを使ってブリューインストールしちゃうぞみたいな。
そうしちゃうとこのアプリケーションで使ってるバージョンと勝手にインストールされたツールのバージョンが違くなって起動できないみたいなことがあるんですよね。
そうなると困るじゃないですか。
スピーカー 1
ここでやってるのはこのアプリケーションのディレクトリに来たら環境変数をいじってこのホームブリューみたいな勝手にインストールしたやつの実行の優先度をめっちゃ下げるみたいなことをやってますね。
でもローカルの開発環境とかそういうのも含めてenvrcには記述しますと。
スピーカー 1
けど.envはアプリケーションが読みに行くファイルなんで、そんな他のやつは記述しないっていう感じですかね。
今思ったけどPaaS環境変数の説明とかから。
やばい何それもう。
PaaSってp-a-t-h?
そうあれよくパス通ってますかみたいな。
場所を示すやつ。でもパス通ってますかはねわかんないか。
でも新卒の技術研修の時も言われた気がするな。
これやばい環境変数って奥が深いですね。
どこから説明しようかね。
パスとは何なのかをちょっと解明して終了するか。
そうね。今何分?あ、30分ぐらい。確かに。
とりあえずPaaSを。
スピーカー 1
みちるださんは、たとえばみちるださんが実行するコマンドってなんだろうな。
例えばcloudとかmakeコマンドとかって実行しますね。
あれ普通にclaudeとかmakeってポチって押したら実行できるじゃないですか。
スピーカー 1
でもあれおかしなことなんですよ。
プログラムっていうのはどっかのディレクトリに必ず配置されてるんですね。
なんでそれを実行するためには本当は全部ちゃんとそこのディレクトリにあるフルパスで書かないといけない。
スピーカー 1
例えばデスクトップにmakeっていうコマンドがあるんだったらちゃんとsra、users、sra、道田、sra、デスクトップ、sra、makeみたいな感じで実行しなきゃいけないんですよ。
cloudも同じですね。すべてのコマンドが同じですね。
スピーカー 1
けどmake、あとはcloudって書くだけで実行されちゃうじゃんっていう。
それを解決するのがパス環境変数なんです。
やば、環境変数だった。
そう。
スピーカー 1
みちるださん今ターミナル使えますか。
はい。
そこにecho。
スピーカー 2
それも何か聞いたことある。
echoはただ出力するだけのコマンドですね。
スペース、ドル、PATH。
大文字の方がいい?
スピーカー 1
どっちでもいいです。
質問を読んで、陶器的に。
そしたらめっちゃ。
スピーカー 2
やばい、何も。
ドルパスしか出ないか。
変なディレクトリで実行してる。
スピーカー 1
大丈夫です。どこでもいい。
echoをスペース、ドル、PATHね。
echoをスペース。
ドルとPATHの間開けてたかも。
ダメですね。
ドルに負けないPATHで、何かいっぱい出ました。
めっちゃ出たじゃないですか。
なので、このPATHっていうところに、
direnvと.envの役割とセキュリティの注意点
プログラムがある場所を全部列挙してるんですよ。
つまりみちるださんがクロードって打つとするじゃないですか。
そしたらまず最初からコロンが区切り。
これだとスペースかな。
どうやって表示されてますか。
スペースで区切られてるかな。
PATHとPATHの間が。
多分先頭からスラー。
スピーカー 2
ビーンみたいなやつ。
そうですそうです。
その後ろにちょっとスペースがありますよね。
でもスペースあるかもな。
それでまた違うPATHが書かれてますよね。
PATHって言うと分かりづらいですね。
ファイルPATHが書かれてますよね。
いっぱいありますよね。
スピーカー 2
いっぱいあります。
なのでみちるださんがクロードって打ったら、
まず最初のここのPATH環境変数に入ってるディレクトリに
クロードってあるかな。
スピーカー 1
ない。
ってなったらまた次のところディレクトリに入って
クロードってあるかな。
スピーカー 1
ない。
ってなってそれをずっと最後まで繰り返していって
どっかで見つかったらクロードを実行するし
なかったらコマンドノットファウンドみたいな感じになるんですよ。
便利。
そう。
スピーカー 1
なんでこれ最初から。
それって環境変数じゃないとダメなんですか。
スピーカー 1
ダメです。
スピーカー 2
なんで。
なんで。
人ごとに違うんだろうし。
スピーカー 1
違います。
全然全然違う。
人ごとに違うんだ。
そのディレクトリの構成が違うっていうこと。
使ってるツールが違うからですね。
例えばさっき私が言ったような
ホームブリューみたいなツールがあると思うんですけど
そのインストールする。
でホームブリューはホームブリューなりの
ここにインストールするよっていうディレクトリがあるんですよ。
だからそれをPATHに設定しないと
ホームブリューでいくらインストールしたからって
ホームブリューがインストールしたツールを見つけられないわけですよね。
なんで実行するのには毎回このフルPATHを入力する必要がある。
よくそれPATH通ってますかっていうのはそういうことで
クロードって言っても実行できないよっていうときは
ホームブリューで入れたんだったら
ホームブリューが追加したところのディレクトリを
ちゃんとPATHっていう環境変数に追加しないと
見つけられないよねっていう話です。
このPATH環境変数はもうみんな使ってるやつ?
スピーカー 1
はい特別な環境変数。
そういう特別な環境変数はいくつかありますね。
あれなんだよな、ツールも若干わかってないんだよな。
ツール?
ツールってアプリケーションほどじゃないけど?
いやそれはねもうあんま区別してないと思います。
ツールって指すもの結構広いですよね。
そうですね多分何でもツールだと思いますよ。
チャットとかでもコミュニケーションツールであるし
チャットアプリケーションであるし。
ホームブリューもツールって言うし
エージェントのツールコールのツールとも言うじゃないですか。
でもそれって多分別物ですよね。
その流度では同じ感じなんですかね。
何か使えるもの。
いや難しいよ。
スピーカー 1
本当にただのツール。
確かにアプリケーションって言うとちょっと違うなっていう感じがしますよね。
スピーカー 1
なんかもっとリッチな。
そうなんか表に出てる感じの。
でもクロードコードはアプリケーションですかツールですかって聞かれたら
なんか微妙なとこじゃないですか。
ツールですか。
いやツールではなくね。
でもクロードコードをツールとしてツールコールもできるからね。
スピーカー 2
ツールって言われたときにその指すものが広すぎて
自分が思い浮かべるツールと
ブッサンが喋ってるツールが合ってんのかなって毎回不安になりますね。
何か使うものぐらいの認識ですね。
何の話してたか忘れたな。
でもあれだ。
何でこのPaaSの話になったんだっけ。
リア塩分いつ使うんねんみたいな話。
スピーカー 1
リア塩分とドット塩分の違いを話してて
PaaSをかけ替えたりするときに使いますねと言ったけど
PaaSっていうものでコマンドは制御されてることを説明してなかったってなって
PaaSの説明をしたっていう。
スピーカー 2
PaaS環境変数はリア塩分なんですか。
スピーカー 1
そうですね。
これもシェルに効くんですよ。
シェルってありますよね。
スピーカー 1
ざっくり言うとドット塩分はアプリケーションが読むものだと思ってください。
作ったものが。
で、みちるだも知らない。
I don't care。
スピーカー 1
ドット塩分はね。
けどリア塩分は人間、自分たちのためにあるもので
でもややこしくなるのはそこにも環境変数を定義できるんで
そこにチェンジディレクトリしたら
いろんな環境変数がバババババって設定できるんですけど
環境変数って一回設定されたらその後続にも効き目があるんですよ。
なんでドット塩分ファイルがなかったとしても
リア塩分で環境変数を設定してたら
立ち上げたアプリケーションにもその環境変数が付与されるっていう
それはすんなりあるんで
ちょっと役割が若干かぶってるんで
スピーカー 1
つまりどっちでもいいんですよ。
どっちもあってもいい。
けどどっちかでもいい。
ドット塩分だけは無理かな。
リア塩分は人間のためのっていうのがもう分からなかった。
結局アプリケーションが読むじゃんって今。
アプリケーションは読まないです。
リア塩分で定義した環境変数はアプリケーションが読むんですけど
アプリケーションはそれがリア塩分で定義された環境変数か
人間が頑張って一つ一つ手作業で環境変数を定義したのか
アプリケーションは別に知らないっていう感じなんですよ。
リア塩分はあるディレクトリに来たら
設定ファイルの中の環境変数を全部
ボーンって設定してくれるものだと思ってください。
塩分RCの中に入ってる。
ドット塩分はそうじゃないです。
ダメかもしれない。
なんで?
リア塩分がツールであるっていうのはちょっと忘れてた。
スピーカー 1
そうですそうです。
私たちが勝手に入れてるツールですリア塩分は。
ドット塩分はツールではない。
ドット塩分はライブラリーが使うファイルの名前ですね。
スピーカー 1
ファイルの名前かつライブラリーですね。
ライブラリーもドット塩分っていうしファイルもドット塩分っていう。
ドット塩分はちょっと忘れて。
いいよドット塩分。
パンピーが扱うものですドット塩分は。
私はパンピーだよ。
でも私はドット塩分なくても生きていきますけど
リア塩分がなくなったらかなりつらいですね。
なんで?
人間のためのものだから。
だから私これめっちゃ使ってるんですよ。
このディレクトリに来たらあることをするっていう。
環境変数とかを書き換えるみたいなのができるツールなんで
会社で結構エンジニアじゃない人の環境とかを見てたりするんで
まとめと環境変数の確認方法
とりあえずこのディレクトリに来たら
絶対に私が言った通りの設定になるみたいなのを仕込めるんですよ。
スピーカー 2
それはそれでやってるんだ。
スピーカー 1
そうそうそう。
なんでエンジニアじゃない方って
よくわかんないけどこのノートに書いてあることを
インストールコピペしてやったら今は動いたんだけど
次からどっかで動かなくなったみたいなのがあるじゃないですか。
それが起きないように
ここのディレクトリに来たらその人が入れたら全部設定無視して
私が設定したやつだけで動くみたいな感じに。
そういう制御ができます。
それはめっちゃいいですね。
でしょ?
そういうことですね。
なるほど。その設定はそのパンピーがいじることもできちゃうんですか?
じゃあそこすら自分で変えちゃったらもう
そのコントローラー効かないってこと?
それはむしろないですよ。
この環境変遷も誰が管理しているのかみたいなのが
聞く前はわからなかったから
自分か誰かですね。
スピーカー 2
基本自分なんだっていうのがわかりました。
そうですそうです。
自分だけどうぱさんが設定してくれたやつが配布されてるの?
そう。面白いのがMVRCっていうやつを
そのディアMが見るやつですね。
そいつを普通は、普通かな?
多くの場合はGitで管理しないんですよ。
つまり自分の手元にだけあるけどGitHubには登録されてないよっていう。
で、私はそれをコミットしてるんですね。
つまりどういうことが起きるかっていうと
みんなの手元にこの環境変数定義しなさいっていうファイルがバーって
みんなの手元に同じものが配られるわけ。
そうすると私が思った通りの環境変数がみんなの手元で
その人がファイルをいじらない限りは定義されてるから
さっきみたいなみんな一律の挙動を達成することが可能っていうことですね。
そのMVRCの中身を見たいってなったら
うぱさんが設定したやつの中身が見れるってこと?
そうですそうです。
でさっき言ったみたいに環境変数の中には何度かキーみたいな秘密にしたいやつもあるから
それは.mvrc.localみたいなやつを作って
それはもうGitで管理せずにっていう感じで分けてるって感じですね。
だからGit管理してるんで.mvrcをめちゃくちゃにいじって終わっちゃっても
GitHubにあるやつ持ってくれば元通りっていう。
ありがたい。
なんか10%ぐらいは分かります。
環境変数?環境変数は多分かなりアハっていう感じだけど
その.mvrc.localと.mvrc.localが出てきたら
どっちがどっちで何が何でそんなの必要やねんっていうところに疑問なのかなっていう。
基本そのターミナルで確認されるのは.mvrc.localの方ですか?
そうです。だからさっき言ったみたいに好きな環境変数定義できるって言ったじゃないですか。
でも私がめっちゃ悪者でその中でなんかめちゃくちゃな環境変数を定義したり
それってなんか何かを実行できるんで危ないことをしてる可能性があるんですよね。
それを.mvrc.localは前の時と.mvrc.localの中身変わってるけど
実行していいみたいな感じで聞くのがあれで。
なるほど。
それいいよって言ってるのが.mvrc.localで
でポチッと押したらパッて定義されるってことですね。
なるほど。
だから組織内で管理されてるやつはされるがままにやっていいと思うけど
それ以外のところでやってたやつは危ないよっていう。
なんか外部からインストールしたやつとかは気をつけるってことか。
なるほど。
勉強になります。
ありがとうございます。
難しかった。
環境変数?
うん。
ちょっと力量不足だな。
実態が見えないというのが難しさですね。
世の中は環境変数で動いてる。
仕事の9割は環境変数。
環境変数どんなのがあるのかなって気になった人は
ターミナルってやつを開いてもらってenvって打ってもらえれば
いっぱい出てきた。
めっちゃいっぱいあるじゃん。
そう。
すごいね。
別にアプリケーション関係ないやつとかも
このシェルで有効なものとかが出てきてるんで。
シェルね。シェルスクリプトみたいな。
みなさんもお手元の環境で実行してみてください。
はい。
env。
ちょっと難しかったな。
え?
ちょっとノットITの人が
ちょっとマジで何の話?
環境変数の夢にうなされてる。
うわー。
なんか自分はそのdiaenvとかを文字列で時々見るから
あれかってなるけど
知らない人はマジ何の話?ってなる。
ちょっとまだまだ知らないことがあるので
勉強します。
頑張ろう。
頑張ろう。
一緒に。
ありがたいですね。
はい。
では感想・質問・フィードバックは
Xのハッシュタグ
マヂカル.fm全部小文字
または概要欄のお便りフォーマでお寄せください。
Spotifyのベルマークを押すと更新通知が届きますので
そちらもお願いします。
ありがとうございます。
ありがとうございました。
41:08

コメント

スクロール