Ubuntu で研究・開発環境を構築する

この資料は研究室用のマニュアルを一般公開したものです。

研究以外にも開発などで使う端末のセットアップの役に立つと思い、公開しました。
間違いや新しい情報や提案がありましたら、コメントやプルリクをお願いします。

# Ubuntu のインストール

[マニュアル (Ubuntu 16.04)](https://drive.google.com/file/d/1JhXxCXJJ82SErkTxYWLoQGvJ66v37pKP/view?usp=sharing)

## 訂正
| ページ | 誤 | 正 |
|---|---|---|
| 7ページ | 「Ubuntu を Windows Boot Manager とは別にインストール」 | 「それ以外」を選択することを推奨 |
| 7ページ | `$ apt remove libreoffice-common` | `$ sudo apt purge libreoffice-common` |

# Ubuntu の初期設定
Ubuntu 18.04 にて確認済みです。

## 日本語入力できるようにする
Ubuntu 18.04 の本家版はデフォルトでは、キーボードによる切り替えで日本語の入力ができないようです。

まずは落ち着いてググって対処しましょう。

[Google: Ubuntu 18.04 日本語入力](https://www.google.com?q=ubuntu+18.04+日本語入力)

## apt サーバの切り替え
初期設定では日本国外のサーバに設定されている場合があるので、必要であれば変更する必要があります。
現在の設定状況は「`/etc/apt/sources.list`」のファイルを開くことで確認できます。

```bash
$ less /etc/apt/sources.list
```

`#` から始まる行はコメントアウトされている行です。
それ以外の行に記述されている URL に `jp` とかが入っていれば，大丈夫です。
こだわる方は， jaist などが提供するサーバのアドレスに変更しましょう。

## apt のパッケージの更新
apt で管理されているパッケージを更新します。

```bash
$ sudo apt update # リポジトリ一覧を更新
$ sudo apt upgrade # パッケージを更新 (通常のパッケージ更新時)
$ sudo apt full-upgrade # パッケージを更新 (保留パッケージ更新時)
$ sudo apt autoremove # 不要になったパッケージを削除する
```

一通り終わったら一度再起動をおすすめします。

## 日本語ディレクトリ名から変更する
日本語でインストールした場合、home ディレクトリ下に「ダウンロード」や「ミュージック」などの日本語~~クソダサ~~ディレクトリが生成されます。
ターミナルからの利便性が低いので、英語に戻すのがおすすめです。

```bash
$ env LANGUAGE=C LC_MESSAGES=C xdg-user-dirs-gtk-update
```

上のコマンドを実行すると下のような画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59163/dc40ac17-5586-2229-a883-05617653c7f2.png)

「Don't ask me this again」にチェックを入れ、「Update Names」をクリックします。

```bash:UbuntuMate18.04での実行結果
$ env LANGUAGE=C LC_MESSAGES=C xdg-user-dirs-gtk-update
Gtk-Message: 00:16:01.199: GtkDialog mapped without a transient parent. This is discouraged.
Moving DESKTOP directory from  to Desktop
Moving DOWNLOAD directory from ダウンロード to Downloads
Moving TEMPLATES directory from テンプレート to Templates
Moving PUBLICSHARE directory from 公開 to Public
Moving DOCUMENTS directory from ドキュメント to Documents
Moving MUSIC directory from ミュージック to Music
Moving PICTURES directory from ピクチャ to Pictures
Moving VIDEOS directory from ビデオ to Videos
```

すると上のように変更されます。

## デュアルブートでも時計をいい感じにする
WindowsとUbuntuのデュアルブート環境では切り替えた際に時計がずれるので、下のコマンドを実行することでどちらでもいい感じにします。

```bash
$ sudo timedatectl set-local-rtc true
```

## amazon のアンインストール
インストールされている場合，不必要だと思いますので削除しましょう。

Ubuntu 18.04以降: 

```bash
$ sudo apt remove --purge ubuntu-web-launchers 
```

それ以外: 

```bash
$ sudo apt remove --purge unity-webapps-common
```

## libreoffice のアンインストール
libreoffice はフリーのオフィスソフトです (MS office 互換)。
libreoffice が不要であればアンインストールしましょう。

環境によって以下のどちらかを実行します。

```bash
$ snap remove libreoffice-common
```

```bash
$ sudo apt remove --purge libreoffice-common
```

なお，Linux 用の MS office はありません。
必要な場合は libreoffice などの互換ソフトウェアを利用するか，MS Office Online, Google ドキュメントなどを利用しましょう。

## LinuxBrew のインストール
必要に応じてパッケージ管理ツールの [LinuxBrew](https://docs.brew.sh/Homebrew-on-Linux) をインストールしましょう。

```bash
$ sudo apt install build-essential curl file git # 依存パッケージのインストール
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
```

以下でプロファイルに設定しましょう。 
環境によっては適宜読み替えてください。
基本的には以下で大丈夫です。

```bash
$ test -d ~/.linuxbrew && eval $(~/.linuxbrew/bin/brew shellenv)
$ test -d /home/linuxbrew/.linuxbrew && eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)
$ echo "eval \$($(brew --prefix)/bin/brew shellenv)" >>~/.bashrc # .profile でも可
$ exec $SHELL -l
```

## anyenv のインストール
ほぼ必須です。
brew からインストールできますが、弊研究室では知っている限りでは直接入れているので、こちらでも git コマンドを用いてインストールする方法を紹介します。

依存パッケージのインストール:

```bash
$ sudo apt install git
```

本体のインストール: 

```bash
$ git clone https://github.com/anyenv/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bashrc
$ exec $SHELL -l
$ anyenv init
```

以降は `anyenv init` を実行した際に表示される手順に従ってセットアップしてください。

なお、参考までに私は以下のように表示されました: 

```bash
# Load anyenv automatically by adding
# the following to ~/.bash_profile:

eval "$(anyenv init -)"
```

なので、`~/.bashrc` に `eval "$(anyenv init -)"` を追記しました。

その後、ターミナルを再起動します:

```bash
$ exec $SHELL -l
```

すると、以下のような警告が表示されるはずです:

```bash
ANYENV_DEFINITION_ROOT(/home/user/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by:
> anyenv install --init
```

これはマニュフェストディレクトリというものがないためですので、表示に従い生成します。

```brew
$ anyenv install --init
$ exec $SHELL -l
```

今度は再起動しても警告表示が出ないはずです。

マニュフェストディレクトリのアップデートは以下で実行できます:

```bash
$ anyenv install --update
```

必要に応じて実行してください[^1]。

[^1]: マニュフェストディレクトリがいまいち何なのかわかっておらず、どのようなときに更新するものなのかわかりません。詳しい方おしえてください。

なお、インストールできる **env は次のコマンドで確認できます:

```bash
$ anyenv install -l
```

### plugins
anyenv にはいくつかの便利なプラグインがあります。
有名なものでは anyenv-update と anyenv-git があります。

ここでは anyenv-update のインストール手順を紹介します[^2]。

[^2]: anyenv-git はこの記事の執筆の下調べ中に知ったので、いまいちどのように使うものかよくわかっていませんので詳しい方教えてください。

#### anyenv-update
anyenv-update は anyenv でいれた **env をまとめて更新するプラグインです。
**env を更新することで最新バージョンの ** が使えるようになるのであると大変便利なプラグインです。

```bash
$ mkdir -p $(anyenv root)/plugins # プラグインを格納するディレクトリを作成
$ git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update # インストール
```

実行方法は次のとおりです:

```bash
$ anyenv update
```

anyenv でインストールした **env たちと anyenv のマニュフェストディレクトリがアップデートされます。

## CapsLockの変更
私はほぼ必須だと思っています。

```bash:CapsLockをCtrlに変える
$ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"
```

## プライバシーの設定を変更する
Ubuntu では画面ロックのオンオフや時間、位置情報サービスや履歴などはシステム設定の「プライバシー」から変更できます。
お好みに変更してください。

## Ubuntu 18.04 のシステムエラーの報告メッセージを無効化する
Ubuntu 使ってる人ならよく見るあのメッセージの無効化です。
本来なら無効化しないほうがいいかもですが…

```bash
$ sudo nano /etc/default/apport
# set this to 0 to disable apport, or to 1 to enable it
# you can temporarily override this with
# sudo service apport start force_start=1
enabled=0
```

# 開発環境の構築
Ubuntu 18.04 で確認済みです。

## python の実行環境を構築する
### pyenv のインストール
anyenv から pyenv を入れて環境を構築します。

依存パッケージのインストール:

```bash
$ sudo apt install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl git zlib1g-dev libffi-dev
```

`libreadline-dev` の代わりに `libedit-dev` を使用することもできます:

```bash
$ sudo apt install libedit-dev
```

本体のインストール: 


```bash
$ anyenv install pyenv
$ exec $SHELL -l
```

### pipenv のインストール
pipenv は npm などに代表されるようなライブラリーの管理ツールです。

次のコマンドでインストールできます:

```bash
$ sudo apt install python3-distutils
$ brew install pipenv
```

参考までに、よく使われているであろうライブラリは以下の通りです:

* jupyterlab
* numpy
* scipy
* pandas
* xlrd (Excel ファイルを扱う場合)
* scikit-learn
* matplotlib
* japanize-matplotlib
* seaborn
* Pillow

## Docker のインストール
便利なツールです。
紹介は他に任せます。

```bash:Dockerのインストール
$ snap install docker
```

### docker-compose
複数の docker コンテナの管理・連携に便利なツールです。

```bash:docker-composeのインストール
$ sudo apt install docker-compose
```

# その他のソフトウェア
以下、よく使うであろうソフトウェアなどのインストール手順を記します。

私の場合ではTeX Live, Chrome, Atom, Franz, vlc といったところでしょうか。


## TeX Live
論文執筆などはやっぱり TeX ですよね。

```bash
$ sudo apt install texlive-full
```

## Slack
<details><summary>snap からインストールする (非推奨)</summary><div>

```bash
$ snap install slack --classic
```
</div></details>

snap からインストールすると日本語が入力できないです。
snap からインストールした人は，まずはアンインストールしましょう。

```
$ snap remove slack
```

その後，[公式サイト](https://slack.com/intl/ja-jp/downloads/linux?geocode=ja-jp&geocode=ja-jp) から.debファイルをダウンロードしてインストールします。

「.DEB(64ビット) をダウンロード」ボタンをクリックして .deb ファイルをダウンロードします。
その後，以下のコマンドでインストールします (ファイル名はダウンロード時の名前に合わせて下さい)。

```bash
$ sudo apt install ./slack-desktop-3.3.*-amd64.deb
```

## ブラウザ
Ubuntu であれば Firefox がデフォルトでインストールされている。

その他のブラウザを使いたい場合は自主的にインストールしてください。

### Chromium
Chromium は一言で言うと Chrome のオープンソース版です。
apt や snap でインストールできます。
selenium で使うときには経験上、apt でインストールすることをおすすめします。

```bash
$ snap install chromium
# OR
$ sudo apt install chromium-browser
```

### Chrome
https://www.google.co.jp/chrome/browser/desktop/index.html

![Screenshot from 2017-07-03 13-19-55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59163/3ba3674e-f589-2c1e-ace5-5f7b471ff718.png)

「Linux 版（Debian / Ubuntu / Fedora / openSUSE）」となっていることを確認して「Chrome をダウンロード」をクリックします。

「64 bit .deb （Debian / Ubuntu 版）」を選択して「同意してインストール」をクリックします。

「google-chrome-stable_current_amd64.deb」がダウンロードされるので、ターミナルを起動しダウンロードディレクトリに移動し、次のコマンドを実行します。

```
$ sudo apt install ./google-chrome-stable_current_amd64.deb
```

### その他
Debian 系なので `.deb` ファイルをダウンロードし、 `apt` コマンドを実行すればなんとかなる

## テキストエディタ
Ubuntu にはデフォルトで以下がインストールされているはずです。

* gedit
* nano
* vi

宗教上などの理由により、他のものをインストール場合には次を参考にしてください。

### Atom
2 パターン紹介します。

#### snap コマンド
```bash
$ snap install atom
```

#### .deb ファイル
https://atom.io/

「ダウンロード .deb」をクリック。「atom-amd64.deb」がダウンロードされるので、ターミナルを起動しダウンロードディレクトリへ移動、

```
$ sudo apt install ./atom-amd64.deb
```

を実行する。

### VSCode
https://code.visualstudio.com/

過去には snap コマンドでインストールできたようですが、記事執筆時点ではできません。

上の URL から .deb ファイルをダウンロードし、ターミナルを開きダウンロードディレクトリに移動し、次のコマンドを実行してください:

```bash
$ sudo apt install ./code_*_amd64.deb
```

### Vim
一番オーソドックスであろう、vim のインストールは次の方法です。

```bash
$ sudo apt install vim
```

その他、neovim などがあります。
私個人はあまり vim をカスタマイズして使わないので詳しい別の方を頼るといいと思います。

### その他
もちろん、Emacsでもいいですけど…

## OBS Studio
収録や配信に必要なソフトです。

```bash
$ snap install obs-studio
```

## franz
https://meetfranz.com/

# 最後に
もちろん、Windowsで作業しても構いませんし、「Windows Subsystem for Linux」というものが発表され、Windows 10 の Anniversary Update を適用すれば、 Windows 上で仮想的に Ubuntu 等を動かすこともできます (Bash on Ubuntu on Windows 等)。
とりあえずであれば以下を参考にすれば導入できるはず。

* http://qiita.com/Aruneko/items/c79810b0b015bebf30bb

# 参考
* [aptコマンドチートシート](https://qiita.com/SUZUKI_Masaya/items/1fd9489e631c78e5b007)
* [HomeBrew on Linux] (https://docs.brew.sh/Homebrew-on-Linux)
* [anyenv - All in one for **env](https://github.com/anyenv/anyenv)
* [anyenv-update](https://github.com/znz/anyenv-update)
* [pyenv: Common build problems](https://github.com/pyenv/pyenv/wiki/common-build-problems)
* [Ubuntu 18.04で最初に行うおすすめ設定](https://ubuntuapps.net/blog-entry-1039.html)
* [Ubuntu 18.04 LTSのインストール直後にやっておきたいことまとめ](https://linuxfan.info/ubuntu-18-04-basic-settings)
* [Ubuntu 18.04 LTSをインストールした直後に行う設定 & インストールするソフト](https://sicklylife.jp/ubuntu/1804/settings.html)

# Todos
- gnome-tweaks
- ubuntu-restricted-extras
- ~~Docker~~