---
title: "MoonBit（ムーンビット）とは？Rustとの違い・インストール・使い方を0.10系で解説"
url: "https://www.issoh.co.jp/tech/details/8968/"
published: 2025-09-24
updated: 2026-10-23
categories: ["プログラミング言語"]
publisher: "株式会社一創"
---

# MoonBit（ムーンビット）とは？Rustとの違い・インストール・使い方を0.10系で解説

MoonBit（ムーンビット）は、WebAssembly、JavaScript、ネイティブの複数ターゲットへ同じソースから出力できる静的型付けのプログラミング言語です。中国・深圳のIDEA（International Digital Economy Academy）が開発しており、文法はRustに近い一方で、所有権やボローチェッカーはありません。

2026年10月23日時点で配布されている最新はv0.10.17（2026年10月21日ビルド）で、正式版の1.0はまだ出ていません。本記事では、この0.10系を前提に言語の特徴とRustとの違い、公式手順でのインストールとmoonコマンド、実際にコンパイルして動かしたサンプル、JavaScriptやWebAssemblyとの連携、AIエージェントとの組み合わせ、採用を見送るべき場面までを順に説明します。

## まとめ：MoonBitの要点

- **位置づけ**：IDEAが開発する、Wasm・JS・ネイティブ向けの新言語。2025年6月にベータへ移行し、2026年10月時点の配布版はv0.10.17です。1.0は「2026年第3四半期」の目標を過ぎても未公開です。
- **Rustとの最大の違い**はメモリ管理。所有権の概念が無く、WasmとCバックエンドは参照カウント、wasm-gcとJSは実行環境のGCに任せます。
- **インストール**は公式のシェル／PowerShellスクリプトかVS Code拡張から。Homebrewのformulaとcrates.ioの公式クレートはありません。Intel Macはネイティブ版の対象外です。以後の作業は `moon new`・`moon run`・`moon test` など1つの `moon` コマンドで行います。
- **書き方**は `fn main { ... }` から始まり、struct・enum・match・trait・`raise` による型付きエラー処理が中心です。0.10でtraitの書式が変わるなど、1.0前の破壊的変更はまだ続いています。
- **向く用途**は小さなWasmモジュールや、ブラウザ・サーバーで同じロジックを共有する場面。長期保守が前提の本番基盤や、Rustのクレート資産に頼る開発には現時点で向きません。
- **AIエージェント**との組み合わせは公式が力を入れている分野です。Claude CodeやCodex向けのskillsを公式リポジトリが配布しています。

## MoonBitの読み方・開発元・現在のバージョン

読み方は「ムーンビット」で、中国語名は「月兔」です。「moon bit」と2語に分けて書かれることもありますが、正式表記はMoonBitの1語です。

### 開発元のIDEAとリポジトリのライセンス

公式サイトによると、MoonBitは深圳のInternational Digital Economy Academy（IDEA）のプロジェクトです。GitHubのmoonbitlang組織で主要部分のソースが公開されていますが、ライセンスは部品ごとに違います。

| リポジトリ                        | 役割                 | ライセンス                                |
| ---------------------------- | ------------------ | ------------------------------------ |
| moonbitlang/moonbit-compiler | コンパイラ本体            | MoonBit Public Source License（SSPL系） |
| moonbitlang/moon             | ビルドツール兼パッケージマネージャー | Apache-2.0（2026年9月に再ライセンス）           |
| moonbitlang/core             | 標準ライブラリ            | Apache-2.0                           |

コンパイラの[ライセンス本文](https://github.com/moonbitlang/moonbit-compiler/blob/main/LICENSE.TXT)はSSPL（Server Side Public License）系の条項で、コンパイル結果に埋め込まれるコンパイラ由来の部分はMITライセンスで配布できるという例外が付いています。自社のMoonBitコードとビルド結果の配布はこの例外で扱えます。一方、コンパイラ自体を再配布する場合は改変の有無にかかわらず表示などの条件があり、第14条はコンパイラの機能を商用・競合目的のサービスとして第三者に提供する場合に、そのサービスを構成するソースコード一式の公開を求めています。

### v0.10.17と1.0の見通し

MoonBitは2025年6月にベータ版となり、2026年2月に0.8.0、4月に形式検証を入れた0.9、6月8日に0.10.0が出ました。[0.10.0のリリースノート](https://www.moonbitlang.com/updates/2026/06/08/moonbit-0-10-0-release)では「1.0は2026年第3四半期を目標とし、テストの進み具合で調整する」と書かれています。

第3四半期は9月で終わりましたが、10月23日時点で1.0は出ていません。[公式の更新情報](https://www.moonbitlang.com/updates/)で最新の月次リリースノートは2026年9月21日のv0.10.14です。

配布中のバイナリはリリースノートより先に進みます。[cli.moonbitlang.com/version.json](https://cli.moonbitlang.com/version.json) を2026年10月23日に取得すると、moonc v0.10.17（2026-10-21ビルド）、moon 0.1.20261021でした。版を確かめるときはこのJSONか、インストール後の `moon version` を見てください。

## 出力ターゲット別のメモリ管理と用途

MoonBitの特徴は、1つのソースを複数の実行環境向けにコンパイルできる点です。`moon build --target` に指定できる値は `wasm`、`wasm-gc`、`js`、`native`、`llvm`、`all` です。メモリ管理の方式はバックエンドで変わります。

| ターゲット   | 出力                 | メモリ管理           | 主な用途・注意         |
| ------- | ------------------ | --------------- | --------------- |
| wasm    | WebAssembly（線形メモリ） | 参照カウント          | Wasm GC非対応の実行環境 |
| wasm-gc | WebAssembly GC     | 実行環境のGC         | ブラウザ            |
| js      | JavaScript         | JSエンジンのGC       | ブラウザ・Node.js    |
| native  | ネイティブバイナリ          | 参照カウント（Perceus） | CLI・サーバー        |
| llvm    | LLVM経由のネイティブ       | －               | 実験的・FFI非対応      |

nativeターゲットの中身は1種類ではありません。0.10.4（2026年7月）以降、Apple Siliconのdebugビルドは新しいネイティブバックエンドが既定で、releaseビルドはCコードを生成してシステムのCコンパイラ（-O2）でビルドします。他のプラットフォームは既定でCバックエンドです。

選び方の目安として、ブラウザで動かすならwasm-gcかjs、WasmランタイムやWasm GC非対応の環境ならwasm、CLIやサーバーならnativeです。WebAssembly自体の仕組みやJavaScriptとのメモリ受け渡しは[WebAssembly(Wasm)とは？JavaScript連携とMemory・Table操作の実装](/tech/details/4250/)で説明しています。

## Rustとの違い：似た文法と異なるメモリモデル

MoonBitは `fn`・`struct`・`enum`・`trait`・`impl`・`match` といったキーワードがRustと共通なので、Rust経験者は見た目にすぐ慣れます。違いは主に設計の中身にあります。

| 観点           | MoonBit         | Rust                  |
| ------------ | --------------- | --------------------- |
| メモリ管理        | 参照カウントかGC（自動）   | 所有権と借用                |
| ライフタイム注釈     | なし              | 必要な場面あり               |
| エラー処理        | `raise` と `try` | `Result` と `?`        |
| JavaScript出力 | 標準のバックエンド       | Wasm経由（wasm-bindgen等） |
| パッケージ        | mooncakes.io    | crates.io             |
| 安定版          | 未到達（0.10系）      | 1.0は2015年             |

所有権が無いぶん、MoonBitでは借用エラーに悩まずに書けます。その代わり、参照カウントやGCの実行コストは避けられず、メモリの解放時点をコードで厳密に制御することはできません。組み込みやレイテンシの上限が厳しい処理で解放のタイミングまで管理したいならRustです。

もう1つの差はエコシステムの厚みです。RustでWebAssemblyを作る場合はwasm-packやwasm-bindgenといった成熟した道具が揃っており、その手順は[RustでWebAssemblyを実装する手順｜wasm-packでのWASM化と軽量化・配置先の選び方【2026年版】](/tech/details/15290/)にまとめています。GC付きの言語からWasmを出す手段としてはGo系の[TinyGoとは？通常のGoとの違い・小さくなる仕組み・Lチカ・Wasmを0.43.0で実測](/tech/details/10217/)も比較対象になります。

## MoonBitのインストールと最初のプログラム

[公式のダウンロードページ](https://www.moonbitlang.com/download/)は、MoonBitのツールチェーンを入れる前にgitをインストールしておくよう求めています。そのうえで次のどちらかを実行します。

### 公式インストールコマンド（macOS・Linux・Windows）

macOSとLinuxはシェルスクリプト、WindowsはPowerShellで入れます。

```
# macOS / Linux
curl -fsSL https://cli.moonbitlang.com/install/unix.sh | bash

# Windows（PowerShell）
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser; irm https://cli.moonbitlang.com/install/powershell.ps1 | iex
```

スクリプトは既定で `~/.moon` に配置し、シェルの設定ファイルにPATHを追記します。VS Codeを使うなら、拡張機能「MoonBit」を入れてコマンドパレットから「MoonBit: install latest moonbit toolchain」を実行しても同じツールチェーンが入ります。

### HomebrewとCargo、Intel Macの注意点

MoonBitはHomebrewの公式formulaとしては提供されておらず、crates.ioにも公式のコンパイラクレートはありません（2026年9月26日にそれぞれのAPIで404を確認）。`brew install` や `cargo install` で入れる手順を見かけたら、公式配布ではないと考えてください。

macOSで注意が要るのはIntel Macです。`unix.sh` が対応するのはApple Silicon（Darwin arm64）、Linuxのx86\_64とaarch64だけで、Intel Macでは「Unsupported platform」で止まります。公式ブログはIntel Mac向けにネイティブ版の提供を終えたと明記しており、代替としてWasm版ツールチェーンの導入手順を公開しています（2025年10月10日）。

### moon newでのプロジェクト作成とmoon runでの実行

インストール後は `moon new` でプロジェクトを作り、`moon run` で実行します。

```
moon new hello
cd hello
moon run cmd/main
```

生成されるプロジェクトには、モジュール設定の `moon.mod`、パッケージ設定の `moon.pkg`、実行用の `cmd/main/main.mbt` が含まれます。以前の `moon.mod.json`・`moon.pkg.json` 形式は非推奨になり、既存プロジェクトは `moon fmt` で新形式へ移行できます。古い入門記事がJSONの設定ファイルを前提にしているのはこのためです。

エントリーポイントは括弧の無い `fn main` です。

```
fn main {
  println("Hello, MoonBit!")
}
```

インストールせずに試すなら、ブラウザ上のWeb IDE（try.moonbitlang.com）と、解説付きで1ページずつ実行できる公式ツアー（tour.moonbitlang.com）があります。

### moonコマンドの主なサブコマンド

ビルド、テスト、整形、依存の追加は、すべて `moon` のサブコマンドで行います。[公式のコマンドリファレンス](https://docs.moonbitlang.com/en/latest/toolchain/moon/commands.html)から、日常的に使うものを抜き出すと次のとおりです。

| コマンド                       | 役割                      |
| -------------------------- | ----------------------- |
| `moon new`                 | モジュールを新規作成              |
| `moon check`               | 型検査（オブジェクトファイルは生成しない）   |
| `moon build`               | ビルド（`--target` で出力先を指定） |
| `moon run`                 | mainパッケージを実行            |
| `moon test`                | テストを実行                  |
| `moon fmt`                 | ソースを整形                  |
| `moon info`                | 公開インターフェース（.mbti）を生成    |
| `moon add` / `moon remove` | 依存の追加・削除                |
| `moon coverage`            | カバレッジの集計                |
| `moon upgrade`             | ツールチェーンの更新              |

編集中は `moon check` を回し、まとまったら `moon test`、コミット前に `moon fmt` と `moon info` を実行する流れが基本です。`moon info` が出力する .mbti ファイルは公開APIの一覧なので、差分を見ればライブラリの公開面が意図せず変わっていないかをレビューで確かめられます。`moon build` に `-w` を付けると、ファイルの変更を監視して自動で再ビルドします。

## MoonBitの基本構文：実行確認済みのサンプル

ここからのコードは、2026年9月15日ビルドのmoonc（npmの@moonbit/moonc-worker 0.1.202609154）でjsターゲットにコンパイルし、Node.jsで実行して出力を確かめたものです（testブロックの例のみ型検査までで、moon testでの実行は未確認）。

### struct・enum・matchによる成績判定の例

`let` は再代入できない束縛、`let mut` は再代入できる変数です。`match` は上の分岐から順に照合します。enumのケースを1つでも書き漏らすと、partial\_match（E0011）としてビルドが止まります。文字列の中の `\{式}` は埋め込みです。

```
struct Student {
  name : String
  score : Int
}

enum Grade {
  Pass
  Fail
}

fn grade(s : Student, border : Int) -> Grade {
  if s.score >= border { Pass } else { Fail }
}

fn main {
  let students : Array[Student] = [
    { name: "Aoi", score: 72 },
    { name: "Ren", score: 48 },
  ]
  let mut passed = 0
  for s in students {
    match grade(s, 60) {
      Pass => passed = passed + 1
      Fail => println("\{s.name}: 再試験")
    }
  }
  println("合格 \{passed} / \{students.length()}")
}
```

出力は「Ren: 再試験」「合格 1 / 2」の2行です。公式ツアーには enum に `derive(Show)` を付ける例がありますが、2026年9月のmooncでは「`derive(Show)` is deprecated」という警告が出て、`derive(Debug)` か手書きの実装を促されます。

### Map・Option・パイプ演算子による単語の出現回数の集計

断片ではなく、1本のプログラムとして読める例です。文字列を空白で区切り、単語ごとの出現回数を `Map` に数え、最も多い単語を `Option`（型名の後ろに `?` を付けて表す）で返します。`|>` は左辺を右の関数の第1引数に渡すパイプ演算子で、`x |> f` は `f(x)`、`x |> f(y)` は `f(x, y)` と同じ意味です（[言語の基礎](https://docs.moonbitlang.com/en/latest/language/fundamentals.html)）。

```
fn count_words(text : String) -> Map[String, Int] {
  let counts : Map[String, Int] = Map([])
  for w in text.split(" ") {
    if w != "" {
      let key = w.to_owned()
      counts[key] = counts.get(key).unwrap_or(0) + 1
    }
  }
  counts
}

fn top_word(counts : Map[String, Int]) -> (String, Int)? {
  let mut best : (String, Int)? = None
  for word, n in counts {
    match best {
      Some((_, m)) if m >= n => ()
      _ => best = Some((word, n))
    }
  }
  best
}

fn main {
  let text = "moon bit moon wasm moon js bit"
  let counts = text |> count_words
  println("単語の種類: \{counts.length()}")
  let top = counts |> top_word
  match top {
    Some((word, n)) => println("最多: \{word}（\{n}回）")
    None => println("空の入力")
  }
  println(count_words("").length())
}
```

出力は「単語の種類: 4」「最多: moon（3回）」「0」の3行です。空文字を渡しても落ちず、要素0のMapが返ります。

この例は古い入門記事の書き方から2点変えています。空のMapを `{}` と書くと、2026年9月のmooncでは「空のMap・ブロック・空の構造体・空のJSONのどれか曖昧」という警告（E0082）が出るため、`Map([])` と書きます。また、`split` が返す部分文字列（StringView）を `to_string()` で文字列にすると非推奨の警告（E0020）が出るため、`to_owned()` を使います。`match counts |> top_word { ... }` のように照合の対象へパイプの式を直接書いたところ、このmooncでは型エラー（E4014）になったため、いったん `let` で受けてから照合しています。

### traitとジェネリクス（0.10の書式）

traitはRustと同じく、型が実装すべき操作を宣言する仕組みです。0.10.0のリリースノートは、traitとimplの定義に `fn` キーワードを付ける書式への変更を告知しました。旧書式は当面サポートされ、2026年9月のmooncでも警告なしでコンパイルできますが、リリースノートは次の版から警告を出し、将来は削除すると予告しています。既存コードは `moon fmt` で新書式へ自動移行できます。

```
trait Area {
  fn area(Self) -> Double
}

struct Rect {
  w : Double
  h : Double
}

struct Circle {
  r : Double
}

impl Area for Rect with fn area(self) { self.w * self.h }

impl Area for Circle with fn area(self) { 3.14 * self.r * self.r }

fn[T : Area] report(shape : T) -> String {
  "面積: \{shape.area()}"
}

fn main {
  println(report(Rect::{ w: 2.0, h: 3.5 }))
  println(report(Circle::{ r: 1.0 }))
}
```

型パラメータは関数名の前に `fn[T : Area]` と書きます。出力は「面積: 7」「面積: 3.14」です。なお、具体的な型の値に対して `rect.area()` のようにtraitのメソッドを直接呼ぶ書き方は、現行mooncで非推奨の警告（E0020）が出ます。`Area::area(rect)` と書くか、`extend Rect with Area::{area}` を宣言してから呼びます。

### raiseとtryによるエラー処理

MoonBitはRustの `Result` の代わりに、関数の型に `raise エラー型` を書いて投げうるエラーを宣言します。呼び出し側は `try ... catch ... noraise` で成功と失敗を分けて受け取ります。

```
suberror ParseError {
  Empty
  NotNumber(String)
}

fn parse_age(s : String) -> Int raise ParseError {
  if s == "" {
    raise Empty
  }
  let mut n = 0
  for c in s {
    if c < '0' || c > '9' {
      raise NotNumber(s)
    }
    n = n * 10 + (c.to_int() - '0'.to_int())
  }
  n
}

fn main {
  for input in ["42", "", "4a"] {
    let msg = try parse_age(input) catch {
      Empty => "空文字"
      NotNumber(s) => "数値でない: \{s}"
    } noraise {
      n => "年齢 \{n}"
    }
    println(msg)
  }
}
```

実行結果は「年齢 42」「空文字」「数値でない: 4a」です。例を短くするため桁あふれは検査しておらず、「2147483648」を渡すと「年齢 -2147483648」になります。実用では桁数だけでなく、各桁の乗算・加算前にIntの上限を超えないかを検査してください。エラー型がシグネチャに出るので、宣言されたエラーの処理漏れを型検査で見つけられます。

### testブロックとmoon test

テストは同じファイルに `test` ブロックで書き、`moon test` で実行します。`inspect` は値の文字列表現を期待値と比べる関数で、`moon test --update` を付けると期待値を実際の出力で書き換えます。

```
fn add(a : Int, b : Int) -> Int {
  a + b
}

test "add" {
  assert_eq(add(2, 3), 5)
  inspect(add(-1, 1), content="0")
}
```

テストの手段はこれだけではありません。2026年10月10日の[公式ブログ](https://www.moonbitlang.com/blog/building-agents-moonbit)は、CLIの標準出力・標準エラー・終了コードを記録して照合する `moon cram test` と、標準ライブラリの `moonbitlang/core/quickcheck` を使うプロパティベーステストを挙げています。後者は `derive(Arbitrary)` で列挙型や構造体のテストデータを自動生成し、反例を見つけると失敗として報告します。

## JavaScript・WebAssemblyとの連携

この章では、既存のWeb開発やWasmの実行環境へMoonBitを組み込む方法として、JavaScriptとの直接連携とComponent Model経由のWasm連携を説明し、あわせて非同期ライブラリの対応範囲を紹介します。

### `extern "js"`によるJavaScript関数の呼び出し

jsバックエンドでは、`extern "js" fn` でJavaScriptの関数を直接宣言できます。型パラメータを持つFFI関数は宣言できません。jsターゲット専用のコードなので、実行は `moon run cmd/main --target js` のようにターゲットを指定します。

```
extern "js" fn now_ms() -> Double = "() => Date.now()"

fn main {
  println(now_ms() > 0.0)
}
```

ReactやViteの画面にMoonBitのロジックを混ぜる場合は、MoonBitをJSとして出力してTypeScriptから呼ぶ形になります。公式のReactバインディングはありません。Viteから `mbt:` 接頭辞で読み込めるvite-plugin-moonbit（npm 0.5.1・2026年7月）はコミュニティ製です。画面ごとMoonBitで書くなら、Elmのアーキテクチャに倣った単方向データフローのフレームワークrabbita（旧称Rabbit-TEA）があります。MoonBitチームが開発に関わっており、mooncakes.ioや公式サイトの構築に使われています。設計の考え方は[Elm（プログラミング言語）とは？0.19.2の変更点とThe Elm Architecture・採用判断を解説](/tech/details/7817/)が参考になります。

本番の業務で使われている公開事例もあります。2026年3月の[Zennの記事「Reactをやめて MoonBit で50ページの業務システムを作った」](https://zenn.dev/lehti/articles/c4b813a9192701)は、社内CRM/SFAのフロントエンド50ページ超を1人でMoonBitのjsターゲットで書き、vite-plugin-moonbitでViteに組み込み、Cloudflare Pagesへデプロイしている構成です。著者は、enumのパターンマッチの網羅性検査で画面ルーティングの分岐漏れをコンパイル時に検出できる点を利点に、ライブラリの少なさと日本語情報の少なさを難点に挙げ、大人数のチームやSSRが必要な案件には向かないとしています。

### Component ModelとWASIによるブラウザ外での連携

Wasmをブラウザ外で動かす場合、公式ガイドはWIT（WebAssembly Interface Types）でインターフェースを定義し、wit-bindgenでMoonBitのバインディングを生成する手順を案内しています。公式ブログのHTTPサーバー例はwasi-http 0.2.0を使い、wasm-toolsでコアWasmをコンポーネントへ変換しています。

標準ライブラリ側のWASI対応は限定的で、0.10.0でWasmバックエンドの `println` がWASIベースの実装に置き換わった程度です。HTTPのようなWASIインターフェースを使う場合は、WITとwasm-toolsを経由する上記の手順になります。WASIの版の位置づけは[WASIとは｜WebAssemblyをブラウザ外で動かすシステムインターフェース【2026年版】](/tech/details/13251/)、エッジ実行環境側の制約は[Cloudflare Workersとは？料金・無料枠・Workers Paidの中身と対応言語・使い方](/tech/details/6760/)で確認できます。

### 非同期処理（moonbitlang/async）

非同期は標準ライブラリとは別のmoonbitlang/asyncパッケージが担い、構造化並行性を採っています。対応が最も厚いのはnativeです。JSではタスクグループやタイムアウトなどIOに依存しないAPIとPromise連携が使え、ファイルやネットワークなどIO系のAPIは使えません。実験的なWasm対応はmoonrunを必要とし、他のWebAssemblyランタイムとは互換性がありません。2026年9月のリリースノート時点の版は0.22.1で、キャンセル時の挙動を変える破壊的変更が入りました。

## 開発ツールとAIエージェント対応

### VS Code拡張・LSP・パッケージレジストリ

- **VS Code拡張とLSP**：拡張はVisual Studio MarketplaceとOpen VSXで配布されています。2026年5月にはOCamlで作り直したネイティブのLSPが入り、`moon lsp` で起動できるようになりました。2025年10月にはLLDBベースのデバッガーも発表されています。
- **mooncakes.io**：公式パッケージレジストリ兼APIドキュメント。依存は `moon add moonbit-community/starter` のように追加します。サイト自体もMoonBitで書かれ、ソースはGitHubのmoonbitlang/mooncakes.ioで公開されています。

### 公式のAgent SkillsとMoonBit Pilot・MoonX

MoonBitは版ごとに書式の変更や非推奨が続いているため、公式はエージェントが古い前提で書かないよう、参照すべき一次情報の選び方やmoonツールの使い方をまとめた手順書（skills）をGitHubの[moonbitlang/skills](https://github.com/moonbitlang/skills)で配布しています。2026年10月23日時点の収録は、入門の `moonbit-orientation`、総合ガイドの `moonbit-agent-guide`、リファクタリング、Cバインディング作成、形式検証（proof）、仕様テスト、OCamlからの移行など9本です。Claude Codeには次のコマンドでまとめて入ります（Codexは `--agent codex`）。

```
npx skills@latest add moonbitlang/skills -g --agent claude-code --skill "*" --copy -y
```

skillsの形式（SKILL.md）そのものの仕組みと他製品での動かし方は[Agent Skillsとは？SKILL.md仕様と46製品で動かす移植性の実装手順](/tech/details/17685/)で説明しています。

- **MoonBit Pilot**：2025年7月に発表された、MoonBitツールチェーン専用のAIコーディングエージェント。プロジェクトのルートで `moon pilot` と打って起動します。
- **SeekMoon**：2026年9月1日に発表された、エージェントに変更を任せて人はレビューと判断に回る前提の開発環境（公式はADE＝Agent Development Environmentと呼ぶ）。中核はMoonBitで書かれています。
- **MoonX**：2026年10月10日の公式ブログが紹介した実行の入口です。公開済みのアプリをサンドボックス内でコマンドとして実行するモードと、エージェントが書いた1ファイルのスクリプト（`.mbtx`）を同じ制約で実行するモードを持ちます。`.mbtx` は冒頭でimportを宣言でき、moon.mod・moon.pkgの設定なしで1ファイルのまま動きます。

## MoonBitの学習リソースとGitHubリポジトリ

MoonBitの情報は英語と中国語が中心で、版ごとの変更が速いため、学ぶときは公式の一次情報から入るのが確実です。

- **Language Tour**（tour.moonbitlang.com）：ブラウザ上で1項目ずつ実行しながら構文を学べます。
- **公式ドキュメント**（[docs.moonbitlang.com](https://docs.moonbitlang.com/ja/latest/)）：言語仕様、moonコマンド、FFIの説明があり、日本語版も用意されています。
- **月次の更新情報**（moonbitlang.com/updates）：構文の変更や非推奨はここに載ります。古い記事のコードが動かないときは、まずこのページで該当する変更を探します。
- **GitHub**：組織moonbitlangに、標準ライブラリのcore、ビルドツールのmoon、コンパイラのmoonbit-compiler、ライブラリやツールを集めたawesome-moonbit、公開講座「現代プログラミング思想」の教材moonbit-courseがあります。

## MoonBitを採用すべきでない場面

MoonBitは試す価値のある言語ですが、2026年10月時点では次の条件に当てはまるプロジェクトに本番採用を勧めません。

- **数年単位で保守する本番コード**：1.0前のため破壊的変更が続いています。直近でもtraitの書式（0.10）、`derive(Show)` やtraitメソッドの暗黙呼び出しの非推奨、空の `{}` を曖昧とする警告の追加、設定ファイルのJSONからの移行、asyncのキャンセル仕様が変わりました。1.0も当初の目標時期を過ぎています。版を固定しても、ライブラリ側の追従で更新を迫られます。
- **既存ライブラリの量が開発速度を決める案件**：crates.ioやnpmに比べてmooncakes.ioのパッケージは少なく、足りない部分はFFIで自作することになります。
- **llvmバックエンドを前提にする設計**：公式ドキュメント上で実験的扱いで、FFIも使えません。ネイティブが必要ならnativeターゲットを選びます。
- **開発機がIntel Mac中心のチーム**：ネイティブ版のツールチェーンが提供されず、Wasm版での運用になります。
- **採用や引き継ぎで人を入れ替える前提のチーム**：書ける人が少なく、日本語の情報もまだ限られます。上で紹介した業務システムの事例も1人開発です。

逆に、ブラウザとサーバーで同じ検証ロジックを共有したい、小さなWasmモジュールをGC付きの言語で素早く書きたい、といった用途なら、今の版でも十分に候補になります。社内ツールや検証用のモジュールから始め、本番へ広げるのは、1.0の公開に加えて、使う予定のパッケージが最新のコンパイラに追従しているかと、既存コードが `moon fmt` の自動移行で新しい版に上がるかを確かめてからにします。

## よくある質問

### MoonBitの読み方は？

「ムーンビット」と読みます。中国語名は「月兔」です。

### MoonBitの最新バージョンは？1.0はいつ？

2026年10月23日時点で配布されている最新はv0.10.17（2026年10月21日ビルド）で、月次リリースノートの最新はv0.10.14（2026年9月21日）です。0.10.0のリリースノートは1.0を2026年第3四半期の目標としていましたが、10月23日時点でまだ公開されていません。

### MoonBitはHomebrewやCargoでインストールできますか？

できません。Homebrewの公式formulaとcrates.ioの公式クレートはどちらも存在せず、公式の入手方法はシェル／PowerShellのインストールスクリプトとVS Code拡張です。

### MoonBitはReactと組み合わせられますか？

公式のReactバインディングはありません。jsバックエンドでMoonBitをJavaScriptとして出力し、TypeScriptから呼び出す形になります。Viteではコミュニティ製のvite-plugin-moonbitが使えます。

### MoonBitはAIエージェントで書けますか？

書けます。版ごとの書式変更が多い言語なので、公式のmoonbitlang/skillsをClaude CodeやCodexに入れ、現行の書き方と一次情報の参照先をエージェントに渡してから使います。生成されたコードは `moon check` と `moon test` で検査します。

## 関連記事

- [WebAssembly(Wasm)とは？JavaScript連携とMemory・Table操作の実装](/tech/details/4250/)
- [WASIとは｜WebAssemblyをブラウザ外で動かすシステムインターフェース【2026年版】](/tech/details/13251/)
- [RustでWebAssemblyを実装する手順｜wasm-packでのWASM化と軽量化・配置先の選び方【2026年版】](/tech/details/15290/)
- [TinyGoとは？通常のGoとの違い・小さくなる仕組み・Lチカ・Wasmを0.43.0で実測](/tech/details/10217/)
- [Elm（プログラミング言語）とは？0.19.2の変更点とThe Elm Architecture・採用判断を解説](/tech/details/7817/)

---

出典: [MoonBit（ムーンビット）とは？Rustとの違い・インストール・使い方を0.10系で解説](<https://www.issoh.co.jp/tech/details/8968/>)（株式会社一創）
