SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Railsの新機能を知ろう!

Rails 7.1の新機能──非同期キュー、MySQLアダプター「Trilogy」やJavaScriptランタイム「Bun」の対応など

Railsの新機能を知ろう! 第2回

JavaScriptランタイムBunのサポート

 RailsにおけるJavaScriptランタイムといえば、Node.jsが定番でした。Rails 7.0においてフロントエンド開発環境が刷新されて、非Node.jsなアプリケーション開発が可能になりましたが、全てが置き換えられるわけはなく、依然としてJavaScriptランタイム環境が必要な状況は残っています。

 このJavaScriptランタイムに、Rails 7.1では新たにBunを選択できるようになりました。Bunとは、Node.jsの代替を目指したJavaScriptランタイム環境とツールキットです。公式サイトによると、以下のような特長を備えているとされています。

  • 高速である(公式サイトによるとDenoの2倍以上、Node.jsの5倍以上、高速)
  • APIが充実している(Node.jsのAPIなど)
  • 完全なツールキット(パッケージマネジャー、テストランナー、バンドラーを含む)

 基本的には、Bunは既存のランタイムを置き換えるためのものであるので、その速度が最大のメリットと言えそうです。本稿作成時点でバージョン1.0.8がリリースされており、安定リリースに入っています。

[NOTE]Bunの名称の由来

 Bunの名称は、バンドラー(Bundler)から来たといわれています。また、ロゴにもなっている中華まん(Bun)から来たともいわれています。なぜ中華まんかというと、さまざまなライブラリやツールを全て包み込むからということのようです。

 Bunを使ってアプリケーションを動作させるには、まずはオペレーティングシステムにBunがインストールされている必要があります。サポートされるOSはmacOS、Linux、WSL(Windows Services for Linux)ということなので、Windows環境で利用したければWSLのインストールが必要です。公式ページにインストール用のコマンドがありますので、それをターミナル等で実行してインストールしてください。

 アプリケーションの作成時には、-jあるいは--javascriptオプションを与えます。このオプションはJavaScriptアプローチを指定するもので、既定値はポートマッパーであるportmapです。これにbunを指定することで、アプリケーションがBunを使うように構成されます。

% rails new bun_app --javascript=bun

 アプリケーション作成で、アプリケーションのルートにはエントリポイントや出力ディレクトリが記載される設定ファイルであるbun.config.jsが作成されます。また、package.jsonファイルにはビルド時に実行されるbuildコマンドとパッケージの依存関係が記述されます。node_modulesディレクトリも依然として存在し、パッケージのインストールもbun installコマンドで行えるなど、利用感はNode.js等と大きく変わることなく移行もスムーズに行えそうです。

自動読み込みのための拡張メソッドの追加

 Rails 7.1では、config.autoload_libメソッドが導入されました。このメソッドは、デフォルトではアプリケーションの自動読み込みパスに含まれていないlibディレクトリを、config.autoload_pathsとconfig.eager_load_pathsに追加するために利用されます。

 自動読み込みとは、アプリケーションのクラスやモジュールをrequireなしに行えるようにする仕組みで、コードの簡略化に役立ちます。例えばモデルのPostクラスを使うからといって、require Postとソースの先頭に記述する必要はないのです。

 この自動読み込みパスの既定は、app下の全てのサブディレクトリ(assets、javascript、viewsは除く)などですが、ライブラリのディレクトリであるlibは含まれていません。autoload_libメソッドによってlibディレクトリを自動読み込みパスに含めることができ、自作したクラスや、サードパーティー製のライブラリなどもrequireなしに使えるようになります。

 autoload_libメソッドは、config/application.rbに以下のように既定で記述されています。config/environments/*.rbにも記述できます。なお、エンジン(ミニチュア版のRailsアプリでプラグインのように機能する)には記述できません。

リスト:config/application.rb
config.autoload_lib(ignore: %w(assets tasks))

 ignoreパラメーターは、lib内で除外するディレクトリです。この場合は、assetsとtasksをそれぞれ除外します。いずれも.rbファイルを含まないので、読み込み対象にしても意味がないからです。このように、lib内にあるが.rbファイルを含まないディレクトリは、このリストに明示的に加える必要があります。

 この他にconfig.autoload_lib_onceメソッドも使えるようになりました。このメソッドはautoload_libメソッドと似ていますが、libディレクトリをconfig.autoload_once_pathsに追加する点が異なります。config.autoload_once_pathsは、自動読み込みするが再読み込みはしないコードの保存場所を保持します(既定では指定なし)。再読み込みすると不都合なコード(ActiveJobのジョブ登録など)を含むディレクトリは、config.autoload_pathsではなくconfig.autoload_once_pathsに含むことになっています。

次のページ
新たなシリアライザActiveSupport::MessagePackのサポート

この記事は参考になりましたか?

Railsの新機能を知ろう!連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山内 直(WINGSプロジェクト ヤマウチ ナオ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook <個人紹介>WINGSプロジェクト所属のテクニカルライター。出版社を経てフリーランスとして独立。ライター、エディター、デベロッパー、講師業に従事。屋号は「たまデジ。」。

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/18896 2024/02/02 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー