Drift・環境変数・PATH:マシンごとに開発環境が異なる理由

約10分developer-tools
#ドリフト#ウォーターマーク#環境変数#PATH#シェルプロンプト#AIコーディングツール#用語辞典
※ 編集方針:以下の業務状況および登場人物は、用語の理解を助けるための仮想のシナリオです。実際の著者の経験や特定企業の出来事を再現したものではありません。
長年使っていたノートPCを買い替えた後、同じプロジェクトのテストが新しいマシンでのみ失敗する状況を想定してみましょう。
同じプロジェクトを新しいコンピュータで開いたところ、昨日まで確実にパスしていたテストが一つ、なぜか失敗し続けます。

昨日まで動いていたテストが新しいコンピュータでのみ失敗するとき:ドリフト

text
1Expected node v20.11.0, found v20.9.0
2Config mismatch: 3 settings differ from team baseline
同じ失敗が繰り返されるのを見て、チームの設定ドキュメントを確認しました。チームで定めた基準バージョンと、新しいノートPCにインストールされたバージョンが、微妙にズレていたのです。
全員が同じ基準から出発しても、時間が経つにつれてそれぞれの環境が少しずつ異なる方向にズレていく現象のことでした。同じ時刻に合わせておいた複数の時計が、時間が経つと少しずつズレていくのに似ています。チームの設定ドキュメントを基準に合わせて修正してようやく、テストが通過しました。
同じ基準から出発したものの、時間が経つにつれてそれぞれ少しずつズレていく様子
同じ基準から出発したものの、時間が経つにつれてそれぞれ少しずつズレていく様子
バージョンを合わせると、今度は会社のロゴが入ったスクリーンショットの1つが、どこかおかしいことに気がつきました。

AIが作成した画像の隅に薄い模様があるとき:ウォーターマークが残る理由

デザイナーの同僚がSlackに投稿した画像について尋ねたところ、隅の薄い模様はもともと入っているものだと教えてくれました。
人の目には目立ちませんが、この画像がAIによって生成されたものであることを後から識別できるように埋め込まれた目印です。光に透かすと見える紙幣の透かしと同じ発想です。
目立たないように画像内に埋め込まれる出力元の目印
目立たないように画像内に埋め込まれる出力元の目印
画像の問題はともかく、よく使っていたコマンドの1つが、新しいノートPCでのみ「見つかりません」というメッセージを出しました。

昨日まで使えていたコマンドが新しいコンピュータで機能しないとき:環境変数とPATH

bash
1$ mytool --version
2zsh: command not found: mytool
シェル設定ファイルを開いてみて、理由がわかりました。以前のノートPCにはそのツールがあるフォルダのパスが登録されていましたが、新しいノートPCにはその登録がまだされていませんでした。
複数の設定値が格納された引き出しの中に、PATHもその一つとして入っている構造
複数の設定値が格納された引き出しの中に、PATHもその一つとして入っている構造
コンピュータはコマンドを実行する際、PATHというリストに登録されたフォルダの中だけを捜索して見つけ出します。登録されていないフォルダにあるツールは、正確な名前を知っていても見つけられません。環境変数はこうした設定値が保管される共有の引き出しのようなもので、PATHはその引き出しの中にある様々なリストの一つでした。
コマンドを実行する際、PATHに登録されたフォルダだけをスキャンする構造
コマンドを実行する際、PATHに登録されたフォルダだけをスキャンする構造
ターミナル設定ファイルを開き、新しいパスを1行追加する場面
パスを登録するとコマンドは再び正常に動作しましたが、最後にターミナル画面そのものの見た目が以前と異なっており、違和感がありました。

ターミナルの先頭部分の表示がコンピュータごとに異なる理由:シェルプロンプト

text
1예전 노트북: user@old-mac ~/project %
2새 노트북: ➜ project git:(main)
同じ会社の同僚のコンピュータ画面を隣で見ていて、なぜこんなに見た目が違うのか尋ねてみました。同僚は、これは好みに合わせて自由にカスタマイズできる部分だと言いました。
ターミナルでコマンドを入力する直前に表示されるこの行を「プロンプト」と呼びますが、現在のフォルダやブランチ名など、必要な情報をどの程度表示させるかは各自の設定次第でした。同じ機能のアプリを使っていても、人によってロック画面の壁紙が異なるようなものです。移行してから数日経ってようやく、新しいノートPCが手に馴染んできました。
同じ役割を持つプロンプトでも、設定によって表示される情報や形状が異なる様子
同じ役割を持つプロンプトでも、設定によって表示される情報や形状が異なる様子
整理が終わった新しいデスク、ノートPCの画面に見慣れたターミナルプロンプトが表示されている場面
丸二日かけて移行した作業環境は、なんとか以前の状態を取り戻しました。新しいコンピュータで動作しなかったものの多くは、コードそのものではなく、コードの外部に記述されていた設定の問題でした。 次にまた移行するときに備えて、今回はそれらの設定をファイルに残しておきました。

よくある質問

ドリフトはどのようにして事前に防ぐことができますか?

チームの設定ファイルをリポジトリにコミットしておき、新しい環境をセットアップする際にそのファイルを基準に自動インストールされるようにしておけば、手動で一つずつ合わせるミスを減らすことができます。

AI画像のウォーターマークは常に目に見えますか?

いいえ。目に見えない形でピクセル値の中に情報を潜ませる方式もあり、専用のツールで確認して初めて明らかになるケースも多いです。

PATHにどんなフォルダでも追加していいのですか?

技術的に可能ですが、出所が不明なフォルダを追加するとセキュリティ上のリスクがあります。信頼できるツールがインストールされているフォルダのみを追加するのが安全です。

AIコーディングツール用語辞典シリーズの第6話です。次回予告 · 第7話 障害対応の当番をしていた夜、アラートが鳴る前にすでに起きていたこと ハートビート・ブレッドクラム・シャドウモード・パイプ・リダイレクション

参考・根拠

関連記事