**タイトル:**  
*Sky ― Elm に触発された、Go へコンパイルされる言語*

2026/04/07 0:22

**タイトル:** *Sky ― Elm に触発された、Go へコンパイルされる言語*

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

SkyはGoバイナリに直接コンパイルされる実験的なプログラミング言語で、Goの実用性とElm風の型推論・関数型設計を融合しています。Sky自体がコンパイラ、CLI、フォーマッタ、言語サーバーをホストし、Node.jsやnpmを必要とせずに約4 MBのネイティブバイナリを生成します。

ビルドパイプラインはソースコードをトークン化し、ASTへ解析、Hindley–Milner型推論を実行、プログラムを中間表現(IR)へ低減、Goコードを出力し、FFIラッパーをコピー、

go mod tidy
を実行し、最後に
go build
でビルドします。FFIの統合ロード、モジュール低減の並列化、文字列結合最適化、インクリメンタルコンパイルキャッシュ、ランタイムホットパス改善(
sky_equal
ファストパス)などの最適化は速度と効率を重視しています。

Skyはフルスタック開発をサポートします。Go関数を呼び出すFFIバインディングを自動生成(Taskラップ、panic安全)、UIにはTEAアーキテクチャを提供し、Phoenix LiveViewに触発されたサーバ駆動型UIフレームワーク

Sky.Live
を備えています。
Sky.Live
はWebSocketの代わりにServer‑Sent Eventsを使用し、ルーティング、購読(
SubTimer
Time.every
)、セッションストア(memory/redis/sqlite/postgresql)を含み、Elmの慣習に基づく自動コンポーネント接続機能も備えています。

言語はHindley–Milner型推論、代数的データ型、網羅的パターンマッチング、純粋関数、およびリッチな標準ライブラリ(List, Dict, Json, Html, Css, Task, Http など)を備えています。パッケージマネージャはSkyパッケージ(

sky.toml
)とGoパッケージ(
go.mod
)の両方を扱い、自動的にバインディングを生成し、クリーン、プレフィックス付き、フルパスなどのインポートスタイルをサポートします。

現在の制限点—入れ子ケース式への不完全な対応、型注釈での匿名レコード不足、FFIコールバックラッピングの制限、一部クロスモジュールADTコンストラクタ問題—は将来リリース向けに追跡されています。プロジェクトはMITライセンスで公開されており、例作成、バグ報告、標準ライブラリ改善、

Sky.Live
のテストを奨励する貢献ガイドラインが整備されています。

単一言語でエンドツーエンドアプリケーションを書き、効率的なGoバイナリにコンパイルできるようにすることで、Skyは現代の関数型機能と低レベル性能を組み合わせる実用的な道筋を提供します。

本文

実験的 – Sky は現在アクティブに開発中です。API と内部構造は変更される可能性があります。

Sky は Go の実用主義と Elm のエレガンスを融合させた実験的プログラミング言語で、FP コードを書きつつ 1 本の移植可能バイナリを生成できるシンプルなフルスタック言語です。

module Main exposing (main)

import Std.Log exposing (println)

main =
    println "Hello from Sky!"

Sky が結合するもの

GoElmPhoenix LiveView
高速コンパイル、単一静的バイナリ、データベース・HTTPサーバー・クラウドSDKなどを網羅した実績のあるエコシステムHindley–Milner 型推論、代数型データ、網羅的パターンマッチ、純粋関数、Elm ArchitectureDOM diffing、セッション管理、SSE サブスクライブ。クライアント側フレームワーク不要。WebSocket も必要なし

Sky は Go にコンパイルされます。1 本のバイナリで API サーバー、データベースアクセス、サーバー描画 UI を全て実行できるため、コードベース・言語・デプロイメントアーティファクトは 1 つです。

コンパイラ・CLI・フォーマッタ・LSP はすべて Sky 自身で書かれ、Go にコンパイルされた約 4 MB のネイティブバイナリです。Node.js/TypeScript/npm の依存は一切ありません。コンパイラは 3 世代以上にわたる自己コンパイルで起動します。


Sky が存在する理由

私は Go、Elm、TypeScript、Python、Dart、Java などを長年プロフェッショナルに使用してきました。それぞれに強みがあるものの、シンプルさ・保証力・関数型プログラミング・フルスタック能力・ポータビリティ―すべてを一つの言語で実現できるものはありませんでした。

React/TypeScript フロントエンドと別途バックエンドを構築する際に、境界ごとに異なる型システムや重複モデル、複雑なビルドパイプライン、JS エコシステム特有の「本当に動くか?」という不確実性が生じ、保守コストが初期開発を上回る痛みを経験しました。

そこで Go のツールチェーン(高速ビルド・単一バイナリ・真の並行処理・大規模エコシステム)と Elm の開発体験(コンパイル成功=実行成功、恐れずにリファクタリングできる、アーキテクチャがスケールする)を組み合わせたかった。さらに Phoenix LiveView に触発され、サーバ駆動 UI がフロントエンド/バックエンド分離を完全に排除できることに気づきました―1 つの言語・モデル・デプロイメントで済む。

初期試作は Sky を JavaScript と React エコシステムにコンパイルしていましたが、npm の混乱やバンドル設定、動的型ランタイムの不確実性を抱えることになり、再設計しました。Go をターゲットにし、フロントエンドは Elm の構文と型システム、バックエンドは Go のエコシステムとバイナリ出力で統合し、任意の Go パッケージを安全に呼び出せる FFI バインディングを自動生成しました。

言語開発は通常数年の長期プロジェクトですが、AI 支援(Gemini CLI → Claude Code)によって数週間で実現できました。私は言語仕様・パイプライン・FFI 戦略・Live Architecture を設計し、AI ツールが単独では不可能だった高速反復をサポートしました。

Sky は「制限なし」を意味します。実験的で意見のはっきりしたものですが、もしあなたのワークフローに響くならぜひ教えてください。


目次

  1. クイックスタート
  2. 言語機能
    • モジュール
    • 関数
    • パターンマッチ
    • データ構造
    • 演算子
    • 制御フロー
    • Go 連携 (FFI)
    • TEA アーキテクチャ
  3. 標準ライブラリ
  4. Sky.Live
  5. パッケージ管理
    • sky.toml リファレンス
    • 依存関係
    • ライブラリ公開
  6. CLI 参照
  7. ビルドパイプライン
  8. 型チェッカー
  9. フォーマッタ
  10. エディタ統合
  11. サンプル
  12. アーキテクチャ
  13. コンパイラ最適化の旅
  14. 次回作業 (v1.0)
  15. 型安全性の旅
  16. パーサ: インデントベースケーススコーピング
  17. 型チェッカー: クロスモジュール型解決
  18. 非網羅的ケース検出
  19. FFI 境界安全
  20. ランタイム正確性
  21. 増分コンパイル
  22. 制限事項 (v0.7.x)
  23. コントリビューション
  24. ライセンス

クイックスタート

インストール

# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/anzellai/sky/main/install.sh | sh

# カスタムディレクトリにインストール
curl -fsSL https://raw.githubusercontent.com/anzellai/sky/main/install.sh | sh -s -- --dir ~/.local/bin

# Docker で実行
docker run --rm -v $(pwd):/app -w /app anzel/sky sky --help

前提: Go がインストールされていること(Sky は Go にコンパイルします)。

プロジェクト作成

sky init my-app
cd my-app
sky run

生成物:

my-app/
  sky.toml          # プロジェクトマニフェスト
  .gitignore        # Sky 固有の除外ルール
  src/
    Main.sky        # エントリポイント

Docker (事前ビルドイメージ)

docker run --rm -v $(pwd)/my-app:/app -w /app anzel/sky sky build src/Main.sky
docker run --rm -v $(pwd)/my-app:/app -w /app anzel/sky sky run src/Main.sky

言語機能

モジュール

各ファイルは

module
宣言で始まり、公開項目を列挙します。

module Main exposing (main)
module Utils.String exposing (capitalize, trim)
module Sky.Core.Prelude exposing (..)   # すべて公開

モジュール名は PascalCase とドット区切り。ファイルパスはモジュール名と一致 (

Utils.String
src/Utils/String.sky
)。

インポート

import Std.Log exposing (println)              # 選択的インポート
import Sky.Core.String as String               # 別名付き限定
import Sky.Core.Prelude exposing (..)          # 全公開
import Github.Com.Google.Uuid as Uuid          # Go パッケージ via FFI
import Database.Sql as Sql                     # Go 標準ライブラリ
import Drivers.Sqlite as _ exposing (..)       # 副作用インポート(Go ドライバ)

Sky.Core.Prelude
はすべてのモジュールに暗黙的にインポートされます。

Hindley–Milner 推論と型クラス制約を採用。トップレベル定義にはアノテーションが推奨されます。

アノテーション例

add : Int -> Int -> Int
add x y = x + y

identity : a -> a
identity x = x

既定型

説明
Int
整数
42
,
-7
Float
浮動小数点
3.14
,
-0.5
String
テキスト
"hello"
,
"line\n"
Bool
真偽値
True
,
False
Char
文字
'a'
,
'Z'
Unit
空タプル
()
List a
順序付きコレクション
[1,2,3]
Maybe a
オプショナル値
Just 42
,
Nothing
Result err ok
成功/失敗
Ok 42
,
Err "fail"

型制約

制約対応型用途
comparable
Int, Float, String, Bool, Char, 比較可能なタプル/リスト
<, >, clamp
number
Int, Float
+,-,* ,/,%
appendable
String, List a
++

誤った型はコンパイルエラーになります。

代数データ型 (Union Types)

type Maybe a
    = Just a
    | Nothing

type Result err ok
    = Ok ok
    | Err err

type Msg
    = Increment
    | Decrement
    | SetCount Int
    | Navigate Page

コンストラクタは 0 個以上の型付きフィールドを持つことができます。パターンマッチで網羅性チェックが行われます。

レコード

point = { x = 10, y = 20 }
point.x
{ point | x = 99 }
{ model | count = model.count + 1, name = "Alice" }

let { x, y } = point in x + y

タプル

pair = (1, "hello")
triple = (True, 42, "yes")

let (a, b) = pair in a + 1

関数

すべての関数はカリー化され、部分適用が可能です。

定義例

add x y = x + y

greet : String -> String
greet name = "Hello, " ++ name

\x -> x + 1
\x y -> x + y

部分適用

addTen = add 10
result = addTen 5   -- 15

関数合成

f >> g
g (f x)
f << g
f (g x)
を意味します。

Let‑In 式

calculate x =
    let
        doubled = x * 2
        offset = 10

        helper : Int -> Int
        helper n = n + offset
    in
    helper doubled

パターンマッチ

Case 表現

describe : Maybe Int -> String
describe value =
    case value of
        Just n ->
            "Got: " ++ String.fromInt n

        Nothing ->
            "Nothing here"

リテラル、コンストラクタ、タプル、リスト、レコード、ネストパターン、

as
パターンをサポート。網羅性チェックが行われます。

データ構造

リスト

numbers = [1, 2, 3, 4, 5]
empty = []
combined = [1, 2] ++ [3, 4]
withHead = 0 :: numbers

List.map (\x -> x * 2) numbers
List.filter (\x -> x > 3) numbers
List.foldl (+) 0 numbers
List.head numbers                -- Just 1
List.length numbers              -- 5

辞書

import Sky.Core.Dict as Dict

users = Dict.fromList [ ("alice", 1), ("bob", 2) ]
Dict.get "alice" users           -- Just 1
Dict.insert "charlie" 3 users
Dict.keys users                  -- ["alice","bob"]

演算子

演算子説明優先度
`>`パイプライン (左)
`<`アプリケーション (右)
``
&&
論理 AND3
==, !=, <, >, <=, >=
比較4
++
文字列/リスト連結5
+, -
算術6
*, /, %
算術7
>>, <<
関数合成9

パイプライン

result =
    "  Hello, World!  "
        |> String.trim
        |> String.toLower
        |> String.split " "
        |> List.head

これは

List.head (String.split " " (String.toLower (String.trim " Hello, World! ")))
と等価です。

制御フロー

if‑then‑else

status =
    if count > 10 then
        "high"
    else if count > 5 then
        "medium"
    else
        "low"

if
は式であり、両分岐は同じ型を返さなければなりません。

Go 連携 (FFI)

Sky は任意の Go パッケージをインポートできます。コンパイラは安全な

Task
ラップ付きバインディングを自動生成し、panic 回復も行います。

Go パッケージのインポート

import Sky.Core.Task as Task

-- Go パッケージは Task‑wrapped Sky バインディングが自動生成される
import Github.Com.Google.Uuid as Uuid

main =
    Uuid.newString ()
        |> Task.map (\id -> "Generated: " ++ id)
        |> Task.perform

戻り値マッピング (Go → Sky)

Go の戻り値Sky の戻り値備考
T
Result String T
panic 回復付き
(T, error)
Result String T
エラーは
Err
になる
error
Result String ()
効果的、失敗し得る
void
Result String ()
Ok ()
を返す
*string
,
*int
Maybe String
,
Maybe Int
nil 安全
*sql.DB
Db
(不透明ハンドル)
ポインタは隠蔽
[]string
List String
スライス → リスト
Go 構造体不透明型コンストラクタ + ゲッター/セッター

パニック安全

すべての Go 呼び出しは

defer recover()
でラップされ、パニックは
Err "panic: …"
に変換。

ポインタ安全

プリミティブポインタ (

*string
,
*int
) →
Maybe T
。構造体ポインタ (
*sql.DB
) は
Db
(型名のみ)にマッピングされます。


標準ライブラリ

Sky.Core (プレロード)

モジュール主な関数
Sky.Core.Prelude
Result, Maybe, identity, not, always, fst, snd, clamp, modBy, errorToString, js
Sky.Core.Maybe
withDefault, map, andThen
Sky.Core.Result
withDefault, map, andThen, mapError, toMaybe
Sky.Core.List
map, filter, foldl, foldr, head, tail, length, append, reverse, sort, range, member, concat 等
Sky.Core.String
split, join, contains, replace, trim, length 等
Sky.Core.Dict
empty, singleton, insert, get, push, length

Std (アプリケーションフレームワーク)

  • Std.Log: println で出力。

Sky.Live

Phoenix LiveView に触発されたサーバ駆動 UI フレームワーク。Go HTTP サーバー、DOM diffing、セッション管理、SSE サブスクライブ、小さな JS クライアントを生成します。WebSocket は不要です。

module Main exposing (main)

import Std.Html exposing (..)
...

設定と環境オーバーライド

環境変数Sky 変数
SKY_LIVE_PORT
live.port
SKY_LIVE_INPUT
live.input
(
debounce
,
blur
)
SKY_LIVE_POLL_INTERVAL
live.poll_interval

優先順位: コンパイル時デフォルト < sky.toml < 環境変数 < .env。


CLI 参照

コマンド説明
sky init [name]
新規 Sky プロジェクト作成
sky build [file.sky]
Go にコンパイルしバイナリ生成
sky run [file.sky]
ビルドして実行
sky check [file.sky]
コンパイルなしで型チェック
sky fmt <file-or-dir>
コードをフォーマット(Elm スタイル)
sky add <package>
依存追加、バインディング生成、sky.toml 更新
sky install
すべての依存をインストールし欠落バインディング生成
sky remove <package>
依存削除、キャッシュクリア
sky upgrade
既存モジュールで依存更新

エディタ統合

Sky.LSP をサポート。モジュール名やインポートのインデントを正しく扱います。


同じ日のほかのニュース

一覧に戻る →

2026/04/07 4:50

**Show HN: Ghost Pepper – Mac 用ローカル「ホールド・トゥー・トーク」音声認識アプリ** - **概要** シングルキー(デフォルトは⌘)を押し続けるだけで、Mac 上で話す内容をテキスト化できる軽量かつプライバシー重視のアプリです。クラウド処理は一切行わず、全てローカルで完結します。 - **主な機能** • 即時文字起こし(遅延がほぼゼロ) • 複数言語・方言に対応 • ショートカットやホットキーのカスタマイズ可能 • 内蔵文法校正と句読点自動挿入 • オープンソース(GitHub) - **重要性** • 第三者 API に依存しないため、コスト削減とデータ共有に関する懸念が軽減されます • 開発者・作家・サブスクリプション不要で高速な文字起こしを求める人に最適です - **入手方法** 1. GitHub のリリースページから最新版をダウンロード 2. `GhostPepper.app` を `/Applications` フォルダーへドラッグ&ドロップ 3. アプリを起動し、好みのキー割り当てを設定して話し始める - **フィードバック & サポート** GitHub 上で不具合報告や機能リクエストが受け付けられています。小規模な貢献者コミュニティによって積極的にメンテナンスされています。 *macOS でクラウドを使わず低遅延の音声認識ツールを探しているなら、Ghost Pepper が最適かもしれません。*

## Japanese Translation: **概要** Ghost PepperはmacOS専用の完全ローカル音声認識アプリで、macOS 14+ Apple Silicon上で動作します。 - **プライバシー優先設計:** クラウドAPIを使用せず、データはマシンから外部へ出ることがなく、転写結果はメモリ内にのみ保持されます(デバッグログは終了時に消失)。 - **動作方法:** Controlキーを押し続けて録音し、離すと自動的に任意のテキストフィールドへ転写結果が貼り付けられます。 - **モデルオプション:** - *音声認識モデル:* Whisper tiny.en (~75 MB)、Whisper small.en(デフォルト、~466 MB)、Whisper small multilingual (~466 MB)、Parakeet v3 (~1.4 GB)。 - *クリーンアップモデル:* Qwen 3.5 0.8B (~535 MB, ~1–2 s)、Qwen 3.5 2B (~1.3 GB, ~4–5 s)、Qwen 3.5 4B (~2.8 GB, ~5–7 s)。 - **ユーザーインターフェース:** メニューバーに表示され、Dockアイコンはありません。ログイン時に自動起動しますが、設定で無効化可能です。 - **権限:** マイクロフォンとアクセシビリティの許可が必要です(音声取得およびキーストロークの擬似入力)。 - **インストール & ライセンス:** DMGからインストールするか、Xcodeでソースをビルドします。アプリはMITライセンスで配布され、WhisperKit、LLM.swift、Hugging Face、Sparkle を使用しています。 - **エンタープライズサポート:** 管理デバイス上ではMDM PPPCペイロード(Bundle ID `com.github.matthartman.ghostpepper`、Team ID `BBVMGXR9AY`)を通じてアクセシビリティ許可を事前承認できます。 Ghost Pepperはクラウドサービスに依存せず、資金調達も大きくなく、完全ローカルで利用できる無料の音声転写代替手段です。

2026/04/07 1:32

**Launch HN: フリースタイル – コーディングエージェント用サンドボックス**

## Japanese Translation: **概要:** プラットフォームは、サンドボックスと呼ばれる完全に管理されたLinux仮想マシンを提供し、ユーザーがコードの保存・デプロイ・ネットワーキングを正確に制御した状態で数万ものコーディングエージェントを実行できるようにします。各サンドボックスはコンテナではなく完全なVMであり、本当のrootアクセス、ネストされた仮想化サポート、ユーザーアカウントのシール、systemdサービス、グループ分離、およびフルLinuxネットワークスタックを提供します。エージェントコードはプラットフォーム上のGitリポジトリに格納され、FreestyleやGitHubなどの外部リポジトリと双方向で同期できます。ユーザーはブランチ、パス、イベントタイプでフィルタリングされた各リポジトリごとの細かなWebhooksを設定し、`ci.internal/webhook`、Slack(`hooks.slack.com/trigger`)またはFreestyleデプロイトリガーなどのエンドポイントに接続できます。デプロイメントはgitプッシュで自動化するか、Freestyle Deployments機能を使用してVMに直接クローンすることも可能です。Agent Scale Infrastructureインターフェースは多数のサンドボックス間でスケーリングを実現し、無料ティアはクレジットカード不要で実験を促進します。このソリューションは組織に対して、安全かつ拡張性のあるエージェント環境を提供し、インフラストラクチャとネットワーキングのニーズを満たします。

2026/04/06 19:36

サム・オルトマンは私たちの未来を支配できるか――彼を信頼してよいのでしょうか?

**タイトル:** *Sky ― Elm に触発された、Go へコンパイルされる言語* | そっか~ニュース