RubyのOCRAは古くなっています:代わりにOCRANを使いましょう

RubyスクリプトからOCRA(One-Click Ruby Application)で .exe を作ろうとしている方へ。残念ながらOCRAはもうメンテナンスされていません。最後のリリースは2020年3月の1.3.11で、変更履歴に記載されている対応バージョンはRuby 2.2〜2.7です。現在メンテナンスされている後継は OCRAN で、Ruby 3.2以降に対応したOCRAのフォークです。使い方もオプションもOCRAと同じなので、たいていは数分で移行できます。

OCRANについて

OCRAはLars Christensenさんが作ったツールで、長年にわたりRubyプログラムをWindowsの実行ファイルにする定番でした。OCRANは2023年にOCRAのフォークとして始まり、現在は私がほかのコントリビューターと一緒にメンテナンスしています。新しいRubyへの対応に加えて、今ではLinuxやmacOSでも実行ファイルを作れるほか、ディレクトリ、zipアーカイブ、macOSのアプリバンドルとして出力することもできます。

OCRAからOCRANへの移行

1. OCRANをインストールします。 Ruby 3.2以降が必要です。

gem install ocran

2. ocra の代わりに ocran を実行します。 コマンドラインはそのままで大丈夫です。

# 移行前
ocra script.rb --output myapp.exe --icon app.ico --gem-full
# 移行後
ocran script.rb --output myapp.exe --icon app.ico --gem-full

変わらないこと: OCRA 1.3.11のコマンドラインオプションは、すべて同じ名前でOCRANにあります。たとえば --output、--icon、--windows、--console、--no-lzma、--gemfile、--no-dep-run、--add-all-core、--chdir-first、--dll、--innosetup、--debug-extract、そして --gem-* 系のオプションです。追加ファイルの指定や -- の後に書く引数も、これまでどおり使えます。ビルド中にスクリプトを実行して依存関係を検出するしくみも同じです。

変わること: コードの中でOCRAの名前を使っている場合は、名前を置き換えてください。

OCRA OCRAN
ENV["OCRA_EXECUTABLE"] ENV["OCRAN_EXECUTABLE"]
defined?(Ocra) defined?(Ocran)
app = MyApp.new
app.main_loop unless defined?(Ocran)

base_dir = File.dirname(ENV["OCRAN_EXECUTABLE"].to_s)

まだRuby 3.0や3.1を使っている場合は、それらに対応した最後のバージョンであるOCRAN 1.3.17をインストールしてください。

gem install ocran -v 1.3.17

OCRANについてもっと詳しく

記事「OCRAN:RubyスクリプトをWindows・Linux・macOS向けの実行ファイルにする」では、出力形式、依存関係の検出のしくみ、最近のバージョンでの変更点を紹介しています。ドキュメントは GitHubのREADME にあり、問題があれば Issueトラッカー で報告できます。