Mac操作の効率化メモ
Macの操作を効率化したい。まずは基礎固めということで、主要なユースケースをピックアップしてそれらに対するTIPSを整理してみた。結果的に現行ではRaycast中心の体系となった。
アプリケーション起動・切替
RaycastのExtensions > Hotkey
を利用したキーボードショートカット主体の操作とする。
常用している(Dock配置している)アプリケーションには全てHotkeyを割り当てる。Hyper key(Ctrl + Option + Command + Shift)
を設定して空間を分離する。HyperkeyはKarabiner-Elementsでcaps lock
キーと置換する設定を入れることにより、1タイプに省略することができる。
Hotkeyは以下の構成となる。アプリケーション名の頭文字が被る場合は記号に振り分けるなどしてタイプ数を節約する方向に調整する。
Hotkey = Hyperkey + アプリケーション名の頭文字
Hotkeyによるショートカット操作に移行することで、Dockからのアプリケーションの起動・切替がほぼ不要になるので画面スペース節約および操作に慣れる意味でもDockはデフォルトで非表示にする。(マウスカーソルを当てれば表示される)
また、アプリケーションを呼び出した後の以下のケースではアプリケーション共通でmacOSのショートカットを利用する。
操作 | キーバインド | 備考 |
---|---|---|
同一アプリケーションのウィンドウ切替 | Command + @ |
ウィンドウ数によってはTrackpadでのアプリExposeの方が効率的 |
メニューバーへのアクセス | Ctrl + F2 |
USキーボードの場合は指運びが厳しいのでリマップするか、習熟してアクセスしたいメニュー名が絞れてきた場合はRaycastのSearch Menu Items からインクリメンタルサーチした方が早そう |
ウィンドウ配置
RaycastのExtensions > Window Management
を利用したキーボードショートカットによるサイズ調整・配置とする。
以下のメニューに対して、アプリケーション起動・切替と同様にHotkeyを割り当てる。
Mouse / Trackpad操作の文脈ではMagnetも便利であるがキーボード操作に統一するため併用しない。
Name | Hotkey | 効果 |
---|---|---|
Left Half | Hyperkey + ← | ディスプレイの左半分にウィンドウ配置 |
Maximize | Hyperkey + Space | ディスプレイの全体にウィンドウを拡大(フルスクリーンではない) |
Right Half | Hyperkey + → | ディスプレイの右半分にウィンドウ配置 |
Next Display | Hyperkey + ↑ | 別ディスプレイにウィンドウを移動 |
Previous Display | Hyperkey + ↓ | 別ディスプレイにウィンドウを移動 |
ターミナル操作
ディレクトリ移動
enhancdを利用してパス階層のタイプを省力化する。過去の移動履歴とfuzzy finderの組み合わせにより直感的な移動が可能になる。
コマンド | 効果 |
---|---|
cd <directory name> | 過去に移動したことがあるディレクトリの場合はパスを打たずにディレクトリ名だけで直接移動することができる。ディレクトリ名が被った場合は候補表示されるので選択して移動する。 |
cd - | 直近移動したディレクトリ一覧が候補表示されるので選択して移動する。(デフォルトで10件) |
cd .. | カレントディレクトリからルートまでの親ディレクトリ各階層が候補表示されるので選択して移動する。cd ../../.. のようなコマンドを打たなくて済むようになる。 |
cd . | カレントディレクトリの子ディレクトリが候補表示されるので選択して移動する。 |
コマンド履歴・補完
以下のZLE (Zsh Line Editor)を利用した関数をウィジェット登録してCtrl + r
キーで呼び出すと過去のコマンド履歴から選択実行することができる。fzfコマンドを利用するのでインクリメンタルサーチも可能である。
function select-history() {
BUFFER="$(history -n -r 1 | fzf --exact --no-sort --reverse --border-label="history" --no-scrollbar --prompt="Search > " --color='bg+:-1' --query="$LBUFFER")"
CURSOR="${#BUFFER}"
}
zle -N select-history
bindkey '^r' select-history
また、補完に関しては以下のzshプラグインを活用する。
プラグイン名 | 機能 |
---|---|
zsh-autosuggestions | プロンプトに文字列を入力すると過去のコマンド履歴から入力途中の文字列に一致する履歴をグレーフォントで提案してくれる。→キーを押下すると提案されたコマンドをプロンプトに再現できる。 |
zsh-completion | 各種CLIのサブコマンドやオプションの補完を強化してくれる。 |
アプリケーションのローカル起動
開発中のアプリケーションをローカル環境で動作させるには、画面 / APIサーバ / DB / その他の個別起動が必要な場合がある。tmuxを利用して以下のようなスクリプトを組んでおくと、ターミナルのタブ分割、ディレクトリ移動、ローカル起動を自動化することができる。
誤ってターミナルを終了した場合でもtmuxのセッションは残るので復旧が容易というメリットもある。
#!/bin/bash
set -eu
cd path/to/mono_repo # モノレポ想定
tmux new-session -d -s "sample_session" # 任意のセッション名を指定
# 1つ目のウィンドウでDB等のインフラ周りを起動する
tmux rename-window "infra_window" # 任意のウィンドウ名を指定
tmux send-keys -t "sample_session:infra_window" "cd path/to/infra" Enter
tmux send-keys -t "sample_session:infra_window" "docker-compose up -d --build" Enter
# 厳密には起動完了を待たないとアプリ起動時の接続チェックで落ちることになるがここでは割愛
# 2つ目のウィンドウでアプリを起動する(2種を想定)
tmux new-window -t "sample_session" -n "app_window" # 任意のウィンドウ名を指定
# アプリ用のウィンドウを4分割する
tmux split-window -h
tmux select-pane -t 1
tmux split-window -v
tmux select-pane -t 3
tmux split-window -v
# アプリ用のウィンドウの左半分をapp1に割り当てる
# 上半分で画面を起動
tmux select-pane -t 1
tmux send-keys -t "sample_session:app_window" "cd path/to/app1/front" Enter
tmux send-keys -t "sample_session:app_window" "npm run dev" Enter
# 下半分でAPIサーバを起動
tmux select-pane -t 2
tmux send-keys -t "sample_session:app_window" "cd path/to/app1/api" Enter
tmux send-keys -t "sample_session:app_window" "npm run dev" Enter
# アプリ用のウィンドウの右半分をapp2に割り当てる
# 上半分で画面を起動
tmux select-pane -t 3
tmux send-keys -t "sample_session:app_window" "cd path/to/app2/front" Enter
tmux send-keys -t "sample_session:app_window" "npm run dev" Enter
# 下半分でAPIサーバを起動
tmux select-pane -t 4
tmux send-keys -t "sample_session:app_window" "cd path/to/app2/api" Enter
tmux send-keys -t "sample_session:app_window" "npm run dev" Enter
tmux select-pane -t 1
tmux attach-session -t "sample_session"
ブラウザ操作(Google Chrome)
利用するブラウザはGoogle Chromeを前提とし、拡張機能のVimiumを利用したキーボードショートカット主体の操作とする。
?
キーから呼出すVimium Help
でガイドされるキーバインドとデフォルトの動作が一部異なっているので、Custom key mappings
に以下のキーバインドを登録して補正する。
デフォルトの動作はREADMEの記載に基づいているようである。
map h goBack
map l goForward
map H previousTab
map L nextTab
検索を開始する
- Google Chromeがカレントウィンドウでない場合
- Raycastの
QuikLinks > Search Google
機能を呼び出して検索する
- Raycastの
- Google Chromeがカレントウィンドウである場合
- Vimiumキーバインドの
t
を押下して新規タブを開きアドレスバーから検索する - Chromeショートカットの
Command + l
を押下してアドレスバーにフォーカスしてから検索する
- Vimiumキーバインドの
ブックマークを開く
- Vimiumキーバインドの
O(新規タブで開く)/o(既存タブで開く)
を押下してvomnibarを開き検索キーワードを入力する
画面操作
- Vimiumのキーバインドを利用すると下表の操作がキーボードの数タイプだけで可能になる
操作 | キーバインド |
---|---|
ページ内リンクを同タブで開く | f |
ページ内リンクを別タブで開く | F |
下スクロール | j |
下スクロール(ページ半分) | d |
上スクロール | k |
上スクロール(ページ半分) | u |
ページ最上部へジャンプ | gg |
ページ最下部へジャンプ | G |
左側のタブに移動 | H |
右側のタブに移動 | L |
タブを閉じる | x |
閉じたタブを戻す | X |
現在のタブを複製 | yt |
ページ更新 | r |
履歴戻る | h |
履歴進む | l |
ページ内検索(※) | Command + f |
※Chromeショートカットの方がハイライトや操作性の面でより扱いやすいためVimiumのキーバインドは利用しない
タブ管理
- ブックマークやWebクリップ(NotionやPocket等)を活用して開き過ぎないことを前提とする
- そのうえで特に拡張機能などを利用せずシンプルに
Command + Shift + a
のChromeショートカットを利用する - 別ウィンドウのタブも選択可能であるのでウィンドウ移動の起点にもできる
ドキュメント(ディレクトリ)管理
ドキュメント管理はオンラインサービスとのダウンロード・アップロードが起点となるので、macOSデフォルトの~/Documents
、~/Downloads
、~/Desktop
に忠実に振り分けて運用しようとしても結局は分散してしまう課題感がある。
個人の性格や業務内容によるところもあるが、以下のように独自ディレクトリに集約する運用を試している。1ディレクトリのみだとすぐに溢れてしまい、Finderやエディタ(VScode)のエクスプローラでの視認性が低下するのでライフサイクルごとに段階を設けて数を絞る構成としている。
~/var
├── schreenshot // スクリーンショットの保存先をデフォルトの~/Desktopから変更
├── archive // 長期間参照していないファイルを移動。このタイミングで固定的な分類を行う
│ ├── admin
│ ├── project1
│ └── project2
├── recent // tmpが煩雑になったタイミングで直近参照していないファイルを移動
│ └── context1 // この段階で作業文脈ごとに集約整理するのもOK
└── tmp // 作業スペース。各アプリのダウンロード先に指定
また、*.md
、*.csv
、*.log
ファイルなどのテキストファイルはVSCodeで開くことが多いのでウィンドウの立ち上げや、開発用ウィンドウとの切替がそれなりに発生する。
Project ManagerというVSCodeプラグインとVisual Studio Code - Project ManagerというRaycastのExtentionsを組み合わせて利用すると事前にProject Managerに登録したフォルダまたはワークスペースをRaycastから選択して開くことができるので非常に便利である。
その他
クリップボード履歴
- Raycastの
Clipboard History
機能にHotkeyを登録して利用する - HotkeyにはMacOSのペーストショートカットに寄せるため
Command + Shift + v
を割り当てる
スニペット管理
- Raycastの
Search Snippets
機能にHotkeyを登録して利用する - 階層管理ができないのでその点ではClipyの方が秀でているが、特にそのような管理は行わないためクリップボード履歴含めてRaycastに統一するものとした
- Hotkeyにはクリップボード履歴に寄せて
Command + Shift + s
を割り当てる - スニペットにキーワードを割り当てれば該当の文字列(例:
!mail
)を入力するとHotkey呼び出しして検索せずとも直接置換してくれる
パスワード管理
- 開発環境用であっても平文でのスニペット保存は避け、1Passwordを利用する
- Google Chrome拡張機能の1Password – パスワード保管庫を利用してアカウント情報の入力を省力化する
Discussion