Ubuntu Desktop 18.04 開発環境の構築メモ

# はじめに

開発環境としての Ubuntu Desktop 18.04 LTS 日本語 Remix のインストールメモです。
インストール先のマシンは以下です。

* HP Pavilion Gaming Desktop 790-0011jp
* ThinkPad E480

# 手順

パーテッションを分割後、USB メモリから Ubuntu をインストールする手順は省略します。
初回起動のログイン後からの作業記録です。

## grub のデフォルト起動OSを Windows にする

今回は自宅の Windows 10 インストール済み環境にデュアルブート構成でインストールした。
Ubuntu インストール後、grub のデフォルトの自動起動を Windows にしたいため、以下を実施。

```bash
$ grep windows /boot/grub/grub.cfg
menuentry 'Windows Boot Manager (on /dev/nvme0n1p1)' --class windows --class os $menuentry_id_option 'osprober-efi-08B0-BFDE' {
$ sudo gedit /etc/default/grub
```

gedit で `GRUB_DEFAULT=0` を `GRUB_DEFAULT="Windows Boot Manager (on /dev/nvme0n1p1)"` に置換。

そして、以下を実行して設定を適用させる。

```bash
sudo update-grub
```

## ホームディレクトリ内の日本語のディレクトリ名を英語に変更

「端末」から以下のコマンドを実行。

```bash
$ LANG=en_US.utf8 xdg-user-dirs-gtk-update
```

そして、上記実行後に「Update standard foloders to current language?」というウィンドウが出たので、「Update Names」ボタンを押下。

## キーボードショートカットの変更

### 左 Ctrl キーと Caps Lock キーの入れ替え

以下を読みながら、いい感じにインストールしました。Emacs Input は OFF のままに。

* [Docker で開発するなら Linux 使おう - キーボードレイアウト変更](https://qiita.com/migrs/items/2d8a0dd8950cd4d6a612#%E3%82%AD%E3%83%BC%E3%83%9C%E3%83%BC%E3%83%89%E3%83%AC%E3%82%A4%E3%82%A2%E3%82%A6%E3%83%88%E5%A4%89%E6%9B%B4)

## システム時刻を UTC 管理から LocalTime 管理に変更

* [ubuntuとwindowsをデュアルブートしたとき時間がずれたらこれを打つ](https://qiita.com/yoshinyan/items/d56a56414f2d21814f88)
* [マルチブート時の時刻設定](https://oba-q.com/?p=4466)

Windows 10 と Ubuntu のデュアルブート環境の場合、現状のこのままだと、Windows を起動すると、システム時刻が-9hになる。

以下のコマンドを実施して、Ubuntu のシステム時刻管理を LocalTime にする。

```bash
$ timedatectl status | grep local
      RTC in local TZ: no
$ sudo timedatectl set-local-rtc true
$ timedatectl status | grep local
      RTC in local TZ: yes
Warning: The system is configured to read the RTC time in the local time zone.
     'timedatectl set-local-rtc 0'.
```

## Homebrew のインストール

パッケージマネージャーの Homebrew をインストールします。

参考手順: [Homebrew on Linux](https://docs.brew.sh/Homebrew-on-Linux)

「端末」から以下のコマンドを実行。

```bash
$ sudo apt-get install build-essential curl file git
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/Linuxbrew/install/master/install.sh)"
```

「Press RETURN to continue or any other key to abort」と訊かれるので RETURNキーを押下します。

上記でインストールされるので、$PATH に brew を追加します。

```bash
$ echo '' >> ~/.profile
$ echo '# set PATH for Homebrew' >> ~/.profile
$ echo 'eval $(/home/linuxbrew/.linuxbrew/bin/brew shellenv)' >>~/.profile
```

Ubuntu をログインし直した後に、`brew -v`などで brew コマンドが実行できることを確認します。

## Node.js 環境を作成

### nvm のインストール

※ fish のインストール後です。

以下のコマンドを実行

```fish
> curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash
> fisher add jorgebucaran/fish-nvm 
```

### Node.js と npm のインストール

```bash
$ nvm install 12.11.0
$ nvm use 12.11.0
$ node -v
v12.11.0
$ npm -v
v6.11.3
```

### Yarn のインストール

「[インストール|Yarn](https://yarnpkg.com/ja/docs/install#debian-stable)」を参考にしてインストール。

```bash
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
$ sudo apt-get update && sudo apt-get install yarn
```

## tldr コマンドのインストール

```bash
$ npm install -g tldr
```

## Java のインストール

### OpenJDK 11 のインストール

```bash
$ sudo apt install openjdk-11-jdk
```

## Google Chrome のインストール

```bash

$ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
$ sudo dpkg -i google-chrome-stable_current_amd64.deb
```

## Dropbox のインストール

```bash
$ sudo apt install -y nautilus-dropbox
```

アクティビティ画面(ショートカット: Super + S)から Dropbox を起動し、以下の画面が表示されるので [OK] ボタンを押下する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/10443/3dd48007-895d-db00-7d6d-0bbcf3db6e1a.png)

あとは適宜対応。

## git の設定

```bash
$ git config --global user.name "ユーザ名"
$ git config --global user.mail "メールアドレス"
```

## ssh の設定

ファイルサーバーからGitHub の秘密鍵を ~/.ssh にコピーする。
その後、以下のコマンドを実行して、オーナーユーザーの読み取り権限のみを秘密鍵に設定。

```bash
$ chmod 400 ~/.ssh/id_rsa
```

## Slack のインストール

```bash
$ sudo apt install gconf2 gconf-service
$ wget https://downloads.slack-edge.com/linux_releases/slack-desktop-4.0.2-amd64.deb
$ sudo dpkg -i slack-desktop-4.0.2-amd64.deb
```

最初は snap でインストールしたのだが、以下の問題にぶつかったので上記手順にした。

* 「[Ubuntu18.04LTSでSlack日本語入力が出来ないときの対処方法](https://qiita.com/akjgskwi/items/a65d396e353e31f235d2)」



## Emacs のインストール

```bash
$ sudo snap install emacs --classic
$ sudo apt install emacs-mozc-bin
$ sudo apt install silversearcher-ag
```

.emacs を以下のように設定。

```elisp
; package.el
(require 'package)
;; MELPAを追加
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/"))
;; MELPA-stableを追加
(add-to-list 'package-archives '("melpa-stable" . "https://stable.melpa.org/packages/"))
;; Marmaladeを追加
(add-to-list 'package-archives  '("marmalade" . "https://marmalade-repo.org/packages/"))
;; Orgを追加
(add-to-list 'package-archives '("org" . "http://orgmode.org/elpa/"))
;; 初期化
(package-initialize)


; 細かい設定
;; site-lisp path
(add-to-list 'load-path "~/.emacs.d/site-lisp")
;;not make backup files
(setq make-backup-files nil)
;; tab width 2
(setq-default tab-width 2 indent-tabs-mode nil)


; twittering-mode
(load "twittering-mode")
(setq twittering-allow-insecure-server-cert t)
(setq twittering-use-master-password t)


; web-mode
;; https://qiita.com/kwappa/items/6bde1fe2bbeedc85023e
;; どの拡張子を web-mode で開くかを指定
(add-to-list 'auto-mode-alist '("\\.php\\'" . web-mode))
(add-to-list 'auto-mode-alist '("\\.html$" . web-mode))
(add-to-list 'auto-mode-alist '("\\.css$" . web-mode))
(add-to-list 'auto-mode-alist '("\\.js[x]?$" . web-mode))
;; 拡張子 .js でもJSX編集モードに
(setq web-mode-content-types-alist
      '(("jsx" . "\\.js[x]?\\'")))
;; インデント
(add-hook 'web-mode-hook
          '(lambda ()
             (setq web-mode-attr-indent-offset nil)
             (setq web-mode-markup-indent-offset 2)
             (setq web-mode-css-indent-offset 2)
             (setq web-mode-code-indent-offset 2)
             (setq web-mode-sql-indent-offset 2)
             (setq indent-tabs-mode nil)
             (setq tab-width 2)
          ))


;日本語入力
;; https://qiita.com/Maizu/items/fee34328f559c7dc59d8#emacs-mozc
;;半角全角キーで日本語入力をすると、日本語入力モードで `Ctrl + [なにか]` をやるときにうまく動作しない。
;;また、`Ctrl + \` での日本語入力モードだと、「ん」を入力するときにうまくいかない。
;;上記を解決するために emacs-mozc をインストールする。
(require 'mozc)                                 ; mozcの読み込み
(set-language-environment "Japanese")           ; 言語環境を"japanese"に
(setq default-input-method "japanese-mozc")     ; IMEをjapanes-mozcに
(prefer-coding-system 'utf-8)                   ; デフォルトの文字コードをUTF-8に(require 'mozc)
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(package-selected-packages (quote (mozc))))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )


; Helm
;; https://qiita.com/jabberwocky0139/items/86df1d3108e147c69e2c
(require 'helm-config)
(helm-mode 1)
(global-set-key (kbd "M-x") 'helm-M-x)
(global-set-key (kbd "C-x b") 'helm-mini)
(global-set-key (kbd "C-x C-f") 'helm-find-files)
;; rebind tab to run persistent action
(define-key helm-map (kbd "&lt;tab&gt;") 'helm-execute-persistent-action)
;; make TAB work in terminal
(define-key helm-map (kbd "C-i") 'helm-execute-persistent-action)
;; list actions using C-z
(define-key helm-map (kbd "C-z")  'helm-select-action)

; Helm-ag
;; 事前準備: sudo apt install silversearcher-ag
;; M-x helm-ag
```

`M-x package-list-packages` で以下をインストールする

* mozc
* twittering-mode
* web-mode
* helm
* helm-ag

## Visual Studio Code のインストール

```bash
$ sudo snap install code --classic
```

ただし、このあと起動を試みたが、起動しなかった。
`~/.config/Code/logs` のログをみたら、以下の記述を確認。

```
[2019-09-29 23:25:13.006] [main] [error] Error: ENOSPC: no space left on device, watch '/snap/code'
    at FSWatcher.start (internal/fs/watchers.js:164:26)
    at Object.watch (original-fs.js:1232:11)

```

[「Linux で VSCode を実行する - “Visual Studio Code is unable to watch for file changes in this large workspace” (error ENOSPC)」](https://vscode-doc-jp.github.io/docs/setup/linux.html#%E2%80%9CVisual-Studio-Code-is-unable-to-watch-for-file-changes-in-this-large-workspace%E2%80%9D-error-ENOSPC)に類似の事例があったため、以下のように設定を適用。

```bash
$ cat /proc/sys/fs/inotify/max_user_watches
8192
$ sudo su -c "echo '' >> /etc/sysctl.conf"
$ sudo su -c "echo '# workaround for vscode' >> /etc/sysctl.conf"
$ sudo su -c "echo '# (https://vscode-doc-jp.github.io/docs/setup/linux.html)' >> /etc/sysctl.conf"
$ sudo su -c "echo 'fs.inotify.max_user_watches=524288' >> /etc/sysctl.conf"
$ sudo sysctl -p
$ cat /proc/sys/fs/inotify/max_user_watches
524288
```

上記設定後、無事に Visual Studio Code の起動成功を確認。

設定画面で以下を設定。

```json
{
  "workbench.editor.enablePreview": false
}
```

## Docker のインストール

以下を読みながら、いい感じにインストールしました

* [Get Docker Engine - Community for Ubuntu](https://docs.docker.com/install/linux/docker-ce/ubuntu/)

## PHP のインストール

```bash
$ brew install php
$ php -v
PHP 7.3.9 (cli) (built: Sep 15 2019 19:09:22) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.9, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.3.9, Copyright (c) 1999-2018, by Zend Technologies
```

## Hyper のインストール

以下サイトから deb ファイルをダウンロードする

* [Hyper](https://hyper.is/#installation)

その後、以下でインストール。

```bash
$ sudo dpkg -i Downloads/hyper_3.0.2_amd64.deb
```

## fish のインストール

参考記事: [fish shellが結構良かった話](https://qiita.com/hennin/items/33758226a0de8c963ddf)

```bash
$ sudo apt install fish
$ fish
$ fish_config
```

ブラウザで fish shell configuration が表示されるので、「prompt」で「Informative Vcs」を設定。
そして、~/.bashrc に以下を追記。

```bash
exec fish
```

対話式で bash を使いたい場面があったときに、上記設定をすると `bash` を実行しても `fish` が起動してしまうため、対話式で bash 　を fish 内で使うときは `~/.bashrc` を読み取らないように `~/.config/fish/config.fish` に以下を追記。

```bash
alias bash="bash --norc"
```

## ThinkPad でスリープをすると、トラックパッドの2本指が効かなくなる問題への対策

現状は事象が発生したら、以下のスクリプトを都度実行。

```sh
#!/bin/sh

# I upgraded from 17.04 to 17.10 on a Lenovo T540p which has broken two finger touchpad scrolling and right clicking
# https://askubuntu.com/questions/967073/i-upgraded-from-17-04-to-17-10-on-a-lenovo-t540p-which-has-broken-two-finger-tou

modprobe -r psmouse
modprobe psmouse
```

参考資料
[Ubuntu18.04で2本指スクロールが効かなくなる問題](https://yuzu441.hateblo.jp/entry/2018/10/11/235053)

## Peek のインストール

デスクトップ画面を GIF キャプチャできるように Peek をインストールします。

```bash
$ sudo add-apt-repository ppa:peek-developers/stable

$ sudo apt update
$ sudo apt install peek
```

参考資料
[GIF形式でのキャプチャが簡単にできるPeekをUbuntuにインストールする手順と使い方](https://www.virment.com/install-use-peek-gif-recorder-ubuntu/)

## lltsv のインストール

```bash
$ wget https://github.com/sonots/lltsv/releases/download/v0.3.0/lltsv_linux_amd64 -O lltsv
$ chmod a+x lltsv
$ mv lltsv ~/bin
```