ARKitフレームワークは、Appleの拡張現実プラットフォームであり、開発者がコンピュータビジョンの深い知識なしにiOS向けARアプリケーションを作成することを可能にします。Apple ARKit Documentation, 2025によると、このフレームワークはVisual-Inertial Odometryを使用して、外部マーカーなしで空間内のデバイスの位置を正確に追跡します。シーンの意味理解により、水平面と垂直面の認識、照明の判定、現実環境への仮想オブジェクトの配置が可能になります。
重要なポイント
ARKitはAppleの拡張現実フレームワークで、WWDC 2017でiOS 11とともに発表されました。カメラ機能、Mシリーズモーションコプロセッサ、Aチップのニューラルエンジンを組み合わせ、専用ハードウェアを必要とせずに没入感のあるAR体験を提供します — iPhoneまたはiPadだけで十分です。
ARKitはVisual-Inertial Odometry(VIO)を使用し、カメラとCore Motion慣性センサーのデータを組み合わせて、空間内のデバイスの動きを正確に追跡します。VIOにより、GPSや外部マーカーを使用せずに、フレームワークが環境に対するデバイスの位置を理解できます。
Apple WWDC 2024によると、ARKit 6はA12チップ以降のデバイスでサポートされています(iPhone XS、iPad Pro 2018+)。App StoreのARアプリ数は15,000を超え、すべてのARセッションで認識された平面の総面積は1,000億平方メートルを超えています。
6つのバージョンを経て、ARKitは大幅な改善を受けました:ARKit 1.0(iOS 11)— 基本的な追跡と平面認識;ARKit 2.0 — ARWorldMapによる共有ARセッションと3Dオブジェクト検出;ARKit 3.0 — 人体追跡、人物セグメンテーション、フロントカメラとバックカメラの同時使用。
ARKit 4.0は、即時の深度とオブジェクトのオクルージョン判定のためのLiDARスキャナーを導入し、ARコンテンツをGPS座標に結びつけるLocation Anchorも追加されました。ARKit 6は、HDR対応の4Kビデオ、LiDARを使用した平面推定、改善されたオクルージョン処理を追加しました。
import ARKit
let configuration = ARWorldTrackingConfiguration()
configuration.planeDetection = [.horizontal, .vertical]
configuration.environmentTexturing = .automatic
let arView = ARSCNView(frame: view.bounds)
arView.session.run(configuration)
arView.debugOptions = [.showFeaturePoints]
view.addSubview(arView)
ARKitはARセッションループを通じて動作し、設定で開始され、カメラからのビデオストリームを継続的に分析します。各フレームで、フレームワークはデバイスの位置(6自由度)を計算し、認識された平面のマップを更新し、仮想オブジェクトの位置を調整します — すべて60フレーム/秒で行われます。
VIOプロセスは2つの並列パイプラインで構成されます:ビジュアルオドメトリアルゴリズムはフレーム間の特徴点の動きを追跡し、Core Motion慣性センサーはカメラが高速で移動したり画像がぼやけたりした場合に短い間隔で動きを予測します。両方の方法を組み合わせることで、最大1センチメートルの追跡精度が得られます。
Appleによると、ARKitはフレームあたり最大500の特徴点を処理し、環境マップ(ARWorldMap)の直径は最大100メートルに達します。セッション開始後の環境スキャンとマップ構築には約2〜3秒かかります — この間、ARKitはカメラとセンサーからデータを蓄積します。
ARAnchorはコンテンツ配置のための重要なオブジェクトです。ARKitが平面を認識すると、表面の位置、サイズ、方向を指定するARPlaneAnchorを作成します。開発者はデリゲートsession(_:didAdd:)に応答し、SceneKitまたはRealityKitを使用して検出された平面の位置に3Dオブジェクトを配置します。
オブジェクトのドラッグを実装するには、ARHitTestResultを使用します:画面にタッチすると、ARKitフレームを通じてヒットテストが実行され、認識された平面との光線の交点が返されます。見つかったポイントはARAnchorに変換され、オブジェクトはその位置に固定されます。
func renderer(
_ renderer: SCNSceneRenderer,
didAdd node: SCNNode,
for anchor: ARAnchor
) {
guard let planeAnchor = anchor
as? ARPlaneAnchor else { return }
let boxNode = SCNNode(
geometry: SCNBox(
width: planeAnchor.extent.x,
height: 0.01,
length: planeAnchor.extent.z,
chamferRadius: 0
)
)
node.addChildNode(boxNode)
}
ARKitは、拡張現実を現実的で機能的なものにする一連の技術を提供します:6自由度のモーショントラッキング、平面と境界の認識によるシーン理解、適切なシャドウレンダリングのための照明推定、人物のオクルージョン、環境マップに基づく反射面。
モーションキャプチャ(ARKit 3+)— カメラを通じて人体をリアルタイムで追跡する技術。外部センサーなしでユーザーの動きでキャラクターをアニメート可能:60Hzで18の関節が認識されます。フィットネスアプリやアニメーションプロトタイピングで使用されます。
共有ARセッション(ARKit 2+)により、複数のデバイスが共有空間内で同じ仮想オブジェクトを見ることができます。ARWorldMapは環境マップを保存し、ネットワーク経由で他のデバイスに送信されます。Appleは同期精度の例を示しています:同じ部屋の2台のiPhone 12 Proが、2センチメートル以内のずれでオブジェクトを表示します。
iPhone 12 Pro以降に搭載されたLiDARスキャナーは、ARKitの能力を劇的に変えます。画像分析によるソフトウェアベースの深度判定の代わりに、LiDARは最大5メートルの範囲で最大3センチメートルの精度で深度マップを即座に提供します。これにより、ARKitは事前のカメラスキャンなしで瞬時に平面を認識できます。
LiDARを使用すると、ARKitはオブジェクトのオクルージョンを判定できます:仮想オブジェクトを実際の椅子やテーブルの後ろに隠すことができます。さらに、Scene Reconstructionは環境の3Dメッシュをリアルタイムで構築します — 部屋あたり最大1,000万ポリゴンで、衝突物理シミュレーションとリアルな照明に使用されます。
// LiDAR設定
let lidarConfig = ARWorldTrackingConfiguration()
lidarConfig.planeDetection = [.horizontal]
lidarConfig.sceneReconstruction = .mesh
arView.session.run(lidarConfig)
// 平面タップ検出
override func touchesBegan(
_ touches: Set<UITouch>,
with event: UIEvent?
) {
let location = touches.first?.location(in: arView)
guard let hitPoint = location else { return }
let results = arView
.raycastQuery(
from: hitPoint,
allowing: .existingPlaneInfinite,
alignment: .horizontal
)
}
ARKit統合は最小要件から始まります:Xcode 15+、iOS 17 SDK、A12 Bionicチップ以降のデバイス。Info.plistにNSCameraUsageDescriptionキーを追加する必要があります — ARKitは追跡とARシーンの表示にカメラを使用します。このキーがないと、ARセッション開始時にアプリがクラッシュします。
コンテンツレンダリングのために、iOSは3つのフレームワークを提供します:中程度の複雑さの3Dグラフィックス用のSceneKit、PBRマテリアルによるフォトリアリスティックレンダリング用のRealityKit、最大パフォーマンス用のMetal。RealityKitはARKit機能、アニメーション、物理演算の組み込みサポートを含むため、新規プロジェクトに推奨される選択肢です。
Appleによると、既存アプリへの基本的なAR画面の統合にかかる平均時間は、経験豊富なiOS開発者で約2時間です。主な困難は、ARシーンへのUI要素のオーバーレイ処理と、ARセッションの中断(電話、アプリ切り替え、低照度での追跡喪失)の処理で発生します。
ARKitは以下の状況で追跡を失う可能性があります:不十分な照明(100ルクス未満)、特徴点の欠如(単色の壁)、カメラの高速移動、レンズの遮断。ARSessionDelegateはこれらの状態を処理するメソッドを提供します — ユーザーに「デバイスをゆっくり動かしてください」や「照明をつけてください」などのヒントを表示することをお勧めします。
障害後の回復のために、ARKitは自動的に再位置特定を開始します — 現在のビデオストリームを保存された環境マップと照合しようとします。再位置特定が不可能な場合、セッションは新しい設定で再起動されます。戻ったときにARシーンを迅速に復元するために、アプリ終了時にARWorldMapを保存することをお勧めします。
class ARViewController: UIViewController {
let arView = ARSCNView()
override func viewDidLoad() {
super.viewDidLoad()
arView.session.delegate = self
let config = ARWorldTrackingConfiguration()
config.planeDetection = [.horizontal]
config.frameSemantics = .personSegmentation
arView.session.run(config)
}
func sessionWasInterrupted(
_ session: ARSession
) {
showAlert("セッションが中断されました")
}
}
よくある質問
ARKitはA12 Bionicチップ以降のAppleデバイスで動作します:iPhone XS、XR、11、12、13、14、15、16およびSE(第2世代および第3世代)、iPad Pro 2018+、iPad Air 2020+、iPad mini 2021+。LiDAR機能にはiPhone 12 Pro/Pro Max、iPhone 13 Pro/Pro Max、iPhone 14 Pro/Pro Max、iPhone 15 Pro/Pro MaxおよびiPad Pro 2020+が必要です。
はい、ARKitはMetalと直接使用できますが、カスタムシェーダーとレンダリングの記述が必要です。SceneKitとRealityKitは、フレームワークレベルでのARKit統合を備えた既製のソリューションを提供します。初心者には、ARKit機能を自動的に処理するRealityKitが最適な選択肢です。
ARKitはカメラを通じてシーンの照明を自動的に評価し、AREnvironmentProbeAnchorを介して光源の方向、強度、色温度に関するデータを提供します。これにより、仮想オブジェクトが正確に影を落とし、環境を反射して、現実世界とのリアルな融合を実現します。
ARKitはiOSのみで動作し、追跡にVisual-Inertial Odometryを使用します。一方、GoogleのARCoreはAndroidで動作し、IMUとカメラに基づく独自のMotion Trackingを使用します。ARKitはAppleチップとのハードウェア統合により利点があり、ARCoreはCloud Anchorsを通じてクロスプラットフォーム機能を提供します。
はい、ARKitはARゲームに最適です。SceneKitとRealityKitは物理演算(SCNPhysicsBody、PhysicsSimulation)、アニメーション、サウンド、パーティクルをサポートしています。有名な例としては、Pokémon GO(ARKitと独自エンジンを使用)、Angry Birds AR、Lego AR Studioがあります。ARKitはARWorldMapを介したマルチプレイヤーセッションもサポートしています。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。