CLIツール
anzellai/sky avatar
anzellai/sky

Sky:型付き Go へコンパイルする Elm 風フルスタック言語

このプロジェクトは「Sky, an Elm-inspired language that compiles to Go. Hindley-Milner types, server-driven UI (Sky.Live), single binary output.」を基盤として、実践的に使えるオープンソース実装を提供し、再利用可能なツールチェーンと統合手段を備えています。

スター 432フォーク 10GoApache-2.0
GitHub

ひと目でわかる

これは何?
Sky は Hindley-Milner 型と init/update/view モデルを持ち、Sky.Live・Sky.Spa・Sky.Tui など複数形状へ同一ソースから静的 Go バイナリを出力する v0.23.x 系言語です。
誰に向いている?
サーバー駆動 UI と wasm クライアントを同一ソースで試したい Go デプロイ志向の開発者向けです。curl インストールまたは rust/crates/sky の cargo build --release 後、sky init hello && sky run src/Main.sky で起動し、sky check が go build まで通るか、ENV=production で /_sky/metrics がロックされるか確認してから sky.toml を組み立ててください。
商用利用できる?
できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
今もメンテナンスされている?
されています。直近 1 日以内に新しいコミットがあります。
何の言語で書かれている?
主に Go です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

v0.23.x と Rust コンパイラへの移行

Sky は型付き Go にコンパイルするフルスタック関数型言語で、README の Status 行は v0.23.x とし、公開 API は v1.0 ライン向けに安定、内部はマイナー版間で変わり得ると述べています。コンパイラは rust/ 配下の Rust cargo ワークスペース(lexer/parser、name resolution、HM inference、type-directed lowering、Go codegen、FFI、formatter、LSP)に移され、退役 Haskell コンパイラは legacy-haskell-compiler/ に差分オラクルとして残ります。

README は Elm-inspired language that compiles to Go、Hindley-Milner types、server-driven UI (Sky.Live)、single binary output と説明しています。v0.23 の Std.App は one builder + one --target for every app shape、Sky.Core.Secret は typed self-redacting secrets として docs/security/secret-migration.md に記載されています。sky-lang.org、anzellai.github.io/sky/、examples/ が公式ドキュメント入口です。The compiler is written in Rust (cargo workspace at rust/) と Status 行は明記しています。 追加段落:README一次情報に基づき、本リポジトリの公開範囲はドキュメントとソースに限定されます。star数やfork数はGitHubメタデータ由来の注目指標であり、機能保証やSLAを意味しません。導入判断では、READMEが示す具体コマンド・設定キー・バージョン番号を手元環境で再現し、期待する入出力が得られるかを記録してください。READMEに無い性能数値、互換マトリックス、セキュリティ監査結果は推測で補わず、issue/リリースノート/公式サイトで確認できる事実だけを採用記録に残します。

If it compiles, it works の型契約

README では副作用は Task Error a、失敗しうる値は Result Error a を返し、sky check が生成 Go に go build を呼ぶため形状不一致は型チェック時に表面化すると説明されています。実行時 null、未捕捉例外、暗黙の数値 coercion がないと主張し、Elm 風の明示型と網羅的 pattern matching を採用しています。

Why Sky 節では One language every shape、Batteries included、Go ecosystem via sky add、AI-friendly design、One binary out the back を列挙しています。Observability built in として /_sky エンドポイント群も Why Sky に含まれます。評価では最小 Main.sky を sky check し、意図的に型不一致を入れて go build 失敗が sky check で捕捉されるか、正常コードでは ./sky-out/app が起動するかを分けて記録します。 追加段落:README一次情報に基づき、本リポジトリの公開範囲はドキュメントとソースに限定されます。star数やfork数はGitHubメタデータ由来の注目指標であり、機能保証やSLAを意味しません。導入判断では、READMEが示す具体コマンド・設定キー・バージョン番号を手元環境で再現し、期待する入出力が得られるかを記録してください。READMEに無い性能数値、互換マトリックス、セキュリティ監査結果は推測で補わず、issue/リリースノート/公式サイトで確認できる事実だけを採用記録に残します。

sky add と Go FFI バインディング

sky add github.com/some/package で Go パッケージをイントロスペクトして型付き Sky バインディングを生成し、手書き FFI グルーが不要と README にあります。Stripe SDK(README 称 ~76k FFI シンボル)がコンパイルされ tree-shake されて約 4k 行 main.go になる例も README の自己申告です。Go's whole ecosystem 項目では any Go package just an import away と README は述べています。

Why the compiler is in Rust 節では Haskell コンパイラの monolithic multi-thousand-line lowering pass と IORef mutable 状態、HM solver の hard memory budgets が v1 目標の障壁だったと説明し、Rust 移行後は query-DAG core で incremental rebuild と cross-module analysis が robust by construction になると述べています。legacy-haskell-compiler/ は v1 タグまで byte-for-byte differential oracle として残ります。 追加段落:README一次情報に基づき、本リポジトリの公開範囲はドキュメントとソースに限定されます。star数やfork数はGitHubメタデータ由来の注目指標であり、機能保証やSLAを意味しません。導入判断では、READMEが示す具体コマンド・設定キー・バージョン番号を手元環境で再現し、期待する入出力が得られるかを記録してください。READMEに無い性能数値、互換マトリックス、セキュリティ監査結果は推測で補わず、issue/リリースノート/公式サイトで確認できる事実だけを採用記録に残します。

Pick your shape 表の各エントリポイント

README の Pick your shape 表では、Sky.Live は interactive web app server-driven、Live.app (Live.config {…})、zero client build、SSE per session と説明され、Sky.Spa は cross-platform web/desktop/iOS/Android、Spa.app (Spa.config {…})、client wasm、stateless API backend と整理されています。Sky.Http.Server は Server.listen 8000 [...]、Sky.Tui は rich terminal app with same Std.Ui view、Sky.Webview は native desktop window、Sky.Cli は CLI ツールです。

同一 Std.Ui Element view は DOM、ANSI セル、ネイティブ webview に描画され、stdlib は docs/stdlib.md と sky doc --serve で文書化されています。CLAUDE.md と sky init の starter CLAUDE.md が AI アシスタント向けコンテキストとして README に言及されています。Reach for it when 列は各形状の選定理由を README 上で明示しています。

/_sky の console・metrics・healthz

Sky.Live と Sky.Http.Server は /_sky 配下に console、metrics、healthz、readyz、buildinfo を自動マウントすると README にあります。本番では SKY_CONSOLE_AUTH で console を制御し、metrics は Prometheus スクレイプ用 counters/histograms です。sky console serve で HubExporter (OTLP/HTTP) 経由の中央ハブを作れ、OTEL_EXPORTER_OTLP_ENDPOINT を OpenTelemetry コレクタ向けに尊重すると説明されています。

本番ゲートは ENV(フォールバック SKY_ENV)で、dev/development/local 以外は開発 console、バナー、metrics エンドポイントをロックダウンします。本番構成は sky.toml で live、database、auth、log を管理し、秘密は環境変数から読み取られます。テストでは sky run 後に curl で /_sky/healthz と /_sky/readyz の応答コードを記録し、ENV=production 切替後に /_sky/metrics が 403 等で遮断されるか確認する手順が実用的です。

カウンター例と sky run/build

README の Hello, Sky カウンター例では Std.Live.app、Std.Cmd、Std.Sub、Std.Ui、Std.Ui.Font を import し、Increment/Decrement の Msg と { count : Int } Model を case で処理する init/update/view を定義します。view では Ui レイアウト API でボタンと count 表示を組み立て、sky run src/Main.sky で http://localhost:8000 を開きます。同じ view を Std.Tui.app や Std.Webview.app へ差し替えられます。

Hello 最小例は module Main exposing (main) と println "Hello from Sky!" で、sky init hello && cd hello && sky run src/Main.sky から始まります。ビルドは sky build src/Main.sky で ./sky-out/app を生成します。End users は PATH の sky と Go 1.21+ が必要です。評価ではカウンター例で Increment クリック後の count 変化をブラウザで確認し、sky build 生成物を ./sky-out/app で再起動して同じ状態が復元されるか試します。

install.sh、Apache-2.0、コンパイラ移行

macOS/Linux では curl -fsSL https://raw.githubusercontent.com/anzellai/sky/main/install.sh | sh で単一バイナリを入れられます。ソースからは git clone 後 rust/ で cargo build --release -p sky、または cargo install --path rust/crates/sky --root ~/.local --locked です。Windows 向け手順や最低 Rust 版は README では未記載です。

README の Why the compiler is in Rust では Haskell から Rust への移行理由(monolithic lowering、IORef 状態、HM solver 上限)を説明し、legacy-haskell-compiler/ を v1 まで differential oracle として残すと述べています。Apache-2.0(著作権 2025-2026 Anzel Lai)、NOTICE.md の elm/compiler 帰属、v0.10.1 以降のライセンス変更も README にあります。導入確認では install.sh 後に sky version と go version を記録し、cargo ビルド経路では rust/crates/sky の release バイナリを PATH に通して sky init を試します。

stdlib と sky doc --serve

README の Batteries included では Auth、database、HTTP、WebSocket、JSON、JWT、CSV、email、encryption、observability が stdlib に含まれ、docs/stdlib.md と sky doc --serve で文書化されると述べています。Std.Db、Std.Auth、Std.Ui、Std.Cache、Std.Email、Std.Log、Std.Trace などが列挙されます。

Money、decimal、analytics、compression、config も stdlib 構成として README が触れています。Pick your shape 表と Hello 例、カウンター例を合わせて読むと各入口の差が整理できます。sky doc --serve で利用予定 Std モジュールのシグネチャを README 例と照合し、sky check/go build と ENV=production の /_sky/healthz 応答を記録してから sky.toml を組み立てます。

編集部の結論

サーバー駆動 UI と wasm クライアントを同一ソースで試したい Go デプロイ志向の開発者向けです。curl インストールまたは rust/crates/sky の cargo build --release 後、sky init hello && sky run src/Main.sky で起動し、sky check が go build まで通るか、ENV=production で /_sky/metrics がロックされるか確認してから sky.toml を組み立ててください。

公式情報源

  1. Official README
  2. Project repository
  3. Release notes
コミュニティノート

コミュニティノート