このチュートリアルでは、新しいSvelteKitアプリから始めて、Capacitorを使用してネイティブモバイル開発に移行します。オプションとして、Konsta UIを統合して、Tailwind CSSモバイルUIを強化することもできます。
Capacitorを使用すると、大きな変更やReact Nativeのような新しいスキルを学ぶ必要なく、SvelteKitウェブアプリケーションを簡単にネイティブモバイルアプリに変換できます。
このステップバイステップガイドに従って、SvelteKitアプリをCapacitorを使用してモバイルアプリに変換し、必要に応じてKonsta UIでモバイルUIを強化しましょう。
Capacitorについて
CapacitorJSは画期的です!任意のウェブプロジェクトに簡単に統合でき、アプリケーションをネイティブウェブビューでラップし、XcodeとAndroid Studioのプロジェクトを生成します。そのプラグインは、JavaScriptブリッジを介してカメラなどのネイティブデバイス機能へのアクセスを提供します。
Capacitorを使用すると、複雑なセットアップや急な学習曲線なしに、素晴らしいネイティブモバイルアプリを作成できます。スリムなAPIと合理化された機能により、プロジェクトへの統合が容易です。Capacitorで完全に機能するネイティブアプリを実現する簡単さに驚くことでしょう!
SvelteKitアプリの準備
新しいSvelteKitアプリを作成するには、次のコマンドを実行します:
npm create svelte@latest my-appcd my-appnpm installnpm run build
build
コマンドを実行すると、プロジェクトのルートに新しいdist
フォルダが表示されるはずです。
このフォルダは後でCapacitorによって使用されますが、今は正しくセットアップする必要があります。
SvelteKitアプリにCapacitorを追加する
任意のウェブアプリをネイティブモバイルコンテナにパッケージ化するには、いくつかの初期ステップを実行する必要があります。その後は、単一のsync
コマンドを実行するだけで簡単です。
まず、Capacitor CLIを開発依存関係としてインストールし、プロジェクト内でセットアップします。セットアップ中は、名前とバンドルIDのデフォルト値を受け入れるためにEnterキーを押すことができます。
次に、コアパッケージとiOSおよびAndroidプラットフォーム用の関連パッケージをインストールします。
最後に、プラットフォームを追加すると、Capacitorがプロジェクトのルートに各プラットフォーム用のフォルダを作成します:
# Install the Capacitor CLI locallynpm install -D @capacitor/cli
# Initialize Capacitor in your SvelteKit projectnpx cap init
# Install the required packagesnpm install @capacitor/core @capacitor/ios @capacitor/android
# Add the native platformsnpx cap add iosnpx cap add android
この時点で、SvelteKitプロジェクトに新しいiosとandroidフォルダが表示されているはずです。
これらは実際のネイティブプロジェクトです!
後でAndroidプロジェクトにアクセスするには、Android Studioをインストールする必要があります。iOSの場合は、Macが必要で、Xcodeをインストールする必要があります。
さらに、同期中に使用される基本的なCapacitor設定を含むcapacitor.config.tsファイルがプロジェクトに表示されるはずです。注意が必要なのはwebDirだけで、これはビルドコマンドの結果を指している必要があります。現在は正しくありません。
これを修正するには、capacitor.config.tsファイルを開き、webDirを更新します:
import { CapacitorConfig } from '@capacitor/cli'
const config: CapacitorConfig = { appId: 'com.example.app', appName: 'my-app', webDir: 'build',}
export default config
Capacitor設定を更新したので、適切な静的アダプターパッケージをダウンロードしてSvelteKitプロジェクトを静的アプリケーションに変更しましょう:
npm i -D @sveltejs/adapter-static
パッケージがインストールされたら、_svelte.config.js_ファイルを自動アダプターから静的に変更する必要があります:
import adapter from '@sveltejs/adapter-static'import { vitePreprocess } from '@sveltejs/kit/vite'
/** @type {import('@sveltejs/kit').Config} */const config = {// Consult https://kit.svelte.dev/docs/integrations#preprocessors// for more information about preprocessors preprocess: vitePreprocess(),
kit: { // adapter-auto only supports some environments, see https://kit.svelte.dev/docs/adapter-auto for a list. // If your environment is not supported or you settled on a specific environment, switch out the adapter. // See https://kit.svelte.dev/docs/adapters for more information about adapters. adapter: adapter({ // default options are shown. On some platforms // these options are set automatically — see below pages: 'build', assets: 'build', fallback: null, precompress: false, strict: true }) }}
export default config
svelte.config.js_を更新したら、src/routes_に+layout.js_ページを作成し、+layout.js_に次のエクスポートを追加して、_prerender_オプションを追加する必要があります:
export const prerender = true
_+layout.js_ページを追加して更新したら、モバイルプラットフォームを追加し、_build_フォルダを作成するためにプロジェクトを再ビルドする必要があります。
以下のコマンドを実行して実行できます:
npm run buildnpx cap sync
最初のコマンドnpm run build
はSvelteKitプロジェクトをビルドして静的ビルドをコピーし、2番目のコマンドnpx cap sync
はすべてのウェブコードをネイティブプラットフォームの適切な場所に同期してアプリに表示できるようにします。
さらに、同期コマンドはネイティブプラットフォームを更新してプラグインをインストールする場合があるので、新しいCapacitorプラグインをインストールする際は、再度npx cap sync
を実行する時です。
気付かないうちにプロセスが完了したので、デバイスでアプリを確認してみましょう!
ネイティブアプリのビルドとデプロイ
iOSアプリを開発するにはXcodeが、Androidアプリを開発するにはAndroid Studioがインストールされている必要があります。また、アプリをアプリストアで配布する予定がある場合は、iOSではApple Developer Program、AndroidではGoogle Play Consoleに登録する必要があります。
ネイティブモバイル開発が初めての場合は、Capacitor CLIを使用して両方のネイティブプロジェクトを簡単に開くことができます:
npx cap open iosnpx cap open android
ネイティブプロジェクトをセットアップしたら、接続されたデバイスへのアプリのデプロイは簡単です。Android Studioでは、すべての準備が整うのを待つだけで、設定を変更することなく接続されたデバイスにアプリをデプロイできます。例:
Xcodeでは、シミュレータだけでなく実際のデバイスにアプリをデプロイするために、署名アカウントを設定する必要があります。これを初めて行う場合、Xcodeがプロセスをガイドします(ただし、Developer Programに登録する必要があります)。その後、上部で選択できる接続されたデバイスでアプリを実行するために、単にプレイを押すだけです。例:
おめでとうございます!SvelteKitウェブアプリをモバイルデバイスに正常にデプロイしました。例:

しかし、開発中にはもっと速い方法もあります…
Capacitorのライブリロード
現在では、すべての最新フレームワークでホットリロードに慣れているでしょうが、良いニュースは、最小限の努力でモバイルデバイス上で同じ機能を持つことができることです!
Capacitorアプリが特定のURLからコンテンツを読み込むことで、ライブリロードを使用してネットワーク上でローカルでホストされているアプリケーションへのアクセスを有効にします。
最初のステップは、ローカルIPアドレスを見つけることです。Macを使用している場合は、ターミナルで次のコマンドを実行して確認できます:
ipconfig getifaddr en0
Windowsでは、次のコマンドを実行します:
ipconfig
そしてIPv4アドレスを探します。
capacitor.config.ts
ファイルに別のエントリを追加することで、サーバーから直接アプリを読み込むようにCapacitorに指示できます:
import { CapacitorConfig } from '@capacitor/cli';
const config: CapacitorConfig = { appId: 'com.example.app', appName: 'my-app', webDir: 'dist', bundledWebRuntime: false, server: { url: 'http://192.168.x.xx:3000', cleartext: true }};
export default config;
上の例のように、正しいIPとポートを使用するようにしてください。
これらの変更をネイティブプロジェクトにコピーすることで適用できます:
npx cap copy
copy
コマンドはsync
に似ていますが、ネイティブプロジェクトを更新せずにウェブフォルダとコンフィグレーションに加えられた変更のみをコピーします。
これで、Android StudioまたはXcodeを通じてもう一度アプリをデプロイできます。その後、Svelteアプリで何か変更を加えると、アプリは自動的にリロードされ、変更が表示されます!
注意してくださいが、カメラなどの新しいプラグインをインストールする場合は、依然としてネイティブプロジェクトの再ビルドが必要です。これは、ネイティブファイルが変更され、その場で行うことができないためです。
設定で正しいIPとポートを使用するようにしてください。上のコードブロックはデモンストレーション目的でデフォルトのSvelteKitポートを示しています。
Capacitorプラグインの使用
以前から何度か言及してきたCapacitorプラグインの実際の使用方法を見てみましょう。簡単なプラグインをインストールするには、次のコマンドを実行します:
npm i @capacitor/share
Shareプラグインに特別なものはありませんが、ネイティブの共有ダイアログを表示します!これには、パッケージをインポートしてアプリからshare()
関数を呼び出すだけで済みます。src/routes/index.svelteを次のように変更しましょう:
<script> import { Share } from '@capacitor/share';
async function share() { await Share.share({ title: 'Open Youtube', text: 'Check new video on youtube', url: 'https://www.youtube.com', dialogTitle: 'Share with friends' }); }</script>
<h1>Welcome to SvelteKit and Capacitor!</h1><button on:click={share}>Share now!</button>
前述のように、新しいプラグインをインストールする場合は、同期操作を実行してからアプリをデバイスに再デプロイする必要があります。これを行うには、次のコマンドを実行します:
npx cap sync
ボタンを押すと、美しいネイティブ共有ダイアログが動作するのを確認できます!
Konsta UIの追加
Nuxt 3アプリでKonsta UIを使用するには、tailwindがすでにインストールされている必要があり、パッケージをインストールする必要があります:
npm i konsta
さらに、tailwind.config.js
ファイルを変更する必要があります:
// import konstaConfig configconst konstaConfig = require('konsta/config')
// wrap config with konstaConfig configmodule.exports = konstaConfig({ content: [ './src/routes/**/*.{svelte}', './src/components/**/*.{svelte}', ], darkMode: 'media', // or 'class' theme: { extend: {}, }, variants: { extend: {}, }, plugins: [],})
konstaConfig
は、デフォルト(またはカスタム)のTailwind CSS設定を、Konsta UIに必要な追加のバリアントとヘルパーユーティリティで拡張します。
次に、いくつかのグローバルパラメータ(theme
など)を設定できるように、メインのAppコンポーネントをセットアップする必要があります。
src/routes/+layout.svelte
でApp
でアプリ全体をラップする必要があります:
<script> import { App } from 'konsta/svelte';</script>
<App theme="ios"> <slot /></App>
例ページ
すべてのセットアップが完了したら、SvelteKitページでKonsta UI Svelteコンポーネントを使用できます。
例えば、src/routes/index.svelte
を開いて、次のように変更してみましょう:
<script> import { Page, Navbar, Block, Button, List, ListItem, Link, BlockTitle, } from 'konsta/svelte';</script>
<Page> <Navbar title="My App" />
<Block strong> <p> Here is your SvelteKit & Konsta UI app. Let's see what we have here. </p> </Block> <BlockTitle>Navigation</BlockTitle> <List> <ListItem href="/about/" title="About" /> <ListItem href="/form/" title="Form" /> </List>
<Block strong class="flex space-x-4"> <Button>Button 1</Button> <Button>Button 2</Button> </Block></Page>
必要なコンポーネントをすべてインストールした後にライブリロードが同期していない場合は、すべてを再起動してみてください。完了すると、SvelteKitとCapacitorで構築された、ややネイティブな外観のモバイルアプリが表示されるはずです!
結果として次のページが表示されるはずです:
結論
Capacitorは、既存のウェブプロジェクトに基づいてネイティブアプリケーションを構築するための優れたオプションであり、コードを共有し一貫したUIを維持する簡単な方法を提供します。
そしてCapgoの追加により、アプリにライブアップデートを追加することがさらに簡単になり、ユーザーが常に最新の機能とバグ修正にアクセスできることを確保します。
SvelteKitアプリにCapgoを追加する方法を学びたい場合は、次の記事をご覧ください:
Capgoがより良いアプリをより速く構築するのにどのように役立つかを学び、今日無料アカウントにサインアップしてください。