-
-
ポートイコール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個目のやつはコードの提供者的に嬉しいってやつ?
開発者側がちゃんと設定していれば。
すごい。今その自分の引き継ぎ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っていうところに、
プログラムがある場所を全部列挙してるんですよ。
つまりみちるださんがクロードって打つとするじゃないですか。
そしたらまず最初からコロンが区切り。
これだとスペースかな。
どうやって表示されてますか。
スペースで区切られてるかな。
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のベルマークを押すと更新通知が届きますので
そちらもお願いします。
ありがとうございます。
ありがとうございました。