Ionic React の紹介

こんにちは。マネックス証券で投資情報システムの開発している倉田です。 今回は私が個人的にお勧めしているIonic Reactを使用してクロスプラットフォームアプリを実装したいと思います。

IonicではAngularも使用できますが、今回はReactにフォーカスしたいと思います。

Ionicをざっくりと説明しますと、Web技術を活用してクロスプラットフォームのモバイルアプリを構築するためのフレームワークです。 プラットフォーム固有のコードを書かずに、1つのコードベースでiOSとAndroidの両方のプラットフォームに対応できます。 React Nativeほどメジャーではないのですが、それぞれのフレームワークには一長一短ありますので、後ほど説明していきたいと思います。

Ionic React と React Native の違い

Ionic React

IonicはWebビューでレンダリングしているため、従来のReact Webアプリの開発に最も似ています。Web版のReactアプリケーションで使用しているCSSやライブラリをそのまま使えます。 また、Ionicで作成したコードはWebアプリケーションとしても実装することができます。

しかしWebビューに依存しているためパフォーマンス上の制限が生じる可能性があるので、作成するアプリのパフォーマンスが重要な要素になる場合はReact Native、SwiftやJavaで開発をした方が良いでしょう。

React Native

一方、React Nativeは、JavaScriptを使用してネイティブコンポーネントをレンダリングし、よりネイティブな外観とパフォーマンスを提供します。その代わり、UI部分はReact Native独自の仕組みで実装されているため、Reactライブラリを使用できないことが多く、またWebアプリケーションとして実装することができません。

では、早速アプリを作っていきましょう!

アプリの実装

前提

  • macOS、iPhone/iPad を使用
  • 最新のXcode がインストールされている
  • Node.js(v16 以降)と npm がインストールされている
  • Ionic CLIのインストール: npm install -g @ionic/cli native-run cordova-res

Ionic React プロジェクトの作成

公式ドキュメント:https://ionicframework.com/docs/react/your-first-app

まずはIonic CLIを使用して新しいIonic Reactプロジェクトを作成します。以下のコマンドを入力して、プロジェクトを作成しましょう。

ionic start myApp tabs --type=react --capacitor

これにより、名前が「myApp」の新しいIonic Reactプロジェクトが作成されます。必要に応じてプロジェクト名を変更してください。 プロジェクトが作成されたら、作業ディレクトリをプロジェクトフォルダに移動します。 cd myApp

次に、以下のコマンドを入力してプロジェクトを実行します。 ionic serve これにより、開発サーバーが起動し、Ionic Reactアプリがブラウザで表示されます。

Ionicの初期ページだと物足りないので、ご存知の方も多い Material-UI でログインページを実装しましょう。 まずはライブラリを追加。

npm install @mui/material @emotion/react @emotion/styled

以下Material-UIの公式テンプレートを /src/App.tsx に上書きします。

import { setupIonicReact } from  '@ionic/react';
import  Button  from  "@mui/material/Button";
import  TextField  from  "@mui/material/TextField";
import  FormControlLabel  from  "@mui/material/FormControlLabel";
import  Checkbox  from  "@mui/material/Checkbox";
import  Link  from  "@mui/material/Link";
import  Grid  from  "@mui/material/Grid";
import  Box  from  "@mui/material/Box";
import  Typography  from  "@mui/material/Typography";
import  Container  from  "@mui/material/Container";

setupIonicReact();

const  App: React.FC = () => (
    <Container  component="main"  maxWidth="xs">
        <Box
            sx={{
                marginTop:  8,
                display:  "flex",
                flexDirection:  "column",
                alignItems:  "center",
            }}
        >
        <Typography  component="h1"  variant="h5">
            Sign in
        </Typography>
        <TextField
            margin="normal"
            fullWidth
            label="Email Address"
        />
        <TextField 
            margin="normal"
            fullWidth
            label="Password"
        />
        <FormControlLabel
            control={<Checkbox  value="remember"  color="primary"  />}
            label="Remember me"
        />
        <Button
            type="submit"
            fullWidth
            variant="contained"
            sx={{ mt:  3, mb:  2 }}
        >
            Sign In
        </Button>
        <Grid  container>
            <Grid  item  xs>
                <Link  href="#"  variant="body2">
                    Forgot password?
                </Link>
            </Grid>
            <Grid  item>
                <Link  href="#"  variant="body2">
                    {"Don't have an account? Sign Up"}
                </Link>
            </Grid>
        </Grid>
    </Box>
</Container>
);
export  default  App;

ionic serve でログインページが実装されたことを確認しましょう。

ネイティブデバイス機能の実装

続いて、ネイティブデバイス機能にアクセスしてみましょう。Ionic 公式ドキュメントではカメラにアクセスしたりしていますが、今回はシンプルにAndroid/iOSを振動させてみます。IonicではCordovaやCapacitorなどのプラグインを使用します。

npm install @capacitor/haptics

先ほど実装したログイン画面(/src/App.tsx)に振動機能を追加しましょう。

import { Haptics } from  '@capacitor/haptics'; //インポート

<Button
    type="submit"
    fullWidth
    variant="contained"
    sx={{ mt:  3, mb:  2 }}
    onClick={()=>Haptics.impact()} //振動機能を追加
>
    Sign In
</Button>

上記のように、たった2行でネイティブデバイス機能にアクセスできます。 使用できるプラグインが豊富にありますので、参考にしてみてください。 - https://ionicframework.com/docs/native/setup - https://ionicframework.com/docs/v5/native/stripe

お手元のデバイスで動作確認をしましょう

先ほどのコードをお手元のiPhone/iPadで起動するにはXcodeへビルドする必要があります。以下コマンドを順次に実行してください。

ionic build
ionic cap add ios #または android
ionic cap copy
ionic cap sync
ionic cap open ios #または android

Xcode が起動したらiPhone/iPadをパソコンに繋げ、①で自身のデバイスを選択し、②で実行するとお手元のデバイスにインストールされます。

デバイスでデベロッパーモードを有効にすることや、③でXcodeのアカウントを作成・選択する必要がありますが割愛します。

Sign In クリックでデバイスが振動しました! 後は振動をwhileループで囲めば電動マッサージ機アプリの完成です!

おわりに

モバイルアプリ開発をどれだけ簡単に既存の React コードで実装ができるかお分かりいただけたでしょうか。

Ionic React の利点を以下のようにまとめました。

Ionic React React Native
既存Reactコードをほぼ全て使用できる 既存ReactコードのUI部分やライブラリが使用できない
ReactとWeb(javascript, css)の知識で開発できる React Nativeの学習コストがある
Webアプリケーションも実装できる Android、iOSモバイルアプリのみ
Reactのライブラリを使用できる React Nativeのライブラリが充実している
日本語のドキュメントが充実していない  

どういういった場合に Ionic React を使うべきか

  • Reactで構築済みのWebアプリがある場合
  • Webアプリ・モバイルアプリを一つのコードベースで構築したい場合
  • パフォーマンスがアプリにとって最重要事項でない場合
  • 開発者がReact・Web開発に精通している場合
  • 開発速度とコストを重視したい場合

これらの条件が該当する場合、Ionic Reactはハイブリッドモバイルアプリの開発において優れた選択肢になると思いますので、ぜひご検討ください。 

参考 https://ionic.io/blog/ionic-vs-react-native-performance-comparison

システム開発二部 第二プロダクトグループ 倉田