サイトアイコン Campsite7

AIとの検証スクリプトを「1行」で安全で楽にする|Python不要のOneShot標準を作った「PCにmacOSを」(その3)

そういうわけで、今回はもうマニアックすぎて普通の人はダメだと思うので……すいません(笑)

古いノートPCへのmacOS導入実験で、意外な問題が見つかりました。AIはコマンドを作るのは得意なのに、人間の手元で「1回で安全に実行できる形」にするのは案外難しいのです。そこで今回の経験から、AIが使い回せるスクリプト標準「OneShot v1.0」を作りました。

目標は単純です。ZIPを取得 → ターミナルに1行貼る → 必要ならYESで承認 → 結果をChatGPTに貼る。 普通の利用者にPythonやHomebrewの導入を要求せず、変更する箇所だけ最小限にします。

1. Python 3なんて入れたくない

HDMIの色を直すためのスクリプトをAIに作らせたとき、またPython 3が出てきました。Pythonを入れること自体は難しくありません。しかし、ユーザーの目的はHDMIを直すことであって、Python環境を構築することではありません。

作業の出発点となった実機の起動確認画面。これはOneShot実行結果ではなく、従来の手動確認の一場面です(説明用の加工画像)。

macOSに付属するBash、plutil、diskutil、ioreg、system_profiler、pmset、pbcopyなどで済むなら、そちらを先に使う。追加依存が必要なら、その理由を説明する。これを第一原則にしました。

ただし、標準の/bin/bashは新しいBashとは限りません。Bash 4以降の機能に依存しないなど、対象環境で動く書き方にする必要があります。

2. コピペ1行+結果自動コピーに統一する

毎回ユーザーが長いログを選択してコピーするのは無駄。画面に表示しつつTXT保存、最後にクリップボードへコピーする形を標準にしました。ZIPに入ったシェルスクリプトを、解凍操作なしで実行する形式です。

unzip -p ~/Downloads/Example.zip Example.sh | bash

このとき注意するのは、標準入力がスクリプト本文に使われていることです。途中の確認質問を通常のreadで行うと入力が読めません。端末から聞く場合はread ... < /dev/ttyを使います。

画面表示と保存はtee、コピーはpbcopy。例えば、読み取り専用コマンドなら次の1行で成立します。

{ sw_vers; system_profiler SPDisplaysDataType; } 2>&1 | tee ~/Downloads/mac_check.txt | pbcopy

ただし上の短い例は、実行中の内容を直接画面に残しません。OneShotの正式テンプレートでは、画面表示とTXT保存をしたあと、TXTからpbcopyへ送り、終了コードも確認するようにしています。

3. 変更したか、動いたか、区別する

音声の例が分かりやすいでしょう。AppleALCがロードされても音声デバイスが出ない、設定を書き換えたが再起動していない、再起動したら実際に音が鳴った──これは全部違う段階です。

ラベル意味
READ_ONLY_PASS読み取り診断に成功
PATCH_APPLIED設定値を変更し、読み返し確認
ALREADY_APPLIED既に期待値なので変更なし
FUNCTION_TEST: NOT_TESTED再起動後の実機動作は未確認
FUNCTION_TEST: PASS利用者が目的の実動作を確認

HDMIではALREADY_APPLIEDが出ました。これは「設定がある」の合格であって「紫色が直った」という合格ではありません。ここを混同しないだけで、作業履歴がずっと信頼できるものになります。

4. 危険な操作ほど、小さく・戻せるように

EFIの更新には、まちがえると起動不能になるリスクがあります。実機のディスクIDとパスを確認し、変更先を一意に特定し、バックアップを作成し、編集対象をできるだけ小さくします。複数箇所を同時に直さないこと、変更前に現値を読むこと、競合したら停止すること、元へ戻す方法を記録することを必須にしました。

設定を変える前に現値を確認することが重要。画像はUEFI設定の参考例で、OneShotによる更新処理の画面ではありません(説明用の加工画像)。

スクリプトが「実行できた」と「安心して運用できる」も別。ZIPの検査unzip -t、シェル構文の検査bash -n、変更後の値の読み返し、ユーザーによる実機テストの順に判定します。構文チェックPASSだけを実機PASSとは呼びません。

5. OneShot v1.0の基本設計

今回は「AI向けOneShot作業スクリプト標準 v1.0」として、次の4点をまとめました。このキットは今回の作業用に生成したもので、汎用ツールとしてのMac実機検証はまだです。

ファイル目的
OneShot_Standard_v1.md作業判断と合格条件の基準書
OneShot_Template.shAIが重要部分だけ編集する雛形
OneShot_ReadOnly_Example.shmacOS情報取得の読取専用サンプル
build_oneshot_zip.sh構文チェックとZIP化の補助

テンプレートでAIが変更すべき場所を、(1)タスク名・目的、(2)処理本体、(3)確認処理に限定しています。初期状態は読取専用。システムを書き換える場合に必要な認証、バックアップ、同意確認、復元処理は、用途ごとにAIが具体的に設計し、人間が確認する仕組みです。基準書を付けたからといって、任意の変更処理が自動的に安全になるわけではありません。

工程別:使ったモジュール・ツールと参照先

OneShotは既存のmacOS標準ツールを組み合わせる設計です。最初の4件は今回作成したファイルで、外部公開の配布製品ではありません。Google Driveの原本・ZIPは閲覧権限が必要です。残りは標準ツールの仕様・説明へのリンクです。

工程 名前 説明・実際の扱い 開発元・資料URL
基準書 OneShot_Standard_v1.md 人間とAIの分担、安全確認、設定と実機の成否区別を記した原本。 原本・キット(Drive)
スクリプト雛形 OneShot_Template.sh AIが目的・処理・確認の箇所を埋めるBash雛形。OneShotキットZIP内。 原本・キット(Drive)
読取専用の例 OneShot_ReadOnly_Example.sh macOS情報を取得する読み取り専用の雛形実例。キットZIP内。 原本・キット(Drive)
構文・配布検査 build_oneshot_zip.sh Bash構文検査とZIP生成を補助するスクリプト。キットZIP内。 原本・キット(Drive)
実行基盤 /bin/bash macOS標準のシェル。Bash 4以降の機能を要求しない設計。 公式ページ
設定点検 plutil EFIなどに使うplistの確認・処理。macOS標準コマンド。 コマンド仕様
対象ディスク確認 diskutil デバイス・パーティションとマウント状態の確認。macOS標準コマンド。 コマンド仕様
機器構成確認 ioreg macOSのI/O Registryを表示して機器の属性を調べる。 コマンド仕様
動作確認 system_profiler GPU・画面・ソフトウェア構成などの情報を取得する。 コマンド仕様
電源状態確認 pmset スリープや電源管理の設定・状態の確認に使用。 コマンド仕様
報告をコピー pbcopy 保存した結果テキストをクリップボードへ転送する。 コマンド仕様
ファイル照合 shasum 作業前後のファイルが一致するかSHA-256で検証する。 コマンド仕様

6. AIに渡す依頼文も定型化

添付のOneShot標準とテンプレートに従って、目的「○○」の作業スクリプトを作成してください。macOS標準ツールを優先し、Pythonやbrewの導入を前提にしないでください。ZIP、解凍不要の実行1行、危険時の停止、変更時のバックアップと復元、画面+TXT+pbcopy、設定PASSと実機PASSの区別、構文とZIP検査結果を付けてください。

これなら、次のAIは毎回「どういう形式にするか」を考えず、目的に必要な処理だけ考えればよい。ユーザーから「Python 3は入っていない」などのフィードバックがあったら、その場しのぎの追加修正に走らず、目的・既存環境・最小依存という元の基準に戻って組み立て直すことにします。

7. 便利さよりも、破壊しないこと

今回の教訓は、AIの自動化を増やせば無条件に便利になるわけではない、ということでした。実機と一致しないEFIを編集する、Pythonの導入に話が脱線する、設定変更だけで問題解決と誤判定する。こうしたことを減らすには、AI側に短い共通作法を持たせる方が効きそうです。

一般の利用者は、コマンドの中身を毎回検査する専門家である必要はありません。ただしディスク初期化・EFI更新・ファームウェア操作などは、AIのスクリプトであっても必ず対象とリスクを確認する。ここは手軽さより安全を優先します。

シリーズを読む: その1|Ventura導入まで / その2|U938/Sの実用化と未解決の不具合

作成日:2026年10月26日。雛形はシェル構文・ZIP整合性および模擬環境での出力動作まで検査済み。対象Macでの実行は未検証。後日更新する可能性があります。

モバイルバージョンを終了