第 IV
自動化と AI
スクリプトとスケジュール、AI 管理者、MCP、AI スタック。FrontierStack をコントロールパネルから「ひとりでに働く存在」へと変える 4 つの章。
第 12
スクリプト・cron・自動化
毎日使うコマンドを保存し、本物のシステム cron でスケジュール実行し、FrontierStack を Apple ショートカット・Siri・Mac の他の仕組みと連携。ワンクリックのスクリプトから、ハンズフリーの音声コマンドまで。
優れたサーバ管理者は、同じ数種類の作業を何度も繰り返します。バックアップを取る、キャッシュを温める、バックエンドを正しい手順で再起動する、vhost が思った通りのものを実際に配信しているか確認する。FrontierStack はそれぞれを保存済みスクリプトとして取り込み、ワンクリックで実行し、信頼できると判断したら cron に渡して無人で走らせます。そこからさらに外へ — Apple ショートカット、Siri、frontierstack:// URL スキーム、そしてアプリ自身がスケジュールで行うアクションへと広がります。
本章は自動化の機械的な側面 — スクリプト、スケジュール、macOS の自動化の入口 — を扱います。知的な側面、つまりこれらのスクリプトをあなたの代わりに書き・保存し・スケジュールする AI は、第 13 章です。ここで扱うものはすべて、AI 管理者が自身の監査済みツールを通じて操作できるため、両章は同じ仕組みを両端から説明しています。
12.1Scripts & Cron ペイン
サイドバーから Scripts & Cron を開きます。保存済みスクリプトのライブラリとスケジューラが 1 か所にまとまっています。上部の Saved Scripts セクションには保存した全スクリプトが、名前と本文の冒頭行とともに並びます。各スクリプトには 4 つのボタンがあります — Run(今すぐ実行)、Schedule(後述の cron に渡す)、Edit(エディタを開く)、そして削除のゴミ箱アイコン。Add Script… で新規作成します。
保存済みスクリプトは、アプリが解釈する断片ではなく、ディスク上の本物の実行ファイル(シェル・PHP・Python)です。分かりやすい名前と、目的を記したメモを付けておけば、半年後の自分(あるいはライブラリを走査する AI 管理者)が、何をするスクリプトかをひと目で把握し、正しいものを選べます。保存されたファイルそのものが実行されるので、手で試したものが、そのままスケジュール実行されます。
各スクリプトは既定の This Mac、ローカルの Docker コンテナ、または名前を指定した連携サーバを SSH 経由で対象にできます。資格情報が必要な場合、スクリプトはローカルの .env ボールトの名前付きシークレットを環境変数($DB_PASSWORD、"$SSH_SUDO_PASS")として参照します。アプリは実行時に実際の値を注入し、その値がクラウドモデルに届くことは決してありません(第 13 章)。
12.2cron でのスケジュール実行
Cron Jobs セクションは、本物のシステム crontab への分かりやすいフロントエンドです — アプリが独自に考えた別物のスケジューラではなく、何十年も Unix で無人作業を走らせてきた、まさにその cron です。各行はジョブの名前、スケジュールの平易な説明(FrontierStack が 5 フィールド構文を翻訳します)、実行するコマンドを表示し、有効/無効の切り替えと、Run(今すぐ実行)・Edit・削除のボタンを備えます。
保存済みスクリプトの Schedule、または任意コマンド用の Add Job… を押すとスケジュールビルダーが開きます。頻度(毎時・毎日の指定時刻・毎週)を選ぶと、FrontierStack が crontab エントリを書き込み、自身のジョブには # AC: コメントを付けて後から名前で見つけ・更新できるようにします。AI 管理者でも同様で、list_cron がジョブを読み、schedule_cron が作成・更新します(同名のジョブがあればその場で更新)。
完全に制御したい場合は、ペイン下部の Edit raw crontab を展開します。これはテキストエディタで開いた標準の crontab で、FrontierStack 管理のジョブは # AC: コメントとして現れるため、どの行がアプリの所有かが分かります。手で編集して Apply を押します。
FS_TRIGGER、FS_LOCATION、FS_DEVICE、FS_DISK…)を環境変数として受け取ります。時刻は cron、イベントはトリガーが担当します。12.3同梱のサンプルスクリプト
FrontierStack は、実績ある定番の管理スクリプトを小さな読み取り専用ライブラリとして同梱しています。あなたのスクリプトではなく — その場で編集はできません — が、どれも全ソースを読んで学び、自分のライブラリにコピーして手を加えられます。Mac の Web スタック(とくに旧 macOS Server バックエンド)の実地の癖を踏まえているため、自作の前に 1 つ読んでおくと不意打ちを避けられます。AI 管理者も list_sample_scripts と read_sample_script でまず読むので、その生成スクリプトも同じ苦労から得た知見を受け継ぎます。
| スクリプト | 機能 |
|---|---|
apache_real_docroot | vhost が実際に配信しているドキュメントルートを特定 — 設定が主張する場所ではなく、Apache が実行時に解決する場所。 |
apache_url_matrix | vhost 上のパス一覧の HTTP ステータスを、本物のホストヘッダーで検査して報告 — どの URL が健全かをひと目で確認。 |
fleet_file_diff | 1 つのファイルのチェックサムをフリート全体で比較し、設定ドリフト — ある 1 台が静かに他と食い違った箇所 — を発見。 |
macos_httpd_vhosts | macOS Server バックエンドの vhost → docroot マップをダンプ — その旧スタックが何を配信しているかを正確に把握。 |
macos_web_restart | macOS Server の Web バックエンドを正しい手順で再起動 — 雑な apachectl ではなく、正しい順序で。 |
node_healthcheck | 1 つの vhost のフリートドリフト/ヘルスチェックをノード横断で実施。 |
php_opcache_check | OPcache の状態を CLI と Web SAPI の両方について報告 — これらは別々に設定され、ずれやすい。 |
12.4Apple ショートカット・App Intents・Siri
FrontierStack はネイティブの App Intents を備えます — macOS の ショートカットアプリ、Spotlight、そして(いくつかは)話せる組み込み Siri フレーズとして現れるアクションです。ホットキー・メニューバー・フォルダアクションから起動するショートカットに組み込めます。Automator からも利用可能で(Automator はショートカットや AppleScript を実行できるため)。出荷時のアクション:
| アクション | 機能 | 組み込み Siri フレーズ |
|---|---|---|
| Run Server Script | 保存済みスクリプトを名前で実行。 | — |
| Start / Stop Service Group | グループ内の全サービスを一括で起動/停止。 | “Start my servers with FrontierStack” |
| Restart Service | Apache・Nginx・MySQL・PostgreSQL を再起動。 | “Restart a service with FrontierStack” |
| Restart Docker Container | 名前指定したコンテナを再起動。 | — |
| Get Local Health | ローカルヘルスの要約(サービスの up/down)を返す。 | “Check server health with FrontierStack” |
| Apply Sidebar Preset | サイドバーを保存済みプリセットに切り替える。 | — |
| Flush DNS Cache | macOS の DNS リゾルバキャッシュをフラッシュ。 | — |
| Send Notification | アラートチャネル経由で通知を送信。 | — |
| Ask Server Assistant | AI 管理者に普通の言葉で質問し、回答をワークフローに返す。 | “Ask FrontierStack…” |
カタログはさらに広く — Get Server Status、List Servers、List Docker Containers、Check a Website などもショートカット作成に利用でき、組み込みの Siri フレーズを持たないものも含めて使えます。
12.5スクリプトからアプリを操作する
App Intents は本物のショートカットアクションなので、macOS の shortcuts コマンドラインツールでシェルから呼び出せます — 保存済みスクリプト、cron ジョブ、Automator の「シェルスクリプトを実行」、あらゆるランチャの中で便利です。FrontierStack のアクションを一行のショートカットに包み、shortcuts run "My Shortcut" で呼び出して、スクリプトの他の処理と連鎖させます。
この組み立ては AI 管理者に任せられます。ショートカット経由でアプリを操作する自動化スクリプトを頼むと、list_app_intents を呼んで利用可能なアクションと各々の正確な shortcuts run 呼び出しを把握し、save_script でスクリプトを作成(または schedule_cron でスケジュール)します。ヒントではなく、完成して実行可能なスクリプトが手に入ります。
12.6スケジュールされたアプリアクション
cron ジョブはシェルコマンドを実行します。スケジュールされたアプリアクションはそれとは異なり、アプリ自身がスケジュールで行うタスクで、保存した資格情報と、あなたや AI 管理者が使うのと同じ監査済みツールを用います — 生のシェルコマンドではありません。連携サーバの再起動、アプリが制御するローカルサービスの開始・停止・再起動、DNS のフラッシュを時間割で行うのに使います。schedule_app_action で管理し、list_app_actions で一覧でき、ペインの Scheduled App Actions に現れます。作成の自然な方法は AI 管理者に頼むこと — 「web-03 を毎晩 3 時に再起動」— そして承認することです。
cron との重要な違いが 1 つあります。アプリアクションは FrontierStack が起動している間だけ実行されます。アプリを通じて動作するため、アプリが閉じている間に期限を迎えたものは取りこぼします。一方 cron は、アプリが開いていようといまいと、システムレベルで実行されます。何があっても起こさねばならないことは cron を、アプリ自身の資格情報とツールで行わせたいことはアプリアクションを選んでください。
12.7frontierstack:// URL スキーム
すべてのペイン・サーバ・サイト・コンテナ・Cloudflare ゾーンに frontierstack:// のディープリンクがあります。AppleScript、Automator のシェルステップ、ランチャ、あらゆるスクリプトランナーから、open frontierstack://pane/Security のような一行で、アプリを前面に出して目的のペインへ直行します。ヘッドレスでアクションを実行するのではなく、特定の場所でアプリを画面に出したいときに、FrontierStack を既存のワークフローへ組み込む最速の方法です。URL スキームの完全なリファレンスは第 18 章にあります。
12.8バックアップ・ログ・変更ログの自動エクスポート
定型自動化の最後のピースは、FrontierStack 自身が生成したファイルをスケジュールで Mac の外へ出すことです。Backups の概要にある Auto-export to a folder セクションは、生成された成果物を選んだ任意のフォルダへコピーします — オフサイト保全のための Dropbox フォルダ、または独自の後続ルールを駆動する Hazel 監視フォルダへ。3 つのフィードが組み込まれています:
- 設定バックアップ — 構成バックアップの zip。
- 変更ログ — アプリを通じて行われた変更の記録。
- アプリログ — FrontierStack 自身のログの zip。
各フィードに間隔(毎時・6 時間・12 時間・毎日・毎週)を設定し、保存先フォルダを選び、必要なら Empty after export をオンにして、コピー後にソースをローテートできます(変更ログとアプリログに便利。際限なく肥大しません)。Export now はフィードを即時実行し、各フィードは前回の結果を表示します。ファイルは選んだフォルダに FrontierStack-<feed>-<timestamp> として置かれます。
これで機械的な道具一式がそろいました。保存して実行するスクリプト、それをスケジュール実行する cron とアプリアクション、ホットキーや音声で起動するショートカットと Siri、どこへでも飛べる URL スキーム、結果を箱の外へ送り出す自動エクスポート。次章では、これらすべてをあなたの代わりに書き・配線できるオペレータを紹介します — AI 管理者です。
FrontierStack ユーザマニュアル · バージョン 1.0.0 · 第 12