
Apple デベロッパ向けツールとテクノロジーを大幅強化
WWDC25で発表された主要な進化(for エンジニア+デザイナー)

はじめに
Appleは2025年6月9日、デベロッパ向けの年次イベントWWDC25にて、開発ツールとテクノロジーの大幅な強化を発表しました。
今回の発表の中心は、Liquid Glassデザイン、Apple Intelligenceモデルへのアクセス、Xcodeでの大規模言語モデル(LLM)の統合、そしてプラットフォーム全体にわたる優雅な新しいソフトウェアデザインの導入です。
これらの進化は、デベロッパがこれまで以上に美しく、インテリジェントで魅力的なアプリ体験を迅速かつ自信を持って構築できるよう支援することを目的としています。
また、iOS 26やmacOS Tahoe 26など、次期OSのバージョン表記が西暦基準に変更されることも発表されました。
本記事では、WWDC25で発表された数多くの新機能の中でも、特にモバイルアプリエンジニアにとって重要な以下の点に焦点を当てて詳しく解説します。
- Liquid Glassデザインの紹介
- 開発を加速するXcodeとSwiftUIの進化
- UI以外の変更に伴うSwift、SwiftUI、Xcodeの新機能(StoreKit、App内課金APIの改良、Swift言語自体の進化、並行処理とパフォーマンスの向上など)
- ゲーム、アクセシビリティにおける機能強化
Liquid Glassデザインの紹介

概要と特徴
Appleは、iOS 7以来となる大規模なデザイン刷新として、Liquid Glass と呼ばれる新しいソフトウェアベースの素材を採用した優雅なデザインを発表しました。
Liquid Glassは、ガラスの光学的特性と流動性を組み合わせて構築されており、コンテンツへの注目を高め、より表現豊かで楽しいアプリ体験を可能にします。
日常的に使用するボタン、スイッチ、スライダ、テキスト、メディアコントロールなどの小さなUI要素から、アプリ操作のためのタブバーやサイドバーといったより大きな要素まで、幅広く適用されます。
UIの丸み、浮遊感、奥行き、ハイライト、影の動的制御など、細部まで作り込まれており、アプリ内のコントロール、ツールバー、ナビゲーションも再設計され、四隅に丸みを持たせたデザインに変更されます。
特に、iOS 26のタブバーは、ユーザーがスクロールすると縮小し、再びスクロールした瞬間に流れるように拡大するといった、動的な変化を見せます。
Liquid Glass の特徴まとめ
Liquid Glass の特徴をまとめると以下のことがいえます。
- 動的な光の表現: 周囲の光を反射・屈折させ、コンテンツへの注目を高めるように動的に変化
- 階層的な表現: 複数の層のLiquid Glassで表現され、深さと立体感を演出
- デバイス適応型: 固定(Fixed)、カプセル(Capsule)、同心円(Concentric)という3種類の形状を使い分け
- 全プラットフォーム対応: iOS 26、iPadOS 26、macOS Tahoe 26、watchOS 26、tvOS 26に導入
具体的なメリット
Liquid Glassによるメリットは以下のとおりです。
- 表現力の向上: より豊かで楽しいアプリ体験を提供可能
- 統一感のあるUI: Appleプラットフォーム全体で一貫した体験を確立
- 応答性の改善: ナビゲーションの遷移がより滑らかで中断可能に
Liquid Glassを適用するには
開発者がLiquid Glassを適用する方法は簡単です。
基本的には、独自のUIを使用していない限り、アプリを新しいXcodeでリビルドするだけでLiquid Glassデザインが適用されるようです。
更にカスタムビューにおいても明示的にLiquid Glassエフェクトを適用する場合は、以下のコードのように .grassEffect()
を追加するだけで適用されるようです。
// 基本的なLiquid Glassエフェクトの適用
struct ContentView: View {
var body: some View {
VStack {
Text("Hello, Liquid Glass!")
.padding()
.glassEffect() // 新しいモディファイア
Button("Action") {
// アクション
}
.buttonStyle(.glass) // ガラススタイルのボタン
}
}
}
// カスタムビューへのLiquid Glass適用
struct CustomGlassView: View {
@State private var isHighlighted = false
var body: some View {
RoundedRectangle(cornerRadius: 20)
.fill(Color.clear)
.glassEffect(
intensity: isHighlighted ? 1.2 : 1.0,
blur: 8
)
.onTapGesture {
withAnimation(.spring()) {
isHighlighted.toggle()
}
}
}
}
開発を加速するXcodeとSwiftUIの進化
SwiftUI
Liquid Glassの実現と最適化のために、開発ツール群にも多くの機能強化が施されています。


ToolbarSpacer
を使用することで、ツールバーのグループ化したセクションを分けたり調整できるようになりました。
// ToolbarSpacerを使用したツールバーレイアウト
.toolbar {
ToolbarItemGroup(placement: .primaryAction) {
UpButton()
DownButton()
}
ToolbarSpacer(.fixed, placement: .primaryAction)
ToolbarItem(placement: .primaryAction) {
SettingButton()
}
}


.searchable
を使用した検索バーは、iPhoneは画面下部に自動で配置される。
TabViewの中に、Tab(role: .serch)
を記述すると、他の項目から独立して、自動で折り畳まれる検索ボタンを設置できるようです。
// TabViewを使用した検索バーレイアウト
struct HealthTabView: View {
@State private var text: String = ""
var body: some View {
TabView {
Tab("Summary", image: "heart") { ... }
Tab("Sharing", image: "share") { ... }
Tab(role: .search) { ... }
}
.searchable(text: $text)
}
}
その他、ToggleやPicker、Sliderなども、そのままでLiquid Glassが適用されることがわかります。

Toggle

Picker

Slider
SwiftUIに WebView
が追加されました。

これまではUIKitのWebViewを埋め込む必要がありましたが、新しい WebPage
オブジェクトを使用することで、ページの読み込み状態やタイトル、URLなどを監視することができ、ページ遷移やリロードもコードから制御可能になるということです。
import SwiftUI
import WebKit
struct InAppBrowser: View {
@State private var page = WebPage()
var body: some View {
WebView(page)
.ignoresSafeArea()
.onAppear {
page.load(URLRequest(url: sunshineMountainURL))
}
}
var sunshineMountainURL: URL {
URL(string: "sunshineMountainURL")!
}
}
その新たなSwiftUIの WebView
は以下の機能にも対応しています。
- カスタムURLスキームのハンドリング
- カスタムUserAgentの設定
- JavaScriptの実行
Xcode 26
Xcode 26には、デベロッパがアイデアを現実にするのに役立つインテリジェンス機能と体験が詰め込まれています。

大規模言語モデル(LLM)をコーディング体験に直接結びつけ、コードの記述、テスト、ドキュメンテーション、デザインの反復、エラー修正などを支援できるようになります。
XcodeにはChatGPTへの対応が組み込まれており、デベロッパはアカウントを作成することなくChatGPTを使い始めることができます。
また、他のプロバイダのAPIキーを使用したり、Appleシリコン搭載のMacでローカルモデルを実行したりして、ニーズに最適なモデルを選択することも可能とのことです。

コーディングツールは、デベロッパのコードのどこからでもアクセスでき、プレビューやプレイグラウンドの生成、問題の修正といったアクションの候補を提供し、特定のプロンプトをインラインで処理できます。
新しいPlaygroundマクロは、あらゆるコードの反復処理を迅速に実行できる機能を提供します。

Previewsと同様に、ドキュメントにインラインでPlaygroundを追加でき、コードの実行結果がそれぞれのキャンバスタブに表示されます。Previewのような機能が気軽に使えるイメージですね。
公式動画では、#Playgroundマクロをデバッグとして活用し、グランドキャニオンの位置がおかしいことから、緯度経度の値を調べて、経度の符号がプラスであるべきところがマイナスになっていること突き止める例が紹介されていました。
UIオートメーション記録機能は、まったく新しいコード生成システムによって強化されました。
これにより、UIテストの作成が大幅に簡単になります。

画面右のシミュレーターを操作するだけで、そのとおりの動作をするコードを生成してくれます。
要するに実際に動かして、その手順書を自動的に作ってもらうということですね。
テストが失敗した場合、テストレポート内のAutomation Explorerでテスト全体のビデオ録画を確認でき、識別可能な要素に関する属性を事後的に精査し、正しいコードスニペットを生成して問題の修正を支援するということです。

Xcode 26は、Swiftコードの音声入力や、Xcodeインターフェースの完全な音声操作、音声コントロールのサポート強化など、デベロッパが集中力と生産性を維持するための追加機能を搭載しています。
SwiftUIのパフォーマンス最適化
SwiftUIでは、アプリのパフォーマンスを大幅に向上させるための改善が施されました。
Instruments 26に導入された新しいSwiftUI Instrumentは、SwiftUIアプリのパフォーマンス問題を特定するための次世代ツールです。
ビューボディの更新や長時間かかるRepresentableの更新など、パフォーマンスに影響を与える可能性のある箇所をオレンジ色や赤色でハイライト表示します。

特に、「Cause & Effect Graph(因果関係グラフ)」は、ビューの更新がなぜ発生したのかを理解するのに役立ちます。


このグラフは、ユーザー操作(ジェスチャ)からステートの変化、そして最終的なビューボディの更新に至るまでの原因と結果の関係を視覚的に表示し、不要な更新を特定するのに役立ちます。
すべてのプラットフォームにおいて、リストの読み込みと更新速度が向上しました。


macOSでは、10万項目を超えるリストの読み込みが6倍、更新が最大16倍高速化されています。
また、iOSとmacOSにおけるユーザーインターフェイスの更新スケジュールが改善され、アプリの応答性が高まり、高いフレームレートでのスクロール時にもコマ落ち(ヒッチ)が発生しにくくなります。
Swift 6.2
Swift 6のStrict Concurrencyチェックを基盤に、Swift 6.2はシングルスレッドのコード記述が簡素化されます。
具体的にはモジュール内のすべての型に暗黙的に@MainActorアノテーションを付与します。
@MainActorがSwiftUIのコンパイル時のデフォルトであるため、開発者はほとんどの場合、アプリの機能構築に集中でき、並行性についてあまり考える必要がなくなります。
コードに並行性のアノテーションを明示的に付与しなくても、自動的に安全になります。
もし既に@MainActorアノテーションを使用しているアプリがあれば、削除できる可能性があります。
パフォーマンス、並行性、C++、Java、JavaScriptなど他の言語との相互運用性を強化するパワフルな機能を導入します。
アプリ開発者がアプリ内課金やサブスクリプションをもっと簡単に、そして高度に管理できるように、StoreKit 2が大幅に強化されました。
なお、StoreKit 1は非推奨となり、開発者はStoreKit 2への移行が強く推奨されています。
StoreKit 2は、自動的なトランザクション検証や改善されたAPI設計により、実装の複雑さを軽減し、セキュリティを強化する多くの利点を提供します。
主なポイントは次のとおりです。
AppTransactionやTransaction、RenewalInfoといった購入情報に新しい項目が追加されました。
- AppTransaction
- appTransactionID
- 同じAppleアカウントからのアプリダウンロードをファミリーシェアリングの場合でもユニークに識別できるようになります。
サーバー側でゴチャゴチャしなくても顧客の追跡がすごく楽になりそうです。
- 同じAppleアカウントからのアプリダウンロードをファミリーシェアリングの場合でもユニークに識別できるようになります。
- originalPlatform
- ユーザーが最初にアプリを購入したプラットフォーム(iOS、macOSなど)がわかるので、ビジネスモデルを変更する際などに役立ちます。
- appTransactionID
- Transaction
- Transaction.currentEntitlement(for:)の進化
- ユーザーがファミリーシェアリングなどで複数の方法で同じ製品の利用資格を持っている場合を考慮し、非推奨となったTransaction.currentEntitlement(for:)メソッドは、Transaction.currentEntitlements(for:)という新しいAPIに置き換わりました。
- priceとcurrencyフィールド追加
- 価格や通貨を詳細に把握するためのpriceとcurrencyフィールドも追加されました。
- 消耗品(consumables)の履歴が返る
- 消耗品(consumables)の履歴がAPIで完全に返されるようになりました。これには、アプリのInfo.plistにSKIncludeConsumableInAppPurchaseHistoryキーをtrueに設定してオプトインする必要があります。
- Transaction.currentEntitlement(for:)の進化
- RenewalInfo
- appAccountToken
- サブスクリプションとサービス上の顧客アカウントを紐づけられるようになりました。
- appAccountToken
その他、SwiftUIでサブスクリプションの画面を作りやすくなっていたり、課金テストも実行しやすくなっているとのことです。
その他の注目すべき新機能
WWDC25で発表されたAlarmKitは、新しいフレームワークであり、これまでサードパーティ製アプリが抱えていたアラーム機能の制約を根本的に変えるものです。
従来はアラーム機能を作りたくても、システムレベルに入り込むことができず、通知機能に頼ることで「少しハッキング的で非効率な方法」をするほかありませんでした。それに対し、AlarmKitの登場で、システムレベルで信頼性の高いアラーム機能を使うことができるようになります。
AlarmKitの導入により、アプリは以下のようなこれまでにない強力なアラーム機能を実現できるようになります。
- ロック画面、Dynamic Island、StandByへの表示
- アプリのアラームがこれらのシステムUIに統合され、より目立つ形で表示されます。
- ユーザーはロック画面やDynamic Islandで残り時間を確認したり、スヌーズや一時停止を行うことができます。
- サイレントモードや集中モードでも制御可能
- これにより、ユーザーはアラームを見逃すことがなくなります。
- カスタムアクションの実装
- App Intentを使用し、アラームのアラートに表示されるボタン(例:「アプリを開く」ボタン)に独自の動作を設定できます。
その他、Apple Watchとの連携したり、アラームの繰り返し、サウンドなどのカスタマイズもできるようになります。
AlarmKitを使ってアプリにアラーム機能を導入するには、以下の主要なステップを踏みます。
- アプリがアラームをスケジュールする前に、ユーザーの許可が必要になります。
- 許可は、アプリが最初のアラームを作成する際に自動的に要求されるか、AlarmManagerのrequestAuthorization APIを使って手動で要求することができます。
- アプリのInfo.plistにNSAlarmKitUsageDescriptionキーを追加し、アラーム機能の利用目的を記述する必要があります。
- カウントダウン期間
- アラームには、初期カウントダウン表示のための「pre-alert」と、スヌーズ後に再度カウントダウン表示を行うための「post-alert」間隔を設定できます。
- スケジュール
- 固定スケジュール (Fixed Schedule)
- 特定の未来の日時を指定します。タイムゾーンの変更に影響されません。
- 相対スケジュール (Relative Schedule)
- 毎日または毎週の特定の時刻と繰り返しパターンを含み、タイムゾーンの変更に自動的に対応します。
- 固定スケジュール (Fixed Schedule)
- 外観のカスタマイズ
- その他、表示やサウンドにおいて様々なカスタマイズが可能になります。
AlarmManagerクラスを使用して、アラームをシステムにスケジュールします。
アラームは一意の識別子(UUID)で追跡され、カウントダウン状態への移行、キャンセル、停止、一時停止、再開など、そのライフサイクルを完全に制御できます。
AlarmKitは、例えば、料理タイマー、目覚まし、様々なリマインダーアプリに活用できそうです。
AlarmKitは以下のように書くことができます。
import AlarmKit
// アラームの作成と管理
struct AlarmManager {
func createAlarm() async throws {
let alarm = Alarm(
time: Date().addingTimeInterval(3600),
label: "朝のミーティング",
sound: .default
)
// Live Activityと連携
let activity = try await Activity.request(
attributes: AlarmAttributes(alarm: alarm),
contentState: AlarmContentState(
timeRemaining: 3600
)
)
try await AlarmKit.schedule(alarm, activity: activity)
}
}
ただし、アラームがカウントダウンをサポートする場合、Live Activityに残り時間表示、解除ボタン、一時停止または再開ボタンなどの主要要素を含めることが推奨されます。
AlarmKitの導入により、iOSアプリでのアラーム機能は大きく進化し、開発者はより高度でユーザーフレンドリーな体験を提供できるようになりますね。
WWDC25では、SwiftUIのTextEditorがAttributedStringをサポートするようになりました。
これにより、開発者はSwiftUIアプリケーションでよりリッチでインタラクティブなテキスト編集体験を提供できるようになります。
TextEditorの基盤となるデータ型をStringからAttributedStringに変更するだけで、システムに組み込まれたテキスト書式設定コントロール(例:太字、斜体、フォントサイズ、色)が自動的に利用可能になります。
また、TextEditorは、ダークモードやDynamic Type、Genmojiの入力にも対応しています。
その他、ハイパーリンクのサポート、ドラッグ&ドロップや選択範囲などの使い勝手に関わる改善がされているようです。
以下は、TextEditorでAttributedStringを使用したコードの例です。
// AttributedStringを使用したリッチテキスト編集
struct RichTextEditor: View {
@State private var attributedText = AttributedString("Hello, World!")
var body: some View {
TextEditor(text: $attributedText)
.toolbar {
ToolbarItemGroup {
Button("Bold") {
attributedText.bold()
}
Button("Italic") {
attributedText.italic()
}
Button("Genmoji") {
// Genmojiの挿入
attributedText.insertGenmoji()
}
}
}
}
}
まとめ
WWDC25では、上記の主要な発表以外にも、まだまだ数えきれないほどの新機能やアップデートの発表がありました。ここではほんの一部しか紹介できていませんが、それだけインパクトのある発表だったことがわかります。
中でも新しいソフトウェアデザイン「Liquid Glass」の導入は衝撃的なものでありました。
また、ここでは紹介しきれませんでしたが、Apple IntelligenceをベースとしたオンデバイスAI推論を可能にするFoundation Modelフレームワークの提供、Xcode 26でのChatGPTなどの大規模言語モデル統合、そしてSwift言語の並行処理とパフォーマンスの向上なども今後の開発に大きな影響があるものといえます。
デザインだけでなく、パフォーマンスやテストがより視覚的にわかりやすくなるような改善がされており、AIが介入しやすい開発ワークフローも視野に入っているように感じられます。
Liquid Glassについては、iOSの新しいUIということで、Androidと共通のUIを作りにくくなってしまうため、デザイナーはもちろんのこと、Flutterなどでクロスプラットフォーム開発をしているエンジニアにおいても影響が大きいものです。Liquid Glassがどこまで浸透するのかを含め、今後の動向が気になるところです。


