OpenSource-Hub
S

scriptc

SHA-256
6.2k stars·開発ツール·SHA-256 チェックサム確認済み

TypeScript をネイティブ実行ファイルと WebAssembly にコンパイルする実験的なコンパイラで、実行時に Node.js をインストールする必要はありません。

スマートダウンロード

Download 版をダウンロード

v0.3.6 · 77.6 MB

TypeScript を直接ネイティブプログラムにコンパイルするコンパイラ

主な機能

  • TypeScript/JavaScript を真のネイティブ実行可能ファイルにコンパイル
  • WebAssembly(WASI)モジュールの出力をサポート
  • コンパイルされた成果物は Node.js のインストールなしで実行可能
  • npm の依存関係はコードと一緒にコンパイルされ、実行時に node_modules を読み込まない
  • coverage コマンドを内蔵し、コードのコンパイル可能な割合を事前に検出して書き換えの提案を提供

できないこと

  • •注意事項:これは実験的なプロジェクトであり、JavaScript、TypeScript、Node.js API のサブセットのみをサポートしており、eval などの動的な機能はコンパイルできません。すべての npm パッケージがコンパイルできるわけではないため、導入前に scriptc coverage で確認してください。実行可能ファイルのビルドには、システムにリンカーとプラットフォーム SDK がインストールされている必要があり、Windows では hello.exe を生成し、.\hello.exe で実行する必要があります。WASI モジュールの実行にも引き続き Node.js が必要です。重要な本番環境に直接使用することは推奨されません。インターフェースはバージョンによって変更される可能性があります。

使用例

  • コマンドラインツールを単一の実行ファイルにパッケージ化し、Node.js をインストールしていないユーザーに配布する
  • 軽量なネイティブ HTTP サービスを構築し、サーバーや軽量コンテナにデプロイする
  • 外部のビルドシステムに組み込み可能な WASI モジュールを生成する
  • 1台のマシンで macOS、Linux、Windows の3プラットフォーム向けプログラムをクロスコンパイルする

詳細説明

scriptc は Vercel Labs の実験的なコンパイラであり、TypeScript と JavaScript をネイティブ実行ファイルおよび WebAssembly モジュールにコンパイルできます。TypeScript の型情報を活用してマシンコードを直接生成するため、生成物の実行時に Node.js をインストールする必要はありません。Bun や Deno の「ランタイムのバンドル」方式とは異なり、scriptc は真の AOT コンパイルであり、バイナリはより軽量で純粋です。npm の依存関係もコードとともにコンパイルされ、node_modules を読み込むことはありません。現在は JS/TS と Node API のサブセットのみをサポートしているため、まず scriptc coverage でコードのコンパイル可能な割合を確認することをお勧めします。macOS、Linux、Windows をサポートし、クロスコンパイルが可能で、ネイティブ FFI を介して C 関数を呼び出すこともできます。

トラブルシューティング & FAQ (2)

トラブル対応
なぜジェネリッククラスのメソッドは、コンパイルされたバイナリでは 'TypeError: x is not a function' をスローするのに、Node では正常に動作するのでしょうか?

既知のコンパイラバグ (v0.3.0、issue #963)。ジェネリッククラスのインスタンスに対して、リテラルでないキーを用いた (obj as any)[key] = fn のような計算キーによる書き込みがどこかに存在すると、メソッド名の集計処理がそのクラスのメソッドを prototypeMethodAccesses に降格させてしまう。その結果、ローワリング後のコードは dyn.hasKey ガードなしでインスタンスごとの動的プロパティバッグを読み取り、かつ classPrototypeData はジェネリッククラス/ジェネリックインスタンスクラスに対して null を返すため、プロトタイプへのフォールバックが存在しない。バッグの読み取りは undefined を返し、呼び出しが例外をスローする。非ジェネリッククラスはプロトタイプデータヘルパーが生成されるため影響を受けない。

コンパイラの修正が取り込まれるまでの回避策:
1. ジェネリッククラスのインスタンスへの動的キーによる書き込みを排除する — 外部メタデータは別の Map/サイドテーブルに保存するか、obj[expr] = value の代わりにリテラルなプロパティ代入を使用する。
2. 可能であれば、型パラメータを削除し (Ctx<T> の代わりに具体的な型を使用する)、クラスが非ジェネリックパスでコンパイルされるようにする。このパスではプロトタイプデータヘルパーが構築され、メソッドが正しく解決される。

検討中のコンパイラ側の修正方針: ジェネリックインスタンスに対してプロトタイプデータを生成してバッグ読み取りにフォールバックを持たせるか、ジェネリッククラスのメソッドについて dyn.hasKey ガードを維持して読み取りが静的メソッドにフォールバックするようにするか。

参照 Issue #963
トラブル対応
scriptcでインターフェース型のレシーバーを介してジェネリックメソッドを呼び出す際に発生するSC1090エラーを修正するにはどうすればよいですか?

SC1090 は、コンパイラがレシーバーのランタイムクラスを静的に証明できないことを意味します。ジェネリックメソッドは静的にディスパッチされるため、この証明が必要です。これは、オブジェクトが any を通過した後にインターフェースへキャストし直される場合に発生します(例:const restored = erased as GenericIdentity; restored.id(42))。このパターンはまだサポートされていません(機能リクエスト #905)。回避策:(1) オブジェクトが any に消去される前に、元の型付きオブジェクト上でジェネリックメソッドを直接呼び出してください。元のオブジェクトを介した直接呼び出しはサポートされています。(2) クラスインスタンスの場合は、クラスを証明可能にするため、レシーバーをその new 式で初期化した const にバインドしてください:const r: GenericIdentity = new C(...)。注意:any や型消去されたストレージを経由して往復しなければならない、オブジェクトリテラル上のジェネリックなアロー関数プロパティについては、現時点では回避策がありません。

参照 Issue #905

タグ

typescriptcompilernativewebassemblyjavascriptaot

はじめ方

1

インストーラをダウンロード

上のボタンをクリックして、お使いのシステム用のインストーラをダウンロード

2

ソフトウェアをインストール

ダウンロードしたインストーラをダブルクリックし、指示に従ってください

3

まず Node.js 24 以上のバージョンと npm をインストールします

4

ターミナルで npm install -g scriptc を実行してコンパイラをグローバルにインストールします

5

新しい TypeScript ファイルを作成します。例えば hello.ts

インストールガイド
  1. まず Node.js 24 以上のバージョンと npm をインストールします
  2. ターミナルで npm install -g scriptc を実行してコンパイラをグローバルにインストールします
  3. 新しい TypeScript ファイルを作成します。例えば hello.ts
ファイルの整合性

SHA-256 チェックサム確認済み

GitHub 公式 Release ページから抽出されたチェックサム

SHA256 チェックサム

e18724e690ed6f64f3de56eb990b5c5a4617638bef683356342f4e1894382741

このチェックサムは GitHub Release ページから抽出されたものです。ダウンロード後にファイルの整合性を確認してください。

本プラットフォーム上のすべての SHA-256 チェックサムは、プロジェクトの公式 GitHub Release ページから抽出されたもので、一切の改変はありません。GitHub Releases ページで独自に検証できます。

オープンソースの透明性

GitHub ソースを見る
環境ガイド

アンインストール情報

ターミナルで npm uninstall -g scriptc を実行すればアンインストールできます。GitHub Releases から手動でダウンロードしたスタンドアロン版コンパイラの圧縮アーカイブの場合は、解凍したファイルをそのまま削除するだけです。コンパイルで生成された実行可能ファイルとコンパイラは互いに影響しないため、個別に保持または削除できます。

追加の依存関係なし

ダウンロード後すぐに使用可能。追加のランタイムは不要です。

プロジェクト情報
ライセンスApache-2.0
最終更新2026-10-21 00:36:34
GitHub リポジトリ公式サイト

問題が発生?以下のFAQを確認

2 FAQs

類似プロジェクト