Macでディスプレイの配置を簡単に変更するためのLifehack

# はじめに
本記事はMacで外付けディスプレイ使用時に、ディスプレイの配置を簡単に変更するためのLifehackになります。

もし、毎日の様に繰り返し行なっている作業の場合は、自動化することで時間的コスト削減を実現できます。

## 課題
リモートワークなど自宅での作業時にリビングで作業をしたり、別の部屋で作業する場合、机のスペースに応じて外付けディスプレイの配置を変更しています。

例えばリビングにいるときは、ディスプレイとMacを縦に並べる様に配置し、別の部屋で作業する場合はMacを左側、ディスプレイを右側に配置して作業します。

![Display.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/55d1611e-bdab-a0d8-5a61-c0d14f5bcf50.png)

そのため、ディスプレイの配置を変更する場合、Macの「システム環境設定」を起動し、手動でディスプレイの配置を変更します。以下はMacを左側、外付けディスプレイを右側に配置する際の例です。

![スクリーンショット 2022-02-05 14.30.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/8bd54bf8-95ad-a635-5b35-ad0195dc4b65.png)

あたりまえの様に毎日、行っている作業ほどエンジニアたるもの、自動化したくなるものです。コマンドなど簡単に制御できる方法はないかなと思い調査しました。

![animal_chara_computer_azarashi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/392ec0f0-2671-499d-6794-6a7b6f8323eb.png)

## ソリューション
### displayplacer
課題を解決するための手段として、[displayplacer](https://github.com/jakehilborn/displayplacer)というコマンドラインユーティリティを見つけました。

このコマンドラインユーティリティはC言語で開発されていて、マルチディスプレイの解像度と配置を構成します。

Homebrewでも公開されていますが、GitHubから取得します。

`$ git clone https://github.com/jakehilborn/displayplacer`

PATHを通すために、`/usr/local/bin/`ディレクトリ配下にシンボリックリンクを作成して管理します。

`$ sudo ln -s /Users/hoge/Documents/Tool/displayplacer/displayplacer /usr/local/bin/displayplacer`

コマンドの使用方法はディスプレイに接続している状態で、`displayplacer list`コマンドを実行すると、現在の画面情報や可能な解像度を表示します。

```bash
　　　　（略）
  mode 240: res:1650x1050 hz:30 color_depth:4
  mode 241: res:1650x1050 hz:30 color_depth:8

Execute the command below to set your screens to the current arrangement:

displayplacer "id:D137D218-5596-2EE5-BC38-31E7F6E0338E res:1440x900 color_depth:8 scaling:on origin:(0,0) degree:0" "id:77B30CC4-1E68-B280-857A-49D55CBC4B32 res:1920x1080 hz:60 color_depth:8 scaling:on origin:(1440,0) degree:0"
```

上記、最後の行に出力されるコマンドを実行することで、現在のディスプレイの解像度及び、配置の構成を適用することができます。

### Automator
`displayplacer`コマンドのみでも重宝しますが、Automatorと組み合わせて、更に簡単に実行できる様にします。

Automatorのアプリケーションを起動し、ファイルを新規で開きます。また、書類の種類は「アプリケーション」を選択します。

![スクリーンショット 2022-02-05 14.47.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/354dcbac-51ed-96f6-cbe4-0de997370aa5.png)

検索窓から「シェル」を入力し、「シェルスクリプトを実行」を選択します。

![スクリーンショット 2022-02-05 14.48.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/81092be4-692b-91fd-6048-96fb0e73119d.png)

シェルは`/bin/bash`を選択し、`displayplacer list`コマンドの実行結果より、最後の行を入力して保存します。なお、`displayplacer`コマンドはフルパスで記載しています。

![スクリーンショット 2022-02-05 14.48.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/c7580432-bf2b-7e66-9732-5346ff8d074c.png)

クイックアクションでショートカットに割り当てる方法でも良いと思いますが、本記事では直感的に操作することを目的にしているため、アプリケーションにて設定しています。

更に[STREAM DECK](https://www.elgato.com/ja/stream-deck)と組み合わせるのも面白そうだなと思いましたが、機器のインターフェースがUSBなのが気になりました。

## 動作確認
Automatorで作成したアプリケーションを任意の場所に配置し、動作確認を行います。

ダブルクリックでアプリケーションを実行すると、指定した画面情報の値に構成されます。
以下の例ではMacが下、外付けディスプレイが上部の配置に変更されました。

![スクリーンショット 2022-02-05 14.55.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/3b1f9b6e-bd86-5db1-1f2d-de2d62d78e7a.png)

なお、以下の様なポップアップ画面が表示された場合、「システム環境設定」から「セキュリティーとプライバシー」を選択し、「プライバシー」の「フルディスクアクセス」にAutomatorで作成したアプリケーションを追加することで、表示しない様に設定することができます。

![スクリーンショット 2022-02-05 14.55.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221759/b63a9e32-1829-f709-9918-8458151d99a7.png)

まとめですが仕事などで1日1回同じ作業を行なった場合、年間で約36分の節約になります。
補足として自動化の場合、画面の切り替え自体は1秒程度で、アプリケーションを起動するためにクリックする時間を考慮し、約3秒で試算。

```text
# ディスプレイの配置変更にかかる時間
## 1回
手動：12秒
自動：3秒

## 年間
手動： (12 * 20) * 12　= 2,880（秒） = 48（分）
自動： (3 * 20) * 12　= 720（秒） = 12（分）
```

# おわりに
ディスプレイはLGの[27UP550-W](https://www.lg.com/jp/monitor/lg-27up550-w)を使用しています。

デザイン的にMacと親和性も良く、ディスプレイを縦横自在に動かせることができ、USB Type-Cで接続可能なのでお勧めです。