🚀 ruchy
データサイエンスと科学技術計算のための、現代的で表現力豊かなプログラミング言語です。自己ホスト型コンパイラ、包括的なツール、エンタープライズレベルの品質基準を備えています。
🚀 クイックスタート
ruchy
ruchy script.ruchy
ruchy run script.ruchy
ruchy compile script.ruchy -o myapp
ruchy fmt src/
ruchy test tests/
✨ 主な機能
- 自己ホスト型コンパイラ:Rustで書かれ、完全なブートストラップ機能を備えています。
- 対話型REPL:構文ハイライトと補完機能を備えた高度なREPLです。
- WebAssemblyサポート:ブラウザとエッジデバイスでのデプロイのためにWASMにコンパイルできます。
- ノートブック統合:テストフレームワーク付きのJupyterスタイルのノートブックが利用可能です。
- 型システム:双方向型チェックと型推論機能を備えています。
- パッケージ管理:
ruchy addを通じて14万以上のクレートを持つCargoと統合されています。
- 品質第一:トヨタ生産方式の原則とPMAT A+コード基準を採用しています。
- メモリ安全:生成される出力には不安全なコードが一切含まれず、すべてのコードはスレッドセーフです。
- Rustの並行性:スレッド、async/await、チャネルを完全にサポートしており、Rustと同等の機能を持ちます。
📦 インストール
cargo install ruchy
cargo install ruchy --features mcp
git clone https://github.com/paiml/ruchy
cd ruchy
cargo build --release
💻 使用例
基本的な使用法
// 変数
let x = 42
let name = "Ruchy"
println(f"Hello, {name}! x = {x}")
// 関数
fun add(a, b) {
a + b
}
let result = add(10, 20)
println(f"10 + 20 = {result}")
// パターンマッチング
let value = Some(5)
match value {
Some(x) => println(f"Got {x}"),
None => println("Nothing"),
}
// コレクション
let numbers = [1, 2, 3, 4, 5]
println(f"Numbers: {numbers:?}")
高度な使用法
パッケージ管理 (v3.76.0で新機能)
ruchy new my_project
cd my_project
ruchy add serde
ruchy add tokio@1.0
ruchy add --dev proptest
ruchy build
ruchy build --release
cargo run
データサイエンス機能 (DataFrame - 80% 完了)
let df = dataframe::from_columns(vec![
("age", vec![25, 30, 35]),
("score", vec![95, 87, 92])
]).unwrap();
📚 ドキュメント
文法実装状況
100% 完了 - すべての89/89の文法機能が実装され、検証されています(v3.94.0+)
Ruchyは、包括的な検証を伴う完全な文法実装カバレッジを達成しています。
- handler_expr (SPEC-001-J): パターンマッチングを持つエフェクトハンドラ -
handle expr with { operation => body }
- expression_roundtrip: 1536以上のプロパティテストケースを通じて、パーサーとフォーマッターの同等性が検証されています。
検証結果:
- 3モード検証: 26のテスト(インタープリター、トランスパイル、コンパイルモード)
- プロパティテスト: 11のテストで1536以上のランダム化されたテストケース
- 必須ツール: すべてのコアツール(チェック、リント、AST、フォーマット、実行、トランスパイル、コンパイル、テスト、カバレッジ)を検証する10のテスト
- 合計: 47以上の包括的な検証テスト
すべての文法機能は、すべての実行モードおよびツールで動作します。完全な仕様については、grammar/ruchy-grammar.yamlを参照してください。
MCPサーバー
Ruchyは、コード分析、スコアリング、リント、トランスパイル機能をClaudeや他のMCPクライアントに公開するModel Context Protocol (MCP) サーバーを提供します。
インストール
cargo install ruchy --features mcp
設定
Claude Desktopの設定ファイル(macOSでは~/Library/Application Support/Claude/claude_desktop_config.json)に以下を追加します。
{
"mcpServers": {
"ruchy": {
"command": "ruchy",
"args": ["mcp"]
}
}
}
利用可能なツール
Ruchy MCPサーバーは7つのツールを提供します。
- ruchy-score: 統一された0.0 - 1.0のスコアリングシステムでコード品質を分析します。
- ruchy-lint: 自動修正提案付きのリアルタイムコードリントを行います。
- ruchy-format: 設定可能なスタイルでRuchyソースコードを整形します。
- ruchy-analyze: AST、メトリクス、洞察を含む包括的なコード分析を行います。
- ruchy-eval: 型安全性を持ってRuchy式を評価します。
- ruchy-transpile: RuchyコードをRustにトランスパイルします。
- ruchy-type-check: Ruchy式の型チェックを行います。
使用方法
ruchy mcp --verbose
詳細については、docs/mcp-registry-publish.mdを参照してください。
CLIコマンド
コアコマンド
ruchy - 対話型REPLを起動する(引数なし、Denoスタイルのユーザーエクスペリエンス)
ruchy <file> - Ruchyスクリプトを直接実行する(即座に解釈される)
ruchy run <file> - Ruchyスクリプトを実行する(直接実行のエイリアス)
ruchy -e "<code>" - コードを直接評価する(例: ruchy -e "println(1+1)")
ruchy compile <file> - スタンドアロンバイナリにコンパイルする
ruchy fmt <path> - コードを整形する(--checkフラグをサポート)
WebAssembly
ruchy wasm compile <input> -o <output> - WASMにコンパイルする
ruchy wasm validate <module> - WASMモジュールを検証する
ruchy wasm run <module> - WASMモジュールを実行する
WASM配布 (v3.99.2+):
Ruchyは、ブラウザとエッジデバイスでのデプロイのための事前ビルド済みのWASMバイナリを提供します。
wasm-pack build --target web --no-default-features --features wasm-compile
ブラウザでの使用方法:
<script type="module">
import init, { WasmRepl } from './ruchy.js';
await init();
const repl = new WasmRepl();
const result = repl.eval('1 + 2');
console.log(result);
</script>
注意: WASMビルドでは、HTTPおよびファイルI/O操作は除外されます(ブラウザサンドボックスでは利用できません)。
開発サーバー
Ruchyは、ホットリロード、WASMコンパイル、グレースフルシャットダウンを備えた世界クラスの開発サーバーを提供します(v3.105.0+)。
基本的な使用方法:
ruchy serve
ruchy serve ./dist --port 3000
ruchy serve --watch
ruchy serve --watch --watch-wasm
高度な機能:
ruchy serve \
--watch \
--watch-wasm \
--debounce 200 \
--verbose \
--pid-file server.pid
機能:
- ホットリロード: ファイル変更時に自動的にサーバーを再起動します(設定可能なデバウンス)
- WASMコンパイル: 保存時に
.ruchyファイルを自動的に.wasmにコンパイルします
- グレースフルシャットダウン: Ctrl+Cでクリーンにシャットダウンできます(
kill -9は不要!)
- ネットワークアクセス: モバイルテスト用にローカルとネットワークのURLを表示します
- PID管理: RAIIベースのPIDファイルで自動的にクリーンアップされます
- 美しいユーザーエクスペリエンス: Viteスタイルの色付き出力とステータスインジケーター
- パフォーマンス: 最適化されたTCP設定を持つマルチスレッド非同期ランタイム
WASMホットリロードワークフロー:
ruchy serve --watch --watch-wasm
本番デプロイ:
ruchy wasm compile *.ruchy -o dist/ --opt-level 3
ruchy serve ./dist --port 8080
ノートブック
ruchy notebook - http://localhost:8080で対話型ノートブックサーバーを起動する
ruchy notebook test <file> - カバレッジ付きでノートブックをテストする
ruchy notebook convert <input> <output> - ノートブック形式を変換する
ノートブックの機能 (v3.75.0+):
- 状態の永続化: セルの実行を通じて変数と関数が保持されます(SharedRepl)
- スレッドセーフ: Arcベースの並行アクセスとMutex同期
- Markdownサポート: XSS保護付きの完全なMarkdownレンダリング
- ロード/セーブ: JSONベースの
.rnbノートブック形式
- APIアクセス:
/api/execute, /api/render-markdown, /api/notebook/load, /api/notebook/saveのRESTful API
テスト
ruchy test run <path> - オプションのカバレッジ付きでテストを実行する
ruchy test report - テストレポート(HTML/JSON/JUnit)を生成する
プロジェクト構造
ruchy/
├── src/
│ ├── frontend/ # パーサーとAST
│ ├── middleend/ # 型システムと推論
│ ├── backend/ # コード生成とトランスパイル
│ ├── runtime/ # REPLとインタープリター
│ ├── lsp/ # 言語サーバープロトコル
│ └── wasm/ # WebAssemblyサポート
├── tests/ # 統合テスト
├── examples/ # サンプルプログラム
└── docs/ # ドキュメント
🔧 技術詳細
安全性と並行性
ZERO UNSAFE POLICY: Ruchyは決して不安全なRustコードを生成しません(GitHub Issue #132)。
デフォルトでスレッドセーフ
let mut counter = 0;
fun increment() {
counter = counter + 1;
}
Rustと同等の並行性
RuchyはRustとまったく同じ並行性をサポートしており、抽象化はなく、1対1のマッピングが行われます。
let handle = std::thread::spawn(|| {
println!("Hello from thread!");
42
});
let result = handle.join().unwrap();
async fun fetch_data(url: String) -> Result<String, Error> {
let response = reqwest::get(url).await?;
response.text().await
}
use std::sync::{Arc, Mutex};
let data = Arc::new(Mutex::new(vec![]));
use std::sync::mpsc;
let (tx, rx) = mpsc::channel();
安全性保証:
- ✅ 生成される出力には不安全なコードが一切含まれません
- ✅ すべてのグローバル変数は
LazyLock<Mutex<T>>を使用しています(スレッドセーフ)
- ✅ メモリ安全(Rustの所有権 + 借用チェッカー)
- ✅ データ競合が発生しません(Send/Syncトレイトの強制)
詳細なドキュメントについては、を参照してください。
品質基準
このプロジェクトは、厳格な品質エンジニアリングの実践に従っています。
- テストカバレッジ: 行カバレッジ46.41%、ブランチカバレッジ50.79%
- ミューテーションテスト: cargo-mutantsを通じて80%以上のミューテーションカバレッジ(Sprint 8の目標)
- 複雑度制限: すべての関数の循環的複雑度は10以下
- ゼロ技術的負債: TODO/FIXMEコメントは許可されません
- PMAT A+ グレード: 自動化された品質ゲートによって強制されます
- TDD実践: テスト先行開発方法論
- スレッドセーフ: Arcベースの並行性、1万回以上の反復でプロパティテストされています(v3.75.0+)
- E2Eテスト: 21/21のPlaywrightテストがプリコミットフックによって強制されます
ミューテーションテスト戦略
我々は、経験的なテスト品質検証のためにcargo-mutants v25.3.1を使用しています。
- インクリメンタルテスト: ファイルごとのミューテーションテスト(ベースラインの10時間以上に対して5 - 30分)
- エビデンスベース: テストは、経験的分析によって特定された特定のミューテーションを対象としています
- パターン認識: 再利用可能なテスト戦略(マッチアーム、境界、スタブ)
- 品質メトリクス: すべてのモジュールで80%以上のミューテーションカバレッジを目標としています
cargo mutants --file src/frontend/parser/core.rs --timeout 300
cargo mutants --file "src/frontend/parser/*.rs" --timeout 600
make mutation-test
開発
基本的な開発コマンド
make test
make coverage
make lint
make doc
RuchyRuchyデバッグツール
Ruchyは、高度なデバッグ機能のためにRuchyRuchyデバッグツールキットと統合されています。
- ソースマップ: Ruchy → Rustトランスパイルのデバッグのための1対1の行マッピング
- タイムトラベルデバッグ: 実行を逆方向にステップするためのレコード再生エンジン
- パフォーマンス検証: 自動化された回帰検出(6秒以内の検証)
セットアップ:
git clone https://github.com/paiml/ruchyruchy ../ruchyruchy
./scripts/validate-debugging-tools.sh
プリコミット統合: デバッグツールは、すべてのコミット時に自動的に検証されます(3つのチェック、合計6秒以内)。
詳細なドキュメントについては、RuchyRuchy READMEを参照してください。
WebAssembly QAフレームワーク
このプロジェクトには、4つの検証フェーズを持つ包括的なWebAssembly品質保証フレームワークv3.0が含まれています。
make qa-framework
make qa-foundation
make qa-browser
make qa-quality
make qa-optimization
make qa-security
make qa-complexity
make qa-dashboard
make qa-help
品質目標:
- 90%のブランチカバレッジ
- 関数ごとの循環的複雑度が10以下
- セキュリティバウンダリがゼロ
- 最適化されたWASMバイナリが500KB未満
- パフォーマンスの回帰許容範囲が5%未満
関連ドキュメント
関連リソース
📄 ライセンス
このプロジェクトはMITライセンスの下で公開されています。詳細については、LICENSEファイルを参照してください。
謝辞
- Rustと素晴らしいRustエコシステムで構築されています。
- Pythonの表現力とRustの安全性に触発されています。
- トヨタ生産方式とPMAT方法論からの品質実践を取り入れています。
連絡先
⚠️ 重要提示
Ruchy v3.94.0は本番環境での使用には適していません。卓越したエンジニアリング品質を示していますが(TDG A-、3,987のテスト、EXTREME TDD)、エコシステムの成熟度、セキュリティ監査、および本番環境での使用に必要な安定性保証が不足しています。本番環境での使用までの予想時間: 18 - 30ヶ月。詳細な分析については、を参照してください。
適切な用途: 研究、教育、プロトタイピング、実験
不適切な用途: 本番サービス、使命クリティカルなシステム、公開向けの製品