Family mruby project
Family mruby
ESP32を利用して、PC不要で、mrubyでゲームなどを気軽に開発できる環境を開発中です。
現在は、MicroRubyをベースとしたスタンドアロンなGUI開発環境を開発してます。
最新情報はgithub pagesで更新中です。
https://family-mruby.github.io/family-mruby-docs/
初期Family mrubyの情報
Family mruby(legacy)Kishima’s projectsKishima Craft WorksNarya v2.0基板
Narya board v2.0
自作ケースに入れるとこんな見た目になります。
少量ですが基板の販売をBOOTHで行っています。
https://silentworlds.booth.pm/
最新のデモ動画
開発ボード上にVGAディスプレイ、PS/2キーボードを接続して、以下のようなこと行っているデモです。
- 自作したエディタ上でのmrubyのコードを編集
- コードのバイトコンパイル
- VM上でのプログラムの実行(現在は描画系のAPIをC言語拡張を用いて実装しています)
つくばMini Maker Faire 2020への出店
IT Mediaさんにも紹介してもらえました。
つくば初の「Tsukuba Mini Maker Faire 2020」開催、自作キーボードの展示やマイコンボードの販売も2020年2月に、つくば市で初めて開催された「Tsukuba Mini Maker Faire 2020」。その模様を教育IT関連の視点で紹介しよう。ITmedia PC USER
プロジェクトの目的とコンセプト
- 目的
- Family BASICのようなmruby開発環境で、プログラミング初心者にも気軽にRubyに親しんでほしい
- コンセプト
- Rubyのコードで開発
- PC要らず
- 簡単なゲームを作れる環境にする(描画や音楽のAPIを充実させる)
- Linux使わない(自己満足)
- きるだけ安く作る(ある程度量産したいので)

Family mruby system
Naryaボード
Family mrubyのためのオリジナルボードを制作します。
指輪物語でガンダルフがはめていた3つの指輪のうちの一つ、Naryaを名前にお借りしています。
FabGLというライブラリを利用して、ESP32 WROVER-Bだけでモニタ制御、キーボード入力を実現しているのが特徴です。

Narya board block diagram
開発ボードの作り方
開発ボードの作り方を同人誌にまとめて技術書典7で頒布しました。
mruby_device_book_top
BOOTHで通販もしています。
https://silentworlds.booth.pm/
FabGLとは
画面の出力には、VGAを利用し、入力にはPS/2キーボードを使用します。この部分にはFabGLというライブラリを利用しています。
↓はそのライブラリを実際に手元のESP32で動かしてみた様子です。
FabGL demo
構想時のお話
ESP32 WROVER-Bの発売を知ったときから、mruby専用ボード作ってみたいな、という構想が昨年からありましたが、映像出力のハードルが高くて足踏みしていました。そこに一番の技術課題を解決してくれる素晴らしいライブラリが現れました。
構想は、もともとIchigoJamや、MachiKaniaを知って、mruby版を作ってみたい、思ったところから始まっています。
もう一つのきっかけは、中学生のころ学校に置いてあったFM-TOWNSのF-BASIC386にあります。
私は、F-BASIC386でプログラミングの楽しさを知ったので、ああいう環境が作れないかな、ずっと昔から思っていました。
F-BASIC386の良いところは、当時流行りの「マルチメディア」に強かったことがあります。MMLで音楽を再生したり、画像を読み込んだり、描画したり、スプライトを動かしたり、複数レイヤーの描画とか、CDの再生とかが、BASICの関数として提供されていて、ちょっとしたゲームを作るのに最高の環境でした。
最近はパソコンさえあれば無料でプロ並みの開発環境が整う時代になりましたが、自由度が高いぶん、ちょっとキャラクターを動かしてみたり、音を出してみたりするのに、何らかのライブラリのインストールをしたり、どうしてもひと手間掛かってしまいます。
オールインワンの環境でそんなハードルを下げたいな、というのが基本的なモチベーションです。
これはきっと、IchigoJamとも近いものだと思います。
BASICは先駆者がおられるので、じゃあ、自分はmrubyでやってみようかと思ったわけです。
「Narya」というコードネームで開発中です。
設計はじめ
最大の技術課題が解決しそうなので、具体的な設計を始めてみました。
まずESP32の入出力の割り当てです。

my plan for mruby board
64色出力すると、出力PINがかなり厳しいです。

PIN map for my project
細かく割り当て考えて見ました。あと出力が一つあればI2Cで機能拡張できそうなのですが、難しそうです。
残りのハード関連課題
- 音楽
やはりゲームに音楽は欠かせません。I2Sがまだ1チャンネル余っているはずなので、I2S→DACで音声出力したいです。ファミコン音源の仕様を真似しようと思っています。ここがうまくいくかどうかが次のハードルです。 - SDカード
スクリプトやデータの保存場所として、内蔵のフラッシュだけだと心もとないので、SDカードを使いたいと思います。ライブラリもあるので、SPIモードで接続するのはきっとすんなりうまくいくと期待しています - 量産
今回のこれは何かのイベントでHW頒布することを目標にしてるので、量産方法の検討も必要です。部品実装の外注にもトライしてみたいと思っています。
そして、次にmrubyの移植と、システム周りのアプリ実装、ボード固有のAPIをmrubyのmrbgemとしてラップする作業があります。
試作基板v1
VGAコネクタとmini D-SUBコネクタを載せた基板を試作しました。
narya board v1
narya board v1
narya board v1 FabGL demo
試作基板v1.2

Narya dev board v1.2
周辺調査
mrubyの仕様も勉強しようと思って、勢い余って同人誌も書いてしまいました。
[書籍版]mrubyバイトコードハンドブックv1.0 - Kishima Craft Works - BOOTHこの商品は書籍版です。DL版は↓です。 https://silentworlds.booth.pm/items/1307790 ●内容について mrubyのバーチャルマシンの基本的な動作の解説と、バイトコードに含まれる命令群の解説をまとめた本です。 特にバイトコード上の命令セット一つ一つについて詳しく用例を交えて詳しく説明しています。mruby2.0.0対応です。 単に命令の概要を紹介するだけでなく、mrubyがどのように内部的に処理を実現しているのかについても、実装を参照しながら詳しく説明しています。 ●改訂履歴 ・ 2019/4/14 v1.0 初版 ●サポートサイトsilentworlds.booth.pm