Xcode を起動することなく Mac および iOS アプリを開発して配送する方法

2026/07/14 3:22

Xcode を起動することなく Mac および iOS アプリを開発して配送する方法

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

本テキストでは、Xcode を一度設定した後の開封を不要とする堅牢で完全にヘッドレスの iOS アプリケーションの作成・デプロイワークフローが概説されています。シェルスクリプトによるライフサイクル全体のアオマティゼーションを通じて、開発者は

xcodebuild
コマンドラインツールを用いてコードをコンパイルし、
notarytool
によってビルドを保護し、
devicectl
を用いて物理デバイスにアプリを直接インストールします。セキュリティは、証明書ベースのキーチェーンおよび外部パスワードマネージャーの活用により維持され、プライベートキーなどの機密情報はバージョン管理システムへの投入を完全に防ぎます。本システムは XcodeGen を用いてプロジェクトを管理し、煩雑なローカルフォルダではなくクリーンな YAML 設定ファイル(
.yml
ファイル)によってプロジェクトを制御し、アドホックテスト版と公式開発者 ID リリースを自動的に区別します。一度設定されたリリーススクリプトは、アーカイブ、署名、認証化、スタプリング、インストールを含む厳格なパイプラインを実行し、沈黙する失敗を防ぐために堅牢なエラー処理(
set -euo pipefail
)を採用します。このアプローチは、チームが手動のマウス操作または GUI ウィンドウなしに、実際に動作するソフトウェアを効率的にデプロイするために安全で再現可能な CI パイプラインを構築することを可能にします。

Text to translate:

The text outlines a robust, fully headless workflow for creating and deploying iOS applications that eliminates the need to open Xcode after an initial setup. By automating the entire lifecycle through shell scripts, developers utilize command-line tools such as

xcodebuild
to compile code,
notarytool
to secure builds, and
devicectl
to install apps directly onto physical devices. Security is maintained by leveraging certificate-based keychains and external password managers, ensuring sensitive secrets like private keys never enter version control. The system employs XcodeGen to manage projects via clean YAML configurations (
.yml
files) rather than cluttered local folders, automatically distinguishing between ad-hoc testing versions and official Developer ID releases. Once configured, a release script executes a rigorous pipeline involving archiving, signing, notarizing, stapling, and installation, while using strict error handling (
set -euo pipefail
) to prevent silent failures. This approach empowers teams to establish secure, repeatable CI pipelines that deploy real software efficiently without any manual mouse interactions or GUI windows.

本文

Xcode GUI 不要!CLI だけで自動化する Apple アプリ開発ガイド

最近、「Xcode は使いにくい」という声がポッドキャストなどで上がっています。しかし、少しの事前準備を行えば、Xcode.app を起動せずに完全に自動化された macOS/iOS アプリ開発環境を構築できます。この記事は、一度だけ行うセットアップ手順と、その後「ヘッドレス(GUI なし)」でビルド・デプロイする方法を解説します。

基本コンセプト

  • Xcode.app のインストールは必須ですが、起動する必要はありません。内部ツール(
    xcodebuild
    ,
    notarytool
    など)は CLI から直接呼び出せます。
  • 初期設定: Apple ID シグアップ、証明書作成、ノタライゼーション資格情報の保存は、一度限りです。
  • 自動化スクリプト: 単一のスクリプト (
    release.sh
    ) で、アーカイブ→署名→ノタライズ→スタップリング→インストールの全工程を制御します。
  • 機密情報の安全: シーレット情報はキーチェーンに格納され、リポジトリ(Git)にコミットされません。

1. Xcode のインストールと設定

インストールの確認

Xcode をインストールした直後は、コマンドラインツールのパスが

/Library/Developer/CommandLineTools
に設定されている可能性があります。これを Xcode.app 内部のツールチェーンに変更する必要があります。

確認・変更コマンド:

# 現在のパスを確認
xcode-select -p

# パスが /Applications/Xcode.app... でない場合は修正
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer

NOTE

CommandLineTools
という名称は誤解を招きます。

  • /Library/Developer/CommandLineTools
    : 軽量パッケージ(clang, git 含む)。iOS SDK や
    notarytool
    含まれません
  • /Applications/Xcode.app/Contents/Developer
    : フルなツールチェーン。開発に必須。

XcodeGen のインストール

Xcode プロジェクトの自動生成・管理には

XcodeGen
を使用します。これにより、
.xcodeproj
フォルダ全体を Git に追跡せず、設定だけ(YAML ファイル)を管理できます。

brew install xcodegen

2. 一度限りの初期設定

このステップは初回のみ行います。これ以降はマウスを使わずに済みます。

2-1 ライセンスとコンポーネントの受け入れ

Xcode のライセンスをCLI から受け入れます。

sudo xcodebuild -license accept
sudo xcodebuild -runFirstLaunch

2-2 Apple Developer アカウントの登録

Xcode を一度起動して(または GUI ツール)、アカウントを追加します。

NOTE アプリを配布・ノタライズするには、有料の Apple Developer Programへの加入が必要です。 また、Gatekeeper(セキュリティフィルター)を通過させるにはアプリに「公证(ノタライゼーション)」処理を行っておくことが強く推奨されます。

2-3 開発者 ID 証明書の作成

出荷用

.app
を署名するための証明書を作成します。 重要:
Developer ID Application
Apple Development
は異なります。

証明書タイプ用途
Developer ID Application出荷用。Gatekeeper を通過し、他人の Mac でも動作するアプリ向け。
Apple Development開発環境用。自身の iPhone でのテストやローカルデバッグ向け。

証明書を作成すると、個人用キー(Private Key)がログインキーチェーンに格納されます。これらを削除しないでください

2-4 ノタライゼーション資格情報の保存

notarytool
が認証するためのプロフィールをターミナルから作成します。

# プロフィール名とチーム ID を設定してください
xcrun notarytool store-credentials App-Name \
  --apple-id "[email protected]" \
  --team-id YOUR-TEAM-ID
# ※プロンプトに応じてアプリ固有のパスワードを入力

重要な注意点

  1. プロフィール名の統一: 他アプリのプロフィールを使わず、独自の名称(例:
    App-Name
    )を使用してください。
  2. パスワードの種類: Apple ID のパスワードではありません。「アプリ固有のパスワード」が必要です。
    • appleid.apple.comSign-In & SecurityApp-Specific Passwords から作成してください。
  3. 期限切れへの対処: Apple ID パスワード変更時に旧パスワードは無効になります。エラー
    401 invalid credentials
    はパスワード更新後の対応を意味します。

ヒント: 1Password などに保管し、Claude Code など AI ツールと連携させることで、パスワード管理も自動化できます。


3. プロジェクト設定の用意

ローカル設定ファイル (
Local.xcconfig
)

チーム ID とバンドルプレフィックスなどの機密情報を

.xcconfig
ファイルに格納し、プロジェクトから分離します。

cp Local.xcconfig.example Local.xcconfig
# 以下の項目を編集してください:
#   BUNDLE_PREFIX     = your.real.prefix
#   DEVELOPMENT_TEAM  = YOUR-TEAM-ID

.gitignore
の追加

リポジトリに機密情報やビルド生成物を含まないようにします。

# .xcodeproj フォルダ全体を無視
.xcodeproj/

# ローカル設定ファイル(チーム ID 等)をバージョン管理外
Local.xcconfig
build/
*.xcarchive

4. デプロイ自動化スクリプト (
release.sh
) の作成

Xcode.app を起動せず、完全自動化を実現するメインのスクリプトです。以下は生成されたスクリプトの構造例です(AI に作成させる場合が推奨されます)。

スクリプトの流れ

  1. プレフライト:
    xcodegen
    とノタライプロファイルの存在確認。
  2. プロジェクト再生成: YAML 設定から
    .xcodeproj
    を生成。
  3. アーカイブ作成: Release ブィルドを
    .xcarchive
    に出力。
  4. 開発者 ID エクスポート: アーカイブを署名した
    .app
    に変換。
  5. ノタライゼーション: Apple サーバーでウイルススキャンと署名認証。
  6. スタップリング: 署名チケットを添着し、Gatekeeper 通過の準備。
  7. 検証とインストール:
    /Applications
    へのコピーと登録。
#!/usr/bin/env bash
# scripts/release.sh — Developer ID-signed, notarized MY-APP-NAME.app install
set -euo pipefail

# 設定変数
PROJECT="MY-APP-NAME.xcodeproj"
SCHEME="MY-APP-NAME-macOS"
APP_NAME="MY-APP-NAME"
TEAM_ID="YOUR-TEAM-ID"
NOTARY_PROFILE="${MY-APP-NAME_NOTARY_PROFILE:-MY-APP-NAME}"
BUILD_DIR="build"

# 実装詳細(アーカイブ→署名→ノタライズ→スタップリング→インストールのロジック)
# ... (略)

スクリプトの実行

一度

release.sh
を作成・修正すれば、以降は以下のようないくつかのコマンドだけで完了します。

  • 失敗時の挙動:
    set -e
    によりエラー時点で停止し、どこで失敗したかを報告します。
  • ローカルの高速テスト用コマンド:
    • 署名なしでビルド&テスト:
      swift test
      xcodebuild -project YOUR-PROJECT.xcodeproj -scheme YOUR-SCHEME \
        -destination 'platform=macOS' CODE_SIGNING_ALLOWED=NO build
      

5. AI エージェント向けマニュアル (
CLAUDE.md
)

自動化を確実に行うために、AI ツール(Claude Code など)に動作方針を記述します。

## Build commands
\`\`\`bash
# プロジェクト再生成
xcodegen generate

# テスト (署名なしで高速)
swift test

# ローカルビルド (署名なし: CI またはサニタチェック用)
xcodebuild -project YOUR-APP.xcodeproj -scheme YOUR-SCHEME \
    -destination 'platform=macOS' CODE_SIGNING_ALLOWED=NO build

# 本番リリース用コマンド
./scripts/release.sh   # archive → Developer ID → notarize → staple → install
\`\`\`

## Notes for Agent
- Ad-hoc builds (`CODE_SIGNING_ALLOWED=NO`) are fast but cannot be distributed. Use `./scripts/release.sh` for real distribution.
- Signatures and notarization credentials are stored in the login Keychain, NOT in git.

6. なぜ Xcode を開かなくて済むのか?(技術解説)

タスクGUI ワークフロー (マウス操作)HEADLESS ワークフロー (スクリプトのみ)
プロジェクト生成Xcode が
.xcodeproj
を管理
xcodegen generate from project.yml
ビルド⌘B / ランボタン
xcodebuild … build
アーカイブProduct → Archive
xcodebuild … archive
署名エクスポートOrganizer → Distribute
xcodebuild -exportArchive
ノタライズOrganizer アップロード
xcrun notarytool submit --wait
スタップリング(Organizer 内で自動)
xcrun stapler staple
インストールドラッグ&ドロップ
cp -R + lsregister
  • 署名の仕組み: 開発者 ID 証明書と個人用キーがログインキーチェーンに格納されており、
    xcodebuild
    が自動的に検出してバイナリを署名します。
  • 機密情報の安全性: パスワードや証明書を Git にコミットしません。すべて CLI ツールの標準機能で処理されます。
  • ノタライゼーションの位置づけ: 署名(作者の確認)とは別に、Apple がマルウェアを判定した際の「チケット(スタップル)」を添着するセキュリティプロセスです。

まとめ

このガイドに従ってセットアップを行えば、「Xcode を開く」という行為は不要になります。

  1. 初期設定: 一度の GUI 操作とパスワード入力。
  2. 日常的な作業:
    swift test
    release.sh
    の実行のみ。

残りの時間は、マウスを操作する代わりに、コードレビューや新規機能の開発に注力できます。最初の数時間を投資してスクリプト化すれば、その後の開発速度は劇的に向上します。

同じ日のほかのニュース

一覧に戻る →

2026/07/14 7:19

『アジア最浄の村』が日曜日観光客禁止に

## Japanese 翻訳: 2026 年 1 月以来、インディアのメガラヤ州にある約 600 人の居住者がいるモーリャン・オン(Mawlynnong)村では、「真の村の生活」を再建する目的として、日曜日の昼間の観光客に対する厳格な禁止措置を導入しています。1902 年に設立された教会が存在し、人口の推定 100% がクリスチャンであるこのコミュニティは、日曜日には単一の道路への入口を黒い金属製のゲートで閉鎖して、 uninterrupted な礼拝を保証しています。以前からほとんどの観光関連事業所が日曜日の営業停止を選択していました(レストランは 2 カ所のみ営業)ましたが、公式な禁止措置により、今では店舗や一日利用施設が完全に閉鎖されるようになっています。一泊予約を持つゲストはこの昼間の旅行禁止からの例外扱いで、ゲストハウスに滞在することができ、一方で地元のレストランや記念品販売店は引き続き閉鎖されています。住民は、村評議会の委員でもあるプリシウス・コングドプ(Precious Khongdup)を含むコミュニティの一致した支持を受けながら、この取り組みを文化のアイデンティティ、精神的なリズム、および 2003 年に「アジアで最も清潔な村」と命名されたり、2014 年にナレンドラ・モディ首相のクリーン・インディア・ミッションキャンペーンの際に全国的な注目を得たりした功績をもたらした規律を保持するために不可欠だと考えています。この決定は、観光客による妨害に対する具体的な懸念に対応しており、観光客が地面にプラスチック製の水ボトルを置き去りにするというバイラル化した事象などが挙げられ、これにより地元からは強い反発が生じていました。言語学の教授ヴィジャヤ・デブナス(Vijaya Debnath)を含む専門家は、このイニシアチブを称賛しており、清潔さを維持しつつ、村民の静かな一日の休息と祈りの必要性にも敬意を表していると評価しています。

2026/07/14 1:06

Apple が発表した新たな音声分析 API「SpeechAnalyzer」のベンチマークテストで、Whisper とその前代モデルと比較

## Japanese Translation: Apple の新しい SpeechAnalyzer API は、次期 OS 26 の一部として提供されるもので、英語の読み上げ音声に対する優れたオンデバイス音声認識を実現しており、特定ベンチマークコンテキスト内では従来のツールや人気が高い Whisper モデル(Tiny, Base, Small)を大幅に上回っています。この優位性は、M2 Pro チップなどの Apple ハードウェアで行われた厳密なローカルベンチマークを通じて証明され、オーディオを外部サーバーにアップロードすることなく、高速な処理速度——Whisper Small の計算時間の約 1/3——を実現することが示されました。清潔な LibriSpeech テストデータに対しては、従来の SFSpeechRecognizer API に比べて単語誤りを約 4 倍削減し(2.12% WER から 9.02%)、ノイズのあるデータに対しても同様の劇的な改善が見られました。この研究では、Inscribe のプロダクションコードパスと同一のテストハルネスを用い、Whisper の測定値は OpenAI が公開した値と比較しましたが、Whisper の相対的な不正確さは、これらのベンチマーク(アクセントのある音声、遠距離音声、または複数話者シナリオを含まない)に限定されたもの임을 指摘しました。重要なのは、すべてのテストが完全にオンデバイスで行われたことであり、従来の SFSpeechRecognizer もローカルで使用される場合でもクラウド処理にデフォルトで切り替わるという点です。これらの結果に基づき、Inscribe は製品ロジックを更新し、対応言語(現在約 30 のロケール)では SpeechAnalyzer を優先し、未対応の言語のみを Whisper に切り替えました。さらに、研究チームは Inscribe が SpeechAnalyzer でオーディオファイルを取り扱う際に重大なバグを見出し、生テキストデータを検証のために公開ダウンロード可能とする措置を講じました。これは、Apple エコシステム内のプライバシー重視かつ高パフォーマンスなオンデバイス AI 機能において大きな飛躍を意味します。

2026/07/14 7:03

クルードはただの「ミーズシックス」さんです

## Japanese Translation: 本稿では、`mr-meeseeks` という Claude Code プラグイン(`thephw/claude-meseeks`)を紹介する。このプラグインは、アイドル時間中に「Mr. Meeseeks」の音声クリップを再生し、ワークフローの速度を遅らせずしてユーザーエクスペリエンスを向上させる。非ブロック型のコンパニオンとして機能し、フィルタリングされた `Notification` イベント(および `UserPromptSubmit`)を利用して、「done」「asking」「feedback」といったカテゴリからランダムなクリップをトリガーする一方、背景エージェントの動作や認証の更新など自動的タスク中は無音で保持される。特に重要なのは、音声処理を別プロセスに分離することでプロンプト行がフリーズしないよう防止し、AI が待機中でもレスポンシブなインターフェースを保証することである。設定方法は柔軟であり、プラグインマーケットプレイスからのインストールまたはローカルリポジトリのクローンが可能で、事前構築済み `bin/` ディレクトリのバイナリ検出(自動)またはフォールバックとして `go build` が利用される。音声再生には Linux では特定のプレイヤー(例:`ffmpeg`/`ffplay`、`mpg123`)が必要だが、macOS では追加設定なしでネイティブに動作する。このプラグインは、「Mr. Meeseeks」の理念である「単一タスクを迅速に完了し、その後は『poof』として消える」という哲学に沿っており、長時間継続的なセッションを避けるように設計されている。ユーザーは受動的待機中に魅力的な聴覚体験を得ながら、`enableDone` などの設定フラグや `meeseeks play` といった手動 CLI コマンドを通じて完全な制御を保ち続ける。究極的には、このツールは待ち時間を没入感のある体験に変えつつ、パフォーマンスを損なったり複雑な設定を必要としたりしない。

Xcode を起動することなく Mac および iOS アプリを開発して配送する方法 | そっか~ニュース