# mruby

## 概要

mruby は、組み込みシステムや IoT デバイスなどリソース制約のある環境向けに設計された、軽量な Ruby 言語処理系です。ISO 標準（ISO/IEC 30170:2012）に準拠し、C 言語アプリケーションへの埋め込みが容易で、クロスプラットフォームに対応しています。日本の経済産業省がスポンサーとなっています。

## 主な機能

| 機能カテゴリ | 説明 |
| --- | --- |
| バイトコード VM | レジスタベースの仮想マシンによる高速なバイトコード実行 |
| Ruby 構文互換 | Ruby 3.x 互換の構文サポート（パターンマッチング含む） |
| C 言語埋め込み | C アプリケーションへの容易な統合・組み込み |
| mrbgems パッケージシステム | 66 以上の標準 gem による拡張可能なモジュールシステム |
| クロスコンパイル | Linux, macOS, Windows, Android, WebAssembly 等の多数プラットフォーム対応 |
| 対話シェル (mirb) | Ruby REPL による対話的実行環境 |
| デバッガ (mrdb) | ブレークポイント・ステップ実行対応のデバッガ |
| バイトコードコンパイラ (mrbc) | Ruby スクリプトからバイトコードへの事前コンパイル |
| マルチタスク (mruby-task) | 協調スケジューリングによる並行処理 |

## 技術スタック

### コア

- 言語: C（コア実装）、Ruby（標準ライブラリ・ビルドシステム）
- ビルドシステム: Rake（Ruby Make）
- パーサジェネレータ: Lrama（LALR パーサ、同梱）
- ライセンス: MIT

### 主要ライブラリ

- libc（標準 C ライブラリ）
- libm（数学ライブラリ）
- readline（mirb 対話シェル用、オプション）

## ディレクトリ構成

```
mruby-master/
├── .github/             # GitHub Actions CI/CD ワークフロー
├── benchmark/           # ベンチマークテストコード
├── build/               # ビルド出力先（自動生成）
├── build_config/        # ビルド設定ファイル（環境別）
│   ├── default.rb       #   デフォルト設定
│   ├── minimal.rb       #   最小構成
│   └── cross-*.rb       #   クロスビルド設定
├── doc/                 # ドキュメント
│   ├── guides/          #   ユーザー向けガイド
│   └── internal/        #   開発者向け内部仕様
├── examples/            # 使用例（mrbgem 作成例など）
├── include/             # C API ヘッダファイル
│   ├── mruby.h          #   メインヘッダ
│   └── mruby/           #   サブヘッダ群
├── lib/                 # ビルドシステム用 Ruby スクリプト
├── mrbgems/             # パッケージ群（66 以上の gem）
│   ├── mruby-compiler/  #   Ruby コンパイラ
│   ├── mruby-io/        #   I/O 機能
│   ├── mruby-socket/    #   ネットワーク機能
│   ├── mruby-bin-mruby/ #   mruby 実行コマンド
│   ├── mruby-bin-mirb/  #   対話シェル
│   └── default.gembox   #   デフォルト gem セット定義
├── mrblib/              # Ruby で実装されたコアライブラリ
├── src/                 # C で実装されたコアエンジン
│   ├── vm.c             #   仮想マシン
│   ├── parser.c         #   パーサ
│   ├── class.c          #   クラスシステム
│   ├── string.c         #   文字列実装
│   └── gc.c             #   ガベージコレクタ
├── tasks/               # Rake ビルドタスク定義
├── test/                # テストスイート
│   └── t/               #   43 個のテストケースファイル
├── tools/               # 外部ツール（lrama 等）
├── Makefile             # Make エントリポイント（Rake 呼び出し）
├── Rakefile             # メインビルドスクリプト
├── CONTRIBUTING.md      # 貢献ガイドライン
├── LICENSE              # MIT ライセンス
└── NEWS.md              # 変更履歴
```

## セットアップ

### 必要条件

- C コンパイラ（GCC または Clang）
- Ruby 2.5 以上（ビルドシステム実行用）
- ar（アーカイバ）
- Git（オプション：mrbgem の取得用）

### インストール手順

```bash
# リポジトリの取得
git clone https://github.com/mruby/mruby.git
cd mruby

# デフォルト設定でビルド
rake

# ビルド + テスト実行
rake all test

# インストール（デフォルト: /usr/local）
rake install

# インストール先を指定する場合
PREFIX=/opt/mruby rake install
```

### ビルド成果物

ビルド後、`build/host/` 以下に成果物が生成されます：

- `build/host/bin/` - 実行ファイル（mruby, mirb, mrbc, mrdb）
- `build/host/lib/` - ライブラリ（libmruby.a, libmruby_core.a）
- `build/host/include/` - ヘッダファイル

### カスタムビルド設定

```bash
# 最小構成でビルド
MRUBY_CONFIG=minimal rake

# カスタム設定ファイルを指定
MRUBY_CONFIG=./my_build_config.rb rake
```

## 開発

### テスト実行

```bash
# 全テスト実行
rake test

# クリーンビルド
rake clean

# 完全クリーン（依存関係含む）
rake deep_clean
```

### コード品質チェック

```bash
# prek（プリコミットフック）のインストール
prek install

# 全ファイルチェック実行
prek run --all-files

# Make 経由のチェック
make check
```

### Docker でのテスト

```bash
# Docker イメージビルド + テスト実行
docker-compose -p mruby run test

# Make 経由
make composetest
```

### ドキュメント生成

```bash
# Ruby API ドキュメント（YARD）
rake doc:api

# C API ドキュメント（Doxygen）
rake doc:capi
```
