【Xcode不要でMac専用アプリ自作】Swiftを丸暗記せず『AIを社内常駐PGにする分担術』とApp Sandbox・RAMDiskビルド実践録
フリーソフトや有料アプリを何時間も探し回っても、「あと 1 つこの機能があれば完璧なのに」「余計な広告や毎月課金はいらないのに」とガッカリした経験はありませんか?かといって自分で Mac アプリを作ろうとすると、巨大な Xcode の設定や Apple 独自の制限、新しい言語の文法暗記で心が折れてしまいがちです。
実は、あなたが「入力・処理・出力の仕様決め」と「テスト」の手綱さえしっかり握れば、Swift の文法を 1 行も丸暗記しなくても、AI エディタを「隣の席の常駐プログラマ」にして自分専用の軽量 Mac アプリを 10 分単位で作ることができます。本記事では、App Sandbox の壁を突破する『SwiftPM + .command 起動術』と、内蔵 SSD を一切削らない RAMDisk ビルド構成を実体験ベースで公開します。-
【開発言語のリアル】PowerBuilderとCOBOL『10進計算』から見る現代言語!Cポインタ嫌悪と宇宙機で生き残るForth・Fortran : 昔の C 言語のポインタ計算に嫌気がさした方こそ、現代の安全な開発環境と相性が抜群である理由を深掘りしています。
-
【16GB RAMDisk 爆速化術】64GBメモリの余剰でSSD寿命を守りビルドを30秒で終わらせる設計 : 本記事の後半で連携させる Mac 起動時 RAMDisk 自動マウントスクリプトのベース設計です。
-
【AI取扱説明書④】なぜ自動作業AIに丸投げすると暴走するのか?『81%止まれない欠陥・AI同士の勝手な結託』と5つの安全制御術 : AI に「いい感じに作って」と曖昧に丸投げすると失敗する理由と、人間側が握るべき安全制御の勘所です。
-
市販アプリやフリーウェアに帯に短し襷に長しな不満があり、自分専用の小さな Mac ツールをサクッと自作したい方
-
昔 COBOL や PowerBuilder、Visual Basic、SQL などで業務システムを組んだ経験があり、C 言語の生ポインタや複雑な IDE 設定はもう触りたくない方
-
「これから新しいプログラミング言語の入門書を 1 ページ目から勉強するべき?」と迷っている方
-
Swift ビルド時の大量の中間ファイル(
.build)で Mac 内蔵 SSD の寿命(TBW)を削りたくない方
わしは昔 COBOL や PowerBuilder ならバリバリ使いこなせたんじゃが、C 言語のポインタ(* や **)とシフト演算だけは暗号みたいで嫌になって辞めたクチなんじゃ……。今から Mac 用の便利ツールを作るのに、やっぱり Swift の分厚い文法書を買って丸暗記せんとダメかのう?
まったく暗記しなくて大丈夫です!むしろ COBOL や PowerBuilder で「画面の入力・計算ロジック・出力とテスト」を叩き込まれた方こそ、AI 時代で最強のシステムエンジニア(SE) になれるんです!実際に私が文法の勉強ゼロで Mac 専用アプリを次々作っているやり方をお見せしますね。
なぜ企業のAI開発は失敗し個人DIYは成功するのか
C言語の苦行とCOBOL・PowerBuilderの資産
昔、C 言語をかじって「プログラミングなんて二度とごめんだ」と感じた方の多くは、ロジックを考えるのが嫌いだったのではなく、ハードウェアのメモリ番地を人間が手作業で計算する「ポインタ」や、処理を軽くするための「シフト演算((data >> 4) & 0x0F)」という機械都合のパズル にうんざりしたはずです。少し番地がズレただけで冷酷に Segmentation fault で強制終了する世界は、本来やりたい「便利な道具を作る作業」とは無関係な苦行でした。
一方で、かつて PowerBuilder や COBOL を使いこなしていた方は、実は現代の開発とまったく同じアーキテクチャをすでに体験しています。たとえば PowerBuilder は、普段は中間コード(P-Code)を仮想マシン(PBVM 等の DLL)で動かしつつ、実行ファイル(.exe)をネイティブ出力するときは 裏側で一度大量の C 言語ソースコードを自動生成(トランスパイル)し、外部の C コンパイラを呼び出して機械語へ変換する という仕組みを採っていました。「人間は人間に分かりやすい画面と業務ロジックだけに集中し、泥臭い C 言語や機械語への翻訳は裏のエンジンに丸投げする」という発想そのものです。
AIを隣の席の常駐プログラマにする役割分担
いま多くの企業が AI 導入で巨額の予算を溶かして失敗している最大の原因は、「何を作るか(仕様)」と「正しく動いているか(テスト)」まで AI に丸投げしてしまうこと にあります。AI は魔法の杖ではなく、「コーディング速度だけは人間の 1,000 倍速いが、指示されたことしか分からない新人プログラマ」だからです。
逆に、かつての開発現場で 「社内の隣の席に常駐プログラマ(外注 PG)に座ってもらい、自分が SE として仕様を渡して作らせ、その場で動かしてテスト・検収する」 スタイルを経験した人なら、AI エディタ(Antigravity IDE や VS Code + Gemini 等)は最高の相棒になります。
| 開発の工程 | 従来の社内 SE × 常駐 PG 体制 | 現代のあなた(SE)× AI エディタ(PG)体制 |
|---|---|---|
| 要件・仕様決定 | SE が画面項目、計算式、例外時の動きを決める | あなたが日本語で入力・処理・出力のルールを指定する |
| コード記述・ビルド | 隣の席の常駐 PG が数日〜数週間かけて書く | AI が数秒〜数分で SwiftUI コードを書きビルドする |
| 単体・結合テスト | SE が境界値やエラー系を触って検収する | あなたが実機で触り、おかしな挙動を見つけて突き返す |
| 必要な言語知識 | PG に指示が通じる設計力(細かな構文暗記は不要) | 文法暗記は不要(気になる箇所だけ AI に解説させれば OK) |
このように役割を切り分ければ、炊飯の水加減を計算する自分専用ミニアプリから、CPU 各コアの負荷モニター、全アプリのバージョン一括点検ツールまで、「欲しいソフトが世の中にないなら 10 分で作らせる」という究極の日曜大工(マイツール開発)が実現します。
Xcodeの壁を越えるSwiftPMと起動スクリプト
App Sandboxの壁とSwiftPMの威力
Mac 向けのネイティブアプリ(SwiftUI)を作るとき、最初にぶつかりやすい壁が 「Xcode プロジェクトの重さ」 と 「App Sandbox(アプリの隔離制限)」 です。
Xcode で通常の Mac アプリ用テンプレートを選ぶと、App Store 提出を前提とした厳格な App Sandbox が最初から有効になります。これは他人に配布するアプリとしては安全な仕組みですが、たとえば「自分の Mac の /Applications フォルダに入っている全アプリのバージョン一覧を読み取りたい」といったシステム管理ツールを作ると、サンドボックスに阻まれてフォルダの中身すら読めません。
-
有料の Apple Developer Program(年間 99 ドル)は不要 : 自分の Mac の中で動かす自分専用ツールなら、無料の Command Line Tools(
xcode-select --install)だけでビルド・実行が完結します(※ブログ等で不特定多数に.appを配布する場合は Apple の公証がないと初回起動時に Gatekeeper 警告が出ます。また iPhone 実機への無料転送は 7 日間で期限切れになる制限がありますが、Mac 用の自分専用ツールには期限切れも一切ありません)。 -
Package.swift(Swift Package Manager)でテキスト管理 : 複雑な.xcodeprojを使わず、Package.swift1 枚とSources/フォルダだけで構成すれば、App Sandbox に縛られずローカルのファイルや API を自在に扱える SwiftUI ウインドウアプリが作れます。 -
Swift 6 の厳格すぎる並行処理エラー回避のコツ : 最新の Swift 6 モードではスレッド安全性の検査(Strict Concurrency)が非常に厳しく、小さな個人ツールでも AI が書いた非同期処理でコンパイルエラーが出やすくなります。
Package.swiftの 1 行目を// swift-tools-version: 5.9に指定しておくと、余計な型エラーに悩まされず一発で軽快にビルドが通ります。
全アプリの更新を一括判定する自作ツールの実例
実際に私が「フリーソフトを探しても納得いくものがないから」と AI に仕様を渡して作らせたお気に入りツールが、Mac 内の全アプリの更新有無をワンクリックで一覧表示する AppVersionChecker です。
仕様として AI に指示したのは、次のシンプルな入出力ルールだけでした。
/Applications内の.appバンドルを走査し、内部のContents/Info.plistから現在のバージョン(CFBundleShortVersionString)とアプリ名を取得する。- Mac App Store 経由で入れたアプリ(内部に
_MASReceiptがあるもの)は、Apple 公式のiTunes Search API(国コードJP)にバンドル ID を問い合わせて公開中の最新バージョンを取得する。 - Web から直接ダウンロードしたアプリ で自動更新フレームワーク
Sparkleを使っているもの(Info.plistにSUFeedURLがあるもの)は、その配信 XML(Appcast)を読みに行って最新バージョンを取得する。 - 現在値と最新値を比較し、新しいバージョンが出ている行にだけ 「更新ページを開く / App Store を開く」ボタン を表示する。
- 毎回ターミナルを開くのは面倒なので、デスクトップの
.commandファイル(カスタムアイコン付き)をダブルクリックするだけ でウインドウが立ち上がるようにする。
確認不可で更新ボタンが出た文字比較バグの教訓
このツールを最初に AI が書き上げて動かしたとき、「人間がテストを握ることの大切さ」が象徴的に現れる面白いバグが見つかりました。なんと、独自方式で外部から最新番号を取得できないアプリ(最新欄が 確認不可 と表示されている行)にまで、ズラッと「更新あり!」のボタンが出てしまったのです。
ありゃりゃ!なんで『確認不可』なのに、新しいバージョンが出とると勘違いしたんじゃ!?
AI がうっかり現在バージョンの "1.0" と最新欄の文字列 "確認不可" を そのまま文字コード順(辞書順)で大小比較 していたんです!文字コードでは数字の '1'(U+0031)より日本語の '確'(U+78BA)のほうが圧倒的に大きい値なので、「おっ、1.0 より大きい=最新版だ!」と判定していたんですね(笑)。
私が画面を見て 「最新が『確認不可』の行で更新ボタンが出ているよ」 と一言フィードバックしただけで、AI は即座に原因を特定し、「数値とドットで構成された有効なバージョン文字列のときだけ階層比較(compare(..., options: .numeric))を行い、確認不可 や 確認中... のときは絶対に更新ボタンを出さない」よう数秒で修正してくれました。
まさにこれが、「人間はコードの暗記ではなく、動かして違和感を見抜く検収(テスト)に集中する」 という分担の醍醐味です。
SSDを削らないRAMDiskビルドと飛び地整理術
.buildをRAMDiskへ自動リンクする仕組み
SwiftPM でアプリを何度もビルド・改良していると、各プロジェクトの直下に .build という隠しフォルダが作られ、数百 MB 単位の中間ファイルが毎回書き込まれます。これを内蔵 SSD の上で繰り返すのは SSD 寿命(書き込み総量)の面でもったいないですし、かといってホームディレクトリ直下などあちこちに「飛び地」の作業フォルダが散らばるのも管理が気持ち悪いですよね。
そこで私は、「ソースコードはすべて ~/Desktop/swift/ フォルダの 1 箇所に集約し、各プロジェクトの .build(一時生成物)だけをシンボリックリンクで 16GB の RAMDisk(メモリ上の超高速仮想ディスク)へ逃がす」 という構成に統一しました。
#!/bin/zsh
# ~/Desktop/swift/link_ramdisk.sh
# デスクトップ配下の全Swiftプロジェクトの .build を RAMDisk へ自動退避するスクリプト
set -eu
setopt nullglob
SWIFT_ROOT="$HOME/Desktop/swift"
RAM_BUILD_ROOT="/Volumes/RAMDisk/$USER/swift-build"
# RAMDiskがマウントされていない場合は安全のため何もしない
if [ ! -d "/Volumes/RAMDisk/$USER" ]; then
echo "RAMDisk が未マウントのためスキップしました。"
exit 0
fi
mkdir -p "$RAM_BUILD_ROOT"
for proj in "$SWIFT_ROOT"/*(/); do
if [ -f "$proj/Package.swift" ]; then
proj_name="${proj:t}"
target_dir="$RAM_BUILD_ROOT/$proj_name"
mkdir -p "$target_dir"
# 既存の .build がシンボリックリンクでなければ削除してリンクに置き換える
if [ -e "$proj/.build" ] && [ ! -L "$proj/.build" ]; then
rm -rf "$proj/.build"
fi
ln -sfn "$target_dir" "$proj/.build"
fi
done
この link_ramdisk.sh を、Mac 起動時に RAMDisk を作成するスクリプト(~/bin/create_ramdisk.sh)の末尾から自動で呼び出すようにしておけば、Mac を再起動しても全自動で RAMDisk 上にビルド領域が再構築 されます。
容量不足code28の罠とAGENTS.md長期記憶
この RAMDisk ビルド運用で実際に 1 度だけ遭遇したトラブルと、二度と忘れないようにした工夫も共有しておきます。
- ビルド中の
ioError(code: 28)エラーの正体 : ある日突然 Swift のビルドがioError(code: 28)で落ちたことがありました。Unix のエラーコード28はENOSPC(ディスクの空き容量不足) です。原因を調べると、同じ 16GB RAMDisk 上に置いていた一時ダウンロード用フォルダ(Downloads_RAM)に約 14GB の巨大データを入れっぱなしにしており、Swift が必要とする数百 MB の作業領域が足りなくなっていました。不要ファイルを空けた瞬間に一発で復旧しました。 AGENTS.mdで AI 自身に環境ルールを長期記憶させる : 新しい Swift ツールを AI に作ってもらうたび、人間が毎回「link_ramdisk.shも実行してね」と指示するのは面倒です。そこで~/Desktop/swift/AGENTS.mdというルールファイルを 1 枚置き、「このフォルダに新規 Swift プロジェクトを作成した際は、必ず AI 自身がlink_ramdisk.shを実行して.buildを RAMDisk へ向けること」 と明記しました。これでチャットが変わっても、AI が裏で勝手に SSD 保護設定まで済ませてくれます。
まとめ:欲しい道具は探すより10分で作る時代へ
かつて C 言語のポインタや複雑な開発環境の構築で遠ざかっていたとしても、今の時代は 「どういう道具が欲しいか」を明確に言葉にでき、動かしてテストできる人 が一番楽しくプログラムを作れる時代になりました。
- 文法の丸暗記は手放し、自分は「仕様決定(SE)」と「テスト検収」に専念して AI を常駐プログラマとして使う
- 自分専用の Mac ツールなら、App Sandbox に縛られない
Package.swift(SwiftPM)+.command起動で軽快に動かす - ソースは 1 つのフォルダにまとめ、
.buildは RAMDisk へ自動リンクして内蔵 SSD の摩耗をゼロにする
日常の中で「こんな小さな計算機やチェッカーがあったら便利なのに」と思ったら、ぜひ市販アプリを探し回る前に、AI エディタのチャット欄へあなたの仕様書を投げてみてくださいね!

▲ 面倒な構文書きやメモリ管理は相棒に任せて、人間も猫様ものびのび快適に過ごしましょう