シングルバイナリで動くゲームエンジンの fude というのを作っている

ongaeshi/fude: A single binary video game programming environment.

インストール不要でRubyスクリプトを書くだけで動くゲームエンジンを作ってみたくて作った。raylibというC言語で書かれたゲームエンジンを内部で使っている。とても軽量で raylib、mruby、raylib APIのmrubyへのバインディング全てでバイナリサイズが1.8MB! これならアプリケーション単位でfude.exeバイナリをgitレポジトリに置いても十分に運用できると思う。

自分がWindowsなのでWindowsバイナリを置いてしまっているけどraylibもmrubyも様々なプラットフォームで動くのでMacLinux, Androidで動かすのもそこまで難しくないと思う。後raylibはemscriptenによるHTMLビルドもサポートしているようなので機会があれば試してみたい。

インストールと使い方

git clone して exe 実行すればすぐにサンプルが動く。

ホットリロードモードもあってfude main.rbのようにファイル名指定、またはドラッグアンドドロップして起動した状態でファイルを編集すれば自動でホットリロードする。

raylibのAPIは大体移植したので https://github.com/raysan5/raylib/tree/master/examples にあるサンプルコードはある程度移植できるようになっているはず。 https://github.com/ongaeshi/fude/tree/master/examples にちょっと移植してある。

シングルバイナリでRubyを使ってゲームが作れるソフトウェアを作っている

GitHub - ongaeshi/fude: A single binary video game programming environment.

mrubyでraylibの関数を一通りバインドして、ちょっとRuby風に書けるフレーバーを足したもの。mrubyだけどmruby-requireは入れてあるので、requireもできる。

まだまだ道半ばだけど60%位のAPIはカバーできたはず。レポジトリをチェックアウトすれば実行バイナリも一緒に振ってくるので、main.rbをいじればすぐにいろいろ書けます。

Trelloの使っていないボードをまとめてアーカイブする

https://trello.com をずっと使っているが、段々とボードが増えてきてボード間の移動などがやりにくくなっていた。

項目を増やしたり移動はしなくなったけど、消したくないボードはアーカイブをすればよいらしい。

実験するとアーカイブされたボードの中身も検索対象に含められるようなので読み返すのには困らなさそうだ。

Rubyの型チェッカーSorbetのRBIファイルの出力機能について調べている

Rubyの型チェッカーSorbetのドキュメントを読んでいる。今回はrbiファイルの出力機能について。

https://sorbet.org/docs/rbi

srb init(2回目以降は srb rbi update)でプロジェクト内のRubyスクリプトを辿ってrbi(RuBy Interface)ファイルを自動生成してくれる。budlerの設定を元に使っているgemのrbiも生成する。

rbiの実態はメソッドの実装の中身が空のRubyスクリプトで、静的チェックやコード補完のときはrbiだけを読み込むことで高速に型チェックできることを期待している。この辺りの思想は他のRuby型チェッカーsteepなどと同じ?ようだ。ただし型定義にはSorbetが独自に定義したsig関数を使っている。

自動生成の場合、rbiには明示的なクラス名やメソッド名は出力されるが、引数や戻り値の型、メタプログラミングで動的に生成されるものは出力されない。もっと詳細なrbiが欲しいときは手動でrbiを書くこともできる。また、gem内にgem作成者が記述したrbiが存在する、GitHubのsorbet-typedレポジトリに対応するrbiが存在する場合はそちらが使われる。

ソースコードに埋め込んだ型アノテーションから型定義ファイルを生成、sobet-typeとflow-typedなど、SorbetはJavaScriptの型チェッカーライブラリflowの影響を受けている印象がある(実際にflowを使っている訳ではないので勘違いかもしれないけど)。flowを調べるとSorbetがどのような着地点を目指しているか分かるかもしれない。

Rubyの静的型付けが楽しみになってきた

RubyKaigi2019で発表されていたStripeのSorbetというライブラリが楽しみ。

https://sorbet.org/

  • すでにStripeの内部で実際に使われている
  • 今年の夏に一般公開予定
  • C++で書かれており高速に動作
  • IDEサポート(定義ジャンプとコード補完、LSP準拠?)
  • Rubyコード内にDSLを使って引数と戻り値の型を記述(この辺りは賛否分かれそう)

高速に動作することとIDEサポートをコア機能として挙げていることが好印象。静的型チェックはテストと一緒に実行するならある程度時間がかかっても許容できるけど、コード補完はできるだけレスポンスが早い方がよいので。

最近Rubyにこの機能があったらもっと便利になるのになーというものがあって、1つはバイナリgemのビルド無しでRubyで作ったものを簡単に再配布できる機能、もう1つが簡単に導入できて快適に使えるIDEサポートだと思っているのだが、Sorbutないしは他の静的型付け機能で高速なLSPサポートができるようになったら後者は解決するのではないかと期待している。

公開されたらWindowsでビルドできるのかなども含めて色々と触ってみたい。

Textwellでリンクを簡単にTwitterに投稿する方法

  • リンクしたいページを開いて共有から「Textwellに追記」
  • Textwellに移動、タイトルとURLが2行で出力され選択されているのでそのまま
  • Textwellの「Twitter(Direct, Current & Clear)」アクションを実行

短文ブログを書く方法

3つのルールでやっている(これも短文ブログ)。

  • 記事内のURLは1つだけ
  • 画像を1枚貼るとよい
  • 記事内のテーマは1つ
  • 執筆からリリースまで全てモバイルで書く

記事内のURLは1つだけ

特にモバイルだと大量のリンクを集めて貼り付ける作業は大変面倒くさい。

また大量のリンクが貼られた記事はモバイルだと読むのも面倒。

しかしリンクが無い記事だとそこで完結してしまい関連した記事を次々に読めるWebのメリットが生かせない。結論としてリンクは1つでよい。

画像を1枚貼るとよい

リンクをたくさん貼る代わりにスクショなどを駆使して画像を1枚貼ると分かりやすく文書を少なくできる。

スクリーンショットの保存や切り取り加工、ブログへの画像の投稿機能などはむしろモバイルの方が充実しているので積極的に活用する。

記事内のテーマは1つ

複数のテーマを展開させるとどうしても文書が長くなるので1つの記事のテーマは1つに絞る。

テーマを変えながら関連した話題を続けたい場合は新しい記事を書いてそのURLへのリンクを元記事に貼る。

執筆からリリースまで全てモバイルで書く

モバイルで最初から最後まで書けないとどうしても気合いを入れないと書けなくなってしまう。

技術的な話題だと大量のリンクや引用を挟まないと書きにくいものが多いが、どうすればできるようになるかはこのルールに沿いながら模索が必要。

テキストの記述はTextwellのおかげでモバイルでも思い通りに文書が書けるようになった(スライドによるカーソルのスクロールが超便利)。Scrapboxはてなブログへのエクスポートもアクションを使えば簡単。

経緯

私のようなPC大好きっ子でもモバイルの便利さには勝てず記事を読むのにモバイルを使う割合が年々増えている。それに伴いブログを書く時間も著しく減ってしまった。

同じような状況の人は増えているように感じており、商業的な文書ではないのに、ある側面では専門家の人より詳しく書いてあるような面白いブログに出会える機会が減っている(注: 私のブログは昔から駄文です)。これは文書プラットフォームにおける中間層の喪失ではないだろうか。

アウトプットはインプットに比例するため、インプットの中心となるモバイルで書きやすい記事のフォーマットとして、短文ブログというルールを考え中。