Haxe:クロスプラットフォーム開発の最高の秘密
公開: 2022-03-11現代のプログラミング言語Haxeは一部のサークルでよく知られていますが、これを読んでいる多くの人はそれを聞いたことがありません。 ただし、そのニッチなステータスにだまされてはいけません。 2005年に最初に登場して以来、忠実な(かなり静かな)フォローによってバトルテストが行われてきました。 それは、ビジネス、ゲーム、さらには学術的な文脈での開発のための機能の実用的で成熟した組み合わせを誇っています。
Disney、Hasbro、BBCがHaxeを使用しているのに、なぜもっと多くの開発者がそれを聞いていないのでしょうか。 おそらく、その汎用性は、Haxeプログラミング言語用の単一の「キラーアプリ」がないことを意味します。
あるいは、最も初期のキラーアプリの1つである、死にゆくFlashプラットフォームからの移行パスが、いくつかの点で少しニッチであるためかもしれません。 由緒あるカジュアルゲーム市場は、アドビの不確実性の陰で過去数年間スクランブリングを続けてきました。そして今や、Flashベースのものは2020年までに正式に動かなければならないことがようやく明らかになりました。
ビジネスソフトウェアエンジニアやWeb開発者、実際には多くのゲーム開発者も、「Flash」を聞いてすぐに気を失う可能性があります。 したがって、HaxeFoundationはFlashDevelopIDEを採用し、HaxeIDEであるHaxeDevelopとしてブランド名を変更しました。
しかし、特にそれが非常に関連性が高い場合は、関連付けを振り払うのは難しい場合があります。 たとえば、ソーシャルゲームのユーザー数が7,500万人のFlowPlayは、最近2年間でFlashから140万行のコードを移行したことで、UnityとHTML5よりもHaxeを選びました。 (詳細については、ケーススタディをご覧ください。)
ゲーム以外のソフトウェアの開発者にアピールしながら、HaxeFoundationがこのようなユースケースを強調できるようにするのは難しいかもしれません。 しかし、それがあなたを少しの探検から思いとどまらせてはいけません。
Haxeとの大きな取引は何ですか?
Debianプロジェクトでは、Haxeを「ユニバーサルプログラミング言語」と表現しています。 それにはいくつかの側面があります。
一般に、Haxe言語は(良い)コードを再利用することを意味します。 つまり、Haxeコードは多くのプラットフォームで再利用でき、既存のHaxeおよび非Haxeコードと統合できます。また、Haxe言語は、型安全性など、多くの実証済みのパラダイムを利用できるようにします。
汎用性のテーマに沿って続けると、これはユースケースのいくつかの主要なカテゴリに変換されます。もちろん、フラッシュの移行は別として。
クロスプラットフォームのアプリやゲームをゼロから開発する。 Haxeは、デスクトップ、モバイル、およびWebプラットフォームをすべて単一言語のソースベースからターゲットにすることができます。 クロスプラットフォームのプログラミング言語は目新しいものではなく、クロスプラットフォームのデスクトップおよびモバイルアプリやゲーム向けの特殊なソリューションがあります。 しかし、Haxeは、複数のプラットフォームだけでなく、HTML5やネイティブバイナリなどの複数のパラダイムをターゲットにできるという意味で、もう少し特別なことをします。
「それらすべてを支配する」1つの言語。 Tolkienの参照はご容赦ください。ただし、Node.jsがWebサイトのフロントエンドとバックエンドで同じ言語を使用する時代を歓迎したように、クライアントサーバーアーキテクチャに似たプロジェクトでは、両方の半分にHaxeを使用できます。
たとえば、WebアプリFontStructは、フロントエンドのHTML5キャンバスへの描画と、バックエンドのJava2Dを介した描画の両方にHaxeを使用します。 (ただし、前述のように、このアプローチはオプションです。Haxeは、既存の非Haxeコードでもうまく機能します。これは、ユーザーを拘束しないように設計されているためです。)アプリ、ゲーム、ビジネス、さらにはレンダリングロジックをすべてのコンテキスト、プラットフォームで一貫性のある状態に保ちます。この方法では、出力言語がはるかに簡単になります。
JavaScriptから型安全性への脱出。 待ってください、これはTypeScriptの目的ではありませんか? はい、JavaScript出力に制限したい場合は可能です。 対照的に、Haxe言語は、Java、C ++、C#、Python、Luaなどにもトランスパイルできます。
一方、Haxeプログラミング言語はJavaScriptから学ぶのに十分簡単です。その構文は、たとえばRebolのような大きなパラダイムシフトを意味するものではありませんが、そのようなシフトの利点はあります。 Haxeのコア開発者であるDr.AndyLiは、TypeScriptとHaxeのより詳細な比較を作成しました。これは、どちらの言語も進化し続けていますが、今日でも関連性があります。
コンパイラの非常に高速なワークフロー。 これは最近追加された部分です(ただし、以前はNekoがオプションでした):HashLinkはクロスプラットフォームの仮想マシン(VM)であり、コンパイルが非常に高速であると同時に、実行時に十分なパフォーマンスを発揮することのバランスが取れているようです。 3Dゲームのように。 しかし、Web側でも、Haxeはコンパイル時と実行時の両方でTypeScriptよりも優れたパフォーマンスを発揮できます。
エキサイティングなフロンティア。 Haxe自体はオープンソースであり、活発なコミュニティがあり、常に新しい言語機能が追加されています。 独自の最高のサブシークレットは、コンパイル時のマクロシステムである可能性があります。このシステム自体には、多くの興味深いユースケースがあり、心ゆくまでメタプログラムを実行できます。 (以下にいくつかの例を示します。)
他に誰がHaxeを使用していますか?
初心者、ゲーム開発者はもちろん、Madden NFL Mobile、Evoland II、Double Kick Heroes…これらと他の何百もの公開されたゲームは、Haxeを使用して開発されました。 しかし、Haxeはゲーム分野の外でも波を立てています。
- 2014年、 TiVoはHaxeを使用して、TiVo Premiereボックスのパフォーマンスを30%以上向上させました。
- Massive Interactiveは、クライアントにDAZNとTelecine for Haxeベースの「スマートTV」システム(どちらも大規模なユーザーベース)が含まれており、Haxeを長年使用しています。 彼らのUIアーキテクトであるPhilippeElsassは、大規模なWebプロジェクトでの作業経験において、HaxeはTypeScriptよりも使いやすく、コンパイルが約1桁速い傾向があると私に指摘しました。
- Synoliaは、フランスの主要ブランドであるCarrefourとLa Fnac、およびNickelodeonで使用されているオンラインカスタマイズツールHeidiにHaxe言語を使用しています。 Synoliaによると、Haxeツールキットを使用すると、FlashからHTML5への移行を効率的に管理できると同時に、モバイル分野での新しいビジネス開発の機会を利用することができます。 HeidiはSaaSアプリケーションであるため、Haxeツールキットを使用すると、アプリのさまざまなレイヤーやサービス間で共通のソースコードを共有できます。
- 多国籍企業のDoclerHoldingは、2017年にHaxeFoundationの戦略的パートナーになりました。
Haxeエコシステムはどのようなものですか?
ゲームとHaxeに関して言えば、オープンソースフレームワークとライブラリの点で広く広い世界です。 独立したインディーチームから国際的なクライアントとの成功したスタジオまで、Haxeユーザーは至る所でコードを共有しています:
- Flambeは、ディズニー、コカコーラ、トヨタなどのブランドがHTML5ゲームを開発するために使用しています。
- Heapsは、最近ヒットしたNorthgardの3D戦略の背後にある高性能ゲームフレームワークです。
- 何百万ものモバイルゲームプレイを強化するRapidDevelopmentLibrary awe6は、おそらく隠された宝石の中に隠された宝石です。
- デスクトップとモバイルに加えてXBoxOne、Nintendo Switch、PlayStation 4をターゲットにできるKhaには、20を超えるゲームエンジンが組み込まれています。 これには、Blenderが完全に統合され、最近それ自体がオープンソースになったArmoryが含まれます。
- もともとFlash用の古いFlixelライブラリをモデルにした、HaxeFlixelは、スリーパーヒットのDefender'sQuestのようなゲームの背後にある人気のある選択肢です。
- 数年前にFacebookのAngryBirdsポートに使用されていたフレームワークであるGamuaのStarlingには、オープンソースのHaxeポートがあります。
- Flash APIに基づくOpenFLは、追加のライセンス料なしで、複数のコンソール(PlayStation 4、PlayStation Vita、XBox One、Nintendo Switch)をターゲットにする方法にもなります。 HaxeFlixelとStarlingはどちらもOpenFLの上に構築されていますが、受賞歴のあるPapers、Pleaseのように、一部のゲームはOpenFLで直接開発されています。
- 何年も前にOpenFLがフォークされたNativeMediaEngine、NMEも、まだメジャーバージョンをリリースしています。
- たぶん、HaxePunk(FlashPunkから派生)がGitHubのReleaseRadarブログで紹介されたときに見たかもしれません。
- 高度に最適化されたNapePhysicsEngineは、より高度な物理を必要とする2Dゲームエンジンまたはシミュレーターに最適です。
確かに、ゲーム開発シーンは、Haxe言語エコシステムのより目に見える部分です。 (おそらくこれは、Ludum Dareのようなゲームジャムの性質のおかげですか?)しかし、ビジネス側、さらには企業側も透けて見えています。 例えば:
- モジュラーアプリフレームワークhexMachinaは、他の多くの機能の中でも、ドメイン固有言語(DSL)の使用法とモデルビューコントローラー(MVC)アーキテクチャーをサポートしています。
- UIレイアウトエンジンHaxeUIは積極的に進化しており、企業のサポートを受けています。 3DVistaやKaizenforPharmaなどの製品には、プロダクションアプリが同梱されています。
- それだけではありませんが、thx.coreライブラリとその親戚は、LodashがJavaScriptに対して行うのと同じように、Haxeに汎用の拡張機能を提供します。
- JavaScriptと言えば、JavaScriptを対象とするHaxeプロジェクトは、Haxe Modularを活用することでメリットが得られる可能性があります。これにより、TelecineとFlowPlayの両方が、クライアント側での高速読み込みを維持しながら、巨大なプロジェクトを拡張できました。
- Haxeのエコシステムも進化を続け、現在のテクノロジーとのインターフェースを実現しています。 たとえば、GraphQLライブラリがあります。
- 最後に、模範的なティンカーベルは、あらゆる種類の有用なタスクにHaxeのマクロシステムを活用しています。 Webルーティング、単体テスト、SQLの埋め込みのためのフレームワークに加えて、テンプレート作成やCSSセレクターの解析から、非同期/待機、学習曲線の低いリアクティブ状態の処理まで、あらゆるもののライブラリがあります。
これらは、Haxe言語のユーザーがこれまでに取ったいくつかの方向性のハイライトにすぎません。 Haxe.orgは、人気順にソートされたライブラリの完全なリストを保持しており、タグで参照することもできます。 しかし、HaxeFoundation自体が維持しているいくつかのプロジェクトを強調することも価値があります。
- DevOpsアングルについては、公式のHaxeDockerリポジトリがあります。
- 安定性に関しては、メジャーバージョンのアップデートがあっても、Haxe4はHaxe3に依存するプロジェクトのユーザーのために互換性の助けを得るでしょう。
それはすべていいことのように聞こえますが、システムで開発環境を稼働させるのはどのようなものですか?
Haxeクイックスタート
Win、Mac、Linuxのいずれの場合でも、最初のステップはHaxeをダウンロードすることです。 そこでのインストーラーは、いくつかの異なるものを提供します。
- Haxeコンパイラ自体。これにより、ターミナルまたはコマンドプロンプトから
haxe
を実行できるようになります。 - Haxe標準ライブラリ。低レベルの基本だけでなく、高レベルの汎用サポートも可能です。 たとえば、XML、ZIP処理、およびMySQLアクセスはすべてここで容易になります。
- Haxelibパッケージマネージャー
haxelib
コマンドを使用して新しいパッケージをインストールできます。 (注:特にプロのコンテキストでHaxeを使用することを検討している場合は、Haxelibが提供するよりも高度なパッケージ管理についてlixをチェックすることも価値があります。) - Nekoは、迅速かつ効率的な再コンパイルとデバッグを可能にする仮想マシンターゲットです。
(とはいえ、セットアップする方法は複数あります。たとえば、すでにnpm
をインストールしている場合、OpenFLのインストール手順にはYeomanコマンドを介してHaxeをインストールするオプションがあります。HomebrewとChocolateyも同様のパスを提供します。)

とにかく、Haxeを入手したら、コマンドラインから単独で使用できますが、開発者はIDEの使用を選択することがよくあります。 FlashDevelop / HaxeDevelopは、引き続き主にWindowsでのみサポートされます。 他のほとんどのオプションはクロスプラットフォーム(Win / Mac / Linux)です。
- VSCodeのHaxeプラグインは十分にサポートされています。
- IntelliJIDEAにはHaxeプラグインもあります。
- ゲームフレームワークKhaには、Kode Studio(Win / Mac / Linux)と呼ばれる独自のIDEがあります。
- Sublime TextとAtomの両方に、他の多くのエディターと同様にHaxeプラグインがあり、その一部はプラットフォーム固有です。
このクイックスタートガイドでは、VSCodeを使用します。 Ctrl+Pとext install haxe-extension-pack
を介してHaxeExtensionPackを入手するのが最も簡単かもしれませんが、ミニマリストの場合は、基本的なHaxeプラグイン自体にext install vshaxe
し、どちらかを選択してください。あなたが望むかもしれないパックの他の部分。
Haxeプロジェクトの作成
Haxe言語は多くのターゲットにトランスパイルできるため、ビルドファイルを使用すると、各ターゲットに対してこれがどのように行われるかを簡単に管理できます。 ただし、開始するために必要なのは、拡張子が.hx
の単一のHaxeクラスファイルだけです。
挿入するコードについては、try.haxe.orgのArray Comprehensionの例を使用して、 Test.hx
というファイルに挿入してみましょう。
class Test { static function main() { var a = [for (i in 0...10) i]; trace(a); // [0,1,2,3,4,5,6,7,8,9] var i = 0; var b = [while(i < 10) i++]; trace(b); // [0,1,2,3,4,5,6,7,8,9] } }
これで、 Test.hx
の場所から、Haxeを解釈モードで実行できます。つまり、トランスパイルをまったく行わずに、これら2つのtrace()
呼び出しの出力を確認できます。
$ haxe -main Test --interp Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]
素晴らしい、それは動作します!
HaxeコードをJavaScriptにトランスパイルする
あなたのウェブページのJavaScriptを介してこれを世界と共有したいとします。 これはHaxeに組み込まれており、次のように簡単です。
$ haxe -main Test -js haxe-test.js
Node.jsがインストールされている場合は、次のようにコマンドラインからの出力を確認できます。
$ node my-cool-test.js [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ] [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
それ以外の場合は、 haxe-test.js
のコードを使用する準備ができています。コードをWebページに含めると、ロード時にWebブラウザーの開発者コンソールに出力が表示されます。
ネイティブバイナリへのトランスパイルとコンパイル
開発中のデスクトップ用のネイティブバイナリも必要だとします。 これを行うには、C ++ターゲットにトランスパイルするので、C ++を使用して(インストールされていると仮定して)、. .cpp
出力をネイティブバイナリにコンパイルできます。 そのためには、 hxcpp
が必要なので、インストールする必要があります。
$ haxelib install hxcpp
その後、次のコマンドを使用して、トランスパイルとコンパイルの両方を同時に実行できます。
$ haxe -main Test -cpp bin
これで、バイナリを実行する準備が整いました。
$ bin/Test Test.hx:4: [0,1,2,3,4,5,6,7,8,9] Test.hx:8: [0,1,2,3,4,5,6,7,8,9]
(Windowsでは、これは代わりにbin\Test.exe
になります。)
Haxeビルドファイル(.hxml)の作成
示唆に富む拡張子にもかかわらず、 .hxml
ファイルはXMLではありません。HaxeDevelopおよびFlashDevelopで使用される.hxproj
ファイルとは異なりますが、この記事ではそれについては説明しません。 上記で行ったトランスパイルを実行するためのbuild-all.hxml
は次のようになります。
-main Test # tells Haxe our main class is Test (case-sensitive) --each # all of the above commands will be applied to each target -js haxe-test.js # our first transpilation target --next # no other options, time to move to the next target -cpp bin # our second transpilation (and compilation) target
プレフィックスの違いに注意してください。 -main
、 -js
、および-cpp
はそれぞれ、 haxe
に直接渡すパラメーターですが、 --each
および--next
(2つのハイフン)はメタレベルであり、コンパイラーに何をするかを指示します。他のパラメータで。
haxe build-all.hxml
を実行するだけで、JavaScriptとネイティブターゲットの両方をヒットできるようになりました。
JavaScriptにトランスパイルし、すぐにNodeを使用して結果を実行する場合は、 haxe run-js.hxml
を実行できます。ここで、 run-js.hxml
は次のようになります。
-main Test -js haxe-test.js -cmd node haxe-test.js
同様に、ネイティブバイナリの「ビルドと実行」は次のようになります(Linuxの場合、つまり、Windowsの場合はバリエーションが必要になります)。
-main Test -cpp bin -cmd bin/Test
VSCodeはどうですか? その部分は単純です。インストールした拡張機能はこれらの.hxml
ファイルを自動的に取得し、ドロップダウンで自動生成されたビルドタスク( tasks.json
)を提供し、使用するビルドファイルを選択できるようにします。
注:ただし、複数のVSCodeウィンドウを開いている場合は注意が必要です。この記事の執筆時点では、Ctrl+Bを使用したビルドで問題が発生する可能性があります。 (コマンドラインは引き続き使用できますが、問題ありません。)
Haxe 4
上記の設定に従った場合、ダウンロードページにHaxeインストーラーの3.xと4.xの両方のブランチへのリンクが含まれていることに気付いたかもしれません。
Haxeコンパイラの最先端バージョン4には、多くの新機能が搭載されています。 あるケースでは、これはそのマクロシステムの力の証でもあります。Haxeコンパイラは短いラムダ関数のサポートを欠いていたため、slambdaライブラリはマクロを介してそれらのサポートを実装しました。 バージョン4の時点で、サポートはコンパイラーに組み込まれており、ライブラリーは非推奨になっています。
では、Haxe 4は他に何をもたらしているのでしょうか?
必ずしも多くの注目を集める人ではありません。 代わりに、Haxe4には多くの小さな改善があります。 結局のところ、Haxe自体はかなり成熟したテクノロジーであり、おそらく同様のプロジェクトよりも小規模で焦点を絞ったチームによって開発されています。Haxeに似たプロジェクトを呼び出すのは少し難しいかもしれません。
その最も興味深い機能の多くは、すでにしばらくの間存在しています。 たとえば、HaxeはNekoまたはHashLinkを介して高速ワークフローを提供することを前述しました。 しかし、2016年以降、コンパイルサーバーも搭載されています。 つまり、VM以外のターゲットの場合、大規模なライブラリに依存するプロジェクトの再コンパイルは、メモリ内キャッシュによりはるかに高速になります。これは、コード補完のためにHaxeIDEでも利用できます。
しかし、特にHaxe4には次のように表示されます。
- マクロの実行が4倍高速になります。
- PHP5のサポートは終了しました。
- 2つの言語間でわずかに異なる場合でも、TypeScriptユーザーが歓迎する構文更新がいくつか行われました。 つまり、矢印関数と新しい関数型の構文です。
Haxeチュートリアル
Haxeの標準APIまたは構文ドキュメントにいつでも飛び込むことができますが、初心者向けのHaxe資料もいくつかあります。
ビデオを重視する場合は、シアトルで開催されるHaxe US Summit 2018で、他の年のワークショップと並行してワークショップを開催し、インサイダーの意見をさらに深めることができます。
しかし、より簡単に始めることができるのは、より具体的なチュートリアルである場合があります。 HaxeFlixelでダンジョンクローラーゲームを構築する方法に関する最初から最後までのチュートリアルのように。 舞台裏で何が起こっているのかを詳しく説明する一連のHaxeFlixelチュートリアルもあります。 3D側には、Armoryの使用を開始するためのHaxeチュートリアルがあります。
あるいは、XMLの高速処理に関するHaxeチュートリアルが必要な場合もあります。これは、数年前の多くのチュートリアルの1つですが、それでもかなり関連性があります。 先に述べたように、フロンティアはたくさんありますが、Haxeでの開発の基本の多くはこの時点で安定しているため、チュートリアルがすぐに古くなるとは限りません。 (それらが行う場合、それは通常、Haxeコア自体ではなく、特定のライブラリへの依存から生じます。)
ご覧のとおり、Haxe言語は、さまざまな方向に進むことができます。 Haxeの多様で魅力的な世界へのこの紹介を楽しんでいただけたと思います。そして、Haxeのテクノロジーで何をするのかを聞くのを楽しみにしています!