【作業効率化】4年目エンジニアが「使わなくなった」アプリを供養する

## はじめに
よくQiitaでおすすめアプリとかの記事を見かけますが

**逆に使わなくなったアプリの紹介記事ってなくね？**

と思い今その勢いで本記事を書き進めています。需要があるかはしーらないっ。

本記事では、今年で4年目のエンジニアが作業効率を追い求める中で淘汰されていったアプリたちを紹介します。
ちなみに当方Macユーザです。

## エディタ
### Visual Studio Code

https://code.visualstudio.com/

3年目くらいまでは結構使ってました。
`settings.json`や`keybindings.json`をdotfilesで管理してみたいなこともするくらいには使ってました。
が、何かのタイミングでvimに興味を持ち、vimを使いはじめてから徐々に使わなくなってゆきました。

vimに興味を持った最初の頃はVSCの拡張でvimがあったので、それを使ってました。
VSCでvimの操作を再現できる拡張です。

https://marketplace.visualstudio.com/items?itemName=vscodevim.vim

しかし **vimと言えば学習コスト、学習コストと言えばvim** と言うように、私も最初は苦戦しましたがコマンドを思い出しながらテキストを編集できるようになると急激に楽しくなります。
あとvimはコマンドの美学というか、**いかにホームポジションを崩さずに作業するか** みたいな理念が一貫して感じられ、そのスマートさにどんどんハマっていきました。

その後はというと本家vim（正確にはneovim）をターミナルに入れて、今ではneovimでコーディングしてます。

https://neovim.io/

## ターミナル
### iTerm2

https://iterm2.com/

おそらくmacユーザであれば誰もが一度は使うターミナルですね。
これは結構最近まで使ってました。
が、設定をGUIベースでしないといけない点があまり好きではなかったです。
あと設定ファイル意味わからん場所にあるし。

で結局私は **WezTerm**というターミナルに乗り換えました。

https://wezfurlong.org/wezterm/index.html

私がiTerm2に感じていた使いづらさを見事に払拭してくれました。

- 設定ファイルをluaという言語で書ける
    - 設定のための公式docが豊富
- 高速
- マルチプラットフォームで動作する

サンプルとして私のconfigを晒しておきます。

<details><summary>Click to Open</summary>

```~/.wezterm.lua
local wezterm = require("wezterm")

local config = {}

if wezterm.config_builder then
	config = wezterm.config_builder()
end

config.color_scheme = "Ayu Dark (Gogh)"

config.font_size = 15

local act = wezterm.action
config.keys = {
	{
		key = "d",
		mods = "CMD",
		action = wezterm.action.CloseCurrentPane({ confirm = true }),
	},
	{
		key = "f",
		mods = "CMD",
		action = wezterm.action.ToggleFullScreen,
	},
	{
		key = "h",
		mods = "CMD",
		action = act.ActivatePaneDirection("Left"),
	},
	{
		key = "h",
		mods = "CMD|SHIFT",
		action = act.ActivateTabRelative(-1),
	},
	{
		key = "h",
		mods = "CTRL|CMD",
		action = wezterm.action.SendKey({ key = "LeftArrow" }),
	},
	{
		key = "j",
		mods = "CMD",
		action = wezterm.action({ ScrollByLine = 1 }),
	},
	{
		key = "j",
		mods = "CMD|SHIFT",
		action = wezterm.action({ ScrollByPage = 1 }),
	},
	{
		key = "j",
		mods = "CTRL|CMD",
		action = wezterm.action.SendKey({ key = "DownArrow" }),
	},
	{
		key = "k",
		mods = "CMD",
		action = wezterm.action({ ScrollByLine = -1 }),
	},
	{
		key = "k",
		mods = "CMD|SHIFT",
		action = wezterm.action({ ScrollByPage = -1 }),
	},
	{
		key = "k",
		mods = "CTRL|CMD",
		action = wezterm.action.SendKey({ key = "UpArrow" }),
	},
	{
		key = "l",
		mods = "CMD",
		action = act.ActivatePaneDirection("Right"),
	},
	{
		key = "l",
		mods = "CTRL|CMD",
		action = wezterm.action.SendKey({ key = "RightArrow" }),
	},
	{
		key = "l",
		mods = "CMD|SHIFT",
		action = act.ActivateTabRelative(1),
	},
	{
		key = "p",
		mods = "CMD",
		action = wezterm.action.SplitHorizontal({ domain = "CurrentPaneDomain" }),
	},
	{
		key = "t",
		mods = "CMD",
		action = act.SpawnTab("CurrentPaneDomain"),
	},
	{
		key = "w",
		mods = "CMD",
		action = wezterm.action.CloseCurrentTab({ confirm = true }),
	},
	{
		key = "z",
		mods = "CMD",
		action = wezterm.action.TogglePaneZoomState,
	},
}

return config
```
</details>

めちゃくちゃ気に入っている点を1つ挙げると、←↓↑→を別のキーにマッピングできてしまう点がめちゃくちゃのめちゃくちゃに気に入っております。
zshのコマンド履歴とか補完か埋める時にarrowキーに指を動かさなくて済みます。

## Git
### SourceTree

https://www.sourcetreeapp.com/

Gitクライアントですね。
これは2年目くらいまで使ってました。

2年目くらいのどっかのタイミングでgitをちゃんと勉強しようとした時期がありまして（誰しもの通る道）、いざ勉強してみると **あれ俺gitのコマンド全然知らんくね？**　ってなり、そこからCUIでgit操作するようになります。
gitをCUIで操作するメリットはいくつかあります。

- gitの基本的な操作を知れる
- VSCなどターミナルにすぐアクセスできる環境だとアプリの切り替えが要らずシームレスに作業ができる
- コマンド使ってる俺カッケーー!!!できる

それからしばらくCUIの作業を楽しんでいました。
`~/.gitconfig`にaliasとか作ったり独自のコマンドを作ったりして作業効率化を図ってました。
ちなみに今回も晒します。

<details><summary>Click to Open</summary>

```~/.gitconfig
[include]
	path = ~/.gitconfig.local
[push]
	default = current
[core]
	autocrlf = input
[pull]
  rebase = false
[alias]
  ai = add -i
  ar = "!f() { repository_name=$(basename `git rev-parse --show-toplevel`); git archive --output=\"${repository_name}.zip\" HEAD; }; f"
  alias = !git config --get-regexp alias |  sed 's/^alias.//g' | sed 's/ / = /1'
  b = branch
  ba = branch -a -vv
  bd = branch -D
  bm = branch -m
  ca = commit --amend
  cl = clone
  co = checkout
  cob = checkout -b
  cm = commit -m
  cp = cherry-pick
  d = diff
  f = fetch
  pl = pull
  plf = !"f(){ \
    git fetch; \
    git reset --hard origin/$(git rev-parse --abbrev-ref @); \
  };f"
  ps = push
  l = log --graph --date=short --decorate=short --pretty=format:'%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s'
  ln = log --no-merges
  rb = rebase
  rbi = rebase -i
  rbc = rebase --continue
  rba = rebase --abort
  rs = reset
  rss = reset --soft
  rsm = reset --mixed
  rsh = reset --hard
  sh = stash
  shls = stash list
  shps = stash push
  shpp = stash pop
  sha = stash apply
  shd = stash drop
  st = status
```
</details>

しかしCUI操作って効率極めても結構知れてるんですよね。
`git add`するときとか、`git rebase -i`するときとか、結構時間かかります。

そうして悩んでいる時に、 **lazygit**というTUIベースのアプリを知ります。

https://github.com/jesseduffield/lazygit

これ、使ってみたらわかるんですが、とにかくめちゃくちゃに効率上がります。
多分もうgitで悩むことなくなるんだろうなと思いながら日々使ってます。

VSCユーザ向けに専用の拡張（新規タブでlazygitのターミナルを呼ぶだけ）もあるので、ぜひ一度使ってみることをおすすめします。

https://marketplace.visualstudio.com/items?itemName=ChaitanyaShahare.lazygit

## ブラウザ
### Google Chrome

https://www.google.com/intl/ja_jp/chrome/

これも最近まで使ってました。
別にchromeに文句があって使うのをやめたわけではなかったです。
単純に、chromeよりも魅力的なブラウザを知ってしまったからです。

みなさん **Arc** というブラウザをご存知でしょうか？

https://arc.net/

最近hotなブラウザらしいですが、実際hotです。
何がhotというのはここで語るには蛇足になるので割愛しますが、気に入ってる点は以下です。

- 描画領域が広い
    - タブがサイドバーに内在しており、さらにサイドバーはトグルできるのでサイドバーを隠せばフルで画面を使える
- ショートカットキーが充実してる
    - `command + option + shift + c`でmarkdownのリンク形式`[ページタイトル](url)`でページのurlをコピペできます
    - `command + option + g`でChatGPTを呼び出せます
    - `command + option + n`でArcを開いてなくてもブラウザ検索できます
- UIがモダン
- 開発陣が楽しそう

ArcはchromeやEdgeからの移行をサポートしていて、当方chromeからの移行でしたが何の問題もなく移行できました。(当然ですが移行後もchromeは使えます)
chromeとの互換もばっちしです。是非。

## Docker
### Docker Desktop

https://www.docker.com/ja-jp/products/docker-desktop/

最近有料化しましたね。
これは3年目くらいまで使ってました多分。

使わなくなった理由は有料化ではなく、**dockerエンジン動かしたいだけなのにわざわざDockerDesktop起動させないといけないの面倒くさいな〜** というストレスが原因でした。
し、当時はほとんどVSCに篭って作業してたので、**CLIの解禁まだかいな** って思いながら、渋々アプリ叩き起こしてました。

で、当時chromeで「dockerdesktop cli」「dockerdesktop 代替」とかって調べてると、いいのが見つかりました。

https://github.com/abiosoft/colima

これの良いところは、installしてから使ってみるまでが非常にスムーズな点ですね。
DockerDesktopだと最初アンケートとか誓約確認とかでめちゃくちゃ時間かかると思うんですが、colimaはinstallして`colima start`すればdockerエンジン起動できます。
あとdockerエンジンの起動オプションが豊富です。よく使うのは、`-a`(アーキテクチャの指定)、`-m`(割当メモリの指定)とかですかね。

<details><summary>Click to Open</summary>

```
Flags:
      --activate                    set as active Docker/Kubernetes context on startup (default true)
  -a, --arch string                 architecture (aarch64, x86_64) (default "aarch64")
  -c, --cpu int                     number of CPUs (default 2)
      --cpu-type string             the CPU type, options can be checked with 'qemu-system-aarch64 -cpu help'
  -d, --disk int                    disk size in GiB (default 60)
  -n, --dns ipSlice                 DNS resolvers for the VM (default [])
      --dns-host strings            custom DNS names to provide to resolver
  -e, --edit                        edit the configuration file before starting
      --editor string               editor to use for edit e.g. vim, nano, code (default "$EDITOR" env var)
      --env stringToString          environment variables for the VM (default [])
  -f, --foreground                  Keep colima in the foreground
  -h, --help                        help for start
      --hostname string             custom hostname for the virtual machine
      --k3s-arg strings             additional args to pass to k3s (default [--disable=traefik])
  -k, --kubernetes                  start with Kubernetes
      --kubernetes-version string   must match a k3s version https://github.com/k3s-io/k3s/releases (default "v1.28.3+k3s2")
  -m, --memory int                  memory in GiB (default 2)
  -V, --mount strings               directories to mount, suffix ':w' for writable
      --mount-inotify               propagate inotify file events to the VM (default true)
      --mount-type string           volume driver for the mount (sshfs, 9p, virtiofs) (default "sshfs")
      --network-address             assign reachable IP address to the VM
  -r, --runtime string              container runtime (containerd, docker) (default "docker")
  -s, --ssh-agent                   forward SSH agent to the VM
      --ssh-config                  generate SSH config in ~/.ssh/config (default true)
  -t, --vm-type string              virtual machine type (qemu, vz) (default "qemu")
      --vz-rosetta                  enable Rosetta for amd64 emulation
```
</details>

そして何といってもcolima使うと、`~/.zshrc`に以下を追記しておくだけで勝手にdockerエンジンが立ち上がります！当初のストレスとはおさらばっちゅうわけですね。

```~/.zshrc
if ! colima status > /dev/null 2>&1; then
    colima start
fi
```

## 最後に
こうして振り返ってみると、年を重ねるにつれてターミナルに引き篭もりたい欲がモリモリと増加していっているのがわかりますね。
しかし実際快適なのです。
あと、やっぱり未だに「黒い画面」に対する憧れはなくなりませんね。