Next.js 15のWebアプリケーションをiOSおよびAndroidのネイティブモバイルアプリケーションに変換するには、__CAPGO_KEEP_0__ 8を使用します。静的エクスポートの設定など、設定の完全なガイドをご覧ください。
チュートリアル

次のNext.jsアプリをiOS & Androidに変換するCapacitor 8

既存のNext.js 15 Webアプリケーションを、Capacitor 8を使用してネイティブのiOSおよびAndroidモバイルアプリケーションに変換するための完全なガイドです。静的エクスポートの設定、ネイティブプラグインの追加、およびアプリストアへのデプロイについて説明します。

マーティン・ドナディュー

マーティン・ドナディュー

コンテンツマーケター

次のNext.jsアプリをiOS & Androidに変換するCapacitor 8

Introduction

既存のNext.js Webアプリがある場合、このガイドでは、iOSおよびAndroidモバイルアプリとして変換する方法を学びます。 Capacitor 8 — 最新バージョンでパフォーマンスが向上し、新機能が追加された。

Capacitor wraps your web app in a native container, giving you access to device APIs like camera, filesystem, and push notifications while keeping your existing React codebase. Unlike React Native, you don’t need to rewrite anything — your Next.js code runs as-is.

React Nativeとは異なり、再実装する必要はありません。__CAPGO_KEEP_1__は、既存のNext.jsコードをそのまま実行します。

  • What you’ll learn:
  • Add Capacitor 8 with essential native plugins
  • __CAPGO_KEEP_0__ 8に基本的なネイティブプラグインを追加する
  • iOSおよびAndroidシミュレータでビルドおよびテストする
  • 開発を高速化するためのライブリロードを有効にする
  • Add native-feeling UI with Capgo Native Navigation and Transitions

新しいプロジェクトから始めるには? Next.jsモバイルアプリケーションを作成する.

Capacitorの利点

  • Codeの再利用: Next.jsでは、再利用可能なコンポーネントを書き、Webアプリとモバイルアプリ間でcodeを共有することができ、開発時間と労力の節約が可能です。
  • パフォーマンス: Next.jsでは、サーバーサイドレンダリングやcodeスプリッティングなどのパフォーマンス最適化機能が組み込まれており、高速なロード時間と滑らかなユーザー体験を実現します。
  • ネイティブ機能: Capacitorでは、カメラ、位置情報、などネイティブデバイスの機能にアクセスできるため、機能豊富なモバイルアプリケーションを作成できます。
  • 簡素化された開発: Capacitorでは、モバイルアプリケーションを開発およびテストするために、熟知しているWeb技術を使用できるため、学習カーブが低減され、開発プロセスがスムーズになります。

前提条件

__CAPGO_KEEP_0__を設定する前に、以下の条件を確認してください:

  • Node.js 18以上が インストールされている
  • 既存の Next.js 15以上の アプリケーション
  • Xcode (iOS開発の場合、macOSのみ)
  • Android Studio (Android開発の場合)

モバイル用にNext.jsアプリを設定する

Next.jsアプリを静的エクスポート用に設定することは、最初のステップです。Capacitorは、静的HTML/JS/CSSファイルをネイティブアプリにバンドルする必要があります。

Open your next.config.js (or next.config.ts) file and add the export configuration:

/** @type {import('next').NextConfig} */
const nextConfig = {
  output: 'export',
  images: {
    unoptimized: true,
  },
};

module.exports = nextConfig;

The output: 'export' 設定は、Next.jsが静的HTMLファイルを生成し、サーバー上の画像最適化を回避することを示しています。 images: { unoptimized: true } 重要な注意:

サーバー上の機能を使用している場合 (__CAPGO_KEEP_0__ ルート、サーバーコンポーネントのデータフェッチなど)、クライアントサイドの代替または外部APIを使用する必要があります。 If you’re using features that require a server (API routes, server components with data fetching, etc.), you’ll need to refactor those to use client-side alternatives or external APIs.

静的エクスポートをテストするには、以下のコマンドを実行してください: package.json:

{
  "scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "mobile": "bun run build && bunx cap sync",
    "mobile:ios": "bun run mobile && bunx cap open ios",
    "mobile:android": "bun run mobile && bunx cap open android"
  }
}

You should see an

bun run build

フォルダがプロジェクトのルートにあります。このフォルダには、__CAPGO_KEEP_0__ がネイティブアプリにバンドルする静的ファイルがすべて含まれています。 out folder at the root of your project. This contains all the static files that Capacitor will bundle into your native app.

プロジェクトにCapacitor 8 を追加する

ネイティブモバイルコンテナにアプリケーションをパッケージ化するには、次の手順に従ってください。

  1. Capacitor コアとCLI をインストールする
bun add @capacitor/core
bun add -D @capacitor/cli
  1. インストールする必要がある一般的なCapacitor プラグインを選択する
bun add @capacitor/app @capacitor/keyboard @capacitor/splash-screen @capacitor/preferences

これらのプラグインは、以下の機能を提供します。

  • @capacitor/app: アプリケーションライフサイクルイベントを処理 (前景/背景、URL)
  • @capacitor/keyboard: モバイル上のキーボードの動作を制御する
  • @capacitor/splash-screen: ネイティブのスプラッシュスクリーンを管理する
  • @capacitor/preferences: 永続的にキー値データを保存する
  1. Initialize Capacitor with your project details:
bunx cap init my-app com.example.myapp --web-dir out

置換 my-app にアプリ名を入力してください com.example.myapp にアプリID (逆ドメイン記法) を入力してください。

  1. Create or update the capacitor.config.ts ファイルに適切な構成を記述してください:
import type { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.myapp',
  appName: 'my-app',
  webDir: 'out',
  plugins: {
    SplashScreen: {
      launchShowDuration: 2000,
      launchAutoHide: true,
      androidScaleType: 'CENTER_CROP',
      showSpinner: false,
      splashFullScreen: true,
      splashImmersive: true,
    },
  },
};

export default config;
  1. Nativeプラットフォームをインストール:
bun add @capacitor/ios @capacitor/android
  1. Nativeプラットフォームフォルダを追加:
bunx cap add ios
bunx cap add android

Capacitor はプロジェクトのルートディレクトリにNativeプロジェクトを含むフォルダを作成します。 ios フォルダを作成します。 android フォルダを作成します。

Android プロジェクトをビルドするには、 Android Studioが必要です。 iOS の場合、.

  1. Xcode
bun run mobile

がインストールされたMacが必要です。

プロジェクトをビルドして同期する:

Capgo のカスタム スクリプトが実行され、ネイティブ プラットフォームと静的ファイルを同期します。 ネイティブ アプリのビルドとデプロイ ネイティブ モバイル アプリをビルドしてデプロイするには、次の手順に従ってください。 iOS アプリを開発するには、 Xcode がインストールされている必要があります。Android アプリを開発するには、

  1. Open the native projects:

iOS用の場合:

bun run mobile:ios

Android用の場合:

bun run mobile:android

または直接にCapacitor CLIで:

bunx cap open ios
bunx cap open android
  1. アプリをビルドして実行する:

android-studio-run

  • Android Studioで、プロジェクトが準備できたら、実行ボタンをクリックして、接続されたデバイスまたはエミュレータにアプリをデプロイします。 xcode-run

  • Xcodeで署名アカウントを設定して、実機にアプリをデプロイします。署名アカウントを設定する必要がある場合は、Xcodeがガイドを提示します (Apple Developer Programに登録している必要があります)。設定が完了したら、実行ボタンをクリックして、接続されたデバイスでアプリを実行します。

成功しました!あなたは、Next.jsのWebアプリをモバイルデバイスにデプロイしました。

Next.jsモバイルアプリ
しかし、開発中はもっと速くする方法もあります...

Capacitor Live Reload

開発中は、即時モバイルデバイスで変更を確認できるようにライブリロードを利用できます。 この機能を有効にするには、以下の手順に従ってください。

  1. ローカルIPアドレスを探す
  • macOSの場合、以下のコマンドをターミナルで実行してください。

    ipconfig getifaddr en0
  • Windowsの場合、以下のコマンドを実行してください。

    ipconfig

    出力でIPv4アドレスを探す

  1. __CAPGO_KEEP_0__を更新して、開発サーバーに指すようにします。 capacitor.config.ts __CAPGO_KEEP_0__をローカルIPアドレス (例えば、
import type { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: 'com.example.app',
  appName: 'my-app',
  webDir: 'out',
  server: {
    url: 'http://YOUR_IP_ADDRESS:3000',
    cleartext: true,
  },
};

export default config;

ネイティブプロジェクトに変更を適用します。 YOUR_IP_ADDRESS ライブリロード 192.168.1.100).

  1. __CAPGO_KEEP_0__
bunx cap copy

__CAPGO_KEEP_0__ copy コマンドは、Web フォルダと構成変更をネイティブ プロジェクトにコピーし、プロジェクト全体を更新せずにします。

  1. Android StudioまたはXcodeを使用して、デバイス上でアプリを再構築して実行してください。

Next.jsアプリに変更を加えた場合、モバイルアプリは自動的に更新され、変更を反映します。

注意:新しいプラグインをインストールしたりネイティブファイルに変更を加えたりした場合、ライブリロードはWeb code変更にのみ適用されるため、ネイティブプロジェクトを再構築する必要があります。

Capacitor プラグインの使用

Capacitor プラグインは、Next.jsアプリからネイティブデバイスの機能にアクセスできるようにします。Share プラグインを使用してみましょう。 Share プラグインをインストールする Share プラグインを使用するには、ファイルを更新する必要があります。

  1. Sync プラグインの変更をネイティブプロジェクトと同期する
bun add @capacitor/share
  1. Sync プラグインの変更をネイティブプロジェクトと同期する必要があります。 pages/index.js Sync プラグインの変更をネイティブプロジェクトと同期する必要があります。
import Head from 'next/head';
import styles from '../styles/Home.module.css';
import { Share } from '@capacitor/share';

export default function Home() {
  const share = async () => {
    await Share.share({
      title: 'Open Youtube',
      text: 'Check new video on youtube',
      url: 'https://www.youtube.com',
      dialogTitle: 'Share with friends',
    });
  };

  return (
    <div className={styles.container}>
      <Head>
        <title>Create Next App</title>
        <meta name="description" content="Generated by create next app" />
        <link rel="icon" href="/favicon.ico" />
      </Head>

      <main className={styles.main}>
        <h1 className={styles.title}>
          Welcome to <a href="https://nextjs.org">Capgo!</a>
        </h1>

        <p className={styles.description}>
          <h2>Cool channel</h2>
          <button onClick={() => share()}>Share now!</button>
        </p>
      </main>
    </div>
  );
}
  1. Sync プラグインの変更をネイティブプロジェクトと同期する必要があります。

__CAPGO_KEEP_0__の新しいプラグインをインストールする際には、Sync操作を実行し、次にアプリをデバイスに再デプロイする必要があります。

bun run mobile

Syncのみを実行するには、以下のコマンドを実行してください。

bunx cap sync
  1. アプリをデバイスに再デプロイし、再構築します。

「Share now!」ボタンをクリックすると、ネイティブの共有ダイアログが表示され、コンテンツを他のアプリと共有できます。

next-capacitor-share
Next, you can make the app feel more native on iOS and Android with Capgo navigation and transitions, and fix common iOS layout issues that cause horizontal overflow or cropped safe areas. ## Native-feeling UI with Capgo Native Navigation and Transitions

## __CAPGO_KEEP_1__ネイティブナビゲーションとトランジションを使用すると、ネイティブフィーリングのUIが実現されます。 数年間は Ionic を使用してクロスプラットフォームアプリケーションを構築してきましたが、Next.jsと統合することはハック的で、すでに持っている.

For a native mobile feel in a Next.js + Capacitor app, use Capgo plugins instead of web-only UI kits like Konsta UI:

両方をインストールします。

bun add @capgo/capacitor-native-navigation @capgo/capacitor-transitions
bunx cap sync

ネイティブのナビゲーションを CSS のインセットモードで構成します。ウェブコンテンツはネイティブのバーを尊重します。

import { NativeNavigation } from '@capgo/capacitor-native-navigation';

await NativeNavigation.configure({
  contentInsetMode: 'css',
  animationDuration: 360,
  glass: {
    effect: 'liquidGlass',
  },
});

iOS の Liquid Glass タブバーをレンダリングします (iOS はシステムが所有するレンダリングを使用します; Android はブレードされた WebView のバックグラウンドを使用します)。

await NativeNavigation.setTabbar({
  selectedId: 'home',
  labelVisibilityMode: 'labeled',
  icons: true,
  colors: { dynamic: true },
  tabs: [
    { id: 'home', title: 'Home', icon: { svg: '...' } },
    { id: 'settings', title: 'Settings', icon: { svg: '...' } },
  ],
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  router.push(`/${id}`);
});

ネイティブのページトランジションをアプリシェルに追加します。

import '@capgo/capacitor-transitions';
import { initTransitions, setDirection, setupRouterOutlet } from '@capgo/capacitor-transitions/react';

initTransitions({ platform: 'auto' });

ルーティングされたページを、 cap-router-outlet, cap-page, cap-content, setDirection('forward') , setDirection('back') , router.push() または router.back(). Do not duplicate web headers or footers when native navigation owns those surfaces.

See the full guides: @capgo/capacitor-native-navigationを使用する and @capgo/capacitor-transitionsを使用する.

Safe areas with Tailwind

CapgoでTailwind CSSのデバイスセーフエリアを使用するには @capgo/tailwind-capacitor (published as tailwind-capacitor on npm). Capgoでは safe-areas utilitiesとその他のCapacitor-friendly Tailwindプラグインが提供されます:

bun add -D tailwind-capacitor

In styles/globals.css:

@import 'tailwindcss';
@plugin "@capgo/tailwind-capacitor/platform";
@plugin "@capgo/tailwind-capacitor/safe-areas";

Use utilities such as pt-safe, pb-safeCloudflare px-safe Capacitor env(safe-area-inset-*) GitHub open a PR on GitHub.

code

API overflow-x: hidden SDK

CLI

npm (app/bun viewport from app/layout.tsx:

import type { Viewport } from 'next';

export const viewport: Viewport = {
  width: 'device-width',
  initialScale: 1,
  viewportFit: 'cover',
};

Pages Router (pages/viewportタグを追加する pages/_app.tsx, not _document.tsx (Next.jsは、ビューポートの動作のためにタグを適用する方法が想定されない可能性があります。) _document.tsx iOSセーフエリアを1つのルートラッパーからのみ取り扱う

アプリシェルを1つにし、セーフエリアのパディングを適用する — 複数のネストされたコンポーネントに適用するのではなく:

すべてのページコンテンツを

html,
body,
#__next {
  width: 100%;
  min-height: 100%;
  margin: 0;
  padding: 0;
  overflow-x: hidden;
}

* {
  box-sizing: border-box;
}

.app-shell {
  min-height: 100dvh;
  width: 100%;
  padding-top: env(safe-area-inset-top);
  padding-right: env(safe-area-inset-right);
  padding-bottom: env(safe-area-inset-bottom);
  padding-left: env(safe-area-inset-left);
}

内にラップする .app-shellヘッダー、モーダル、レイアウトラッパーなどで、セーフエリアのパディングを複数回適用すると、UIが切り取られたり大きすぎるように見えることがよくあります。

@__CAPGO_KEEP_0__/tailwind-__CAPGO_KEEP_1__ @capgo/tailwind-capacitor、同等のパディングを表現するには、 pt-safe pb-safe px-safe shell上で実行する必要があります。

Capacitor iOS contentInsetnever に設定します。

最初 capacitor.config.tsIn contentInsetMode: 'css'、ネイティブのインセットを無効にして、CSS (またはネイティブナビゲーションの)

const config: CapacitorConfig = {
  appId: 'com.example.myapp',
  appName: 'my-app',
  webDir: 'out',
  ios: {
    contentInset: 'never',
  },
};

Mixing Capacitor’s automatic content inset with CSS env(safe-area-inset-*) __CAPGO_KEEP_0__の自動コンテンツインセットとCSSの

パディングを組み合わせることは、ダブルスペースの原因となる一般的な問題です。

実際にオーバーフローしている要素を探します。 100vw, Tailwind w-screen, 固定ピクセル幅、または大きい min-width.

Safari Web インスペクターで実行:

[...document.querySelectorAll('*')]
  .filter(el => el.scrollWidth > document.documentElement.clientWidth)
  .map(el => ({
    el,
    tag: el.tagName,
    class: el.className,
    scrollWidth: el.scrollWidth,
    clientWidth: document.documentElement.clientWidth,
  }));

Tailwindを使用すると w-screenw-full 可能な限り。多くの水平オーバーフロー問題は、 100vw / w-screen, 重複した安全エリアのパディング、または固定幅のコンテナ — ではなく、ビューポートメタタグ自体から

パフォーマンス最適化

あなたのNext.jsとCapacitorアプリの最適なパフォーマンスを確保するために、以下のベストプラクティスを考慮してください:

  • アプリのサイズを最小限に抑えるために、不要な依存関係とアセットを削除する。
  • 画像や他のメディアファイルをロード時間を短縮するために最適化する。
  • コンポーネントやページの遅延ロードを実装して、初期ロードパフォーマンスを向上させる。
  • サーバーサイドレンダリング (SSR) を使用して、Next.js を使用してアプリの読み込み速度と検索エンジン最適化 (SEO) を向上させます。
  • Capacitor の組み込み最適化機能、例えばウェブビューのキャッシュとアプリのバンドルを活用してください。

まとめ

You’ve successfully converted your existing Next.js web application into native iOS and Android apps using Capacitor 8. Your web codebase now runs natively on mobile devices with access to device APIs.

達成したこと:

  • Next.js を静的エクスポート用に設定
  • Added Capacitor 8 with essential plugins
  • iOS と Android のシミュレータにビルドしてデプロイ
  • 開発用にライブリロードを有効
  • iOS の一般的なレイアウト問題 (ビュー ポート、セーフ エリア、オーバーフロー) を修正
  • Added native-feeling UI with Capgo Native Navigation and Transitions

次のステップ:

  • セットアップ Capgo アプリストアの再提出なしでオーバー・ザ・エア更新を実現
  • カメラ、位置情報、プッシュ通知などのネイティブプラグインを追加
  • アプリアイコンとスプラッシュスクリーンをプロダクション用に設定
  • アプリストアとGoogle Playの提出用にアプリを準備

新しいプロジェクトから始めるのですか? Next.jsモバイルアプリケーションを作成するためのガイド付きウォークスルー リソース

Next.jsドキュメント

Capgo を使って、より良いアプリをより速く作る方法を学びましょう、 無料のアカウントに登録してください 今日です。

Capacitor 8 を使って、次の Next.js アプリを iOS と Android に変換してください

あなたが __CAPGO_KEEP_0__ を使っている場合 iOS と Android に対応する Next.js アプリを Capacitor 8 で変換する native プラグインの作業を計画するには、接続する Capgo プラグイン ディレクトリ Capgo プラグイン ディレクトリの製品ワークフロー Capacitor プラグインズ by Capgo Capacitor プラグインズ by Capgo の実装詳細 プラグインの追加または更新 プラグインの追加または更新の実装詳細 Ionic Enterprise プラグインの代替 Ionic Enterprise プラグインの代替の製品ワークフロー Capgo ネイティブ ビルド Capgo ネイティブ ビルドの製品ワークフロー

Capacitor アプリのリアルタイム更新

ウェブ層のバグが実行中の場合、Capgoを使用して修正を配信するのではなく、数日間待ってアプリストアの承認を待つのではなく、ユーザーはバックグラウンドで更新を受け取り、ネイティブの変更は通常のレビュー経路で残る。

Get Started Now

Latest from our Blog

Capgoは、プロフェッショナルなモバイルアプリを作成するために必要な最良の洞察を提供します。