Dev Guide / 2026 ・ No.01
Mac アプリ開発 入門ロードマップ
ゼロから、デスクトップのユーティリティを人に配れるようになるまで
公開
全体の地図 ── 8つのステップ
朱の枠が Mac ならではの部分。期間は1日1時間ほど進めた場合のおおよその目安です
「Mac で動く小さな便利ツールを、自分で作ってみたい」。
そう思った人が、何から、どの順で学べばいいのかをまとめました。
各ステップで押さえる知識と、手を動かす練習作品もあわせて紹介します。
何を作り、何で作るか
目標は「メニューバーやショートカットから呼び出せる、小さな便利ツール」。道具は Swift と SwiftUI で、足りないところだけ AppKit を足します。いきなり大作を目指さず、ステップごとに小さな作品を一つずつ完成させるのが近道です。
この記事で言う「ユーティリティ」は、たとえば次のようなアプリです。
- メニューバーに常駐する ── クリックひとつで使えるタイマー、クリップボード履歴、メモ
- ファイルをまとめて処理する ── 一括リネーム、画像の縮小、形式の変換
- ショートカットで呼び出す ── ランチャーや定型文の入力。作業の流れを止めない
なぜ Swift と SwiftUI なのか
Mac のアプリは Electron、Tauri、Flutter など他の技術でも作れます。Web の知識を活かせる、Windows 版も同時に作れる、という利点があります。ただ、常駐する小さな道具に限って言えば、Apple 純正の Swift と SwiftUI に分があります。
- 軽い ── 常駐させても、メモリや電池への負担が小さい
- Mac の作法にそのまま乗れる ── メニューバー、設定画面、ショートカット、ダークモード、macOS 26 からの新しいデザイン(Liquid Glass)まで、標準の部品で揃う
- OS の機能に直接届く ── ファイル、クリップボード、通知、ログイン時の起動などを公式の API で扱える
- 一次資料で学べる ── Apple の公式チュートリアルとドキュメントが、そのまま教科書になる
SwiftUI は「画面の見た目を宣言する」書き方で、Apple が今いちばん力を入れている UI の仕組みです。Mac には AppKit という歴史の長い仕組みもあり、SwiftUI で届かない細かいところを AppKit で補うのが今の標準的な組み立て方です。最初は SwiftUI だけで十分です。
ロードマップの全体
| STEP | 学ぶこと | 目安 | 練習作品 |
|---|---|---|---|
| 0 準備 | Mac と Xcode、Git | 1日 | 空のアプリを起動する |
| 1 Swift の基礎 | 変数・型・Optional・関数・構造体 | 2〜3週 | コマンドラインの単位変換 |
| 2 SwiftUI の基礎 | View・状態・レイアウト・リスト | 3〜4週 | 単位変換をウインドウに |
| 3 Mac らしさ | Scene・メニューバー・設定画面・ショートカット | 2〜3週 | メニューバーのタイマー |
| 4 データと保存 | 設定・JSON・ファイル・SwiftData | 2週 | 定型文(スニペット)帳 |
| 5 システム連携 | サンドボックス・権限・ログイン起動・クリップボード | 2〜3週 | クリップボード履歴 |
| 6 品質と仕上げ | デバッグ・テスト・アクセシビリティ・多言語 | 並行 | 作った物を磨く |
| 7 配布する | 署名・公証・App Store | 1〜2週 | 友人の Mac で開いてもらう |
期間は目安です。プログラミング自体が初めてなら、STEP 1 と 2 に倍かかっても普通です。そのステップの練習作品が動いたら次へ、を合図にしてください。
STEP 0 ── 準備と Xcode
Mac と Xcode(無料)があれば始められます。有料の Apple Developer Program は、人に配る段階(STEP 7)まで要りません。
用意するもの
| Mac | Apple シリコン(M1 以降)。2026年9月に出た Xcode 27 は Apple シリコンの Mac でしか動かず、macOS Tahoe 26.6 以降が必要です |
|---|---|
| メモリ・容量 | メモリは 16GB 以上、空き容量は数十 GB あると安心です(Xcode と関連ファイルが大きい) |
| Xcode | Mac App Store から無料で入手。コードを書く、画面を作る、実行する、配布する、が全部これ一つで済みます |
| Apple アカウント | 普段使っているもので OK。Xcode の設定でサインインしておきます |
| Git | 変更履歴の管理。Xcode に組み込まれています。GitHub のアカウントもあると便利です |
手元が Intel の Mac なら、ひとつ前の Xcode 26 までは使えます。これから買うなら Apple シリコン一択です。
Xcode の画面を知る
Xcode のウインドウ(模式図)
実際の画面を簡略化して描いています。各エリアは表示・非表示を切り替えられます
Xcode を開き、File › New › Project… から macOS › App を選ぶと、新しいアプリの雛形ができます。Interface は SwiftUI、Language は Swift のままで構いません。⌘R(または左上の ▶)で実行すると、何も書かなくても「Hello, world!」のウインドウが開きます。これが STEP 0 のゴールです。
- 左の一覧でファイルを選び、真ん中で書き、右のキャンバスで結果を見る。この往復が基本です
- 下のデバッグエリアには、print() の出力やエラーが出ます。赤いエラーは怖がらず、まず全文を読む習慣をつけてください
AI アシスタントとの付き合い方
Xcode にはコーディング用の AI が組み込まれていて、Xcode 27 では計画を立ててからコードを書き、ビルドやプレビューで結果を確かめる「エージェント」として動けるようになりました。便利ですが、学ぶ段階では「書かせる」より「説明させる」ほうが力になります。「このエラーはどういう意味?」「この行は何をしている?」と聞き、出てきたコードは一行ずつ読んで、分からない語は公式ドキュメントで確かめてください。
STEP 1 ── Swift の基礎
画面を作る前に、Swift という言語そのものに慣れます。ここを飛ばすと、SwiftUI のコードが「呪文」に見えてしまいます。
押さえる知識
- 定数と変数(let / var)── 基本は let。変える必要があるものだけ var
- 型と型推論 ── Int、Double、String、Bool。書かなくても Swift が推し量ってくれる
- Optional(?)── 「値がないかもしれない」を型で表す。if let / guard let で安全に取り出す。Swift で最初の山場です
- コレクション ── 配列(Array)、辞書(Dictionary)、集合(Set)
- 制御構文 ── if、switch、for-in、while
- 関数とクロージャ ── 引数と戻り値。「その場で渡す小さな関数」がクロージャで、SwiftUI のボタンはこれで動く
- 構造体とクラス ── struct は値型(コピーされる)、class は参照型(共有される)。SwiftUI では struct が主役
- 列挙型(enum)── 種類や状態を表す。switch と組み合わせて使う
- プロトコル ── 「この機能を持っています」という約束。View も Codable もプロトコル
- エラー処理 ── throws / try / do-catch。ファイル操作で必ず使う
- 非同期処理の入り口 ── async / await。「時間のかかる処理を待つ」書き方
Optional は最初に戸惑うところです。String? は「文字列か、何もないか」のどちらか。ないかもしれないものを、うっかり使ってしまう事故を、実行する前に防ぐための仕組みです。
並行処理は「入り口」だけで十分
Swift 6 からは、複数の処理が同時に動くときの安全性を、コンパイラが厳しく確かめるようになりました。最初は見慣れない警告に驚くかもしれません。ただ Xcode 26 以降で作った新しいプロジェクトは、コードを既定でメインスレッド(MainActor)で動かす設定になっていて、初心者がこの壁に当たりにくくなっています。STEP 1 では async / await が読めれば十分です。
教材
- The Swift Programming Language(公式・英語)── 言語の公式ガイド。冒頭の「A Swift Tour」を通読し、あとは辞書として引く
- 日本語版(有志による翻訳)── 英語がつらい間の助けに。最新版への追従は原文より遅れることがあります
- Xcode の Playground ── 数行書いてすぐ結果を見られる。文法の確認にちょうどいい
練習作品:コマンドラインの単位変換
Xcode で macOS › Command Line Tool を選ぶと、画面を持たないプログラムが作れます。「センチをインチに」「摂氏を華氏に」のような変換を、enum と switch、関数を使って書いてみてください。キーボードの入力を受け取る readLine() は Optional を返します。入力が数字でなかったら?を考えると、Optional の意味が腹に落ちます。
STEP 2 ── SwiftUI の基礎
SwiftUI では画面を直接書き換えません。「状態(データ)がこうなら、画面はこう」と宣言しておき、状態を変えると SwiftUI が画面を描き直します。この考え方に慣れるのが STEP 2 の目的です。
SwiftUI の考え方 ── 状態が画面を決める
ボタンは文字を書き換えず、状態を変えるだけ。あとは SwiftUI が描き直す
count に付いている @State が、「この値が変わったら画面を描き直して」という印です。ボタンは count += 1 をするだけで、表示を書き換える処理はどこにもありません。それでも数字は 1、2、3 と増えていきます。
押さえる知識
- View とモディファイア ── Text や Button などの部品に、.font() や .padding() を数珠つなぎに付けて見た目を整える。付ける順番で結果が変わるので注意
- レイアウト ── VStack(縦)、HStack(横)、ZStack(重ね)、Spacer、Grid
- よく使う部品 ── Text、Image(SF Symbols のアイコン)、Button、Toggle、TextField、Picker、Slider
- リスト ── List と ForEach で配列をそのまま行にする。行を見分けるための Identifiable もここで
- 状態の置き場所 ── その画面だけで使うなら @State、子の画面に渡して書き換えさせるなら @Binding、複数の画面で共有するデータは @Observable のクラスにまとめる
- 画面の切り替え ── Mac ではサイドバーつきの NavigationSplitView が定番
- プレビュー ── #Preview を書くと、実行しなくてもキャンバスに画面が出る
教材は「いつの情報か」を見る
検索すると、Apple の「SwiftUI Tutorials」が上のほうに出てきます。しかしこのページには今、「現在の SwiftUI や Xcode のやり方を示していない」という注意書きがあり、新しい Develop in Swift Tutorials を見るよう案内されています。SwiftUI は毎年書き方が少しずつ変わるので、記事でも動画でも公開日と、対象の Xcode のバージョンを確かめる癖をつけてください。
Develop in Swift は、Xcode の使い方から SwiftUI、データの保存(SwiftData)、テスト、配布までを、手を動かしながら順に学べる公式の教材です。題材は iPhone のアプリが中心ですが、SwiftUI の考え方と書き方は Mac でもほぼ同じです。まず SwiftUI の章を最後まで進め、Mac 特有の部分は次の STEP 3 で補います。
練習作品:単位変換をウインドウに
STEP 1 の単位変換に画面を付けます。TextField で数字を入れ、Picker で単位を選ぶと、結果の Text がその場で変わる。計算の部分は STEP 1 のコードを使い回せるはずです。画面と計算を別のファイルに分けておくと、あとでテストを書くときに楽になります。
STEP 3 ── Mac らしさ
iPhone のアプリを大きくしても、Mac のアプリにはなりません。メニューバー、複数のウインドウ、設定画面、キーボードショートカット。Mac の利用者が当たり前に期待する作法を身につけます。ユーティリティ作りの本番はここからです。
Mac アプリの骨組み ── App と Scene
WindowGroup を消して MenuBarExtra だけにすれば、メニューバー専用のアプリになる
押さえる知識
- App と Scene ── アプリの入口(@main の App)の中に、ウインドウなどの「場面」を並べる
- WindowGroup と Window ── 同じ種類のウインドウを何枚も開けるのが WindowGroup、1枚だけの専用ウインドウが Window
- Settings ── 置くだけで、アプリのメニューに「設定…」(⌘ ,)が現れる
- MenuBarExtra ── 画面右上のメニューバーに常駐するアイコン。macOS 13 から使える。.menuBarExtraStyle(.window) にすると、ポップオーバー風の小さな画面を出せる
- Dock に出さない ── Info.plist の LSUIElement を YES にすると、Dock とアプリの切り替えに出なくなる。メニューバー専用ツールの定番設定
- メニューとショートカット ── .commands で画面上部のメニューに項目を足し、.keyboardShortcut でキーを割り当てる
- ツールバーとサイドバー ── .toolbar と NavigationSplitView。ウインドウの初期サイズは .defaultSize で決める
- ドラッグ&ドロップとファイル選択 ── Finder からファイルを落とす(.dropDestination)、「開く」パネルで選ぶ(.fileImporter)
- AppKit との橋渡し ── SwiftUI にない機能は AppKit で。クリップボードの NSPasteboard、アプリやファイルを開く NSWorkspace など。NSViewRepresentable で AppKit の部品を SwiftUI に埋め込むこともできる
これだけで、メニューバーに時計のアイコンが出て、「Copy timestamp」を選ぶと現在の日時がクリップボードに入る道具ができます。NSPasteboard は AppKit の部品ですが、Mac では SwiftUI から直接呼べます。ウインドウを持たないアプリなので、終了用のボタンも自分で置いています。
Mac の作法を知る
Apple の Human Interface Guidelines(HIG)には、Mac のアプリがどう振る舞うべきかがまとまっています。メニューの並び、ショートカットの慣例(⌘ , で設定、⌘ W で閉じる、⌘ Q で終了)、ウインドウの扱い。標準の部品を標準どおりに使えば、見た目も操作も自然に Mac らしくなります。macOS 26 からの新しいデザイン(Liquid Glass)も、標準の部品なら新しい SDK でビルドするだけで反映されます。
練習作品:メニューバー常駐のタイマー
25分の作業と5分の休憩をくり返すポモドーロ・タイマーを作ります。メニューバーに残り時間を出し、クリックで開始と停止。設定画面(Settings)で時間を変えられるようにすれば、STEP 3 の要素がひと通り入ります。
STEP 4 ── データと保存
道具は「前回の続き」から使えてこそ。設定、ユーザーのデータ、ユーザーが選んだファイルを、それぞれ合った場所に保存する方法を学びます。
| 保存したいもの | 使うもの | 例 |
|---|---|---|
| 小さな設定値 | @AppStorage(UserDefaults) | 表示形式、機能のオン・オフ |
| まとまったデータ | Codable + JSON ファイル | 定型文の一覧 |
| 大量の記録を検索・並べ替え | SwiftData(macOS 14 以降) | 数千件の履歴 |
| ユーザーのファイル | FileManager、ファイルパネル | 一括リネームの対象 |
押さえる知識
- @AppStorage ── 変数に付けるだけで、値が自動で保存され、次に起動したときも復元される
- Codable ── 自分で作った struct を JSON に変換(エンコード)し、JSON から戻す(デコード)
- 保存場所 ── アプリのデータは「Application Support」フォルダへ。書類フォルダやデスクトップに勝手にファイルを作らない
- FileManager と URL ── ファイルの一覧、コピー、移動。消すときは「ゴミ箱に入れる」(trashItem)を基本にして、取り返しのつかない削除を避ける
- SwiftData ── @Model を付けたクラスを、データベースのように保存・検索できる。件数が増えたらこちら
- ブックマーク ── サンドボックスの中では、ユーザーが一度選んだフォルダでも、次に起動したときには読めなくなる。覚えておくには「セキュリティスコープ付きブックマーク」を保存する
練習作品:定型文(スニペット)帳
よく使う文章を登録しておき、メニューバーから選ぶとクリップボードに入る道具です。一覧は JSON で保存し、一覧をメニューで出すか小さなウインドウで出すかを、@AppStorage の設定で切り替えます。
STEP 5 ── システムとの連携
ユーティリティの価値は、OS の機能とどれだけ深くつながれるかで決まります。同時に、ここで「どこで配るか」を考え始める必要があります。できることが配り方で変わるからです。
App Sandbox ── アプリを箱に入れる
Mac App Store で配るアプリは、App Sandbox という「箱」の中で動くことが決まりになっています。箱の中のアプリは、ユーザーが選んだファイルや、許可された機能(ネットワーク、カメラなど)にしか触れられません。必要な機能は、Xcode の Signing & Capabilities で宣言します(この宣言を Entitlements と呼びます)。
利用者には安全、作る側には制約です。たとえば、他のアプリのウインドウを動かす、他のアプリの中身を読み取るといった道具はアクセシビリティの API を使いますが、これはサンドボックスの中では基本的に使えません。こうした道具は自分のサイトで配るのが一般的です。
押さえる知識
| やりたいこと | 使うもの | 注意 |
|---|---|---|
| ログイン時に起動 | SMAppService(macOS 13 以降) | 利用者がオンにする設定にする |
| クリップボードの読み書き | NSPasteboard | 変化の通知はないので、changeCount を定期的に見る |
| 通知を出す | UserNotifications | 初回に許可を求める |
| アプリ・ファイル・URL を開く | NSWorkspace | — |
| ショートカット App や Spotlight から呼ぶ | App Intents | 機能を「アクション」として公開する |
| どこからでも効くキー | グローバルホットキー(古い API か、それを包んだパッケージ) | 他のアプリとぶつからないキーに |
| 他のアプリのウインドウを操作 | アクセシビリティ API | 利用者の許可が必要。サンドボックス外で |
| 画面の中身を読む | ScreenCaptureKit | 画面収録の許可が必要 |
権限は「理由を見せてから」求める
macOS では、アクセシビリティ、画面収録、フルディスクアクセスなどを、利用者が「システム設定 › プライバシーとセキュリティ」で一つずつ許可します。アプリが勝手に許可を得ることはできません。なぜその権限が要るのかを画面で説明してから求めるのが礼儀であり、使い続けてもらえるかの分かれ目でもあります。
練習作品:クリップボード履歴
コピーした文字を最大50件まで記録し、メニューバーから選び直せる道具です。NSPasteboard の changeCount を一定の間隔で確かめ、変わっていたら履歴に足します。保存は STEP 4 の SwiftData、ログイン時の起動は SMAppService。パスワードのような機密をどう扱うかも考えてみてください(パスワード管理アプリが付ける「記録しないで」の印を見て、履歴に残さない、など)。
STEP 6 ── 品質と仕上げ
品質は最後にまとめて付けるものではありません。STEP 1 から並行して、少しずつ身につけます。
デバッグ
- まずは print() で値を出して確かめる。慣れたらブレークポイント(行番号をクリック)で止めて、その時点の変数を見る
- 止まったらデバッグエリアで po 変数名 と打つと、中身が表示される
- 動きが重い、メモリが増え続けるときは Instruments(Time Profiler、Leaks)で原因を探す
テスト
@Test を付けた関数がテストになり、#expect に「こうなるはず」を書きます(上の FileNamer は例として作った型です)。画面ではなく、計算やファイル名の組み立てのような「ロジック」からテストするのが始めやすい方法です。STEP 2 で画面と計算を分けておいたことが、ここで効いてきます。
使う人への配慮
- アクセシビリティ ── アイコンだけのボタンには .accessibilityLabel を付ける。一度 VoiceOver で操作してみる
- 多言語対応 ── 画面の文字列は String Catalog(.xcstrings)に自動で集まる。Xcode 27 では、エージェントに翻訳を頼むこともできる
- ダークモード ── 色は固定の値ではなく、システムの色やアセットカタログの色を使う
- アイコン ── Icon Composer でアプリのアイコンを作る
Git で履歴を残す
作品ごとにリポジトリを作り、動いたら小さくコミットします。壊しても戻れるという安心感は、そのまま学ぶ速さにつながります。
STEP 7 ── 配布する
自分の Mac で動くことと、人の Mac で動くことは別物です。Apple による署名と検査を経て、はじめて他の人の Mac で素直に開けるアプリになります。
配布の3つの道
②と③には Apple Developer Program への登録が必要(年99ドル。日本では円建ての価格が設定され、改定されることがある)
自分のサイトで配る(Developer ID + 公証)
Web サイトや GitHub から .dmg や .zip で配る方法です。公証(notarization)は、Apple のサーバーがアプリを自動で検査し(マルウェアが含まれていないか、署名に不備がないか)、合格の「チケット」を発行する仕組みです。App Store の審査とは別物で、ふつうは1時間以内に結果が返ってきます。
公証には、Developer ID 証明書での署名と、Hardened Runtime(実行時の保護)を有効にすることが必要です。アップデートを届けるには、Mac のアプリで広く使われているオープンソースの Sparkle を組み込むのが定番です。
Mac App Store で配る
利用者にとっていちばん安心で、決済や更新も任せられます。そのぶん、審査ガイドライン(2.4.5)に Mac 固有の決まりがあります。
- App Sandbox の中で動くこと
- 利用者の同意なしに、ログイン時に自動で起動しないこと
- 更新は App Store からだけ。独自の自動アップデートは不可
- 管理者権限を求めないこと、ライセンスキーを求めないこと
STEP 5 で触れたとおり、サンドボックスでは作れない道具もあります。作りたいものが決まったら、早めにどちらで配るかを決めておくと、あとで作り直さずに済みます。
練習作品:友人の Mac で開いてもらう
公証済みの .dmg を作り、友人に送って開いてもらいましょう。警告なく開けるか、説明なしで使い方が伝わるか。初めて触る人の反応は、最高のテストです。
続けるためのコツ
- 毎日少しでも触る ── 週に一度の1時間より、毎日の20分。手が Xcode を覚えます
- エラーは全文を読む ── 英語でも、一度は訳して読む。答えが書いてあることが多い
- 一次資料で裏を取る ── 検索で見つけた記事は、Apple のドキュメントで確かめる。古い記事ほど書き方が変わっている
- AI は家庭教師として ── 説明させ、比べさせ、最後は自分で書く。貼り付けたコードは、一行ずつ説明できる状態にしておく
- 自分が毎日使うものを作る ── 自分の不便を解く道具は、完成させる動機が続く
- 作ったものを公開する ── GitHub にコードを置き、短い説明を添える。次の仕事や仲間につながります
さらに学ぶなら
- WWDC のセッション動画 ── 毎年6月に公開される、新機能の一次情報。まずは「What's new in SwiftUI」から
- Hacking with macOS(SwiftUI Edition) ── Mac に絞った実践書(英語・有料)。作りながら学ぶ構成
- オープンソースの Mac アプリ ── GitHub で Swift 製のメニューバーアプリを探して読む。本物のコードは最良の教材です
結 — 一枚まとめ
- 目標は「メニューバーやショートカットから使う小さな道具」。道具は Swift + SwiftUI、足りない所は AppKit。
- STEP 0:Apple シリコンの Mac と無料の Xcode で始められる。有料登録は配るときまで不要。
- STEP 1〜2:Swift は Optional が山場。SwiftUI は状態を変えれば画面がついてくる。
- STEP 3:App と Scene。MenuBarExtra・Settings・メニューとショートカットで Mac らしく。
- STEP 4〜5:保存先の使い分けと、OS との連携。サンドボックスの制約が配り方を決める。
- STEP 6:デバッグ、テスト、アクセシビリティは最初から並行して。
- STEP 7:自分のサイトなら Developer ID と公証、App Store ならサンドボックスと審査。
- 教材は公開日と対象バージョンを見る。AI には書かせるより説明させる。
参考
- Apple — Develop in Swift Tutorials
- The Swift Programming Language (6.4)
- The Swift Programming Language(日本語版・有志訳)
- Apple — Xcode 27 Release Notes(動作要件・新機能)
- Apple — MenuBarExtra
- Apple — SMAppService
- Apple — Notarizing macOS software before distribution
- Apple — App Review Guidelines(2.4.5 Mac App Store の要件)
- Apple — Human Interface Guidelines
- Sparkle — software update framework for macOS
- Hacking with macOS: SwiftUI Edition
- Donny Wals — Setting default actor isolation in Xcode 26
開発ガイド No.1 — Mac アプリ開発 入門ロードマップ / 2026.09