知ってほしい技術 Advent Calendar 2022 の2日目より。
というお話です。
正確じゃないざっくり用語整理なので、明らかにおかしなものは適宜ご指摘ください。
WebView でラッピングするやつです。
実は以前お仕事で少し使ったことありまして、複数アプリを同時に作る必要が出てきて、 Web とネイティブの技術者を別々に集めるのが大変だったことから(また機能的にネイティブで求められる要件がそう多くなかったことから)、 ビルドした Web コンテンツを Cordova 使ってラッピングしてネイティブアプリとして使えるようにしたらいいよね、というところで Cordova を使いました。
その時の個人的な所感なのですが・・・
file:///
みたいなパスになってるっぽい?なんか後継を目指したくなる気持ち分かる。
位置付けとしては Cordova と同じですが、 CLI などのインターフェースが Web 開発にすごく寄ってきてくれています。
capacitor://
のプロトコルでやりとりしてる?info.plist
ファイルを編集することになるちなみに Cordova も Capacitor も共通で言えることですが、 Web コンテンツとしてスタティックなファイルでありさえすれば、基本的には 何のフレームワークやライブラリを使っても表示できます。
僕は Next.js で build & export して使ってますし、以前は Vue.js でビルドしたものを配置してたりしてましたし、ベタ書きの HTML をそのまま配置することだってやろうと思えばできますね。
また、 Web の範囲でレスポンシブ対応を普通にやっておけば、自然とユニバーサルアプリになっちゃう のも良いところです。 せっかく HTML/CSS の知識があるのに、改めて iOS の AutoLayout 周りの知識を学ぶのも(学び自体には意味はありますが)もったいない感ありますし、それならもっと作った後の申請や配布周りのところを学んだ方が良さそうです。
プラグインがけっこう充実しています。
https://capacitorjs.com/docs/plugins
今のところ公式の Camera, Geolocation, Preference, Splash Screen あたりを使いましたが、躓きはほぼなく、普通に使えています。 (躓いたとしても、 Cordova に比べたらだいぶソースコードが把握しやすいものになっているので、レールの上に乗ってる安心感はあります)
Web で作っているのに、 import してネイティブの機能が使えちゃうのは拡張してる感があって素敵ですね。
ここが勘違いしやすいポイントなんですが、 Capacitor を使うと簡単にネイティブアプリがリリースできちゃうんです、みたいなのは結構な落とし穴 だと思っていて、簡単にできるのは 実機で動かすところまで なんですよね。
そこから先は普通のネイティブアプリであれ、 Web コンテンツをラッピングしたネイティブアプリであれ、アプリの申請や配布のフローを同様に踏む必要があります。
ネイティブアプリをリリースしたことない人から見て、大きなハードルが2つあるよりは、1つ目のハードルを飛ばなくていいようになっている方がかなり敷居は低いです。
後から Swift や Kotlin 使ってネイティブアプリの開発をしたい場合でも、先に2つ目のハードルを経験しておけば、今度はネイティブアプリを作る方(1つ目のハードル)に注力できますね。
ここがある意味本題なのですが、僕の独断と偏見にまみれた仮説です。
Ionic という UI フレームワークの文脈で語られる ことが多く、 単体で使えることを知らない人が多いのでは?と思っています。
Ionic は一旦置いておいてどんどん Capacitor だけ使っていきましょう! ( UI フレームワークが必要になったら Ionic 調べてみる、くらいでいいんじゃなかろうかと)
Ionic 自体も Angular の文脈で語られることが多い (偏見)ため、 Angular の延長上の話と勘違いされることが多いのでは?と思っています。
これもしょうがない・・・?のかな・・・?
Angular は一旦置いておいてどんどん Capacitor だけ使っていきましょう! (ただのペライチ HTML でも問題ないので、 Web 界隈関わってる人全員使えるんじゃなかろうかと)
使ってる人がどれだけいるのか知らんけど、これは微妙にありそう・・・?
ぶっちゃけ困りポイントほとんどないので、僕も今まで書いてなかったです。
以下 iOS の場合。
yarn add @capacitor/core #1
yarn add --dev @capacitor/cli #1 cap コマンド使える
npx cap init #2
yarn add @capacitor/ios #3
npx cap add ios #3
#4 なんらかビルド処理
npx cap sync ios #5
npx cap open ios #5 Xcode が立ち上がる
capacitor.config.js
内の webDir
のディレクトリ名が一致してるか見ておくout
ディレクトリとか、手元の出力ディレクトリに合わせる・・・とまあ、見出し1つ分に収まってしまうくらい、簡単に使えますね。
みんなもっと気軽に Web でネイティブアプリ作っていけばいいのに。
Capacitor は単体で使える Web コンテンツをラッピングしてネイティブアプリにする技術・仕組みなんですよ、というお話でした。
ちなみに上の使い方は全部 https://capacitorjs.com/docs/getting-started に書いてあることなので、こっち読んでもらった方が良いです。
ドキュメントを読もう。
この記事は書かれてから1年以上が経過しており、最新の情報とは異なる可能性があります