まえがき
ここのサイトにはだいぶ長いことご無沙汰でした、sigmocです。腹立ちまぎれに告発・糾弾するのも大人気ないので、ここにささやかなコードとノウハウを共有することで心を鎮めようと思いますw
「背景」の章は年寄りのグチをぐだぐだ垂れ流しただけですので、お急ぎの方はすぐ「方法」の章へどうぞ。
背景
仕事で(というか、ちょっとした副業として)毎日、某社の某アプリにログインして、いつもディスプレイのすみの方1/4くらいのスペースに表示させていたんですよ。今時のお行儀の良い一般的なアプリは、たいてい前回使用時のウィンドウサイズと位置を覚えていて、再起動とか再ログインしたら前の表示位置や内容を再現するのが常識じゃないですか。そのアプリも使用開始から数年、そのような動作をしていました。なのに、去年の5月ごろだったかアップデートを適用すると、突然、前回使用時サイズや位置を再現するのをやめ、ログインしたら 必ず最大化したウィンドウ でディスプレイを覆い尽くすようになったんです。
ウィンドウの左上端をちょいとドラッグして、いつもの定位置に持って行くのは、たった5秒程度でできることですが、毎日くる日もくる日も繰り返すのは地味に面倒くさいし腹立つわけで、某社サポート窓口に「元通りの動作に直してくれ」って要望してみたんですけど、
- 操作の詳細を教えろ
- スクリーンショットを撮って送れ
- アプリを再度インストールし直してみて
- アプリの環境設定から表示設定をリセットしてみて
- アプリの履歴?キャッシュ?フォルダを削除してみて
- ...などなど
いろいろ延々やりとりしても、一向にラチがあかず、問題は修正されないまま。向こうの開発・保守担当チームでは、この問題動作が再現できてないかのような口ぶりで、こちらの環境がおかしいんじゃないの風なことを匂わせてきて、もうアタマにきたので、オマエラには頼まん! 自分でなんとかするわ! って書いたのが今回のスクリプトです。
(いや、現象は再現するはずだろ。だってオレわざわざ同アプリのWindows版をクリーンインストールして、デモ用アカウントで新規ログインして試したけど、動作いっしょだったんだからさw)
方法
macOSに標準で付属している「スクリプトエディタ」で、次のようなAppleScriptを記述します。
tell application "System Events"
set theTargetW to window 1 of process "YourAppName"
set size of theTargetW to {1920, 1200}
set position of theTargetW to {1920, 960}
end tell
YourAppName
のところには、アプリの名前(メニューバーの左端、Appleマークのとなりに表示されてるモノ)を書きましょう。この例では、4Kディスプレイの右下1/4強のスペースにアプリのウィンドウ(のうち最前面にあるもの)を移動させます。
適当な名前でスクリプトをとりあえず保存して、「ファイル」メニューの「書き出す...」でファイルフォーマットを「アプリケーション」として書き出せば、Dockに置いといてワンクリックで起動できます。
ちなみに、マウス操作でお好みの位置とサイズにウィンドウを動かしたときに、その数値を知りたいと思ったので、以下のようなスクリプトも書きました。
set AppleScript's text item delimiters to {", "}
tell application "System Events"
set theTargetW to window 1 of process "YourAppName"
display alert "YourAppName's window" message ¬
"size: {" & (size of theTargetW) & "}; position: {" & (position of theTargetW) & "}"
end tell
YourAppName
のアプリが起動してない時などにこのスクリプト動かすと、エラーが出たりするけど、細かいことは見逃してくれw
設定について
上で書いたスクリプトの実行をしようとすると、一発目に「YourAppSetPosには補助アクセスは許可されません。」というようなエラーが出ます。
macOSの「システム設定」→「プライバシーとセキュリティ」で、「アクセシビリティ」に対する許可を設定してやる必要があります。
こんな感じ。
こんなお行儀の悪いヘッポコアプリ、ほかにあまりないだろうし、需要があるか知らんけど、何かの参考になれば...
Enjoy!