はじめに
こんにちは、iOSアプリエンジニアのKiichiです。LINE iOSアプリでアプリ内ブラウザなど、Webまわりの開発を担当しています。普段はUIKitをベースに機能 改善や新機能開発を進めつつ、SwiftUI・Observation Framework・Swift Concurrencyなどのモダンな技術を用いて巨大な既存コードベースを改善することに努めています。
本記事では、WebKitの新API「WebPage」を検討した結果、なぜそのまま導入できなかったのか、そしてその思想をどのように自前実装へ落とし込んだのかについて紹介します。
WebKitと責務分離の懸念
LINE iOSのアプリ内ブラウザでは、これまで WKWebView を直接利用してきました。しかし、
load(_:)やgoBack()などのインフラ的な責務UIViewとして画面に表示されるUIとしての責務
の両面が WKWebView という1つの型に同居していることに対して懸念がありました。
LINE iOS開発では、UI・プレゼンテーション・ビジネスロジック・インフラの4層に責務を分離するアーキテクチャを採用し、ある層が別の層の詳細実装に直接依存しないよう、型レベルでも境界を保つことを重視しています。WKWebView をそのまま使う設計だと、UI表示とWebページ操作がすべて1つの型を通して行うことになってしまい、このアーキテクチャとの相性は良くありませんでした。
そんなことを考えていたタイミングで登場したのが、WebKitの新API WebPage でした。
WebPageとは
WebPage は、WebKitが提供する新しいSwift APIで、従来の WKWebView とは異なる思想で設計されています。iOS 26から利用可能で、Observation Frameworkを最大限活用した設計が大きな特徴です。
- Webコンテンツの状態管理