Skip to content

Instantly share code, notes, and snippets.

@podhmo
Last active March 9, 2026 04:09
Show Gist options
  • Select an option

  • Save podhmo/652cf50e4d187e21f55f9197caab4959 to your computer and use it in GitHub Desktop.

Select an option

Save podhmo/652cf50e4d187e21f55f9197caab4959 to your computer and use it in GitHub Desktop.
手離れの良い解説記事

はじまりはこういうことから。

最近はai slopという訳じゃないけど解説記事の作り方も悩ましい感じはある。

例えばほんとに基礎的なところからある対象Xの記事を書くとして、冗長過ぎるとだるいし陳腐化を避けようとしたときに変更箇所が増え手離れが悪い。

記事本文に「LLMにこう聞いて」と言う羅列で済ませる手はあるかも?

moonbitを例に記事を作らせてみる。

(もちろんここで出力された記事の正確性は保証してない。修整もしてない。デザインモックみたいな感じで)

2026年現在、MoonBitで小さく始めるWebAssembly開発
〜基礎からハマりポイントまで、全部LLMに聞ける形にまとめた実践メモ〜

この記事の読み方(大事)

  • MoonBitの公式ドキュメントやlang tourは素晴らしいですが、2026年3月時点で仕様がまだ変わりやすいです。
  • だからこそ「全部自分で最新情報を書く」のをやめました。
  • **この記事の9割は「LLMにコピペするだけのプロンプト」**です。
  • 各章はlang tourと同じ粒度(1トピック=1ページ分)に細かく分けています。
  • あなたは気になる章のプロンプトだけをGrok / Claude / ChatGPTに投げて、その場で最新のコードと説明をもらえばOK。
  • 私が手動で残しているのは「実際にハマった人だけが知るべき2026年3月現在の罠」だけです。

注意点として、必ずweb検索を伴うLLMに聞く必要があります。


1. インストールと初回セットアップ

プロンプト(これをそのままコピペ)

2026年3月現在のMoonBitのインストール方法を、Linux / macOS / Windowsそれぞれでステップバイステップで教えてください。
公式のcurlコマンドもそのまま書いて、インストール後に必ず実行すべき検証コマンド(moon versionなど)も含めて。
VSCode拡張のインストール方法と、初回起動時に推奨される設定も教えて。

私が残す罠メモ

  • WindowsはPowerShell必須(cmdだと稀に失敗する)
  • VSCode拡張はインストール直後に「MoonBit: Restart Language Server」を一度実行しないと補完が効かない

2. パッケージ管理の全体像

プロンプト

2026年3月現在のMoonBitで、外部パッケージの追加・更新・削除・バージョンピン留めの方法をすべて教えてください。
以下のすべてをコマンド例+moon.mod.json / moon.pkg.jsonの実際の差分付きで説明:
・moon add / moon remove / moon update の使い方
・moonbitlang/x を依存として追加する例
・ローカルパス参照の方法
・バージョンピン留め(例: ~0.1.0)とワイルドカードの違い

私が残す罠メモ

  • moonbitlang/x はexperimentalなので、必ずバージョンを厳密にピン留め(~0.x.x推奨)
  • moon.pkg.jsonを直接編集するとmoon build時に上書きされるので注意

3. Hello Worldとプロジェクト作成

プロンプト

2026年3月現在のMoonBitで、ゼロからプロジェクトを作成してHello Worldを動かすまでの全コマンドを教えて。
moon new → 必要なファイルの説明 → moon run までの流れを、実際のターミナル出力例付きで。
ブラウザバックエンドとNodeバックエンドの両方を試す方法も教えて。

4. 基本構文(Rustっぽい部分だけ把握したいとき)

プロンプト

2026年3月現在のMoonBitで、以下の基本構文をRustとの違いをコメント付きで5〜8個の例を示してください:
・変数宣言(let / mut)
・if / else / match
・for / while
・関数定義とクロージャ
・struct / enum / impl
可能な限り短く、実用的なコード例に。

5. 非同期(async/await)の現状

プロンプト

2026年3月現在のMoonBitにおけるasync/awaitのサポート状況を正確に教えてください。
・使える範囲と使えない範囲
・ブラウザバックエンドとNodeバックエンドの違い
・今後予定されている機能(あれば)
・実用例としてシンプルなasync関数を1つ書いて。

私が残す罠メモ

  • ブラウザではawaitがかなり制限されている(2026年3月時点)
  • Nodeバックエンドの方が実用的

6. ファイルI/O入門(catコマンド相当)

プロンプト

2026年3月現在のMoonBitで、Unixライクなcatコマンド相当のプログラムを書いてください。
・ファイル読み込み+標準出力
・コマンドライン引数でファイル名を受け取る(引数なしならstdin)
・エラーハンドリングは?演算子かResult型で丁寧に
・coreだけでは無理なら、最新の正しい外部パッケージ(moonbitlang/x配下など)を自動で提案してimportしてください
・Nodeバックエンドとブラウザバックエンドの違いも注記して
完全な動くコード+実行方法を教えて。

7. ファイルI/O実践(lsコマンド相当)

プロンプト

2026年3月現在のMoonBitで、lsコマンド相当のプログラムを書いてください。
・現在のディレクトリの一覧表示
・ファイルサイズも表示
・再帰オプション(-R)も実装
・最新の正しい外部パッケージを自動提案してimport
・エラーハンドリングは丁寧に
完全なコードと実行例を。

8. ファイルI/O実践(grepコマンド相当)

プロンプト

2026年3月現在のMoonBitで、grepコマンド相当のプログラムを書いてください。
・指定パターンをファイル内で検索
・行番号付きでヒット表示
・複数ファイル対応
・最新の正しい外部パッケージを自動提案
完全なコード+実行例を。

9. ファイルI/O実践(dotenv実装)

プロンプト

2026年3月現在のMoonBitで、.envファイルを読み込むdotenvライブラリ相当を実装してください。
・.env / .env.local / .env.production の優先順位対応
・型安全な環境変数オブジェクトとして返す(struct推奨)
・最新の正しい外部パッケージを自動提案
・エラーハンドリングも含めて完全なコードを。

10. JavaScriptとの相互運用(FFI)

プロンプト

2026年3月現在のMoonBitからJavaScriptの関数(console.log、fetchなど)を呼び出すFFIの最新の書き方をステップごとに教えて。
逆(JS→MoonBit)の例も1つ。
ブラウザとNode両対応で。

おまけ:私が実際にハマったポイントまとめ(2026年3月時点)

  • xパッケージは毎月のようにパスが変わる → だからこそ「最新の正しいパッケージを自動提案」プロンプトが最強
  • dotenvを作るときはResult?で繋げないとpanic地獄になる
  • moon testがブラウザバックエンドだと不安定 → Nodeでテスト推奨
  • LSPは優秀だが、依存追加後は必ず「Reload Window」

MoonBit + WebAssembly 入門

〜変化に強い「LLMプロンプト駆動」学習ガイド〜

この記事の読み方(重要)

対象読者

  • WebAssemblyに興味があるが、C++/Rustの学習コストが気になる方
  • MoonBitの存在は知っているが、どこから始めればいいか迷っている方
  • 公式ドキュメントを読んでも「実際に動くコードが知りたい」方

必要なもの

  • Node.js 18+(LTS推奨)
  • VSCode
  • コマンドラインの基本知識

この記事の特徴

  • MoonBitの公式ドキュメントやlang tourは素晴らしいですが、仕様がまだ変わりやすいです
  • だからこそ「全部自分で最新情報を書く」のをやめました
  • **この記事の9割は「LLMにコピペするだけのプロンプト」**です
  • 各章はlang tourと同じ粒度(1トピック=1ページ分)に細かく分けています
  • あなたは気になる章のプロンプトだけをGrok / Claude / ChatGPTに投げて、その場で最新のコードと説明をもらえばOK
  • 私が手動で残しているのは「実際にハマった人だけが知るべき現在の罠」だけです

⚠️ 重要: 必ずweb検索を伴うLLMに聞いてください。知識カットオフ日より前の古い情報を返す可能性があります。


Part 1: 環境構築

1. インストールと初回セットアップ 🟢初級

ゴール MoonBitツールチェーンとVSCode拡張をインストールし、正常に動作することを確認する

プロンプト(LLMにコピペ)

現在のMoonBitのインストール方法を、Linux / macOS / Windowsそれぞれでステップバイステップで教えてください。
公式のcurlコマンドもそのまま書いて、インストール後に必ず実行すべき検証コマンド(moon versionなど)も含めて。
VSCode拡張のインストール方法と、初回起動時に推奨される設定も教えて。

期待される出力イメージ

$ moon version
moon 0.x.x (some-commit-hash)

$ moon new hello
Created hello/...

私が残す罠メモ

🚨 Windows: cmd vs PowerShell

症状: moonコマンドが見つからない、またはインストール後にコマンドが効かない

原因: cmdの環境変数反映が遅い/不完全な場合がある

対処法:

  1. PowerShellを管理者権限で開き直す
  2. またはインストール後にPCを再起動
  3. moon versionが通ることを確認してから次に進む

🚨 VSCode拡張の補完が効かない

症状: コード入力時に補完が出てこない、エラー表示がおかしい

対処法:

  • VSCodeのコマンドパレット(Ctrl+Shift+P)→「MoonBit: Restart Language Server」を実行
  • それでもダメなら「Developer: Reload Window」でVSCodeごと再起動

2. パッケージ管理の全体像 🟢初級

ゴール 外部パッケージの追加・更新・削除・バージョン管理を理解する

プロンプト(LLMにコピペ)

現在のMoonBitで、外部パッケージの追加・更新・削除・バージョンピン留めの方法をすべて教えてください。
以下のすべてをコマンド例+moon.mod.json / moon.pkg.jsonの実際の差分付きで説明:
・moon add / moon remove / moon update の使い方
・moonbitlang/x を依存として追加する例
・ローカルパス参照の方法
・バージョンピン留め(例: ~0.1.0)とワイルドカードの違い

期待される出力イメージ

# パッケージ追加
$ moon add moonbitlang/x
Added moonbitlang/x@0.x.x

# 確認
$ cat moon.mod.json
{
  "name": "my-project",
  "version": "0.1.0",
  "deps": {
    "moonbitlang/x": "~0.x.x"
  }
}

私が残す罠メモ

🚨 moonbitlang/xはexperimental

  • パスやAPIが頻繁に変わる可能性あり
  • 必ずバージョンを厳密にピン留め~0.x.x推奨)
  • moon updateは慎重に—壊れる可能性あり

🚨 moon.pkg.jsonを直接編集しない

  • moon build時にmoon.mod.jsonの内容で上書きされる
  • 依存の追加・変更は必ずmoon addコマンドを使う

3. Hello Worldとプロジェクト作成 🟢初級

ゴール ゼロからプロジェクトを作成し、ブラウザとNodeの両方で動作確認する

プロンプト(LLMにコピペ)

現在のMoonBitで、ゼロからプロジェクトを作成してHello Worldを動かすまでの全コマンドを教えて。
moon new → 必要なファイルの説明 → moon run までの流れを、実際のターミナル出力例付きで。
ブラウザバックエンドとNodeバックエンドの両方を試す方法も教えて。

期待される出力イメージ

# プロジェクト作成
$ moon new hello
$ cd hello

# デフォルト(ブラウザバックエンド)
$ moon run main.mbt
Hello, world!

# Nodeバックエンドで実行
$ moon run --target node main.mbt
Hello, world!

次の章へ → 4. 基本構文


Part 2: 言語基礎

4. 基本構文(Rustっぽい部分だけ把握したいとき) 🟢初級

ゴール Rust経験者がMoonBitの構文を素早く把握する

プロンプト(LLMにコピペ)

現在のMoonBitで、以下の基本構文をRustとの違いをコメント付きで5〜8個の例を示してください:
・変数宣言(let / mut)
・if / else / match
・for / while
・関数定義とクロージャ
・struct / enum / impl
可能な限り短く、実用的なコード例に。

期待される出力イメージ

// main.mbt
// Rustとの主な違い:
// - letだけで可変/不変を区別(mutキーワードなし)
// - 型推論が強力
// - matchは必須ではない(if式で十分なことも多い)

fn main {
  // 変数(デフォルトで不変)
  let x = 5
  // 可変にするには明示的に型注釈&mut相当の記法(現在の仕様を確認)
  
  // 関数定義
  fn add(a: Int, b: Int) -> Int {
    a + b  // 最後の式が返り値(return不要)
  }
  
  // structとimpl
  struct Point {
    x: Int,
    y: Int
  }
  
  // ... などなど
}

次の章へ → 5. 非同期処理


5. 非同期(async/await)の現状 🟡中級

ゴール MoonBitのasync/await対応状況と、ブラウザ/Nodeの違いを理解する

プロンプト(LLMにコピペ)

現在のMoonBitにおけるasync/awaitのサポート状況を正確に教えてください。
・使える範囲と使えない範囲
・ブラウザバックエンドとNodeバックエンドの違い
・今後予定されている機能(あれば)
・実用例としてシンプルなasync関数を1つ書いて。

期待される出力イメージ

// 現在の制限付きasync/awaitの例
// (実際のコードはLLMに最新版を確認)

async fn fetch_data(url: String) -> Result[String, String] {
  // ブラウザでは制限あり、Nodeではより自由に使える
  // ...
}

私が残す罠メモ

🚨 ブラウザバックエンドでのawait制限

  • 2026年3月時点で、ブラウザではawaitがかなり制限されている
  • トップレベルawaitや複雑な非同期チェーンでハマる可能性あり
  • Nodeバックエンドの方が現時点では実用的

対処法:

  • 非同期処理が必要なら、開発時は--target nodeを優先
  • ブラウザでの動作確認は、シンプルなケースから段階的に

Part 3: 実践ファイルI/O

6. ファイルI/O入門(catコマンド相当) 🟡中級

ゴール ファイル読み込みとエラーハンドリングの基礎を学ぶ

プロンプト(LLMにコピペ)

現在のMoonBitで、Unixライクなcatコマンド相当のプログラムを書いてください。
・ファイル読み込み+標準出力
・コマンドライン引数でファイル名を受け取る(引数なしならstdin)
・エラーハンドリングは?演算子かResult型で丁寧に
・coreだけでは無理なら、最新の正しい外部パッケージ(moonbitlang/x配下など)を自動で提案してimportしてください
・Nodeバックエンドとブラウザバックエンドの違いも注記して
完全な動くコード+実行方法を教えて。

期待される出力イメージ

# ファイル読み込み
$ moon run main.mbt -- file.txt
Hello, MoonBit!

# stdinから
$ echo "Hello" | moon run main.mbt
Hello

私が残す罠メモ

🚨 ?演算子とpanic地獄

  • Result型を?で繋げないと、エラー時にpanicして分かりにくいエラーになる
  • 必ずResult[T, E]を返す関数設計にし、mainでもtry/Resultでハンドリング

🚨 ブラウザではファイルI/Oが制限される

  • ブラウザバックエンドでは、ローカルファイルへの直接アクセスはセキュリティ制限で基本不可能
  • この章のコードはNodeバックエンドで実行することを前提とする

7. ファイルI/O実践(lsコマンド相当) 🟡中級

ゴール ディレクトリ操作と再帰的なファイル探索を実装する

プロンプト(LLMにコピペ)

現在のMoonBitで、lsコマンド相当のプログラムを書いてください。
・現在のディレクトリの一覧表示
・ファイルサイズも表示
・再帰オプション(-R)も実装
・最新の正しい外部パッケージを自動提案してimport
・エラーハンドリングは丁寧に
完全なコードと実行例を。

期待される出力イメージ

$ moon run main.mbt
drwxr-xr-x  src/
-rw-r--r--  1.2KB  moon.mod.json
-rw-r--r--  856B   main.mbt

$ moon run main.mbt -- -R
./
  src/
    main.mbt  856B
  moon.mod.json  1.2KB

次の章へ → 8. grep実装


8. ファイルI/O実践(grepコマンド相当) 🟡中級

ゴール ファイル内容の検索と正規表現(または文字列検索)を実装する

プロンプト(LLMにコピペ)

現在のMoonBitで、grepコマンド相当のプログラムを書いてください。
・指定パターンをファイル内で検索
・行番号付きでヒット表示
・複数ファイル対応
・最新の正しい外部パッケージを自動提案
完全なコード+実行例を。

期待される出力イメージ

$ moon run main.mbt -- "func" src/*.mbt
src/main.mbt:3:fn main() {
src/main.mbt:7:fn helper() {
src/lib.mbt:12:fn public_func() {

9. ファイルI/O実践(dotenv実装) 🔴上級

ゴール 設定ファイルの読み込みと型安全な環境変数管理を実装する

プロンプト(LLMにコピペ)

現在のMoonBitで、.envファイルを読み込むdotenvライブラリ相当を実装してください。
・.env / .env.local / .env.production の優先順位対応
・型安全な環境変数オブジェクトとして返す(struct推奨)
・最新の正しい外部パッケージを自動提案
・エラーハンドリングも含めて完全なコードを。

期待される出力イメージ

// 使用例
let config = load_dotenv!()
println(config.database_url)  // 型安全にアクセス

私が残す罠メモ

🚨 環境変数の型安全性

  • Stringで全部受けると、後でパース失敗する
  • 読み込み時点でInt/Bool/Stringなどに変換し、失敗時はResultで返す設計が吉

Part 4: 相互運用

10. JavaScriptとの相互運用(FFI) 🟡中級

ゴール MoonBitからJSを呼び、JSからMoonBitを呼べるようにする

プロンプト(LLMにコピペ)

現在のMoonBitからJavaScriptの関数(console.log、fetchなど)を呼び出すFFIの最新の書き方をステップごとに教えて。
逆(JS→MoonBit)の例も1つ。
ブラウザとNode両対応で。

期待される出力イメージ

// MoonBitからJSのconsole.logを呼ぶ
fn js_log(s: String) = "console.log"

// JSからMoonBitの関数を呼ぶ設定
// ...

Appendix A: トラブルシューティング(現在の仕様)

現象 原因 解決策
moon testがブラウザバックエンドで失敗 ブラウザ環境の制限 moon test --target nodeを使用
LSPの補全が効かない 依存追加後の未リロード VSCode: 「Reload Window」実行
xパッケージのimportエラー パス変更 プロンプトで最新パスを確認
?演算子でpanic Result型の不適切な使用 呼び出し元でResultを適切にハンドリング
ファイルI/Oがブラウザで動かない セキュリティ制限 Nodeバックエンドを使用

Appendix B: 追加で調べたいトピック(プロンプト例)

B.1 テストの書き方

現在のMoonBitで単体テストを書く方法を教えて。
・moon testの使い方
・アサーションの書き方
・テスト用のfixtureや一時ファイルの扱い

B.2 ビルドとWASM出力

現在のMoonBitでWASMを出力し、HTMLから読み込む方法をステップごとに教えて。
・moon build --target wasm の使い方
・出力された.wasmの構造
・HTML/JSからの読み込み方(instantiateStreamingなど)

B.3 パフォーマンス最適化

現在のMoonBitでWASMの出力サイズを小さくする方法と、実行速度を上げる方法を教えて。
・コンパイルオプション
・不要なコードの削除
・プロファイリング方法

まとめ:この記事の使い方

  1. やりたいことが決まっている → 該当章のプロンプトをコピペ
  2. LLMに投げる(必ずweb検索を有効に)
  3. 出力されたコードを試す
  4. ハマったら「私が残す罠メモ」を確認
  5. さらに深く知りたい → Appendix Bのプロンプトを活用

MoonBitは活発に開発されている言語です。この記事のプロンプト駆動アプローチで、常に最新の情報をキャッチアップしながら学習を進めてください。


フィードバック歓迎: この記事を使ってハマった点があれば、作者までご連絡ください。Appendix Aに追加します。

2026年現在、MoonBitで小さく始めるWebAssembly開発

〜基礎からハマりポイントまで、全部LLMに聞ける形にまとめた実践メモ〜

この記事の読み方(大事)

  • MoonBitの公式ドキュメントやlang tourは素晴らしいですが、仕様やベストプラクティスがまだ変わりやすいです。
  • だからこそ「全部自分で最新情報を書く」のをやめました。この記事の9割は**「LLMにコピペするだけのプロンプト」**です。
  • あなたは気になる章のプロンプトをGrok / Claude / ChatGPTに投げて、その場で最新のコードと説明をもらえばOK。
  • 私が手動で残しているのは「LLMの出力のどこに注目すべきか(習得ポイント)」と「実際にハマった人だけが知る現在の罠」だけです。

⚠️ 注意: 必ずWeb検索機能(ブラウジング)が有効なLLMを使用してください。


1. インストールと初回セットアップ

プロンプト(そのままコピペ)

【Web検索必須】MoonBitの最新の公式ドキュメントを検索した上で答えてください。
現在のMoonBitのインストール方法を、Linux / macOS / Windowsそれぞれでステップバイステップで教えてください。
公式のcurlコマンドもそのまま書いて、インストール後に必ず実行すべき検証コマンド(moon versionなど)も含めて。
VSCode拡張のインストール方法と、初回起動時に推奨される設定も教えて。

🎯 習得ポイント(LLMの出力からここを学ぼう)

  • moon CLIコマンドの基本的な存在と役割
  • VSCode拡張機能とLSP(Language Server Protocol)の連携

🔥 私が残す罠メモ

  • WindowsはPowerShell必須(cmdだと稀に失敗する)。
  • VSCode拡張はインストール直後に「MoonBit: Restart Language Server」を一度実行しないと補完が効かないことがある。

2. プロジェクト作成とパッケージ管理

プロンプト

【Web検索必須】最新のMoonBitの仕様に基づいて答えてください。
ゼロからプロジェクトを作成してHello Worldを動かすまでの全コマンドと、パッケージ管理の方法を教えてください。
以下の要素を含めること:
・moon new で生成されるファイル(moon.mod.json と moon.pkg.json の違い)
・ブラウザバックエンドとNodeバックエンドの両方を試す方法
・moon add / remove / update の使い方と、バージョンピン留め(例: ~0.1.0)の方法

🎯 習得ポイント

  • moon.mod.json(プロジェクト全体の設定)と moon.pkg.json(各パッケージの設定)の役割の違い。
  • ビルドターゲット(Wasm/Wasm-GC/JSなど)の切り替え方。

🔥 私が残す罠メモ

  • moonbitlang/x などの公式拡張パッケージはexperimentalな変更が多いので、必ずバージョンを厳密にピン留め~0.x.x 推奨)すること。
  • moon.pkg.json を直接編集すると moon build 時に上書き・フォーマットされるので構文エラーに注意。

3. 基本構文と型システム(Rust/Go経験者向け)

プロンプト

【Web検索必須】最新のMoonBitの仕様に基づいて答えてください。
以下の基本構文を、RustやGoとの違いをコメント付きで実用的な短いコード例で示してください。
・変数宣言(let / mut)
・制御構文(if / else / match / for / while)
・関数定義とクロージャ
・データ構造(struct / enum / impl)
・Trait(トレイト)とジェネリクスの基本

🎯 習得ポイント

  • let がデフォルトで不変であり、ミュータブルにするには mut が必要なこと(Rustライク)。
  • enum が強力な代数データ型(ADT)として機能し、match と組み合わせて使う方法。
  • MoonBit特有のメソッド定義(fn MethodName(self : Type) ...)の記法。

4. テスト駆動での開発(moon test)

プロンプト

【Web検索必須】最新のMoonBitの仕様に基づいて答えてください。
MoonBitの組み込みテスト機能(moon test)の使い方を教えてください。
・testブロックの書き方
・アサーション(assert_eqなど)の方法
・エラーが発生することを期待するテスト(panicの捕捉など)の書き方
実用的な関数を1つ書き、それに対するテストコードを提示してください。

🎯 習得ポイント

  • 別ファイルではなく、実装と同じ場所に test ブロックを書くインラインテストの文化。
  • テスト実行時のターゲット指定による挙動の違い。

🔥 私が残す罠メモ

  • moon test がブラウザバックエンド指定だとCI環境等で不安定になることがある。ユニットテストはNodeバックエンドで回すのが無難。

5. エラーハンドリングとファイルI/O実践(CLIツール作成)

※ 細かいコマンドを1つずつ作るのではなく、CLIツールに必須の要素を一度に学びます。

プロンプト

【Web検索必須】最新のMoonBitの仕様と core パッケージ、または moonbitlang/x を検索して答えてください。
指定したファイル(例: .env)を読み込み、特定パターンの行を抽出して出力する簡易的なCLIツール(grep風)を書いてください。
以下の要素を必ず含めること:
・コマンドライン引数の受け取り
・ファイルの読み込み
・Result型と `?` 演算子を使った丁寧なエラーハンドリング
・Nodeバックエンドとブラウザバックエンドでの制約の違い

🎯 習得ポイント

  • 失敗する可能性のある処理を Result<T, Error> 型で返す設計。
  • ? 演算子を使ったアーリーリターン(エラーの伝播)の書き方。
  • I/O操作における標準ライブラリ(core)と拡張ライブラリ(x)の使い分け。

🔥 私が残す罠メモ

  • エラーハンドリング時、Result? で繋げずに unwrap() 等でサボると、デバッグ不能なpanic地獄になるので注意。

6. 非同期処理(async/await)の現状

プロンプト

【Web検索必須】最新のMoonBitの仕様に基づいて答えてください。
MoonBitにおける async/await のサポート状況を正確に教えてください。
・使える範囲と使えない範囲
・ブラウザバックエンドとNodeバックエンドの違い
・実用例としてシンプルなasync関数(例: モックの非同期fetch処理)を1つ書いてください。

🎯 習得ポイント

  • どの処理がブロックされ、どの処理が非同期に実行されるのか。
  • Wasmコンテキストでの非同期処理特有の制約。

🔥 私が残す罠メモ

  • (2026年3月時点)ブラウザ環境では await の扱いにまだかなり制限がある。現状はNodeバックエンドの方が実用的に動くことが多い。

7. WebAssemblyビルドとJS相互運用(FFI)

プロンプト

【Web検索必須】最新のMoonBitの仕様に基づいて答えてください。
MoonBitコードをWebAssemblyにビルドし、JavaScriptから呼び出す方法(FFI)をステップごとに教えてください。
以下の要素を含めること:
・MoonBit側での `@ffi` を使ったJS関数のインポート(例: console.logの呼び出し)
・MoonBitからJSへ関数をエクスポートする方法
・生成されたWasmファイルをブラウザ(またはNode)でインスタンス化するJS側のコード
・Wasmのファイルサイズを最適化するビルドコマンド

🎯 習得ポイント

  • MoonBitとJS間の「型(メモリ)の受け渡し」の仕組み。Wasm側からJSへ文字列や配列をどう渡すか。
  • moon build --target wasm 等のビルドオプション。

おまけ:私が実際にハマったポイントまとめ(2026年3月時点)

  • moonbitlang/x 配下のパッケージは毎月のようにパスや仕様が変わる。だからこそこの記事の「LLMに最新を検索させるプロンプト」が最強の防衛策になる。
  • 依存関係(moon add)を追加した直後は、VSCodeのLSPがバグることがある。迷わずコマンドパレットから「Reload Window」を実行すること。
  • LLMが古いRust風の構文を吐き出すことがある。エラーが出たら、エラーメッセージごとLLMに投げ返して「MoonBitの最新の文法に直して」と言うのが一番早い。
@podhmo
Copy link
Author

podhmo commented Mar 9, 2026

幾分かは手直しする必要がありそう。

丁寧にやるなら「ここで気にしたいこと」みたいなポイントは用意してあげたほうが良いのかも?

@podhmo
Copy link
Author

podhmo commented Mar 9, 2026

2026年3月現在

こういう表現は不要だよgrokくん。
https://x.com/i/grok/share/377a607e2e17452fb00fe8aeb334c9cc

@podhmo
Copy link
Author

podhmo commented Mar 9, 2026

kimiに追加で書かせてみたけど、実行結果の部分などで手離れが悪い出力になってたりするな。あと環境の話は不要な気もする。

https://www.kimi.com/share/19cd0b0c-6c32-8263-8000-0000dd8e3657

(全部初級だよ… > article2.md)

@podhmo
Copy link
Author

podhmo commented Mar 9, 2026

article3.mdはgemini 3.1 pro用(検索弱いので記事全文貼って整形だけ)

あなたは以下の方針で書かれた https://gist.github.com/podhmo/652cf50e4d187e21f55f9197caab4959#file-article-md の記事をより良いものにしてほしいです。(記事は添付したテキストファイルに全文あります)

つまり以下のようなことをしてください

- 手離れを良くする
- 振り返るポイント(習得するべきこと)を明記する
- 不足事項つまり新たな章を増やす(不要な部分を取り除く)

---

この記事の目的は以下でした

最近はai slopという訳じゃないけど解説記事の作り方も悩ましい感じはある。

例えばほんとに基礎的なところからある対象Xの記事を書くとして、冗長過ぎるとだるいし陳腐化を避けようとしたときに変更箇所が増え手離れが悪い。

記事本文に「LLMにこう聞いて」と言う羅列で済ませる手はあるかも?

例えば対象Xにはmoonbitなどが入る。

とは言えasyncの制限とかcoreパッケージのこととかファイルioにmoonbitlang/xのほうが必要みたいな情報は残しておきたい気はする。

(これも「こういうことを行うコードを書いて」というプロンプトで聞いてみてとかで対応できる気がしないでもない)

@podhmo
Copy link
Author

podhmo commented Mar 9, 2026

やってみての感想としてはどういう方法かはプロンプトにしても良いけど何を学ぶべきかなどは自分で記述したほうが良い。コンテンツ自体を雑にaiに生成させると手離れの悪いプロンプトや記事を書いてしまう(まぁもともとデザイン的なモックの感じでやってみただけ)

基本的には教科書の解説をなくした問題集みたいなイメージになるのかも。つまり何を学ぶべきか自体は自分の手で記述した方が良い。どのように解くかはLLMに任せる。それが正解と呼べるかの条件は事前に定義する必要がある。

そしてどのような粒度で問題を置いておくかというのが腕の見せ所になるのかもしれない。

@podhmo
Copy link
Author

podhmo commented Mar 9, 2026

逆に言うと、イベント参加メモみたいなノリで現時点でのそれぞれのプロンプトの実施結果を貼り付けた記事を書く人が現れても良い(動作確認してない人は殺す)。疎通テストのかわりになる。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment