【KoRブース裏企画】Rails in 1.44MB Challenge #kaigionrails_fd0

こんにちは、osyoyu です。いよいよ明日がKaigi on Rails本番ですよ! むっちゃドキドキしてきた……。

スマートバンクではとっても面白い企画をご用意してみなさまをお待ちしています。

以下は3人ぐらい参加してくれたらいいなと思っている企画の告知です。スマートバンクの本企画ではなくosyoyuの趣味です。




Rails一式をフロッピーディスク(1.44MB)に収めてください。会場でフロッピーディスクに書き込んで動かしてプレゼントします!

Railsは結構でっかいフレームワークです。依存しているGemを全部足しあげると50MBぐらいになります。機能削減・圧縮・ズル、あらゆるテクを駆使して1/30のサイズにしてください!

% cat Gemfile
source 'https://rubygems.org'
gem 'rails'

% bundle install --path vendor/bundle

% du -hd 1
 50M    ./vendor
 50M    .

会場にUSB-FDDを持ち込んでいます。ちなみにこの写真は1.9MBなのでフロッピーには収まりません。

参加方法

  • まずは手元でRailsを1.44 MBに収めてください。
  • いい方法を発明できたら #kaigionrails_fd0 でツイートしてくれるとうれしいです。
  • osyoyuがいるときに来ブースいただけたら、実際にフロッピーにファイルを書いて動かせます。
  • フロッピーディスクはプレゼントします。枚数にだいぶ限りあり。持ち込み歓迎。

レギュレーション

  • 共通
    • 動かすRailsアプリはなんでもいいです。お任せします。
  • レギュA: Railsを1.44MBに収めるチャレンジ
    • フロッピーディスクを挿入し、中のファイルを ruby コマンド等で実行することでRailsが起動すればOKです。通常のRuby 3.4.6の一式はホストマシンで用意しますが、 rails gem相当も1.44MBに含まれる必要があります。
      • Bundlerを使う場合は bundle install --path vendor/bundle で実現できます。
    • 使えるRailsの機能は問いません。ActiveRecordが使えなくてもOKです。
    • 1.44MBの中に高度なRailsアプリが収まっていたり、Railsの多くの機能が使える状態だと高得点です。
    • tar コマンドなど、FDの外のツール類は自由に利用・追加できますが、そのようなものが少ないほど高得点です。
    • 厳密な評価とかはしません。参加してくれるだけでうれしいので。
  • レギュB: Rails + Rubyを1.44MBに収めるチャレンジ
    • フロッピーディスクを挿入し、中の実行可能形式ファイルを実行することでRailsが起動すればOKです。ホストマシンのRubyは使えません。
    • たぶん1.44MBに収めることは困難です。複数枚のフロッピーを使ってもOKです。
    • こちらも使えるRuby/Railsの機能が最も多い人の優勝です。
  • その他のレギュレーションの発明も歓迎します(OSごと収めるなど)。厳密なことは何も決めていないです。

細かい仕様

  • 会場に持ち込むUSB-FDDの都合、1.44MB(1474560バイト)より大きく見えるフォーマットは使えません。いわゆるDOS/Vフォーマットです。DMF)を使いたいみなさんの気持ちは分かります。
    • ATAのドライブを持ってきてくれたら…… 考えます。
  • PC-98フォーマット(1.23MB)も使えますが、使う意味はあまりないとは思います。
  • 動かすOSはUbuntu 25.04(amd64)になります。パッケージの追加には応じます。
  • FDのマウントポイントは /mnt/fd です。Rubyのprefixはここにしないといけないと思います。

手法のアイデア

  • Railsアプリを最小化する
  • Rubyコードをminifyする
    • インデントが深くなると、コード中に空白文字がたくさん登場します。つぶせます。
  • 圧縮する
    • コードはテキストなので、圧縮はよく効きます。
    • tar, xz コマンドや liblzma はインストールしておきます。
  • gem "rails" をやめる
    • rails gemは actionpack などへの依存があるだけの、コードがほぼないGemです。↓ のように解体できます。こうなってくると作業しやすくなりますね。
gem "actioncable" # なくせそう?
gem "actionmailbox" # なくせそう?
gem "actionmailer"
gem "actionpack" # これは必要そう
gem "actiontext"
gem "actionview"
gem "activejob"
gem "activemodel"
gem "activerecord"
gem "activestorage"
gem "activesupport"
gem "bundler"
gem "railties"

で、可能なんですか?

  • レギュA(Railsを収める)は一応できました。
  • レギュB(Rubyも収める)は大変な困難があるものと思われます。

それでは東京でお会いしましょう〜




Source link

関連記事

コメント

この記事へのコメントはありません。