📖

Rubyでクロスプラットフォームで実行可能な単一パッケージを作成できるTebako gem

2025/03/01に公開

はじめに

たまたま見つけたgemが、かゆいところに手が届きそうだったので、サンプルコードを作ってみました。

Rubyでクロスプラットフォームで実行可能な単一パッケージの作成

Rubyは、これまで基本的にRubyランタイムが実行環境に入っていることが前提であることが多く、おもにRuby開発者向けの機能提供になりがちで、実行可能な単一パッケージの提供をする方法がほとんどなかったかと思います。

Tebakoは、こうしたRubyの状況に対して、比較的簡単にクロスプラットフォームで実行可能な単一パッケージを作成できるgemです。

https://github.com/tamatebako/tebako

実行可能なパッケージのビルドを行うため、gemインストールだけでは動かない部分もあります。READMEに各OSで事前に必要となるライブラリ等のインストール方法や環境変数の設定などの記載があるため、導入についてはこちらを参考にしてください。

tamatebako/tebako: local-installation

サンプル

非常に簡単なサンプルを作ってみました。

引数で受け取った文字列を空白区切りで結合して出力する echo コマンドです。

https://github.com/naokirin/tebako_echo_sample

引っかかったこと

  • ランタイムモードでは、 tebako-runtime も必要
  • bundle exec tebako press 等は、gemのロードで失敗するため、 bundle exec をつけずに tebako press で実行する必要がある

やや難点と感じたこと

  • かなり簡単なソースコードだけでも、ビルドにかなり時間がかかる
  • 上記とともに、ライブラリロードのエラー等がビルドのかなり後半で出ることもあり、初期のトライアンドエラーに時間がかかる

まとめ

個人的に、結構昔から「Rubyでも、Rubyやgemのインストールなしで実行可能なパッケージ生成できればなぁ」と思っていたので、びっくりでした。特に最近は言語自体のエコシステムにこうした機能が組み込まれているものも増えていたので、待望のgemかなと思います。

既存のコード資産を活用してRubyでコマンドを作りたい、Rubyに慣れているからRubyで書きたいといった要望に答えてくれるgemではないかなと思います。簡単なソースコードでもビルド時間が長いなとは思いますが、導入自体もそこまで複雑ではなくコマンドだけでビルドできるので、かなりよいのではないかと思います。

今後、コマンド等を作る際の選択肢の一つにしたいですね。

Discussion