MacのAEサーバーとは?仕組みと設定方法を徹底解説
複数のMacを使い分けていると、ちょっとした作業のためにわざわざ別のMacの前に移動するのは面倒です。例えば、別のMacで文書を印刷するだけでも、一度ファイルをコピーしてからそのMacにログインし直す必要がありました。これは、ファイルが手元のMacで開けない、あるいは必要なアプリが古くて動かないといった場合に起こります。
ファイルをいちいちコピーするのは手間がかかります。特に大量のファイルを扱う場合は尚更です。幸い、AppleはAppleScript(アップルスクリプト)とリモートApple Events(リモートアップルイベント)という技術を用意しており、同じネットワーク上の別のMacを手元から操作できるようにしています。これにより、席を立たずにiTunesで音楽を再生したり、メッセージアプリでメッセージを送ったり、メールを送信したりといった基本的なタスクをリモートで実行できます。
自宅やオフィスに複数のMacがある環境では、リモートアクセスが非常に便利です。「共有」機能の画面共有でもリモート操作は可能ですが、AppleScriptコマンドとAEサーバーを使う方が高速で、画面共有を起動する手間もありません。
Apple Event(アップルイベント)とは
Apple Eventは、Mac OSにおけるメッセージベースのプロセス間通信機構です。System 7で初登場し、それ以降のクラシックMac OS全バージョンとmacOSでサポートされています。Apple Eventは、「書類を開く」「ファイルを印刷する」といった「ハイレベルな」イベントを記述します。これは、以前のOSがサポートしていた「クリック」「キー入力」といった基本的なイベントとは一線を画します。
Apple Eventは、Mac OSのスクリプトシステムであるOSA(Open Scripting Architecture)、そしてその主要言語であるAppleScriptの基盤となっています。
技術的な仕組み
出発点はAEDescと呼ばれる、動的型付けで拡張可能なディスクリプタ形式です。これはデータ型を示すOSTypeコードと、型依存のデータブロックで構成されます。例えば、OSTypeコードinteは、データがビッグエンディアン形式の4バイト符号付き整数であることを示します。
様々な基本型の定義済みタイプコードに加え、2種類の構造化ディスクリプタ型が定義されています。
- AERecord(タイプ
reco): レコード型。各要素が一意のレコードフィールドID(OSType)と関連付けられます。 - AEList(タイプ
list): リストまたは配列型。
これらの内部構造は、再帰的にネストされたAEDescで構成されます。Apple Event Managerは、これらの構造を構築、内容抽出、型照会するためのAPIを提供します。
また、強制変換もサポートしており、AEDescをあるデータ型から別のデータ型へ変換できます。標準的な変換(整数と実数の間など)に加え、アプリケーション独自の強制変換ハンドラコールバックをインストールして、カスタムデータ型との変換を処理することも可能です。
Apple Eventそのものは、目的に応じたフィールドを持つAERecordです。さらに、Apple Event Managerによって定義済みの属性(レコードフィールドとは区別され、現在はイベントのパラメータと呼ばれます)を持ちます。これらは以下を指定します。
- イベントクラスとイベントIDによる、実行すべきアクション
- イベント送信先のターゲットアドレス(ローカルまたはリモートマシン上のプロセス)
- 処理に関する各種オプション
リモートマシンへの接続には当初AppleTalkが必要でしたが、Mac OS 9でTCP/IP接続もサポートされました。
Apple Eventを送信後、送信側は返信Apple Eventの受信を選択できます。これには、元のイベントの処理結果に関する情報(成功/失敗を示すエラーコード、要求された情報、その他適切な情報)が含まれます。
Apple EventはAppleEvent Object Modelの基盤であり、それがさらにOSAとAppleScriptの基盤となっています。2016年現在、Apple Event Manager APIの公式実装はCおよびその派生言語(C++など)で利用可能です。Objective-CとSwift向けの公式バインディングはCocoa APIを通じて提供されています。Perl、UserTalk、Ruby、Pythonなど他言語向けの非公式バインディングも存在します(制限の度合いは様々です)。
AEサーバー(AppleEvents Server)とは
アクティビティモニタなどで「AE Server」がバックグラウンドで動いているのを見かけ、「これは何?」と思った方もいるでしょう。
AEサーバー(AppleEvents Server)は、macOS上でリモートApple Eventsを処理するサーバープロセスです。これにより、他のMac上のアプリケーションがローカルコンピュータにApple Eventsを送信できるようになります。
設定はシステム設定 > 共有の「リモートApple Events」でオン/オフできます。また、macOSのアクセシビリティ権限パネルでも確認できます。
システム設定 > セキュリティとプライバシー > プライバシー > アクセシビリティ > AEServer
一見複雑に見えますが、仕組みはシンプルです。macOSに標準搭載のユーザーレベルスクリプトシステムであるAppleScriptを使うと、定型作業の自動化、アプリ機能の拡張、スタンドアロンアプリの作成などが、比較的簡単な言語で行えます。AppleScriptは、macOSおよび対象アプリケーションと、Apple Eventsというシンプルなメッセージングシステムで通信します。
AEサーバーの役割は、別のMacから送られてきたAppleScript(Apple Eventsとして送信される)を受信し、実行を認可し、実行することです。単にAppleScriptを送るだけでは不十分で、受信側のMacで「リモートApple Events」が許可されている必要があります。
リモートApple Eventsがオンになっていると、他のMacで実行中のAppleScriptが、あなたのMacをリモートで制御したり、書類を開いたり、印刷したり、アプリを起動したりといったタスクを実行できるようになります。
macOS Catalina以降での注意点
macOS Catalina以降では、リモートシステム上のプログラムを対象とするApple Events/AppleScriptは、そのリモートシステム上で同一ユーザーとして認証される必要があります。異なるユーザーで実行しようとするとprocNotFoundエラーが発生します。
任意のユーザーセッションでアプリをターゲットにできるようにするには、サーバー側のMacでターミナルから以下のコマンドを実行し、その後「共有」設定でリモートApple Eventsを一度オフにしてからオンにし直します。
defaults write /Library/Preferences/com.apple.AEServer RestrictAccessToUserSession -bool false
Apple Event Managerとは
Apple Event Managerは、OSA(Open Scripting Architecture)の一部であり、アプリケーションがApple Eventsを送受信し、自らの操作やデータをAppleScriptスクリプトから利用可能にするための機能を提供します。詳細なAPIリファレンスは「Open Scripting Architecture Reference」を参照してください。
Apple Eventは、複雑な操作とデータを指定できるプロセス間メッセージの一種です。単一アプリケーション内、同一コンピュータ上のアプリケーション間、ネットワークで接続された異なるコンピュータ上のアプリケーション間で、データ転送とイベントディスパッチの仕組みとして機能します。
アプリケーションは通常、他のアプリケーションにサービスや情報を要求したり、そうした要求に応じてサービスや情報を提供したりするためにApple Eventsを使用します。Carbonフレームワーク(Human Interface Toolbox)またはCocoaフレームワークでGUIを提供するすべてのアプリケーションは、Mac OSから送られてくる特定のイベント(アプリケーション起動、再開、書類を開く、書類を印刷、終了など)に適切に応答できる必要があります。
一部のApple Event Manager関数はスレッドセーフですが、それ以外はメインスレッドでのみ呼び出す必要があります。
Apple Event Managerを活用するテクノロジーの概要については「AppleScript Overview」を参照してください。Apple Eventsの扱い方(Mac OSから送られるイベントを含む)については「Apple Events Programming Guide」の「Responding to Apple Events」を参照してください。Apple Eventsで使用される4文字コードについては「AppleScript Terminology and Apple Event Codes Reference」を参照してください。
Apple Event Managerは、Core ServicesフレームワークのサブフレームワークであるAEフレームワークによって実装されています。通常、AEフレームワークに直接リンクするのではなく、それを含むCarbonフレームワークとリンクします。一部のApple Event定義(例: AEInteraction.h はHIToolboxフレームワーク内)はCarbonフレームワークのクライアントのみ利用可能です。
AEフレームワークはウィンドウサーバーへの接続を強制しないため、Apple Eventsを扱うデーモンや起動項目が、ログアウト後も動作し続けられます。
MacでリモートApple Eventsを許可する方法
Macは、他のコンピュータ上で実行されているアプリからApple Eventsを受け入れるように設定できます。Apple Eventとは、Mac上で実行されるタスク(例:「この書類を開く」「印刷する」)のことです。
リモートApple Eventsをオンにすると、別のMacで実行されているAppleScriptプログラムがあなたのMacとやり取りできるようになります。例えば、あなたのMac上にある書類を開いて印刷するといったことが可能です。
- Appleメニュー > システム設定 を選び、共有 をクリックします。
- リモートApple Events のチェックボックスをオンにします。
- イベントを送信できるユーザーを指定します:
- すべてのユーザー: このコンピュータのすべてのユーザーと、ネットワーク上の誰でもがイベントを送信できます。
- 次のユーザーのみ: 追加(+)ボタンをクリックし、イベント送信を許可するユーザーを選びます。「ユーザーとグループ」にはこのコンピュータのすべてのユーザーが、「ネットワークユーザー/グループ」にはネットワーク上のユーザーが含まれます。
MacでAEサーバーを有効にする手順
ネットワーク上の別のMacに指示を出すには、AppleScript(命令内容)とリモートAppleサーバー/AEサーバー(認可と実行)の両方が必要です。これを使えば、別のMacをシャットダウンさせたり、音楽を再生させたり、Webサイトを開かせたり、アラートを表示させたりできます。
AEサーバー(リモートApple Events)を有効にする手順は以下の通りです。
- 操作対象のMac(または自分のMac)で、Appleメニュー > システム設定 を開きます。
- 共有 をクリックし、リモートApple Events のチェックボックスをオンにします。
- イベント送信を許可するユーザーを指定します:
- すべてのユーザー: このコンピュータのすべてのユーザーと、ネットワーク上の誰でもがイベントを送信できます。
- 次のユーザーのみ: 追加(+)ボタンをクリックし、許可するユーザーを選びます。「ユーザーとグループ」はこのコンピュータのユーザー、「ネットワークユーザー/グループ」はネットワーク上のユーザーを指します。
以上で設定したユーザーが、あなたのMacにAppleScriptを送信できるようになります。ただし、AppleScriptを実行する際には、対象Macの管理者ユーザー名とパスワードでの認証が必要です。
⚠ セキュリティ上の重要な注意点
すべての共有機能と同様に、リモートApple Eventsは本当に必要な場合にのみ有効化してください。あなたのMacのIPアドレス、ユーザー名、パスワードを知っている悪意のある第三者が、情報を盗んだり、デバイスを乗っ取ったり、セッションを乗っ取ったりする可能性があります。別のMacに指示を出す必要がないなら、この機能はオフにしておくのが賢明です。不必要な攻撃経路を塞ぐことになります。
AEサーバーを無効化する方法
リモートAppleサーバーを無効にするには、以下のいずれかの方法で行います。
- GUIから: Appleメニュー > システム設定 > 共有 > リモートApple Events のチェックを外す
- ターミナルから: 以下のコマンドを実行後、Macを再起動する
/usr/bin/sudo /bin/launchctl disable system/com.apple.AEServer
AppleScriptの書き方と活用例
リモートAppleサーバーを有効にするのは第一歩です。次に、Macに何をさせたいかを記述したAppleScriptを書く必要があります。これには、Finder > ユーティリティ 内の スクリプトエディタ(Script Editor) または AppleScript Editor を使います。エディタを開いたら、ファイル > 新規 でスクリプトを作成します。
以下にいくつかの実用的なスクリプト例を示します。"eppc://IP Address of the target Mac" の部分は、操作対象のMacのIPアドレスに置き換えてください。
1. Macをスリープさせる
tell application "Finder" of machine "eppc://192.168.1.100"
sleep
end tell
2. ミュージック(旧iTunes)で再生する
tell application "Music" of machine "eppc://192.168.1.100"
play
end tell
3. ミュージック(旧iTunes)を停止する
tell application "Music" of machine "eppc://192.168.1.100"
stop
end tell
4. Safariを起動/前面に出す
tell application "Safari" of machine "eppc://192.168.1.100"
activate
end tell
5. Safariを終了する
tell application "Safari" of machine "eppc://192.168.1.100"
quit
end tell
これらのスクリプトを保存しておけば、必要なときに実行できます。実行時には、対象Macのユーザー名とパスワードの入力が求められます。
AppleScriptについては、Apple公式の「AppleScript Language Guide」や、Macに標準搭載の「スクリプトエディタ」のライブラリ(ファイル > ライブラリを開く)を参照すると、さらに多くの命令やサンプルが見つかります。
-
Macのキーチェーンパスワードとは?仕組みと変更・リセット方法を徹底解説
Macで「キーチェーンパスワード」の入力を求められたことはありませんか?「キーチェーンアクセス」やiCloudキーチェーンを使ったことがあれば目にしたことがあるはずですが、それ以外の場面でも表示されることがあります。そもそもMacが求めているキーチェーンパスワードとは何なのでしょうか?このパスワードは変更できるのか?忘れてしまったらどうなるのか? 本記事では、これらの疑問にお答えします。キーチェーンの基本、キーチェーンパスワードの役割、そしてMacでの活用方法まで、わかりやすく解説していきます。 キーチェーンとは? キーチェーンとは、アプリ、ウェブサイト、サーバーなどのユーザー名とパスワードを
-
MacのOption(オプション)キーとは?場所と使い方をわかりやすく解説
チュートリアルやマニュアルで「Optionキー」という表記を見つけて、「自分のキーボードにはそんなキーがない…」と戸惑ったことはありませんか?MacでOptionキーを探している方、PC用キーボードでMacを使っていてOptionキーがどこにあるのか気になっている方、そもそもOptionキーにどんな役割があるのか知りたい方——この記事では、そのすべての疑問にお答えします。 Optionキーがないのはなぜ? お使いのキーボードに「Option」という名前のキーが見当たらない場合、主に以下の理由が考えられます。 Apple製キーボードの中には、Optionキーの代わりに「Alt(オルト)」キーが