2026/06/15 09:16

SwiftUIのドラッグ&ドロップ、並べ替えから「操作ルール」まで扱える部品になった

WWDC26のSwiftUIドラッグ&ドロップセッションで重要なのは、ソリティアを作るデモそのものではありません。Appleは、これまでTransferableとdraggable/dropDestinationで支えてきた操作を、reorderable、reorderContainer、Drag Container、dragConfiguration、dropConfigurationへ分け、並べ替え、複数項目の移動、移動かコピーかの判断、アプリ固有のルール判定までSwiftUI側で組み立てやすくしました。ドラッグ&ドロップが「データを渡す機能」から、編集アプリやゲームの操作設計を担う部品へ近づいています。

Apple記事の編集用サムネイル

reorderableで、並べ替えがSwiftUIの標準操作に近づく

Appleのセッションは、SwiftUIのドラッグ&ドロップ拡張を3つの柱で説明しています。新しいreordering API、複数項目をまとめて動かすDrag Container、そしてデータ転送の振る舞いを細かく決めるDrag Configuration APIです。最初のreorderableとreorderContainerは、カードの並び替えを例に、ドラッグ中のプレースホルダー、移動先の更新、ドロップ後の配列反映までをSwiftUIのModifierとして扱います。

Apple DeveloperのSwiftUIドラッグ&ドロップセッション画像
画像: Apple Developer

ここでの変化は、単にサンプルコードが短くなることではありません。従来なら、リストやグリッド、カスタムレイアウトごとに座標、移動先、配列更新、禁止領域を個別に考えがちだった操作が、コンテナと対象アイテムの関係として表現されます。Appleはソリティアの表向きカードだけをreorderableにする例も出しており、見えている要素だけを操作対象にするようなUIルールも、ビュー構造の分け方で自然に表せることを示しています。

Drag Containerは、複数項目をひとかたまりで動かす

次に出てくるDrag Containerは、ひとつのViewだけではなく、選択済みの複数項目や積み重なったカードをまとめてドラッグするための仕組みです。セッションでは、reorderContainerが暗黙に持つdragContainer/dropDestinationの挙動へ、自前のdragContainerを重ね、ドラッグ開始アイテムから一緒に動かすカード群を返しています。

この部分は、編集アプリにとって特に効きます。写真、ファイル、ノート、レイヤー、タスクのように、ユーザーが複数のものを選んでまとめて移すUIでは、ドラッグされる中身とプレビューの見え方が操作感を左右します。AppleはdragPreviewsFormationとdropPreviewsFormationで、プレビューをpile、list、stackのように調整できることも見せています。

dragConfigurationとdropConfigurationで、アプリのルールを操作に入れる

最後のDrag Configuration APIは、ドラッグ&ドロップを単なるコピー操作にしないための部品です。セッションの例では、山札から場にカードを移すとき、コピーではなくmoveとして扱う必要があります。そのためにdragConfigurationで移動の意図を示し、dropDestinationとdropConfigurationで受け取り側がどこに、どの操作として、どんな条件で受け入れるかを決めています。

SwiftUIドラッグ&ドロップ拡張の読みどころ
API/考え方役割効く場面
reorderable / reorderContainer並び替え対象とコンテナを結び、ドロップ後の差分を扱うカード、リスト、グリッド、カスタムレイアウトの再配置
Drag Container複数項目をひとかたまりのドラッグとして返す選択済みファイル、複数カード、レイヤー、タスクのまとめ移動
dragPreviewsFormation / dropPreviewsFormationドラッグ中とドロップ先での見え方を揃えるpile、list、stackなど、対象の量感を伝えるUI
dragConfiguration / dropConfigurationcopyかmoveか、どこに受け入れるか、禁止するかを決めるゲームのルール、カンバンの列移動、編集ツールの配置制約

この設計は、ゲームだけでなく業務アプリにも向きます。カンバンの列移動、ドキュメント内のブロック移動、タイムライン編集、デザインツールのレイヤー操作では、移動できる場所とできない場所、コピー扱いにする場面、元の場所から消す場面が混ざります。SwiftUIの新しいAPIは、その判断をドラッグの周辺処理ではなく、操作そのものの設定として書かせようとしています。

このセッションはコードアロングですが、Interface Wireとして見るべき点は、SwiftUIがまたひとつ「完成済みアプリの細かい操作」を担う方向へ進んだことです。Document APIやtoolbar刷新が保存・編集の骨格を広げる話だとすれば、今回のドラッグ&ドロップ拡張は、ユーザーが画面上のものを直接つかんで整理する手触りを支えます。Appleプラットフォームのアプリで、並べ替え、まとめ移動、ルール付きドロップを自然に見せる余地が広がりました。