Ubuntuで新規に環境構築した際に自分がよくインストールする物

# 概要

Ubuntuで新規環境構築した際、自分がインストールする物をまとめてみました

- 以下が本記事でインストールする物
  - linuxbrew
  - Docker
  - GitHub CLI
  - VSCode 拡張機能、設定

## 内容

### GitHubCLI

- Linux環境でのインストール方法
    - `GitHub CLI`は`apt`などでは最新バージョンをインストールできないので、最新バージョンをインストールするために、まず`linuxbrew`をインストールする

  ```bash
  USER_NAME=hoge

  sudo git clone https://github.com/Homebrew/brew ~/.linuxbrew/Homebrew   && sudo mkdir ~/.linuxbrew/bin   && sudo ln -s ~/.linuxbrew/Homebrew/bin/brew ~/.linuxbrew/bin   && 
  echo 'eval $(~/.linuxbrew/bin/brew shellenv)' >> ~/.bashrc
  # Linux環境でRootUserでないとsudo brew install gh は権限の関係上できないので、Brewに権限を与える
  sudo chown -R $(whoami) /home/${USER}/.linuxbrew/
  # brew の元のRubyかなにかがgcc を使っているのかローカルにgccをインストールする必要あり
  sudo apt install -y gcc

  brew install gh
  gh version
  ```

## Docker

- 先程インストールした`linuxbrew`でインストール

  ```bash
  brew install docker
  ```

### docker-compose v2

- インストール
    - [Ubuntu 20.04にdocker compose v2.2.2を導入](https://zenn.dev/so0529/articles/33adc951f41980)
- docker compose v2とは？
    - [新しい docker compose](https://zenn.dev/skanehira/articles/2021-06-03-new-docker-compose#%E6%9C%80%E5%BE%8C%E3%81%AB)
        - `Golang`で書き直した`docker-compose`の`CLI`、なので多分既存のよりも動作が速い
        - `ECS`などクラウドへのデプロイにも対応している

- ~~最新版のDockerインストール~~
    - **自分の知識不足から最新バージョンと紹介してしまいましたが、下記の記事は最新バージョンではないことに気づきました**
        - [Ubuntu 20.04 LTSに最新のdocker-composeをインストールする方法 | LFI](https://linuxfan.info/install-docker-compose-on-ubuntu-2004)

- aptで入るdocker-composeはバージョンが古いので注意

  ```bash
    apt install -y docker.io
    sudo apt install -y docker-compose
  ```

## VSCode

- 同じアカウント間で同期する場合、Githubアカウントの認証からGistを生成する機能を使うのが手っ取り早い
  - 以下は違うアカウントなどで行う場合

- 拡張機能の同期
  - [VS Codeの拡張機能一覧をエクスポートするには | Hinemosu](https://www.hide10.com/archives/32354)
  - 環境の拡張機能一覧の出力

    ```bash
      code --list-extensions | xargs -L 1 echo code --install-extension
    ```

    - 別の環境で上記コマンドの出力結果を貼り付けて実行すれば拡張機能がインストールされる

      ```bash
        # 出力例
        code --install-extension yzhang.markdown-all-in-one
      ```

      - 個人開発環境で使用している一覧

        ```bash
          # code --install-extension WSL: Ubuntu-20.04 にインストールされている拡張機能:
          code --install-extension eamodio.gitlens
          code --install-extension GraphQL.vscode-graphql
          code --install-extension ms-azuretools.vscode-docker
          code --install-extension MS-CEINTL.vscode-language-pack-ja
          code --install-extension ms-kubernetes-tools.vscode-kubernetes-tools
          code --install-extension mushan.vscode-paste-image
          code --install-extension redhat.vscode-yaml
          code --install-extension shd101wyy.markdown-preview-enhanced
          code --install-extension yzane.markdown-pdf
          code --install-extension yzhang.markdown-all-in-one
        ```

- 設定の同期
  - 最低限行っている設定。主にMarkdown関連。その他はDocker開発環境によって適切な設定を行っている

  ```json:setting.json
    {
      "editor.tabSize": 2,
      "[markdown]": {
        "editor.wordWrap": "on",
        "editor.quickSuggestions": false,
        "editor.formatOnSave": true,
        "editor.defaultFormatter": "yzhang.markdown-all-in-one",
      },
    }
  ```

- ユーザースニペット
    - [VS Codeのユーザースニペット機能の使い方メモ - Qiita](https://qiita.com/12345/items/97ba616d530b4f692c97)
    - 個人開発時に使うMarkdown用ユーザースニペット

```json:Markdown.json
{
	"Print to console": {
		"prefix": "cbb",
		"body": [
			"```bash",
			"",
			"```"
		],
		"description": "Bash output to console"
	},
	"Print to log": {
		"prefix": "cbl",
		"body": [
			"```log",
			"",
			"```"
		],
		"description": "Log output to console"
	},
	"Print to docm": {
		"prefix": "docm",
		"body": [
			"# 概要",
			"",
			"",
			"## refarence"
		],
		"description": "Docment file output to console"
	}
}
```

## git

```bash
    sudo chown -R $(whoami) /usr/bin/git
```

## エラー

- 環境構築する際に発生したエラーとその対策

### W: be careful as root. Don't run this as root!

- rootユーザーを普段使いしている環境でおきたエラー。Brewは親切なのでRootユーザー環境で実行できないような仕組みにしてある
  - 対策としてはrootではないユーザーで実行するようにすること
  - [rootとして自作を実行することは非常に危険であり、サポートされなくなりました。 -コドログ](https://kodlogs.com/49824/running-homebrew-as-root-is-extremely-dangerous-and-no-longer-supported)

## 参考資料

- LinuxBrew
  - [FAQ — Homebrew Documentation](https://docs.brew.sh/FAQ)
  - [Homebrew on Linux — Homebrew Documentation](https://docs.brew.sh/Homebrew-on-Linux#install)