Siv3DRubyというのを作っている その2

Siv3Dの下回りのクラスをmrubyにバインドしていく。なんか動きはじめた。Win+Gでアプリケーションの動画を簡単に取れるのが大変便利。そしてそのままTwitterに貼り付けられるのも素晴らしい。

mrubyでC++のクラスを組み込むときのコーディング規約

ofrubyとRubyPicoのいいとこどりみたいな書き方で書いている。コーディング規約、最初はシンプルにmrubyの標準ライブラリ的な書き方で書こうとしていたのだけどC++のクラスをmrubyに組み込むと各C++クラス間でもmrubyとC++への相互変換が頻発するようになりそのたびにmrb_siv3d_point_to_cpp(mrb, obj)みたいに長い関数を毎回呼ぶのが辛くなってきた。

siv3d自体がC++11/14の先進的なC++の書き方を積極的に使っている印象なので、組み込み用のコードもガンガンC++で書くことに舵を切りなおす。

↑今はこんな感じで書いている、ToMrb(), ToCpp() とか無名名前空間を使って関数名を短くしたりできたので結構気に入っているがどうだろうか。

C++のライブラリをmrubyに組み込んでいる人はどうやって書いているのだろうか。

久しぶりに開発環境がWindowsになった

Siv3DRubyのレポジトリを作った。コツコツやっていく。

Siv3DRuby/Siv3DRuby at master · ongaeshi/Siv3DRuby

Siv3DRubyのために開発環境を数年ぶりにWindowsに変えた。RubyPicoもあるしiPod touchiTunesと相性がいいのもあってMacを捨てるつもりは今のところない。が、新鮮な環境を今は楽しんでいる。

Bash on Ubuntu on WindowsのおかげでMacを使うことのメリットの40%位はWindowsでもよくなったのではないかと感じる。Visual Studioがありフリーなユーティリティが充実してゲームができるのがWindows側のメリットだろうか。後は設定変えれば大体なんとかなるところ。実際にディスプレイ、キーボード、マウスは(Windows側で)色々工夫してMacで使っているものと共有できた。

EmacsUbuntu版でやろうと試みたがSpacemacsが画面がちかちかしてうまく動かなかったので今回は断念(Bash on Ubuntu on Windowsはまだまだ進化しそうなのでそのうち動くことを期待)。日本語化パッチの当たっていないNTEmacsを使ってみたが結構普通に動いて感動。

最低限必要なものは大体動くようになったのだが細々とした設定がまだまだ足りないので微妙に馴染んでいない感覚(Windows10にな慣れていない+Spacemacsの操作も覚え中なのも大きい)。とりあえずMacのキーボードで動いてはいるがせっかくなのでHHKBやREALFORCEとかに変えようとキーボードを物色中(親指シフトも使いたい)。

Siv3DRubyというのを作っている

Windowsでマルチメディアアプリケーションがとても簡単に作れるSiv3Dというライブラリがあるのだが、これにmrubyを組み込んで.exeとRubyスクリプトだけで簡単にマルチメディアアプリが作れるものを考えている。

mrubyはVisualStudioでも簡単にビルドできるようになっているので、作ったlibmruby.libをSiv3Dにリンクして動いたらいいなと思いえいとやってみたが、残念ながら大量のリンクエラー。コンソールアプリやWin32アプリは普通に作れたのでSiv3Dのための特殊なコンパイルオプションが必要なのだろうか。ひとまずおいておく。

作戦2として直接mrubyのソースをSiv3Dのプロジェクトに組み込んで動かしてみる今度は上手くいった!が、Rubyスクリプトが例外を起こしたときにアクセスバイオレーションする。問題その2、ひとまずおいておく。

試しにprintlnとwait_keyを組み込んだらあっさり画面に文字が出た、おおーこれは楽しい。

次はメインループと円を書く関数。Siv3Dはdrawとupdateのように複数のメソッドを要求せずに上から素直に書けるのでRubyと大変相性がよい、、。

ビルドした.exeとmain.rbをまとめて配布すると、なんとメモ帳さえあればVS不要でマルチメディアアプリケーションが作れるようになる。まずはいくつかのサンプルコードがRubyスクリプトで書けるように主要なクラスやメソッドだけを組み込んで評価版Siv3DRubyを作ってみよう。

RubyPicoが第9回フクオカRuby大賞で優秀賞をいただきました

iOSで動くRuby開発環境のRubyPicoが第9回フクオカRuby大賞で優秀賞をいただきました。

「第9回フクオカRuby大賞」審査結果 - 福岡県Ruby・コンテンツビジネス振興会議

今回で4回目の挑戦となりますが前回のhonyomiではじめて賞をいただき、プレゼンの雰囲気や流れも分かってきたので今度こそ大賞を!とがんばってみましたが残念ながらHaconiwaという素晴らしいソフトウェアが大賞となりました。しかしなんと優秀賞をもらうことができたので大変うれしいです。

RubyPicoについて

mrubyが出始めの頃に「これでiOSAndroidが動くRubyアプリがたくさん作られるんだろうなぁ」とか思っていたらmrubyの主戦場はnginxやH2OといったPCアプリケーションとなり、だれも作らないのなら自分が作ってみようという気分になったのがきっかけです。

最初はopenFrameworksを組み込んだofrubyというアプリを作っていたのですが、途中でiOSのアプリが64bit必須になり、当時のopenFramworks for iOSが64bitビルドに対応していなくて泣く泣くバージョンアップをあきらめました。

次にiOSネイティブのAPIをコツコツと組み込むしかないかと思い直し、写真が加工できたら普段プログラム書かない人も興味持つだろうと安易に考えて、写真加工をRubyスクリプトで行えるPictRubyというアプリを作りはじめました。

そして結局写真を撮るよりもプログラムを書くほうが好きだったと思い直し、よりCRubyに近づけたrequireや無限ループも書けるRubyPicoへと進化していきました。iOSアプリはマルチプロセスできないので、GUIを駆動させるメインスレッドとmrubyを実行するサブスレッドに分けて動かしてloop {...}させてもアプリが止まらなくなったときは大変楽しかったです。

趣味としての挑戦

普段の仕事ではC++などを使うことが多くRubyPicoに使われているObjective-CRubyはあまり使いません(Rubyは隙を見て無理やり使うけど)。私の場合インターネットに公開しているツールはいつもとちょっと違うジャンルで自分の作りたいものを作る、いわば趣味としての開発です。

フクオカRubyの参加者の方を見ていると仕事として参加されている方が多い印象でした(あくまで私の印象でちゃんと調べている訳でもないですが)。最近はオープンソース自体への参加者も仕事として参加されている人が増えているように感じます。そのこと自体はとてもいいことなのですが普段できないことを試したりまったくビジネスにはならないけど面白いことを試すための場としてのフィールドが狭くなっているのだとすると少しさみしい気持ちもあります。

ビジネスとして取り組んでいるオープンソースは実際役立つことが多くソフトウェアの質も高いものが多いです。しかし趣味のソフトウェアにも独特のよさがあるのではないかと考えています。お金にはならないけど楽しいこと優先で作れたり、飽きない限りいくらでも時間をかけることもできます。何よりも自由です。誰に頼まれた訳ではなくただ欲しいから、作りたかったから作ったソフトウェアはRubyのように時折不思議な魅力を持って多くの人々に使われます。私もいつかそういうものが作れたらいいなぁと分不相応なことを思っています。

仕事の延長で、趣味として、腕試しに、試しに作ったら割とよい出来になった、などたくさんのバックグラウンドを持つ人たちがもっとフクオカRubyに参加してくれたらよいなぁと思います。応募資料やプレゼンテーションの準備をするとその過程でより自分の制作物を客観的に眺めることができますし、審査員の方々の質問は示唆に富んで今後の開発に役立つので応募にかける時間は決して無駄にならないので是非。

今後の展望

Rubyを書いて動かすための基本的な土台はできてきたので、次のステップとしてもっとたくさんの人に使ってもらえるようになればよいと考えています。

審査員の方からいただいた質問の中で、コードのバックアップをとれないのかという話と、入力がPCと同じテキストエディタだけど例えばモバイルに特化した入力システムを作らないのか?という指摘がありました。

コードのバックアップはDropboxiCloudと連携ができれば色々便利になりそうです。が、実行可能なコードのダウンロードをAppleが禁止していて実際他のアプリでも昔入ってたけど途中で外したりしているので基本的には大変そうです。今はgithub_downaload.rbというGitHub APIを叩く拡張ライブラリを書いて、PCでコード書く→git push→github_downloadでスマホにダウンロードとかやっています(しかし2手くらい多い)。自分の書いたコードをバックアップ用途としてクラウドに同期するところだけでも許してもらえたら大変うれしいのですが。

モバイルに特化したコード入力システム、フリック入力のようにサクサクプログラムをスマホから入力できるようになったらそれだけで大きな価値がありそうです。Smalrubyのようにブロック入力だけど実際にはRubyスクリプトが書かれている、みたいになっているといいなぁと妄想しています。何かお手本になるようなアプリがないか探してみようかな。

他にもSpriteKitを組み込んでRubyだけでモバイルゲームを作れるようにしたらゲーム作りたい人たちに使ってもらえるのではないか、などと考えています。

まとめ

福岡のカレーが大変美味しかったです。次はとりかわが食べたい。

発表のときに使ったスライドはこちらです。

「最初に学ぶべきプログラミング言語」をスマホから気軽にはじめる

「最初に学ぶべきプログラミング言語」 - mizchi’s blog

  • 「環境構築」に100%成功する(AppStoreからダウンロードするだけ)
  • PC不要
  • Ruby

なので拙作のRubyPicoをすすめてみます。

RubyPico

RubyPico

  • ongaeshi
  • 仕事効率化
  • 無料

本格的にやりたくなったらPC買ってRubyに移行もできるよ。

epubからmobiに変換するならkindlegenが便利

購入したepubKindleに送ろうと思ったら、数ヶ月前にPCを乗り換えたのでcalibreがインストールされていなかった。

しかたないので昔書いた記事を見ながらcalibreを再インストールする。意外とブクマついてたので覗いてみると

変換だけなら公式のkindlegenの方が手軽かと。 http://b.hatena.ne.jp/entry/136255446/comment/hageatama-

これは便利そうなので試してみよう。

kindlgenのインストール

KindleGen v2.9をダウンロードして

$ unzip KindleGen_Mac_i386_v2_9.zip 
$ mv kindlegen /usr/local/bin/

これでインストールは終了。Windows, Linux, MacOS 用が用意されている。

epub -> mobi

$ kindlegen scheme-in-ruby.epub 
*************************************************************
 Amazon kindlegen(MAC OSX) V2.9 build 1028-0897292 
 A command line e-book compiler 
 Copyright Amazon.com and its Affiliates 2014 
*************************************************************

Info(prcgen):I1047: Added metadata dc:Title        "つくって学ぶプログラミング言語 RubyによるScheme処理系の実装"
Info(prcgen):I1047: Added metadata dc:Date         "2013-04-16"
Info(prcgen):I1047: Added metadata dc:Creator      "渡辺昌寛"
Info(prcgen):I1047: Added metadata dc:Publisher    "達人出版会"
Info(prcgen):I1047: Added metadata dc:Contributor  "高橋征義"
.
.
Info(prcgen):I1036: Mobi file built successfully

$ ls
scheme-in-ruby.epub
scheme-in-ruby.mobi

完成、あとはメールにmobiを添付してKindleに送りつければよい。

コマンドラインでさくさくepubからmobiに変換できるとやはり楽でよい。

RubyPico 0.9.4 リリース - GitHubに置かれたスクリプトをダウンロードできるように

拡張スクリプトを追加することでGitHubに置いたスクリプトをダウンロードできるようになりました。 - 更新履歴

RubyPico

RubyPico

  • ongaeshi
  • 仕事効率化
  • 無料

github_download.rb

RubyPicoGemsの仕組みをリニューアルしました。

  1. github_download.rb をインストール
  2. インストールしたいライブラリのパスをコピー(例. ongaeshi/rubypico_github)
  3. github_download.rb を使ってライブラリをインストール

全ての手順がRubyPico内で完結するようになりました。今までとは雲泥の使いやすさなので是非お試しください。自分が書いたプログラムもGitHubに置くことで他の人に配布できるようになります。

※ とりあえずongaeshi/app_installerをインストールしておくとAppタブへの登録が簡単になるのでおすすめです

Image.load()でファイルへの読み書きが可能に

Image.loadでローカルファイル内の画像を読み込んだり、Image#save_toでカメラロールの画像をファイルに保存することが可能になりました。

ということでついに、GitHubレポジトリに画像を入れてコミット、github_download.rbでダウンロード、Image.loadで表示することが可能になります。

ホームページリニューアル

情報が複数のページに拡散していたので1ページにまとめなおしました。スマホからでも読みやすく検索しやすくなったと思います。

http://rubypico.ongaeshi.me/

インストール

App Storeからどうぞ。