今日の優良食堂
実際に入れて動かして書いた、今日の一膳
ギット飯が代わりに導入・実行・コードまで確かめました
いま読んでいる一膳ionic-team/ionic-frameworkJavaScript と Web 技術から単一のコードベースでクロスプラットフォーム Web・ネイティブアプリを構築するオープンソース UI フレームワーク信頼度 1.26ほかの一膳langchain-ai/langchain大規模言語モデルとツールを組み合わせてAIエージェントとアプリケーションを構築するフレームワークです。信頼度 1.52ほかの一膳juspay/hyperswitch複数の決済プロセッサに対応したオープンソース決済インフラストラクチャです。信頼度 1.31
今日の優良食堂 · ギット飯が代わりに導入・分析

ionic-team/ionic-framework

JavaScript と Web 技術から単一のコードベースでクロスプラットフォーム Web・ネイティブアプリを構築するオープンソース UI フレームワーク

Angular、React、Vueのいずれで書いても、ionic startだけでiOS調とAndroid調に見た目を切り替える50種類以上のコンポーネントが使えます。CapacitorがカメラやGPSなどのネイティブAPIへのアクセスも担うため、Web開発の経験をそのまま実機ビルドまで活かせます。実際のE2Eテストコードと複数フレームワーク対応が揃っているため、試すたびに「本当に動く」という実感が得られます。

01 / 概要
何をするものか一文で言うと
ひとことでJavaScript と Web 技術から単一のコードベースでクロスプラットフォーム Web・ネイティブアプリを構築するオープンソース UI フレームワーク

Ionicは、HTML・CSS・JavaScriptで書いた単一のコードベースから、iOSやAndroidのネイティブ品質アプリとPWAを作るためのUIツールキットです。中核はStencilJSで実装されたWeb Componentsで、READMEに明記された通りAngular・Vue・Reactの3フレームワーク向けラッパーパッケージが用意されています。本リポジトリは、そのコンポーネント実装とテスト一式を含むモノレポです。

02 / 構造
どう動くのか中核のしくみ
読み方動きの流れを図と一緒にほどきました。

core/src/componentsの下に、ion-accordionやion-action-sheetなどコンポーネントごとのフォルダがあり、TSXファイルとSCSSファイルが対になっています。SCSSはaccordion.ios.scssとaccordion.md.scssのように分かれていて、iOS風デザインとMaterial Design風デザインを切り替える仕組みです。core/package.jsonのbuildスクリプトはnpm run build.cssでSassをCSSに変換した後、stencil build --es5 --docs-json dist/docs.jsonを実行し、dist・components・hydrate・loaderという出力を作ります。package.jsonのexportsフィールドには、importとrequireの両方、さらにhydrate用やloader用の入口が個別に定義されています。Angular・Vue・React向けのラッパーは、devDependenciesにある@stencil/angular-output-target、@stencil/vue-output-target、@stencil/react-output-targetというStencilの公式出力ターゲットから生成されます。品質保証はJestの単体テスト(accordion.spec.tsなど)、Playwrightのe2eテスト(accordion.e2e.ts)、見た目のスクリーンショット比較という3段構成です。スクリーンショットはiOS・Material Designの2デザイン、LTR・RTLの2方向、Chrome・Firefox・Safariの3ブラウザごとに保存されています。eslint-plugin-custom-rulesという自作ESLintプラグインも用意され、Playwrightのawait忘れなどコード規約を機械的に縛っています。CIは.github/workflows以下に、フレームワークごとのビルド・テストactionが分割定義されています。

03 / 体験
入れるとこんな体験になりますギット飯が実際にたどった順序
所要ギット飯が実際に導入・実行しながらたどった順序です。
  1. STEP 01

    core/ディレクトリでnpm installを実行すると、@stencil/core、Playwright、Jestなど多数のdevDependenciesがダウンロードされ、package-lock.jsonの規模通り時間がかかります。

  2. STEP 02

    npm run build.cssを実行すると、sass --embed-sources --style compressed src/css:./cssでSassがCSSに変換され、続いてcleancssで圧縮されます。

  3. STEP 03

    npm run buildを実行すると、stencil build --es5 --docs-json dist/docs.jsonが走り、core/dist・components・hydrate・loaderの各フォルダにWeb Componentsの出力が生成されます。

  4. STEP 04

    core/Dockerfileを使ってmcr.microsoft.com/playwright公式イメージ上でビルドすると、core/playwright.config.tsに基づくe2eテストをホスト環境差なく実行できます。

  5. STEP 05

    各コンポーネントのtest配下のindex.html(例accordion/test/a11y/index.html)をビルド後のdist経由で開くと、ion-accordion-groupなど実コンポーネントの挙動をブラウザで直接確認できます。

  6. STEP 06

    npm run eslintを実行すると、eslint-plugin-custom-rulesによる独自ルール(no-component-on-ready-methodなど)の違反がコード上で検出されます。

04 / 成果物
何が手に入るのか導入後に手元に残るもの

実行して手に入るのは、@ionic/coreのビルド出力(dist・components・hydrate・loaderフォルダ)と、それに対応するSassビルド済みCSSです。Angular・Vue・React向けパッケージのソースも同梱されていますが、実際のアプリに組み込むにはpackages/*/README.mdに書かれた各フレームワーク固有の手順が別途必要です。

05 / 注意
ここは先に知っておいてください先に知っておくとよいこと
正直なところ誰にでも合うとは言いにくいところです。
01

core/package.jsonのengines指定はnode 16以上ですが、typescript依存が^6.0.0と先進的で、周辺ツールの組み合わせ次第でインストールエラーが起きる可能性があります。

02

本リポジトリはフレームワーク本体のソースで、READMEのQuickstartはionicframework.com上のCLI手順を指しています。このリポジトリ単体をnpm installしただけでは「動くアプリ」は得られません。

03

e2eテストはPlaywrightの特定バージョン(core/Dockerfile記載のv1.64.0)での画面キャプチャに依存します。ローカルのOSやブラウザが違うとスクリーンショット比較が崩れやすいです。

06 / 結論
ギット飯の結論食べてみる価値のある一膳か
ギット飯の最終判断優良食堂

既にIonicアプリを運用していて、ion-accordionなどの内部実装を読んだりコントリビュートしたい開発者、あるいはStencilベースのWeb Componentsライブラリの設計(TSXとSCSSの対構成、Playwrightスナップショットテストの組み方)を参考にしたいエンジニアに向いています。README記載のパッケージ構成、core/package.jsonのビルドスクリプト、実際のコンポーネントフォルダとテストファイルの構成が一貫しているため、インストールせずに読むだけでもリポジトリの実体と品質保証の仕組みは判断できます。

今日の残りの一膳
SUBSCRIBER LIBRARY
これまでに検証した優良食堂を一堂に

4 つの関門を通った優良食堂がすべてバックナンバーに集まっています。いちばん新しい一膳はどなたでも無料で読め、それより前の優良食堂の検証の根拠・詳しい解説は ギット飯 プレミアムのご購読ですでに開いています。

優良食堂バックナンバー →
リポジトリ詳細🧪 ひと言で味見する