はじまりはこういうことから。
最近はai slopという訳じゃないけど解説記事の作り方も悩ましい感じはある。
例えばほんとに基礎的なところからある対象Xの記事を書くとして、冗長過ぎるとだるいし陳腐化を避けようとしたときに変更箇所が増え手離れが悪い。
記事本文に「LLMにこう聞いて」と言う羅列で済ませる手はあるかも?
moonbitを例に記事を作らせてみる。
(もちろんここで出力された記事の正確性は保証してない。修整もしてない。デザインモックみたいな感じで)
2026年現在、MoonBitで小さく始めるWebAssembly開発
〜基礎からハマりポイントまで、全部LLMに聞ける形にまとめた実践メモ〜
注意点として、必ずweb検索を伴うLLMに聞く必要があります。
プロンプト(これをそのままコピペ)
2026年3月現在のMoonBitのインストール方法を、Linux / macOS / Windowsそれぞれでステップバイステップで教えてください。
公式のcurlコマンドもそのまま書いて、インストール後に必ず実行すべき検証コマンド(moon versionなど)も含めて。
VSCode拡張のインストール方法と、初回起動時に推奨される設定も教えて。
私が残す罠メモ
プロンプト
2026年3月現在のMoonBitで、外部パッケージの追加・更新・削除・バージョンピン留めの方法をすべて教えてください。
以下のすべてをコマンド例+moon.mod.json / moon.pkg.jsonの実際の差分付きで説明:
・moon add / moon remove / moon update の使い方
・moonbitlang/x を依存として追加する例
・ローカルパス参照の方法
・バージョンピン留め(例: ~0.1.0)とワイルドカードの違い
私が残す罠メモ
プロンプト
2026年3月現在のMoonBitで、ゼロからプロジェクトを作成してHello Worldを動かすまでの全コマンドを教えて。
moon new → 必要なファイルの説明 → moon run までの流れを、実際のターミナル出力例付きで。
ブラウザバックエンドとNodeバックエンドの両方を試す方法も教えて。
プロンプト
2026年3月現在のMoonBitで、以下の基本構文をRustとの違いをコメント付きで5〜8個の例を示してください:
・変数宣言(let / mut)
・if / else / match
・for / while
・関数定義とクロージャ
・struct / enum / impl
可能な限り短く、実用的なコード例に。
プロンプト
2026年3月現在のMoonBitにおけるasync/awaitのサポート状況を正確に教えてください。
・使える範囲と使えない範囲
・ブラウザバックエンドとNodeバックエンドの違い
・今後予定されている機能(あれば)
・実用例としてシンプルなasync関数を1つ書いて。
私が残す罠メモ
awaitがかなり制限されている(2026年3月時点)プロンプト
2026年3月現在のMoonBitで、Unixライクなcatコマンド相当のプログラムを書いてください。
・ファイル読み込み+標準出力
・コマンドライン引数でファイル名を受け取る(引数なしならstdin)
・エラーハンドリングは?演算子かResult型で丁寧に
・coreだけでは無理なら、最新の正しい外部パッケージ(moonbitlang/x配下など)を自動で提案してimportしてください
・Nodeバックエンドとブラウザバックエンドの違いも注記して
完全な動くコード+実行方法を教えて。
プロンプト
2026年3月現在のMoonBitで、lsコマンド相当のプログラムを書いてください。
・現在のディレクトリの一覧表示
・ファイルサイズも表示
・再帰オプション(-R)も実装
・最新の正しい外部パッケージを自動提案してimport
・エラーハンドリングは丁寧に
完全なコードと実行例を。
プロンプト
2026年3月現在のMoonBitで、grepコマンド相当のプログラムを書いてください。
・指定パターンをファイル内で検索
・行番号付きでヒット表示
・複数ファイル対応
・最新の正しい外部パッケージを自動提案
完全なコード+実行例を。
プロンプト
2026年3月現在のMoonBitで、.envファイルを読み込むdotenvライブラリ相当を実装してください。
・.env / .env.local / .env.production の優先順位対応
・型安全な環境変数オブジェクトとして返す(struct推奨)
・最新の正しい外部パッケージを自動提案
・エラーハンドリングも含めて完全なコードを。
プロンプト
2026年3月現在のMoonBitからJavaScriptの関数(console.log、fetchなど)を呼び出すFFIの最新の書き方をステップごとに教えて。
逆(JS→MoonBit)の例も1つ。
ブラウザとNode両対応で。
Resultを?で繋げないとpanic地獄になるmoon testがブラウザバックエンドだと不安定 → Nodeでテスト推奨対象読者
必要なもの
この記事の特徴
ゴール 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の環境変数反映が遅い/不完全な場合がある
対処法:
moon versionが通ることを確認してから次に進む🚨 VSCode拡張の補完が効かない
症状: コード入力時に補完が出てこない、エラー表示がおかしい
対処法:
ゴール 外部パッケージの追加・更新・削除・バージョン管理を理解する
プロンプト(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
~0.x.x推奨)moon updateは慎重に—壊れる可能性あり🚨 moon.pkg.jsonを直接編集しない
moon build時にmoon.mod.jsonの内容で上書きされるmoon addコマンドを使うゴール ゼロからプロジェクトを作成し、ブラウザと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. 基本構文
ゴール 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. 非同期処理
ゴール 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制限
awaitがかなり制限されている対処法:
--target nodeを優先ゴール ファイル読み込みとエラーハンドリングの基礎を学ぶ
プロンプト(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が制限される
ゴール ディレクトリ操作と再帰的なファイル探索を実装する
プロンプト(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実装
ゴール ファイル内容の検索と正規表現(または文字列検索)を実装する
プロンプト(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() {ゴール 設定ファイルの読み込みと型安全な環境変数管理を実装する
プロンプト(LLMにコピペ)
現在のMoonBitで、.envファイルを読み込むdotenvライブラリ相当を実装してください。
・.env / .env.local / .env.production の優先順位対応
・型安全な環境変数オブジェクトとして返す(struct推奨)
・最新の正しい外部パッケージを自動提案
・エラーハンドリングも含めて完全なコードを。
期待される出力イメージ
// 使用例
let config = load_dotenv!()
println(config.database_url) // 型安全にアクセス私が残す罠メモ
🚨 環境変数の型安全性
Stringで全部受けると、後でパース失敗するInt/Bool/Stringなどに変換し、失敗時はResultで返す設計が吉ゴール 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の関数を呼ぶ設定
// ...| 現象 | 原因 | 解決策 |
|---|---|---|
moon testがブラウザバックエンドで失敗 |
ブラウザ環境の制限 | moon test --target nodeを使用 |
| LSPの補全が効かない | 依存追加後の未リロード | VSCode: 「Reload Window」実行 |
| xパッケージのimportエラー | パス変更 | プロンプトで最新パスを確認 |
| ?演算子でpanic | Result型の不適切な使用 | 呼び出し元でResultを適切にハンドリング |
| ファイルI/Oがブラウザで動かない | セキュリティ制限 | Nodeバックエンドを使用 |
現在のMoonBitで単体テストを書く方法を教えて。
・moon testの使い方
・アサーションの書き方
・テスト用のfixtureや一時ファイルの扱い
現在のMoonBitでWASMを出力し、HTMLから読み込む方法をステップごとに教えて。
・moon build --target wasm の使い方
・出力された.wasmの構造
・HTML/JSからの読み込み方(instantiateStreamingなど)
現在のMoonBitでWASMの出力サイズを小さくする方法と、実行速度を上げる方法を教えて。
・コンパイルオプション
・不要なコードの削除
・プロファイリング方法
MoonBitは活発に開発されている言語です。この記事のプロンプト駆動アプローチで、常に最新の情報をキャッチアップしながら学習を進めてください。
フィードバック歓迎: この記事を使ってハマった点があれば、作者までご連絡ください。Appendix Aに追加します。
〜基礎からハマりポイントまで、全部LLMに聞ける形にまとめた実践メモ〜
⚠️ 注意: 必ずWeb検索機能(ブラウジング)が有効なLLMを使用してください。
プロンプト(そのままコピペ)
【Web検索必須】MoonBitの最新の公式ドキュメントを検索した上で答えてください。
現在のMoonBitのインストール方法を、Linux / macOS / Windowsそれぞれでステップバイステップで教えてください。
公式のcurlコマンドもそのまま書いて、インストール後に必ず実行すべき検証コマンド(moon versionなど)も含めて。
VSCode拡張のインストール方法と、初回起動時に推奨される設定も教えて。
🎯 習得ポイント(LLMの出力からここを学ぼう)
moon CLIコマンドの基本的な存在と役割🔥 私が残す罠メモ
プロンプト
【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(各パッケージの設定)の役割の違い。🔥 私が残す罠メモ
moonbitlang/x などの公式拡張パッケージはexperimentalな変更が多いので、必ずバージョンを厳密にピン留め(~0.x.x 推奨)すること。moon.pkg.json を直接編集すると moon build 時に上書き・フォーマットされるので構文エラーに注意。プロンプト
【Web検索必須】最新のMoonBitの仕様に基づいて答えてください。
以下の基本構文を、RustやGoとの違いをコメント付きで実用的な短いコード例で示してください。
・変数宣言(let / mut)
・制御構文(if / else / match / for / while)
・関数定義とクロージャ
・データ構造(struct / enum / impl)
・Trait(トレイト)とジェネリクスの基本
🎯 習得ポイント
let がデフォルトで不変であり、ミュータブルにするには mut が必要なこと(Rustライク)。enum が強力な代数データ型(ADT)として機能し、match と組み合わせて使う方法。fn MethodName(self : Type) ...)の記法。プロンプト
【Web検索必須】最新のMoonBitの仕様に基づいて答えてください。
MoonBitの組み込みテスト機能(moon test)の使い方を教えてください。
・testブロックの書き方
・アサーション(assert_eqなど)の方法
・エラーが発生することを期待するテスト(panicの捕捉など)の書き方
実用的な関数を1つ書き、それに対するテストコードを提示してください。
🎯 習得ポイント
test ブロックを書くインラインテストの文化。🔥 私が残す罠メモ
moon test がブラウザバックエンド指定だとCI環境等で不安定になることがある。ユニットテストはNodeバックエンドで回すのが無難。※ 細かいコマンドを1つずつ作るのではなく、CLIツールに必須の要素を一度に学びます。
プロンプト
【Web検索必須】最新のMoonBitの仕様と core パッケージ、または moonbitlang/x を検索して答えてください。
指定したファイル(例: .env)を読み込み、特定パターンの行を抽出して出力する簡易的なCLIツール(grep風)を書いてください。
以下の要素を必ず含めること:
・コマンドライン引数の受け取り
・ファイルの読み込み
・Result型と `?` 演算子を使った丁寧なエラーハンドリング
・Nodeバックエンドとブラウザバックエンドでの制約の違い
🎯 習得ポイント
Result<T, Error> 型で返す設計。? 演算子を使ったアーリーリターン(エラーの伝播)の書き方。core)と拡張ライブラリ(x)の使い分け。🔥 私が残す罠メモ
Result を ? で繋げずに unwrap() 等でサボると、デバッグ不能なpanic地獄になるので注意。プロンプト
【Web検索必須】最新のMoonBitの仕様に基づいて答えてください。
MoonBitにおける async/await のサポート状況を正確に教えてください。
・使える範囲と使えない範囲
・ブラウザバックエンドとNodeバックエンドの違い
・実用例としてシンプルなasync関数(例: モックの非同期fetch処理)を1つ書いてください。
🎯 習得ポイント
🔥 私が残す罠メモ
await の扱いにまだかなり制限がある。現状はNodeバックエンドの方が実用的に動くことが多い。プロンプト
【Web検索必須】最新のMoonBitの仕様に基づいて答えてください。
MoonBitコードをWebAssemblyにビルドし、JavaScriptから呼び出す方法(FFI)をステップごとに教えてください。
以下の要素を含めること:
・MoonBit側での `@ffi` を使ったJS関数のインポート(例: console.logの呼び出し)
・MoonBitからJSへ関数をエクスポートする方法
・生成されたWasmファイルをブラウザ(またはNode)でインスタンス化するJS側のコード
・Wasmのファイルサイズを最適化するビルドコマンド
🎯 習得ポイント
moon build --target wasm 等のビルドオプション。moonbitlang/x 配下のパッケージは毎月のようにパスや仕様が変わる。だからこそこの記事の「LLMに最新を検索させるプロンプト」が最強の防衛策になる。moon add)を追加した直後は、VSCodeのLSPがバグることがある。迷わずコマンドパレットから「Reload Window」を実行すること。2026年3月現在
こういう表現は不要だよgrokくん。
https://x.com/i/grok/share/377a607e2e17452fb00fe8aeb334c9cc
kimiに追加で書かせてみたけど、実行結果の部分などで手離れが悪い出力になってたりするな。あと環境の話は不要な気もする。
https://www.kimi.com/share/19cd0b0c-6c32-8263-8000-0000dd8e3657
(全部初級だよ… > article2.md)
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のほうが必要みたいな情報は残しておきたい気はする。
(これも「こういうことを行うコードを書いて」というプロンプトで聞いてみてとかで対応できる気がしないでもない)
やってみての感想としてはどういう方法かはプロンプトにしても良いけど何を学ぶべきかなどは自分で記述したほうが良い。コンテンツ自体を雑にaiに生成させると手離れの悪いプロンプトや記事を書いてしまう(まぁもともとデザイン的なモックの感じでやってみただけ)
基本的には教科書の解説をなくした問題集みたいなイメージになるのかも。つまり何を学ぶべきか自体は自分の手で記述した方が良い。どのように解くかはLLMに任せる。それが正解と呼べるかの条件は事前に定義する必要がある。
そしてどのような粒度で問題を置いておくかというのが腕の見せ所になるのかもしれない。
逆に言うと、イベント参加メモみたいなノリで現時点でのそれぞれのプロンプトの実施結果を貼り付けた記事を書く人が現れても良い(動作確認してない人は殺す)。疎通テストのかわりになる。
幾分かは手直しする必要がありそう。
丁寧にやるなら「ここで気にしたいこと」みたいなポイントは用意してあげたほうが良いのかも?