macOS で使っている個人的便利ツール等の紹介

この記事は[Stockmark Advent Calendar 2023](https://adventar.org/calendars/9363)の6日目の記事です。

## はじめに

ストックマークの森長です。

毎年恒例になってきました弊社のアドベントカレンダーで、以下のような記事を書いていますので、興味がわいた方はぜひご覧下さい。
- [Emacsのすゝめ](https://qiita.com/mkt3/items/44aa25619a9591078231) 2021 ストックマーク アドベントカレンダー
- [（私のための）至高のデスクトップ環境を求めて](https://qiita.com/mkt3/items/e84d8258a31740547f84) 2022 ストックマーク アドベントカレンダー

さて、今回は表題にありますように「macOSで使っている個人的便利ツールの紹介」です。

皆様、PCを使っている上で各人色々なツールやソフトウェアを使っていると思います。

私も色々使っているますが、他の方に良いツール等を教えてもらうことも多々あります。
その際はとても嬉しいので、私も今使っているツール等を紹介して、少しでも嬉しさを皆様に共有できればと思います。

すべてを紹介すると長くなってしまいますので、個人的なおすすめを紹介していきます。

## ソフトウェア
### MeetingBar
[MeetingBar](https://meetingbar.app) は、カレンダーの予定をメニューバー上に表示して、会議時間を通知してくれるツールです。
メニューバーから、Zoom 等のオンライン会議へのリンクが開けるので、とても重宝しています。

### karabiner-elements
[Karabiner-Elements](https://karabiner-elements.pqrs.org) はキーボード及びその操作のカスタマイズツールです。
私は、特定のキーを入れ替えたり、色々なアプリケーションで Emacs のキーバインドを有効するために使っています。

### Zotero
[Zotero](https://www.zotero.org) は、文献管理ツールです。
私は読んだ論文や読みたい論文の管理に利用しています。Zotero の Chrome Extension も導入すると、Webページから1クリックで Zotero に取り込むことができます。


## ブラウジング環境
### Vivaldi
私は「Chromium」エンジンのブラウザ [Vivaldi](https://vivaldi.com) を利用しています。
Vivaldi は高いカスタマイズ性があり、キーボードショートカットを細かく設定可能です。後述する Chrome Extension の vimuim と 組み合せるととても快適にブラウジングが可能です。


### Chrome Extension
Vivaldi は、「Chromium」エンジンのブラウザのため、Chrome Extension が利用できます。
その中で私のおすすめ Chrome Extension は以下の通りです。

| Extension                                                                                                            | 概要                                                                                                                          |
| ---                                                                                                                  | ---                                                                                                                           |
| [Mouse Dictionary](https://chromewebstore.google.com/detail/mouse-dictionary/dnclbikcihnpjohihfcmmldgkjnebgnj?hl=ja) | ブラウザ上でマウスオーバーをすると動作する英語辞書ツールです。                                                                  |
| [Zotero Connector](https://chromewebstore.google.com/detail/zotero-connector/ekhagklcjbdpajgpjgmbionohlpdbjgc)       | 先ほど紹介した Zotero用の Extension です。                                                                                    |
| [Vimuim](https://chromewebstore.google.com/detail/vimium/dbepggeogbaibhgnhhndojpepiihcmeb)                           | Vimuim はブラウザを vim like にキーボードで操作することができます。つまり、ブラウジング時にマウスをさわる必要がなくなります。 |

なお、上記の Vimuim では操作できないページが一部あります。そこで、Vimuim のキーボードショートカット設定と並行して同じキーボードショートカットを Vivaldi でも設定(同じショートカットを Vivaldi と Vimuim 両方で設定)すると、Vimuim単体では操作できなかった拡張機能のページやブラウザを開いた直後に表示されるページでも、Vimuim と同様のキーボードショートカットで操作可能になります。
つまり、Vimuim で制御できないページは、Vivaldi が制御してキーボード操作が可能になります。

## ウインドウマネージャ
OS上では、ウィンドウマネージャという、アプリケーションのウィンドウの配置や外観を管理するプログラムが動作しており、いくつ種類があります。その中でも以下のようなウィンドウマネージャがあります。

| 種別                           | ざっくり概要                                                                                                                                                           |
| ---                            | ---                                                                                                                                                                    |
| スタック型ウィンドウマネージャ | WindowsやmacOSで標準利用されているタイプ。ウィンドウを重ねて描画しています。そのため、重なって隠れてしまうことも。                                               |
| タイル型ウィンドウマネージャ   | ウィンドウをタイル上に敷き詰めて表示するタイプ。すべてのウィンドウが画面にタイル上に表示されます。起動しているアプリケーションが多いと1つあたりのウィンドウサイズが小さくなるので、仮想デスクトップと組み合せて利用します。 |


キーボード操作によるウィンドウ移動と相性が良いため、私はタイル型ウィンドウマネージャを利用しています。

タイル型ウィンドウマネージャでは、すべてのウィンドウが後ろに隠れずに表示されているので、キーボードの操作でウィンドウ間を移動することができます。
例えば、「Optionキー + h」で左のウィンドウヘフォーカス移動、「Optionキー + l」で右のウィンドウへフォーカス移動等しています。

これにより、アプリケーション間の移動にマウスやタッチパッドの操作、ウィンドウスイッチャー(Alt+Tab)の連打から開放されます。
慣れるまで時間がかかるかもしれませんが、慣れるととても快適です。

macOSでタイル側ウィンドウマネージャを利用する場合は、[yabai](https://github.com/koekeishiya/yabai) と [skhd](https://github.com/koekeishiya/skhd) を組み合わせると良いと思います。この組み合わせで検索すると参考となるサイトが多数ありますので、タイル型ウィンドウマネージャが気になった方は検索してみてください。


## エディタ環境
私はエディタとして Emacs を利用しています。基本的に一日で一番使っているソフトウェアです。カスタマイズの自由度が高く、どんどん自分の手に馴染んできます。

メール、RSS購読、プログラミング、タスク管理、各種メモ等色々できます。もちろん、この記事も [Qiita Cli](https://github.com/increments/qiita-cli)と連携して、Emacs で書いています。

Emacs に関しては、少し古いですが、[Emacsのすゝめ](https://qiita.com/mkt3/items/44aa25619a9591078231) をご覧下さい。
また、私の Emacs の設定が[こちら](https://github.com/mkt3/dotfiles/tree/main/files/emacs)にあります。

![Emacs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53086/bb27a98a-61f9-d8c2-6b7e-d6e7ba23bc5c.png)

(最初のハードルは高いけど、Emacs 楽しいので色々な人に使ってみてほしい。)

## 日本語入力環境
[SKK](https://ja.wikipedia.org/wiki/SKK)（Simple Kana to Kanji Conversion）という日本語入力方式があります。
よくある日本語入力方式と比べて、SKKは変換方法がかなり特殊ですが慣れると快適です。ちゃんと説明するとかなり長くなってしまうので、申し訳ないですが、気になる方はぜひ「SKK 日本語」で検索してみてください。
macOS上でSKKを行うのであれば、[aquaskk](https://github.com/codefirst/aquaskk)の一択かなと思います。Emacs 上では ddskk が使えます！

## ターミナル環境
ここではターミナルエミュレータ、シェル、シェルのプラグイン、コマンド、ツール等を紹介していきます。

### WezTerm
ターミナルエミュレータの選択肢は、標準の Terminal を始めとして色々なターミナルエミュレータ(iTerm2、Kitty、Alacritty、WezTerm等)があります。

これらのターミナルエミュレータの中で私が使用しているのは、WezTerm です。

[WezTerm](https://wezfurlong.org/wezterm/index.html) は Rust で実装された強力なクロスプラットフォームのターミナルエミュレータであり、以下のような特徴があります。

- クロスプラットフォーム(Linux、macOS、Windows 10、FreeBSD上で動作)
- ローカルおよびリモートホスト上のマルチプレックスターミナルペイン、タブ、ウィンドウ。Tmuxのようなイメージ
- 豊富なフォント設定(リガチャ、カラー絵文字、フォントのフォールバック、トゥルーカラー等)
- 豊富かつ細やかな設定

私はターミナルで ssh越しにも Emacs を起動するので、細やかなキーバインドの設定ができる WezTerm が無くてはなりません。


### フォント
フォントは各人好みのフォントを使うのが一番ですが、ターミナル上でアイコンフォントを扱いたいので、Nerd Fonts を含めているフォント(PlemolJP や Cica 等)がお勧めです。私は、[PlemolJP](https://github.com/yuru7/PlemolJP)や[Cica](https://github.com/miiton/Cica)をよく利用しています。

アイコンフォントを利用すると、以下のような感じでターミナルにアイコンを表示することができます。

![lsd-l.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/53086/91c3e929-ee39-1311-c613-d8b6b40be872.png)


### Zsh
macOSユーザにとって、macOS Catalina から デフォルトシェルが bash から zsh に変更されたので、zsh は馴染み深いと思います。
zsh は機能やプラグインも豊富です。なんでもかんでも有効にすると起動が重く感じてしまうこともありますが、遅延ロード等の設定を実施すれば問題ありません。

私は zsh で以下のようなプラグインを利用しています。

| プラグイン                                                              | 概要                                                                                 |
| ---                                                                     | ---                                                                                  |
| [git-prompt.zsh](https://github.com/woefe/git-prompt.zsh)               | カレントディレクトリの Git status を 表示してくれます。                              |
| [zsh-autocomplete](https://github.com/marlonrichert/zsh-autocomplete)   | tab を押さなくても補完候補を自動で表示してくれます。                                 |
| [zsh-defer](https://github.com/romkatv/zsh-defer)                       | 遅延ロードを行うプラグインです。この行以降のプラグインはすべて遅延ロードしています。 |
| [F-Sy-H](https://github.com/z-shell/F-Sy-H)                             | シェルコマンドをシンタックスハイライトしてくれます。                                 |
| [zsh-abbr](https://github.com/olets/zsh-abbr)                           | ターミナル上で略語を展開してくれます。alias とはまた違った使い心地です。             |
| [zsh-autosuggestions](https://github.com/zsh-users/zsh-autosuggestions) | コマンド履歴を元にグレーでシェルコマンドを補完してくれます。                         |
| [zsh-auto-pair](https://github.com/hlissner/zsh-autopair)               | 自動的に括弧や引用符などのペアを挿入し管理してくれます。                             |


### tmux
ターミナルマルチプレクサとして tmux を使っています。私は tmux がないと作業効率が著しく低下します。
WezTerm 単体でも tmux と同様のことができますが、サーバ上でも tmux を常時起動させているので、tmux をメインで利用しています。

tmux単体でも色々な設定ができますが、プラグインもあり、私は以下のプラグインを利用しています。


| プラグイン                                                        | 概要                                                             |
| ---                                                               | ---                                                              |
| [tpm](https://github.com/tmux-plugins/tpm)                        | tmux のプラグインマネージャです。                                |
| [tmux-sensible](https://github.com/tmux-plugins/tmux-sensible)    | tmux のおすすめオプションを設定してくれます。                    |
| [tmux-mem-cpu-load](https://github.com/thewtex/tmux-mem-cpu-load) | tmux 上に CPUやメモリ使用率等を表示してくれます。                |
| [tmux-yank](https://github.com/tmux-plugins/tmux-yank)            | OS のクリップボードに選択中のテキストを保存してくれます。        |
| [tmux-resurrect](https://github.com/tmux-plugins/tmux-resurrect)  | 手動で tmux の状態を保存、復元できるようになります。             |
| [tmux-continuum](https://github.com/tmux-plugins/tmux-continuum)  | tmux-resurrect と連携して、自動でtmux の状態を保存、復元します。 |

### コマンド
以下のツールやコマンド等が便利なので、適宜インストールしています。

| パッケージ等                                            | 紹介                                                                                                                           |
| ---                                                     | ---                                                                                                                            |
| [bat](https://github.com/sharkdp/bat)                   | cat の代替コマンド。見やすいです。                                                                                             |
| [fd](https://github.com/sharkdp/fd)                     | find の代替コマンド。                                                                                                          |
| [fzf](https://github.com/junegunn/fzf)                  | ターミナル上のファジー検索です。色々なコマンドと連携して使っています。                                                         |
| [ripgrep](https://github.com/BurntSushi/ripgrep)        | grepの代替コマンド。色々高速化されていて便利です。                                                                             |
| [delta](https://github.com/dandavison/delta)            | gitやdiffのためのシンタックスハイライトページャ。gitと連携させています。                                                       |
| [lsd](https://github.com/Peltoche/lsd)                  | ls の代替コマンド。NerdFont でアイコンも表示できます。                                                                         |
| [dust](https://github.com/bootandy/dust)                | du の代替コマンド。見やすいです。                                                                                              |
| [htop](https://htop.dev)                                | top の代替コマンド。カラーで見やすいです。                                                                                     |
| [csview](https://github.com/wfxr/csview)                | csvファイルをターミナル上で見やすく表示してくれます。                                                                          |
| [trash-cli](https://github.com/andreafrancia/trash-cli) | 削除時に一旦ゴミ箱に入れてくます。rmコマンドで間違って削除してしまった経験がある方はぜひ。 私はホーム配下を消し飛ばしました... |
| [neofetch](https://github.com/dylanaraps/neofetch)      | システム情報を表示してくれます。かっこ良いです。                                                                               |
| [navi](https://github.com/denisidoro/navi)              | コマンドのチートシートをインタラクティブに検索できます。                                                                       |
| [lagygit](https://github.com/jesseduffield/lazygit)     | gitコマンドを簡単かつ視覚的に操作するための UI ツール です。                                                                   |
| [ghq](https://github.com/x-motemen/ghq)                 | リポジトリを統一的に管理できます。                                                                                             |


# 終わりに
今回は紹介だけでしたので、インストール方法や細かい設定等については触れませんでした。とても参考になるサイトがたくさんありますので、気になった方はぜひ検索してみてください。

これらの便利なソフトウェアやツール等の開発者様には感謝の念に堪えません。

「私はこんなツール等を使っている」等ありましたら、ぜひコメントで共有いただけると嬉しいです!

最後まで、読んでいただきありがとうございました。