Workflow + AppleScriptでMac（Book Pro）の明るさ（輝度）を調整してバッテリライフを伸ばそうと

皆さんがそうではないと思いますが、わたくし移動が多く、新幹線や飛行機にて、バッテリでMacBook Proを使うことが多いのです。いかにバッテリを保たせるかは死活問題。
調べた結果「ディスプレイの輝度」の影響はかなり大。75％ぐらいからバッテリ消費量が有意に減る。
手動でコツコツ75％に調整する日々でしたが、AppleScriptと（あの全く注目されない）Automatorでお気楽に輝度調整ができるように。

# オーバービュー

* Automatorでworkflowを作る
* Automator内でAppleScriptを使う
* アプリとして書き出し
* システム環境設定で制御を許可

# 手順

Automatorで新規書類作成、ワークフロー形式を選択

![スクリーンショット 2017-06-07 21.40.30.png](https://qiita-image-store.s3.amazonaws.com/0/184128/da652171-0569-2392-4092-529306399af9.png)


ライブラリ > ユーティリティ > AppleScriptを実行をダブルクリック（あるいはウィンドウにドラッグ&ドロップ）

![スクリーンショット 2017-06-07 21.44.30.png](https://qiita-image-store.s3.amazonaws.com/0/184128/b9742b39-d6a5-3b01-9a9d-0ffe1c9d3584.png)


AppleScriptにコードを書く（コピーペーストする）

![スクリーンショット 2017-06-07 21.47.39.png](https://qiita-image-store.s3.amazonaws.com/0/184128/f7459ca5-0687-899e-013c-37abfb995181.png)


コードは下記の通り（シンタックスハイライトされない悲しいAppleScript……）

```
on run {input, parameters}
	
	tell application "System Preferences"
		set current pane to pane "com.apple.preference.displays"
	end tell
	
	tell application "System Events"
		if UI elements enabled then
			
			tell process "System Preferences"
				tell radio button "ディスプレイ" of tab group 1 of window 1 to if value is 0 then
					repeat until value is 1
						click
					end repeat
				end if
			end tell
			
			tell slider 1 of group 1 of tab group 1 of window 1 of application process "System Preferences"
				if value > 0.75 then
					set value to 0.75
				end if
			end tell
			quit application "System Preferences"
			
		else
			tell application "System Preferences"
				activate
				set current pane to pane "com.apple.preference.security"
				display dialog "UI element スクリプティングが有効になっていません。 「プライバシー」タブの「下のアプリケーションにコンピュータの制御を許可」にチェックを入れて下さい。"
			end tell
		end if
	end tell
	
	
	return input
end run
```

メニューから　ファイル > 変換　を選択、「アプリケーション」を選ぶ。


メニューから　ファイル > 保存　を選択、フォーマットを「アプリケーション」にする。ファイル名は例えば「kido75%.app」。

![スクリーンショット 2017-06-07 21.54.13.png](https://qiita-image-store.s3.amazonaws.com/0/184128/765ad6cb-3388-fb55-223c-e6890304f697.png)


起動は、spotlightからがオススメ。

![スクリーンショット 2017-06-07 21.56.06.png](https://qiita-image-store.s3.amazonaws.com/0/184128/e1d95a97-45ae-35cc-4b13-7abfb3af9c74.png)


初めて起動するときには、システム環境設定 > セキュリティとプライバシー > プライバシー　で「kido75%.app」のチェックボックスをオンにしてあげなければならない。

<img width="450" alt="スクリーンショット 2017-06-07 21.58.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/184128/7c090295-83de-5329-b3d4-3cfed87fb148.png">



# 難所解説

## システム環境設定がすでに開いているとエラーが起きる

システム環境設定が起動していると、エラーが起きてしまっていて、下記のコードで、「きちんと狙った通りのところを開く」のが手間取った。

```
			tell process "System Preferences"
				tell radio button "ディスプレイ" of tab group 1 of window 1 to if value is 0 then
					repeat until value is 1
						click
					end repeat
				end if
			end tell
```

## AppleScriptしかないのにAutomatorが必要

AppleScriptでコードを書いてアプリを生成すると、毎回　システム環境設定 > セキュリティとプライバシー　でチェックボックスをオンにしなければ。
Automatorでアプリを生成すると、1回チェックボックスをオンにすればOK。AppleScriptを実行したいだけなのに、いったんAutomatorを噛ませないのが面倒。
GUIスクリプティングとセキュリティの戦いのせいらしい。

残念なAppleScript、残念なAutomator。

パズルを解く側としては面白いんだけど。


# 参考リンク

[「macOS Sierra 10.12.3 beta 4」には、バッテリー持ちを長くするためにディスプレイ輝度を下げてくれる機能が搭載されていることが判明](https://corriente.top/post-31236/)

[AppleScriptでモニタの明るさを調整したい]
(https://discussionsjapan.apple.com/thread/10062506?start=0&tstart=0)

[OSX10.9におけるGUIスクリプティングとセキュリティとの戦い](http://d.hatena.ne.jp/zariganitosh/20131225/gui_scripting_accessibility_setting)

深謝。