Ubuntu20.04導入後~バックエンド開発環境を構築するまで

最近Linux派生OSであるUbuntu20.04を入れたので、
**「Ubuntu20.04ベースの派生OSを入れてから、バックエンド開発環境を構築するまで」**
の基本的な環境設定・私が普段使いしているプラグインとそのインストール方法を、セットでリストアップしました。
(2021/8/1追記：元々Ubuntu18.04ベースでの環境構築時のインストールメモを中心に書いていましたが、**Ubuntu20.04ベースでの記述となるよう内容をアップデートしました**。)

#### 使用マシン・スペック
[Dell XPS 13インチ](https://www.dell.com/ja-jp/shop/%E3%83%87%E3%83%AB%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3/xps-13-%E3%83%8E%E3%83%BC%E3%83%88%E3%83%91%E3%82%BD%E3%82%B3%E3%83%B3/spd/xps-13-9310-laptop)

- CPU：Core i7
- RAM：32GB
- ストレージ：SSD512GB
- ディスプレイ：有機EL3.5K タッチ対応

参考まで、最新のXPSモデルにUbuntu20.04を入れて**動作はかなり安定**しており、タッチ画面も基本的にはスムーズに動作しています。一部デバイスの挙動がおかしそうな所は順次解決していったので、その解決策も以下に記します。

WiFi/Bluetooth対応、日本語対応やフォントインストール、導入に詰まりがちなライブラリインストール等がなるべくスムーズにいく方法を書いています。

手順が長く、かつ既に簡潔にまとめられた記事があるような場合はそのリンクを貼るに留めている箇所もあります、ご了承ください。

# WiFi
Ubuntu20.04を入れた際、WiFiアダプタが認識されなかったためデバイスドライバを再インストール。
(私の場合、有線通信環境下でインストールしました)

```
$ sudo apt --reinstall install -y bcmwl-kernel-source
```
https://help.ubuntu.com/community/WifiDocs/Driver/bcm43xx

# Bluetooth
WiFi同様、Ubuntu20.04を入れた際にはBluetoothも動かなかった(より正確にはBluetoothをGUI上からonを押しても反応せず切り替えが出来ず、起動しなかった)。
どこかで意図せずオフになるよう設定している箇所もあるので、最初に疑うべきはここだと思われる。

```
$ sudo rfkill list all
```
で確認できる。

https://blog.hanhans.net/2019/03/18/ubuntu-enable-bluetooth/

ここが問題なさそうであれば、次は↓が参考になると思う。

https://shnsprk.com/entry/2020/09/09/090000

(※ 私の場合は上記でも解決せず、**Bluetooth関連パッケージとBluemanを入れて数日置いたらやっと動作が安定**しました。BlueZ周りで問題が起きていたのか？と推測していますが、原因と解決策を明確に特定するに至っていないため、ひとまずBluemanインストール方法だけ以下に記します。)

### Bluetooth関連パッケージ・Bluemanインストール
```
$ sudo apt install -y bluez bluez-alsa bluez-audio bluez-btsco bluez-compat bluez-cups bluez-dbg bluez-gstreamer bluez-hcidump bluez-pcmcia-support bluez-tools bluez-utils python-bluez bluewho indicator-bluetooth libbluetooth-dev libgnome-bluetooth11 libbluetooth3 python-gobject python-dbus
$ sudo apt install -y blueman
```

### Blueman起動
```
$ sudo blueman-manager
```


# 言語・キーボード入力対応
## 日本語入力
英語入力と日本語入力を切り替え可能な状態で使うには入力メソッドフレームワークを入れる必要があるが、~~iBusは(キー配列が言語により変わってしまう等)不便な点が多く、個人的にはFcitxでMozcをスムーズに使えておりオススメです。~~
(2021/8/1追記：上記はUbuntu18.04時の情報ですが、**Ubuntu20.04では今の所iBusで全く問題無かった**ためFcitxは入れていません。追記終わり。)

[［Ubuntu］USキーボード配列で日本語入力できるようにする](https://qiita.com/kaleidot725/items/1eb4a2a4e47e9db01147) の記事がとても分かりやすく書いてあったため参照下さい。
また、入力言語切り替えはFcitx Configurationアプリの`Global Config`タブからショートカットキーを割り当て可能です。
(ちなみにFcitxはファイティクスって読むらしいです、なんかかっこいい。)

## USキーボードでCaps LockとControlを入れ替える方法

```
$ sudo apt install -y gnome-tweaks
```

して、Keyboard & Mouse > Additional Layout Options > Ctrl Position で希望の項目を選択(単に入れ替えたい場合は「Swap Ctrl and Caps Lock」を選択)。

参考記事：[Ubuntu/Caps-LockキーをCtrlキーにする方法](https://linux.just4fun.biz/?Ubuntu/Caps-Lock%E3%82%AD%E3%83%BC%E3%82%92Ctrl%E3%82%AD%E3%83%BC%E3%81%AB%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)

## JISキーボードをUS配列として使う方法
以下記事を参考に`xkbcomp`コマンドを使ってキーマップを変更できます。
(macのJISキーボードだとUS設定時にチルダ(`)が使えず、keymapを修正してやる必要があったため。)
[JIS配列キーボードのMacBookにインストールされたUbuntuをUS配列に変更する](https://qiita.com/mikamikuh@github/items/f23c5ee14adce1a852a2)

# Source Code Pro(フォント)
ターミナル等で使ってるフォントです。
Githubの絵文字やソースコード表示も綺麗で、開発時には重宝しています。
以下で入ります。

```
$ mkdir tmp
$ cd tmp
$ wget https://github.com/adobe-fonts/source-code-pro/archive/2.010R-ro/1.030R-it.zip
$ unzip 1.030R-it.zip
$ mkdir -p ~/.fonts
$ cp source-code-pro-2.010R-ro-1.030R-it/OTF/*.otf ~/.fonts/
$ fc-cache -f -v
```
合字(リガチャ)に対応したMicrosoftのCascadia CodeもLinux環境で使えるようになったら使いたいなと目論んでいます。

# fish
Ubuntu20.04/18.04のデフォルトシェルはbashですが、個人的な好みでよくfishを使うため導入方法を記しています。

```
$ sudo apt-add-repository ppa:fish-shell/release-3
$ sudo apt update
$ sudo apt install fish -y
```

fishのプラグインマネージャとしてfishermanも入れる。

```
$ curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish
```
また、fishテーマとして有名なbobthefishテーマも入れる(こちらはお好みで)。

```
$ fisher add oh-my-fish/theme-bobthefish
```

ログインシェルをfishに変えたい場合は

```
$ chsh -s $(which fish)
```

# Neovim

```
$ sudo add-apt-repository ppa:neovim-ppa/stable
$ sudo apt update
$ sudo apt install neovim -y
```

OSのデフォルトエディタに指定するには、以下を実行。

```
$ sudo update-alternatives --set editor (which nvim)
```

# Go
ghq, peco, hubなど、色んな便利ツールを入れるのに必要なのでまず入れる。
2021/8/1時点でgoの最新バージョンは16.6なのでそれを入れる。(最新バージョンについては[公式サイト](https://golang.org/dl/)で確認しましょう)

```
$ wget https://dl.google.com/go/go1.16.6.linux-amd64.tar.gz
$ sudo tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
```

パスも通す。
fishの場合は
`set -x PATH /usr/local/go/bin $PATH`
を`~/.config/fish/conf.d/config.fish`などに追記してgoのパスを通します。


# ghq, peco, nano
詳細は@itkrt2y さんによる
[ghq, peco, hubで快適Gitライフを手に入れよう！](https://qiita.com/itkrt2y/items/0671d1f48e66f21241e2)
の記事によくまとまっています。
下記に、それぞれのインストール方法だけ記しておきます。

```
$ go get github.com/x-motemen/ghq
$ go get github.com/peco/peco/cmd/peco
$　go get github.com/github/hub
```

# Rust
下記で入ります。他のパッケージマネージャで入れる場合、rustup関連の便利ツールが一部入らなかったりした事が過去あったので、公式の下記の入れ方をオススメします。

```
$ curl https://sh.rustup.rs -sSf | sh
```
https://www.rust-lang.org/tools/install

## Rust製便利パッケージ

### Silicon
ソースコードを画像化してくれる、Rust製の便利ツールです。
依存ライブラリが多く、先に

```
$ sudo apt install pkg-config libasound2-dev libssl-dev \
cmake libfreetype6-dev \
libexpat1-dev libxcb-composite0-dev -y
```
を実行する必要があります。その後、下記でインストール。

```
$ cargo install silicon
```

### topgrade
開発環境だけでなくPCで使っている主要なパッケージ管理ツールと連携し、`topgrade`と打つだけで**各パッケージを一斉アップデート**してくれる便利ツール。
私の2021/8/1現在のLinux環境では、

- OS自体のシステムアップデート
- ファームウェアアップデート
- linuxbrew
- git cloneしたGitリポジトリのpull
- Fisher
- rustup(cargoパッケージ)
- pip3
- Neovim
- npm
- snap
- gcloud

は全て対応していました🙌

```
$ cargo install cargo-update
$ cargo install topgrade
```
先にcargo-updateを入れておかないと、cargoパッケージ自体をアプデ出来ないため先に入れる。

### bat, exa, zoxide, starshipなどなど。。
まだまだ便利なものが沢山ありますが、スペースの都合上割愛して非常によくまとまっている下記の記事に譲ります。
`cargo install xxx`とすれば所望のものが入れられます。
(silicon、topgradeは微妙に説明が必要そうだったのでこちらに書いていますが、他にも詰まった点などあれば、コメント頂ければとても有り難いです！)

https://wonderwall.hatenablog.com/entry/rust-command-line-tools

# Linuxbrew
おなじみHomebrewのLinux版です。
brewで入れるとスムーズにインストールできるライブラリも少なくないので、とても重宝します。

インストールするには以下を実行。

```
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
```

# Albert
Macでいう`Alfred`のような有名なロンチャーアプリ。ワークフロー等はありませんが、**Alfredと同レベルに高機能で重宝しています**。
`git clone`してローカルで`make`すると関連ライブラリがなくて色々コケるポイントがあるので、以下の導入方法がオススメ。

AlbertのリポジトリはOpensuse関連のプラットフォームにあるため、その公開鍵を追加。

```
$ curl https://build.opensuse.org/projects/home:manuelschneid3r/public_key | sudo apt-key add -
```
(もし`curl`が無いと怒られたら`sudo apt install curl -y`でインストール)

次に、Albertリポジトリを追加。

```
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/manuelschneid3r/xUbuntu_20.04/ /' > /etc/apt/sources.list.d/home:manuelschneid3r.list"
```
(これはUbuntu20.04ベースの場合。他のディストリを使ってる場合は適宜読み替えてください。)

最後にapt updateしてAlbertをインストール。

```
$ sudo apt update
$ sudo apt install albert -y
```
(補足)
OS起動時にAlbertが勝手に立ち上がってくれると便利ですよね。
主要なUbuntuベースのディストリの場合、System settings > Applications > startupタブ内の左下のプラスアイコンから(`albert`とコマンド指定で)追加。これで起動時、自動で立ち上がってくれます🙌

# バックエンド開発環境を構築するための関連パッケージ
## Docker
インストール方法は

```
$ curl https://get.docker.com | sh
$ sudo usermod -aG docker $USER
$ sudo systemctl start docker
$ sudo systemctl enable docker
```

## docker-compose
インストール方法は

```
$ sudo curl -L https://github.com/docker/compose/releases/download/1.29.2/docker-compose-(uname -s)-(uname -m) -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
```
バージョン指定部分は[githubのリリースページ](https://github.com/docker/compose/releases)で確認しましょう。(2021/8/1時点でstableの最新は1.29.2でした)

## Google Cloud SDK コマンドラインツール(gcloudなど)
インストール時には、下記サイトでバージョンをチェック。
インストール方法は以下にも記していますが、下記サイトから最新のインストール方法に沿って入れるのをオススメします(バージョンを最新のものに合わせるなど適宜修正する必要がありそうなため。)

また、Python3.9系で入った破壊的変更のために、ローカルがPython3.9系の環境だとそのままインストールスクリプトを実行した際にエラーが出るようです。私も遭遇しましたが、CLOUDSDK_PYTHONをpython2(システムデフォルトのpythonを使うようにする)に置き換えてスクリプトを実行し、無事入りました。
入れた後は
`CLOUDSDK_PYTHON=python2 gcloud components update`でアップデートすると問題が解消します。

```
$ curl -O https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-308.0.0-linux-x86_64.tar.gz
$ tar zxvf google-cloud-sdk-308.0.0-linux-x86_64.tar.gz

# Python3.9系を使っている場合、CLOUDSDK_PYTHON環境変数にpython2をセット(fishの場合)
$ set -x CLOUDSDK_PYTHON python2
インストールスクリプト実行
$ ./google-cloud-sdk/install.sh

```

https://cloud.google.com/sdk/docs/downloads-interactive


## kubectl
インストール方法は

```
$ curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
$ sudo install -o root -g root -m 0755 kubectl /usr/local/bin/kubectl
$ kubectl version --client
```
最後のバージョン確認で正常にkubectlのバージョンが確認できればOK。

https://kubernetes.io/docs/tasks/tools/install-kubectl-linux/


# その他、任意のdebパッケージ類を入れたいとき
例えば自分はブラウザはVivaldiを使っていて、公式サイトから`deb`パッケージでインストール可能。
インストール後はdebファイルのあるディレクトリで`sudo apt install [hoge].deb`を叩けば入る。


他にも色々あるので、随時更新予定です💪