Kindle (2024年発売)、6インチディスプレイ電子書籍リーダー、16GBストレージ、マッチャ、広告なし
¥19,980 (2025年4月26日 13:09 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)【2025革新型・高速USB3.0対応】 CD DVDドライブ 外付け 静音 DVDプレーヤー 外付けDVDドライブ USB3.0&Type-C両接続 読取/書込可 CDプレーヤー バスパワー駆動 外付けCDドライブ 軽量 薄型 光学ドライブ 外付け CDドライブ Mac PC パソコン Windows11対応 Windows10/8/7XP 外付け CD DVD ドライブ (ホワイト)
¥1,999 (2025年4月26日 13:05 GMT +09:00 時点 - 詳細はこちら価格および発送可能時期は表示された日付/時刻の時点のものであり、変更される場合があります。本商品の購入においては、購入の時点で当該の Amazon サイトに表示されている価格および発送可能時期の情報が適用されます。)
個人で作ってみたいアプリがありましたが、モバイルアプリの開発やったことがないので、まずはWeb版から取り組み、そのあとネイティブ版にも展開できたらなと思ったところ、Webとモバイルのコードを共通化して開発できるテンプレートが存在することを知りました。
ただ、そのテンプレートの構成は初見では少し理解しづらかったため、まずは大枠だけ整理しようと思います!
まだまだ僕も深く理解できていないのですが少しでも参考になれれば幸いです。
こちらにテンプレートを使っていきます!
こちらのテンプレート以下の技術を採用しています。
- Next.js
- Expo
- Tamagui
- Solito
概要だけ触れておきます。
Next.js
Next.js は React ベースのフレームワークで、ルーティングや SSR(サーバーサイドレンダリング)、静的サイト生成(SSG)などを簡単に扱えるのが特徴です。
Expo
ExpoはReact NativeをベースにiOS, Andoroid向けのアプリを開発することでできるクロスプラットフォームフレームワークになります。
Solito
Solito は、Next.js と React Native を使って強力なクロスプラットフォームアプリを構築するためのツールになります。タイトルのことを実現するために重要な存在です。
Tamagui
TmaguiはReactとReactNativeどちらにも対応しているUIライブラリでまさにWebとネイティブの共通化にはうってつけのライブラリです。
ディレクトリ構成はメインどころだけ見ると以下になります。
├── apps/
│ ├── next/ # Web(Next.js)用アプリ
│ └── expo/ # モバイル(Expo)用アプリ
│
├── packages/
├── app/
│ └── features # Webとネイティブで共通の機能や画面
└── ui/ # ボタンやカードなどの共通UIコンポーネント
apps/next/
このフォルダは、Webアプリとしてのフロントエンド部分を担っています。中を見てみると、appとpagesディレクトリがあり、デフォルトではApp RouterとPages Routerどちらを使うか「Change Router」で切り替えてみれるみたいです。
実際の開発時には、使用しない方のディレクトリは削除する形になりそうです。
apps/expo/
こちらはモバイルアプリ側のエントリーポイントになります。appディレクトリがあり、expo-routerを使用しているみたいです。
ベースはReactNativeなのでWebとほとんど同じ感覚でページを追加・編集できるのがとても便利です。Webとの違いを意識せずに画面設計できるのは良いなと思いました。
packages/ui/
ここにはボタンやテキスト項目、カードなどの共通のUIコンポーネントを定義します。
packages/app/features/
ここにはwebとネイティブ共通で使用するページのコンポーネントなどをまとめておくためのものっぽいです。
「この画面はwebでもモバイルでも同じものを使いたいなあ」というコンポーネントはここで作成してapps/next
やapps\expo
ディレクトリ内でimportして使いまわすイメージでしょうか。
このテンプレートを使えば、最初からモバイルとWebの両方を意識した設計ができているので、あとは中身を自分のアプリに置き換えていくだけでできそうな感じがしました。
今回改めて記事にまとめることで「このディレクトリに何のファイル作ればいいんだ…?」という迷いも減ってきた気がします。
業務でも触ったことがない技術ばかりでまだまだ手探り状態ですが気楽に触りながらもっと理解を深めていこうと思います。
「Web版とネイティブ版どちらにも対応したアプリを作ってみたいなあ」という方がいたら、このテンプレート使うのはいいかもしれないです!ぜひ試してみてください!