ROSで移動したワークスペースごとに自動でsetup.bashを読み込むための環境構築


概要

本記事ではdirenvの簡単な使い方と,導入方法について紹介します.

動機

ROSで複数のワークスペースを使い分けていると,ワークスペースごとにsource devel/setup.bashをする必要があり地味に面倒なので,自動化できないかなあと調べていました.

環境

Ubuntu 16.04
他のバージョンでも多分できます.

方法

direnvなるものがあり,これをを使用すると,それぞれのワークスペースルートディレクトリに移動するだけで,setup.bash自動で読み込んでくれるらしい.

direnv導入方法

とても参考になる記事(direnvを使おう)を発見したので,基本的にはこの記事通りに設定すれば環境構築はできそうです.

go command not found

direnvを使おうを参考にインストールしようと「goコマンドが見つかりません」なるエラーが発生.

確かにGoは導入した記憶がないので,新しく入れる必要がありそうです.

Go のインストール

ここでは,direnvで使用しているgoの最新版をapt installで導入するための方法を紹介します.

通常のapt-repositoryではgoの最新版が手に入らない可能性がある

今話題のGoはapt installで簡単にインストールすることができます. しかし,apt-repositoryにあるバージョンに注意しなければなりません

筆者の環境で何も考えずに下記のようにgoをインストールした場合...

$ sudo apt update
$ sudo apt install golang-go

インストールされたのはgo 1.6. 2019年12月現在の最新版はgo 1.13のため,かなり古いバージョンがインストールされてしまっています.
direnvでは,最低でもgo 1.8以降のバージョンが必要なため,これではdirenvを使用することができません.

golang-goの最新版をインストールするためにapt-repositoryを更新

そこで,最新バージョンを手に入れるために,ここを参考に apt-repositoryを更新し,再度インストールします.

$ sudo add-apt-repository ppa:longsleep/golang-backports
$ sudo apt-get update
$ sudo apt-get install golang-go

念の為,バージョンを確認してみると

$ go version
go version go1.13.4 linux/amd64

となり,無事最新版をインストールすることができました.

direnvのインストール

ついでにdirenvのインストール方法も記載しておきます.

$ git clone https://github.com/direnv/direnv
$ cd direnv
$ sudo make install

~/.bashrcに下記を追記

~/.bashrc
export EDITOR=vim  # 好きなエディタを指定できます.今回はvimを使用.
eval "$(direnv hook bash)"

使い方

例えば/home/user/以下にcatkin_wshoge_wsがあったとすると,それぞれのディレクトリにて,下記を実行します.

// ワークスペースに移動
$ cd ~/{ws_roos}

// .envrcの作成/編集
$ direnv edit .

作成した.envrcを下記のように編集.

~/{ws_root}/.envrc
source deve/setup.bash
## outputが欲しい場合は下記を追加
# echo Auto sourcing source deve/setup.bash

これでワークスペースに移動するだけでsetup.bashを自動で読み込んでくれます.

まとめ

「ROS 複数ワークスペース setup.bash 自動」で検索してもなかなか欲しい答えにたどり着けないものですね…

参考