DUICUO

Didi は、クロスプラットフォーム統合 MVVM フレームワークである Chameleon をオープンソース化しました。

Didi Chuxingは先日、クロスプラットフォームソリューション「Chameleon(CML)」をGitHubでオープンソース化しました。「Chameleon」という名称は、カメレオンのように様々な環境に適応する能力を意味しており、使いやすさ、迅速な開発、そして高いパフォーマンスを特徴とする包括的なクロスプラットフォームソリューションを提供します。以下のセクションでは、Chameleonプロジェクトの開発背景とパフォーマンス特性について詳しく説明します。

背景

開発チームは、HTML5の柔軟性とアプリ内でのネイティブに近いパフォーマンスの両立を目指しました。メインアプリ、スタンドアロンアプリ、WeChatミニプログラム、Alipayミニプログラム、Baiduミニプログラム、Androidベンダーアライアンスクイックアプリなど、エントリーポイントが拡大する中で、単一機能の実装を複数のプラットフォームで繰り返す必要があり、開発コストと保守コストが飛躍的に増加しました。単一のコードベースで複数のエントリーポイントを構築できるソリューションが緊急に求められていました。約20ヶ月にわたる改良を経て、DidiのクロスプラットフォームソリューションであるChameleonがついにリリースされました。Chameleonは、単一のコードベースで複数のプラットフォームで実行できるようにすることに真に重点を置いたソリューションです。

デザインコンセプト

ソフトウェアアーキテクチャ設計における最も基本的な概念は「分割」と「統合」です。分割とは「分割して征服する」という意味で、複雑な問題を単一の問題に分解して解決することを指します。例えば、バックエンド業務システムの「マイクロサービス」設計などがこれに該当します。一方、「統合」とは、同一の業務要件を抽象化して一つのグループに統合し、高効率・高品質という目標を達成することを指します。例えば、バックエンド業務システムの「ミドルプラットフォームサービス」設計などがこれに該当します。

Chameleonは後者のカテゴリに属します。統一された言語フレームワークと統一されたポリモーフィックプロトコルを定義することで、マルチターミナル(複数の独立したサービスに対応)のビジネスから、自己完結的で継続性が高く、保守性の高い「フロントエンドミドルウェアサービス」を抽出します。

クロスプラットフォームターゲット

環境によって大きく異なりますが、MVVMのコアコンセプトは変わりません。Chameleonは、異なる環境間でMVVMを統一することを目指しています。

学習パノラマ

Webプログラミングに携わったことがある人なら誰でも、WebプログラミングではHTML + CSS + JSの組み合わせが使用されることをご存知でしょう。同様に、ChameleonではCML + CMSS + JSが使用されます。

ページのロジック層はJavaScript構文を用いて処理されます。このプロジェクトは、一般的なウェブページプログラミングと比較して、完全なライフサイクルと、監視、計算、双方向データバインディングなどの優れた機能を備えた標準的なMVVMフレームワークを定義することを目指しています。これにより、開発速度を迅速に向上させ、メンテナンスコストを削減できます。

CML(カメレオンマークアップ言語)は、ウェブページの構造を記述するために使用されます。HTMLには、テキスト用の `<span>` やボタン用の `<button>` など、セマンティックタグの標準セットがあることはご存知でしょう。CMLにも、コンポーネントとして定義される標準的なタグセットがあります。CMLは、ユーザーに一連のコンポーネントを提供します。CMLは、条件付きレンダリング、リストレンダリング、データバインディングなどのテンプレート構文もサポートしています。さらに、CMLはVueのような構文をサポートしているため、より迅速に開発を開始できます。

CMSS(カメレオンスタイルシート)は、CMLページの構造を記述するために使用されるスタイル言語です。CSSのほとんどの機能を備えており、Less Stylusなどの様々なCSSプリプロセッサ言語もサポートしています。

上記のプログラミング言語の紹介から、Web プログラミングの知識があれば誰でもすぐに Chameleon 開発を始めることができることがわかります。

豊富なコンポーネント

CMLを使用してWebページを作成する場合、Chameleonは開発者が使用できる豊富なコンポーネントセットを提供します。組み込みコンポーネントには、ボタン、スイッチ、ラジオボタン、チェックボックスなどがあり、拡張コンポーネントにはc-picker、c-dialog、c-loadingなどがあり、開発作業でよく使用されるコンポーネントを網羅しています。

詳細については以下をご覧ください。

https://cmljs.org/doc/component/component.html

豊富なAPI

開発者の効率的な開発を促進するために、chameleon は、ネットワーク リクエスト、データ ストレージ、地理位置情報、システム情報、アニメーションなどのメソッドを含む、npm パッケージ chameleon-api として公開された豊富な API ライブラリを提供します。

詳細については以下をご覧ください。

https://cmljs.org/doc/api/api.html

カスタマイズ可能なAPIとコンポーネント

強力なポリモーフィックプロトコルを基盤としており、フレームワークのアップデートに大きく依存することなく、あらゆるAPIとコンポーネントを自由に拡張できます。様々なプラットフォームのオリジナルプロジェクトには既に多数のコンポーネントが蓄積されており、クロスプラットフォームプロジェクトに直接インポートすることも可能です。

インテリジェントな仕様検証

コードスタイルチェック:スタイル要件を満たさないコードが見つかった場合、エディターはインテリジェントな提案を表示し、各プラットフォームでコードを一つずつデバッグする必要がなくなります。同時に、コマンドラインの起動ウィンドウにコード内のエラー箇所も表示されます。

詳細については以下をご覧ください。

https://cmljs.org/doc/framework/linter.html

プログレッシブクロスプラットフォーム

すでにミニプログラムを開発しているけれど、大きな変更はしたくない、CMLを使いたいと考えている方は多いのではないでしょうか?もちろん可能です。CMLの使い方は2つあります。

高度なフロントエンド開発経験

Chameleonは単なるクロスプラットフォームソリューションではありません。優れたフロントエンドバンドルツールWebpackをベースとし、業界で長年蓄積されてきた最も有用なエンジニアリング設計を統合し、フロントエンドの基本的な開発スキャフォールディングコマンドツールを提供することで、フロントエンド開発者が開発、統合テスト、テスト、そしてデプロイメントまでの全プロセスを通じてビジネス開発を効率的に完了できるよう支援します。

  1. Chameleonは単なるクロスプラットフォームソリューションにとどまらず、開発者がネイティブマルチプラットフォームアプリケーションを効率的かつコスト効率よく開発することを可能にします。優れたフロントエンドバンドルツールWebpackをベースとし、業界で長年培ってきた最も有用なエンジニアリング設計を統合し、フロントエンド開発の基盤となるコマンドツールを提供することで、フロントエンド開発者が開発、統合テスト、そしてデプロイメントまでの全プロセスを効率的に完了できるよう支援します。独自のビュー層記述言語であるCMLとCMSSに加え、JavaScriptベースのロジック層フレームワークも提供し、ビュー層とロジック層間のデータ転送とイベントシステムも提供することで、開発者はデータとロジックに集中できます。

  2. スキャフォールディング ツール: Node.js に基づいて開発されたスキャフォールディング ツールで、プロジェクトの初期化とビルドのための簡潔なコマンドを提供します。

  3. ディレクトリ構造:大規模なエンタープライズアプリケーションの開発に適した、標準化されたプロジェクト構造を提供します。CML単一ファイルコンポーネント開発モードは、開発効率の向上とファイル構成構造の最適化に役立ちます。

  4. ビュー層とロジック層:ビュー層はCMLとCMSSで記述され、ロジック層はJSで記述されています。Chameleonの中核は、ビュー更新のための標準的なリアクティブ型データ駆動型MVVMフレームワークです。

  5. ポリモーフィック プロトコル: さまざまなプラットフォームにわたる基盤となるコンポーネントとインターフェースに統一されたソリューションを提供し、開発者がネイティブ API とコンポーネントを自由に拡張できるようにします。

  6. コード標準と検証: 開発効率とコードの保守性を向上させるために、Chameleon は包括的なコード標準と検証を提供し、開発者の開発エクスペリエンスを向上させます。

その後の計画

インストール、使用方法、よくある質問については、次のリンクをご覧ください。

  • よくある質問: https://cmljs.org/doc/framework/faq.html

  • GitHub: https://github.com/didi/chameleon

  • カメレオン公式サイト:cmljs.org/