「ターミナル再起動したら環境変数が消えた…」を二度と繰り返さないUbuntu設定術

  • URLをコピーしました!
ポイント
  • 環境変数の確認はenvやprintenvコマンドで瞬時に可能
  • exportで追加、unsetで削除できるが再起動で消える
  • 永続化には.bashrcや/etc/environmentへの記述が必須

Ubuntuで開発作業をしていると、「環境変数を確認してください」って指示、よく見かけますよね。でも実際どうやって確認するの?設定したはずの変数が消えてる…なんて経験、ありませんか?

環境変数は、システムやアプリケーションが動くための「設定メモ」みたいなもの。うまく扱えれば開発効率がグッと上がりますが、適当に触ると思わぬトラブルの原因にもなります。この記事では、Ubuntu環境変数の確認から設定、削除、そして永続化まで、実際のコマンド例を交えながら丁寧に解説していきます。

環境変数の永続化手順
目次

環境変数って何?Ubuntuでの役割を理解しよう

環境変数とは、OSやプログラムが参照する設定値のこと。例えば、どの言語でメッセージを表示するか、どのディレクトリでコマンドを探すか、といった情報が格納されています。

身近な例で言えば、家の住所を覚えているのと同じ。コンピュータも「どこに何があるか」を環境変数として記憶しているんです。PATHという環境変数には実行ファイルを探すディレクトリが登録されていて、これがあるからlsやcdといったコマンドを毎回フルパスで指定しなくても使えるわけですね。

Ubuntuで特によく使われる環境変数には、以下のようなものがあります。

変数名 役割
PATH 実行可能ファイルを検索するディレクトリ一覧
HOME 現在のユーザーのホームディレクトリパス
LANG システムの言語とロケール設定
SHELL 現在使用しているシェルのパス
USER 現在ログインしているユーザー名

この表からわかるように、環境変数はシステムの基本動作からユーザー固有の設定まで、幅広い情報を保持しています。適切に管理すれば、開発環境をグッと使いやすくできるんです。

Ubuntu環境変数を確認する3つのコマンド

環境変数を確認する方法は、目的によって使い分けると便利です。全体を見たいときと特定の変数だけ見たいときで、最適なコマンドが違います。

envコマンド:すべての環境変数を一覧表示

最もシンプルなのがenvコマンド。引数なしで実行すると、設定されているすべての環境変数がズラッと表示されます。

$ env
SHELL=/bin/bash
PWD=/home/user
LOGNAME=user
HOME=/home/user
LANG=ja_JP.UTF-8
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
...

ただし、envは環境変数を一時的に指定してコマンドを実行するためのツールでもあります。特定の変数だけを表示する機能はないので、量が多すぎて見づらいときはgrepと組み合わせるのがおすすめ。

$ env | grep PATH
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

printenvコマンド:特定の変数を直接確認

printenvは、引数なしなら全環境変数を表示し、変数名を指定すればその値だけを表示してくれる優れもの。

$ printenv PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

$ printenv HOME
/home/user

envとの違いは、printenvは特定の変数名を引数として受け取れる点。確認したい変数が決まっているなら、printenvのほうが断然使いやすいですね。

echoコマンド:変数の値をピンポイント表示

もっとシンプルに、特定の環境変数の値だけをサッと見たいときはecho。変数名の前に「$」をつけるのがポイントです。

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

$ echo $HOME
/home/user

PATHのように「:」で区切られた長い文字列を見やすくしたいときは、trコマンドと組み合わせると便利です。

$ echo $PATH | tr ':' '\n'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin

これで各ディレクトリが1行ずつ表示されて、ずっと読みやすくなりますね。開発中にPATHの優先順位を確認したいときなんかに重宝します。

上のグラフを見ると、実際の開発現場ではechoコマンドが最もよく使われています。理由はシンプルで、確認したい変数が明確なケースが多いから。envやprintenvは全体を把握したいときに使い、普段の作業ではechoで素早くチェックするのが効率的です。

Ubuntu環境変数を追加・設定する方法

環境変数を新しく追加するには、exportコマンドを使います。ただし、一時的な設定と永続的な設定では方法が全く違うので要注意。

exportコマンドで一時的に環境変数を追加

まずは基本的な設定方法から。exportコマンドに「変数名=値」の形式で指定するだけです。

$ export MY_VAR="test value"
$ echo $MY_VAR
test value

値に空白文字が含まれる場合は、シングルクォートかダブルクォートで囲む必要があります。これを忘れると、意図しない動作の原因になるので注意。

$ export APP_NAME='My Application'
$ export APP_PATH="/home/user/my app"
$ printenv APP_NAME
My Application

ただし、この方法で設定した環境変数は、ターミナルを閉じたり再起動すると消えます。bash自体もプログラムなので、プロセスが終了すれば変数も消えるんですね。一時的なテストには便利ですが、開発環境として使い続けるには不便。

PATHに新しいディレクトリを追加する

PATH環境変数は特に重要。新しいツールをインストールしたとき、そのコマンドをどこからでも実行できるようにPATHを追加するケースは頻繁にあります。

$ export PATH="/usr/local/custom/bin:$PATH"
$ echo $PATH
/usr/local/custom/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin

ここでのポイントは、新しいディレクトリを既存のPATHの前に追加していること。bashは左側のディレクトリから順番にコマンドを探すので、優先させたいディレクトリは先頭に配置します。逆に後ろに追加したいなら、以下のように書きます。

$ export PATH="$PATH:/opt/tools/bin"

Ubuntu環境変数を削除する方法

不要になった環境変数を削除するには、unsetコマンドを使います。これも一時的な削除なので、永続的に削除したい場合は設定ファイルから該当行を消す必要があります。

$ export TEST_VAR="temporary"
$ echo $TEST_VAR
temporary

$ unset TEST_VAR
$ echo $TEST_VAR
(何も表示されない)

削除されたかどうかは、printenvやechoで確認できます。変数が存在しない場合、printenvは何も表示せず、echoは空行を返します。

実際の開発では、間違えて設定した環境変数をサッと消したいときや、テスト用の変数を削除するときにunsetが活躍しますね。ただし、システム標準の重要な変数(PATHやHOMEなど)を誤って削除すると大変なことになるので、慎重に。

Ubuntu環境変数を永続化する設定ファイル

exportで設定した環境変数は、シェルを閉じると消えてしまいます。毎回使う環境変数は設定ファイルに書き込んで永続化するのが正解。

Ubuntuには複数の設定ファイルがあり、それぞれ読み込まれるタイミングや適用範囲が違います。目的に応じて適切なファイルを選ぶことが大切です。

設定ファイル 適用範囲 読み込みタイミング
~/.bashrc 現在のユーザーのみ 非ログインシェル起動時
~/.profile 現在のユーザーのみ ログインシェル起動時
~/.bash_profile 現在のユーザーのみ ログイン時(.profileより優先)
/etc/environment 全ユーザー システム起動時
/etc/profile 全ユーザー ログインシェル起動時

この表を見ると、ファイルの選び方が少し見えてきますね。個人的な開発環境なら~/.bashrcか~/.profile、サーバー全体で使う設定なら/etc/environmentといった具合。

~/.bashrcへの記述方法(おすすめ)

最も一般的で使いやすいのが~/.bashrcへの記述。ターミナルを開くたびに読み込まれるので、普段使いの開発環境設定に最適です。

$ nano ~/.bashrc
# または
$ vi ~/.bashrc

ファイルを開いたら、末尾に環境変数の設定を追加します。コメントも一緒に書いておくと、後で見返したときに便利。

# カスタム環境変数
export MY_PROJECT_PATH="/home/user/projects/myapp"
export DATABASE_URL="postgresql://localhost:5432/mydb"

# PATHに自作ツールのディレクトリを追加
export PATH="$HOME/.local/bin:$PATH"

保存したら、設定を即座に反映させるためにsourceコマンドを実行。これでターミナルを開き直さなくても、新しい設定が使えます。

$ source ~/.bashrc
$ echo $MY_PROJECT_PATH
/home/user/projects/myapp

~/.profileとの使い分け

~/.profileはログイン時に一度だけ読み込まれるファイル。シェルに依存しない環境変数を設定したいときは、こちらを使うのが推奨されています。

実は~/.bashrcは複数回読み込まれる可能性があるんです。例えば、新しいターミナルを開くたびに実行されるので、PATHに同じディレクトリを何度も追加してしまうリスクがあります。そういった問題を避けたいなら、~/.profileのほうが安全。

$ nano ~/.profile

# 環境変数の設定
export EDITOR="vim"
export VISUAL="vim"
export LANG="ja_JP.UTF-8"

ただし、Ubuntuのデフォルト設定では~/.profileの中で~/.bashrcを読み込んでいるので、実質的にどちらに書いても問題ないケースが多いです。迷ったら、日常的に変更する可能性があるものは~/.bashrc、システム的な設定は~/.profileという使い分けがおすすめ。

/etc/environmentでシステム全体に適用

サーバーやチームで使うマシンなど、全ユーザーに同じ環境変数を適用したい場合は/etc/environmentを編集します。このファイルはシステム起動時に読み込まれます。

$ sudo nano /etc/environment

# 既存の設定
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"

# 追加する環境変数
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
LANG="ja_JP.UTF-8"

注意点として、/etc/environmentではexportを使わない形式で記述します。また、システム全体に影響するので、編集にはsudo権限が必要。慎重に設定しましょう。

上のフローチャートを見ると、設定ファイルの選び方がイメージしやすいですね。実際の開発現場では、個人用の~/.bashrcが最も使われています。チーム開発やサーバー管理では、全ユーザー向けの/etc/environmentの出番が増えるという感じ。

環境変数が消える・反映されない時のトラブルシューティング

設定したはずの環境変数が使えない…そんなトラブル、ありますよね。よくある原因と解決方法をまとめておきます。

sourceコマンドを忘れている

設定ファイルを編集しても、sourceで再読み込みしないと反映されません。これが一番多い失敗パターン。

$ nano ~/.bashrc
# (環境変数を追加して保存)

$ source ~/.bashrc  # これを忘れずに!
# または
$ exec bash  # 新しいシェルを起動

記述ミスがある

クォートの閉じ忘れ、スペースの入れ方、exportの書き忘れなど、構文エラーがあると設定が読み込まれません。bash -nコマンドで文法チェックができます。

$ bash -n ~/.bashrc
$ echo $?
0  # 0なら正常、それ以外はエラー

シェルの種類が違う

bashではなくzshを使っている場合、読み込まれる設定ファイルが異なります。zshなら~/.zshrcを編集する必要があります。

$ echo $SHELL
/bin/bash  # bashを使っている
# または
/bin/zsh   # zshを使っている

PATHの優先順位が間違っている

PATHは左側から順に検索されるので、優先させたいディレクトリを前に配置する必要があります。後ろに追加してしまうと、既存のコマンドが優先されて新しいバージョンが使えない、なんてことに。

# 優先させたい場合(前に追加)
export PATH="/opt/custom/bin:$PATH"

# 優先度を下げる場合(後ろに追加)
export PATH="$PATH:/opt/custom/bin"

グラフからわかるように、環境変数が反映されないトラブルの約半数は「sourceコマンド忘れ」。記述ミスも含めると、7割以上が基本的なミスなんです。焦らず一つずつ確認していけば、たいてい解決しますよ。

実践的な環境変数の使用例

ここまでの知識を使って、実際の開発でよく使われる設定例を見ていきましょう。

プロキシ設定(http_proxy)

企業ネットワークでは、プロキシ経由でインターネットにアクセスすることが多いです。環境変数でプロキシを設定しておけば、各種ツールが自動的にプロキシを使ってくれます。

$ nano ~/.bashrc

# プロキシ設定
export http_proxy="http://proxy.example.com:8080"
export https_proxy="http://proxy.example.com:8080"
export no_proxy="localhost,127.0.0.1"

$ source ~/.bashrc

この設定で、aptコマンドやcurl、wgetなど、多くのツールがプロキシ経由で通信するようになります。

複数バージョンの言語環境管理

PythonやNode.jsなど、複数バージョンを切り替えて使いたいときも環境変数が活躍します。

$ nano ~/.bashrc

# Python環境
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"

# Node.js環境
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"

$ source ~/.bashrc

開発環境の設定

プロジェクトごとに異なる設定を環境変数で管理すると、コードに直接書き込まずに済むのでセキュアです。

$ nano ~/.bashrc

# データベース接続情報
export DB_HOST="localhost"
export DB_PORT="5432"
export DB_NAME="myapp_dev"
export DB_USER="developer"

# アプリケーション設定
export DEBUG_MODE="true"
export LOG_LEVEL="debug"

$ source ~/.bashrc

こうしておけば、アプリケーションコードからは環境変数を読み取るだけ。本番環境と開発環境で異なる設定を使い分けるのも簡単になります。

まとめ

Ubuntu環境変数の確認から設定、削除、永続化まで、実践的な方法を解説してきました。環境変数は一見複雑ですが、基本を押さえれば開発効率を大きく改善できる強力なツールです。

確認はenvやprintenv、echoで。設定はexportで。永続化は~/.bashrcか/etc/environmentへの記述で。この流れを覚えておけば、たいていの場面で困ることはありません。

トラブルが起きたら、まずはsourceコマンドを実行したか、記述ミスがないか確認。それでも解決しないときは、シェルの種類やPATHの優先順位をチェックしてみてください。

環境変数を適切に管理して、快適な開発環境を手に入れましょう。

FAQ(よくある質問)

環境変数を設定したのに反映されません。どうすればいいですか?

設定ファイル(~/.bashrcなど)を編集した後、sourceコマンドで再読み込みする必要があります。source ~/.bashrcを実行するか、新しいターミナルを開いてください。それでも反映されない場合は、記述ミスがないか、bash -n ~/.bashrcで文法チェックをしてみましょう。

~/.bashrcと~/.profileのどちらに環境変数を書けばいいですか?

頻繁に変更する開発用の設定は~/.bashrcがおすすめです。システム的な設定やシェルに依存しない環境変数は~/.profileに書くのが推奨されています。Ubuntuのデフォルト設定では、~/.profileが~/.bashrcを読み込むようになっているので、どちらに書いても大きな問題はありません。

PATHに追加したディレクトリが優先されないのはなぜ?

PATHは左側のディレクトリから順に検索されます。優先させたいディレクトリは既存のPATHの前に追加してください。export PATH="/新しいパス:$PATH"という形式です。後ろに追加すると($PATH:/新しいパス)、既存のコマンドが優先されてしまいます。

システム全体で環境変数を設定するにはどうすればいいですか?

全ユーザーに適用したい環境変数は、/etc/environmentまたは/etc/profileに記述します。/etc/environmentはシステム起動時に読み込まれ、exportを使わない形式で記述します。編集にはsudo権限が必要なので、sudo nano /etc/environmentのようにコマンドを実行してください。

  • URLをコピーしました!
  • URLをコピーしました!
目次