PythonをJavaScriptに変換する方法(そしてまた元に戻す方法)

PythonまたはJavaScript?どちらが優位であるか、より明るい未来であるかについてはまだ議論中ですが、どちらがWebのフロントエンドを所有しているかについてはほとんど疑問がありません。それはブラウザのJavaScriptか何もない。

まあ、多分何もないわけではありませ ん。 JavaScriptは、あるプログラミング言語を別のプログラミング言語に変換する「トランスパイラー」のお気に入りのターゲット言語です(TypeScript、Emscripten、Cheerp、Corを参照)。また、Pythonの膨大なフォロワーと豊富な利用可能なライブラリにより、PythonをJavaScriptに変換(トランスパイル)するのに最適な候補となっています。

PythonをJavaScriptの世界で役立つようにするための4つの現在のプロジェクトを次に示します。1つは、両方向に変換できることで際立っています。

ブライトン

WebAssemblyが約束することの1つは、Web用に開発するために選択した任意の言語を使用できるようにすることですが、これはまだ遠い目標です。Brythonの背後にある哲学は、少なくともPython 3に関する限り、なぜ待つのですか?

Brythonは、Python 3のすべてのキーワードとほとんどの組み込みをエミュレートするJavaScriptライブラリを介して、クライアント側のWebプログラミング用のPython 3のバージョンを実装します。Pythonで記述されたスクリプトは、Webページに直接含めることができます。Brythonは、browser DOMおよびブラウザーと対話するための高レベルのPythonモジュールインターフェイス( パッケージ)を提供します。つまり、通常はJavaScriptで直接行われるすべての作業を処理します。

たくさんのライブコード例とミニアプリケーションのギャラリーが、すべてがどのように機能するかを示しています。Brythonを使用してPythonでネイティブAndroidアプリを作成することも可能です。非同期機能を利用できますがasync、Pythonの代わりにBrythonのモジュールを使用する必要がありますasyncio

Brythonは、ブラウザーのJavaScriptに課せられた制限を免れません。たとえば、ローカルファイルシステムの処理はサポートされていません。ただし、必要なのがアプリケーションごとにデータを永続化する方法だけである場合は、HTML5ローカルストレージの使用がサポートされます。

JavaScripthon

JavaScripthonは、Brythonのようなプロジェクトのように完全なブラウザー内サポートを提供しようとせずに、Python3.5以降のコードをJavaScriptに変換することに厳密に焦点を合わせています。ブラウザ側でのポリフィルの必要性を最小限に抑えるためにES6コードを発行し、ソースマップを保持することでWebpackなどのツールとうまく連携します。

asyncおよびawait、Python 3.6 f文字列、Pythonクラスのメソッドと継承など、Pythonの一般的なキーワードと動作のほとんどがサポートされています。JavaScriptに直接ドロップダウンする必要がある場合は、特別な関数呼び出しを介してJavaScriptをインラインで挿入することもできます。

JavaScripthonプロジェクトへの最後のコミットは2018年5月であったため、「walrus演算子」などの最新のPython機能のサポートを受けていないことに注意してください。しかし、Python3.6の機能を使用している人は誰でも十分にサポートされているはずです。

[また:すべてのPython開発者のための24のPythonライブラリ]

ジフィー

Jiphyの名前は、「JavaScript in、Pythonout」の略語です。言い換えれば、Jiphyは2つの言語間で両方向に変換します。さらに、両方の言語のコードを混合してから、いずれかのターゲット言語に変換することができます。

飛び込んですべてのOpenStackをJavaScriptに変換する前に、注意してください。Jiphyは本格的なコードベース変換ではありません。むしろ、その機能は、READMEが述べているように、「Python開発者がJavaScriptコードを記述したり、その逆を行うために必要なコンテキスト切り替えを減らすこと」です。

Jiphyの最大の欠点は、Pythonの機能のサブセットしかサポートしていないことです。デコレータと例外はサポートされていますが、クラスもデフォルト引数も使用できません。これの多くは、Jiphyがソースコードとターゲットコードの間の行間の関係を目指しているためですが、その開発者は、より高度なPython機能のサポートのためにES6の新機能に注目しています。

Jiphyプロジェクトは、2017年後半から更新されていないことに注意してください。Jiphyは、作業が再開されるまで、厳密に実験的なものと見なす必要があります。

JS2Py

JS2Pyは、名前が示すように、純粋なPython変換エンジンを使用してJavaScriptをPythonに変換します。勇敢で大胆なES6の実験的なサポートはありますが、現時点ではES5のみの公式サポートがあります。

JS2Pyは、PythonとJavaScriptの間の多くの相互運用をサポートしています。js2py.requireメソッドを使用して、既存のNode.jsモジュールをPythonコードにインポートできます。JavaScript側の変数はPython側で評価でき、PythonオブジェクトはJavaScriptコードからも使用できます。

JS2Pyには、PythonのJavaScriptコードを評価する非常に実験的な仮想マシンも含まれていますが、本番環境での使用はまだ推奨されていません。

RapydScript

RapydScriptは、「吸わないPythonicJavaScript」を約束します。このプロジェクトは、代替言語(この場合はPythonのフレーバー)で記述されたコードを取り込み、そのままどこでも実行できるJavaScriptを生成するという点でCoffeeScriptに似ています。 

したがって、RapydScriptは両方の長所を提供し、無名関数、DOM操作などのJavaScript機能、およびjQueryやNode.jsコアなどのJavaScriptライブラリを活用する機能にPythonのクリーンな構文をもたらします。そうです。Rapydscriptで生成されたコードを使用して、WebページやNodeアプリを駆動できます。 

RapydScryptのもう1つの便利な機能:可能な場合、特定の操作に対してPythonとJavaScriptの両方の命名法を提供します。たとえば、$jQueryで使用される特別なシンボルはRapydScriptでそのまま機能し、配列は.push(JavaScript .append)メソッドと(Python)メソッドの両方をサポートできます。

Transcrypt

Transcryptという名前を聞いて、TypeScriptを考えれば、それほど遠くはありません。Transcryptは、同じ基本的な考え方に従います。つまり、PythonをJavaScriptに変換します。また、可能な限り、ラムダやクラス間の多重継承などの構造を含む、元のPythonコードの構造とイディオムを保持しようとします。

さらに、元のPythonを指すトランスパイルされたコードのソースマップを生成できるため、開発者は生成されたJavaScriptの代わりにそのコードを使用してデバッグできます。ドキュメントによると、TranscryptはCPythonの抽象構文ツリーモジュールを使用してこれらのタスクを実行します。これにより、Pythonが独自のコードを解析する方法にプログラムでアクセスできます。

Transcryptの最大の利点の1つは、JavaScriptのドキュメントオブジェクトモデル(DOM)への自動アクセスです。document.getElementById たとえば、Pythonでアクセスしようとする と、変換されたコードはdocument.getElementById JavaScriptの実際のコードを使用 します。

関連するプロジェクトであり、まだかなり覆い隠されているのはNumscryptで、これはNumPyの数学と統計のライブラリをJavaScriptに移植します。これまでのところ、NumscryptはNumPyの機能のサブセットのみを提供していますが、これらの機能(行列演算など)は最も一般的に使用されています。ただし、Numscryptは2018年以降更新されていません。