🍎

Macのディスプレイを自動でグレースケールに変える

2022/02/13に公開

グレースケールとは

グレースケール(英: gray scale または grayscale)とは、コンピュータ上及び写真での色の表現方法の一種。デジタル画像の中でも、ピクセルの標本値に光度以外の情報が含まれていない画像のことである。グレースケールでは、二値画像と異なり、画像を光が最も強い白から最も弱い黒まで間の灰色の明暗(英語版)も含めて表現する[1]。
https://ja.wikipedia.org/wiki/グレースケール

要は白黒のことを言います。
最近はスマホなどでディスプレイをグレースケールに変える機能のことをグレースケールと言うみたいです。

なんでグレースケールにするの?

グレースケールによってディスプレイに対する依存性を減らすことができます。
ディスプレイにある様々な色が脳に刺激を受けて夢中になってしまうみたいです。
グレースケールだと色の刺激が減って画面に興味がなくなります。(きちんとした資料見つけられませんでした。すみません。)
https://togetter.com/li/1721116

Macでの実現方法

手動だと下記のように操作すると画面がGrayscaleになります。
(録画したときに気付きましたがキャプチャツールだと色が反映されないようです。)

ただ、毎回操作するのがめんどくさいのでコードで実現する方法を考えました。

コードによる実現方法

https://github.com/axpensive/mac-auto-grayscale/tree/main

# System PreferencesのAccessibilityを開きます。
tell application "System Preferences"
	launch
	reveal anchor "Seeing_ColorFilters" of pane "Accessibility"
end tell

tell application "System Events"
	tell application process "System Preferences"
		delay 1
		tell window "Accessibility"
			# 設定画面が出るまで待ちます。
			repeat until exists checkbox "Enable Color Filters" of tab group 1 of group 1
				delay 0.01
			end repeat
			# グレースケールをon/offします。
			click first checkbox of tab group 1 of group 1
		end tell
	end tell
end tell

# windowを閉じます。
tell application "System Preferences" to if it is running then quit

コードに関して補足

使用した技術はApple script(.scpt)と呼ばれるプログラミング言語になります。
Macで使えるshellみたいなものです。
コードは何をしているかというと手動での設定と同じことをしています。
seleniumをMacのアプリケーションに対して実行しているようなものです。

注意点

予め画像のようにFilter typeをGrayscaleに設定してください。

コードの使い方

Automatorを使ってapp化したり、スケジューラーで定期実行するのをおすすめします。

バージョン制御について

Macはバージョンによっては設定画面が違います。
なので、紹介したコードはいずれ動かなくなる可能性があります。(macOS Monterey Version 12.1で動作は保証できます。)
今回は実装していませんが、OSのバージョンは下記のように取得して、os_verに対して条件式を設定すればバージョンにごとに動作を制御できます。

set os_ver to do shell script "sw_vers -productVersion | cut -d '.' -f1-2"

最後に

正直、Macのアプリを作ることに興味がなかったのでApple scriptの深堀りができませんでした。
特にFilter typeをコードによって選択する方法はよくわからなかったです。

また、決まった時間にアプリケーションを実行するまで実現できませんでした。
もしかしたら別記事で上げるかもしれません。

グレースケールを使ってから夜ふかしが減り、QOLが上がったと思います。
皆さんにもいい生活を送っていただきたいと思い、記事を書きました。
よかったら高評価お願いします。

Discussion