2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

direnvで設定された環境変数はVSCodeで反映されない!?と思っていたら初歩的なミスでした。

Posted at

ここで参照する本はGo言語でつくるインタプリタ(ISBN: 978-4-87311-822-2)、(以下、猿本と言います)。
この本のソースコード群をダウンロードして使用しているので、ディレクトリ構成とかは本に従います。


大学の授業で猿本を教科書として使用しています。授業資料に従うがまま環境($GOPATH$GOROOT等の環境変数の設定など)を整え、Ubuntuのターミナル上でプログラムを実行させることはできたのですが、しかし、VSCode上では環境変数の設定が反映されていないようで、

/01/src/monkey/main.go
could not import monkey/repl (cannot find package "monkey/repl" in any of 
	/usr/lib/go-1.18/src/monkey/repl (from $GOROOT)
	/home/***/go/src/monkey/repl (from $GOPATH))

とエラーが出ます。
どうやら$GOROOT$GOPATHから辿った先にはmonkey/replなんてパッケージは無いよーとのこと。
これは環境変数がうまく設定できてないことによります。なので、授業資料でやったdirenvとかの意味を理解することも兼ねて、設定をしていきたいと思います。
(以降***はユーザーネーム等、猿本によらないディレクトリ等です)

結論

設定をしていきたい…と思ったのですが、いろいろやっているうちにdirenvによって環境変数が設定された状態でVSCodeを起動すればいいと気づきました。当たり前ですねぇ…
具体的には、

***@***:~$ cd ***/waiig_code_1.4/01
direnv: loading ~/***/waiig_code_1.4/01/.envrc
direnv: export +GOPATH
***@***:~/***/waiig_code_1.4/01$ code .

こういうことです。

授業資料では何をしていたのか

授業資料では

  1. direnvの設定
  2. GO111MODULEの設定

をしています。
環境変数の設定にはdirenvが関わっているので、情報整理がてら何を設定していたのか見ていくとします。(GO111MODULEは、資料にあった通り言語のバージョンによるものなので今回は割愛です。)

direnvとは

簡単に言うとディレクトリごとに環境変数を定義してくれる奴で、.envrcが存在するディレクトリごとに環境変数を発行してくれるそうな。
猿本のソースコード群には章のディレクトリごとに下のような.envrcが用意されていて、$GOPATHはここにて設定されています。

/01/.envrc
export GOPATH=$(pwd)

この中の$(pwd)ディレクトリのパスを返してくれるコマンド
direnvが正常にインストールされていれば、.envrcが存在するディレクトリに入ったら

direnv: loading ~/***/waiig_code_1.4/01/.envrc
direnv: export +GOPATH

と出力されるので
direnvが.envrcを発見、ロードする->.envrcがあるディレクトリのパスを$GOPATHとして設定する
といった流れが見えます。
何が言いたいのかというと、VSCode側でも.envrcがあるディレクトリのパスを$GOPATHとして設定してやればいいのです。


やりたかったこととしては、「tasks.json内でexport GOPATH=${一番近い階層の.envrcのパス}を実行する」なんですけど、そもそもVSCodeのターミナル内で環境変数書き換えても反映されませんでした。
ターミナル上でechoすると確かに変わってるんですけど、書き換えてもエラーは消えないし、再起動して再確認するとそもそも書き変わってないです。権限的な問題かな?管理者権限で実行すれば行けるのかしら?
なんでだろうなーといろいろいじってたら、先の結論に至ったわけです。なんで今まで気づかなかったんだろう…

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?