ジェネレーターとテンプレートを使用した Rails アプリのブートストラップ
Rails のバッテリーを含むアプローチは、その最大の資産の 1 つです。少なくとも部分的には Rails のジェネレーターのおかげで、アプリケーションを簡単に迅速に起動できるフレームワークは他にありません。
Rails を少しでも使ったことがある人なら、ジェネレーターに出会ったことがあるでしょう。新しいアプリケーションを作成する必要がありますか? rails new を実行します 。多数の新しいモデルとビューをスキャフォールディングする必要がある場合は、rails generate scaffold を実行します。 。迅速に開始したり、ワークフローを合理化したりするために利用できる機能がさらに多数あります。
しかし、場合によっては、ジェネレーターを使用するだけでは十分ではありません。これらのコマンドの動作をカスタマイズしたり、独自のコマンドを作成したりすることもできます。この記事では、ジェネレーター、特にテンプレートを使用して独自のカスタム Rails アプリケーションを作成する方法について詳しく説明します。
始めましょう!
Rails ジェネレーターとは何ですか?
ジェネレーター関数 (Python や Javascript でよく知られているかもしれません) と混同しないでください。Railsgenerator は、物事の生成に焦点を当てたカスタム Thor コマンドです。
例はたくさんあります。おそらくモデル ジェネレーター (rails generate model) についてはよくご存じでしょう。 ) 新しい ActiveRecord モデルまたは移行ジェネレーター (rails generate migration を作成するため) ) 新しい移行を生成するため。 rails generate generator もあります ご想像のとおり、これにより新しいジェネレーターが作成されます。
ジェネレーターは相互に呼び出すことができます (例:rails scaffold)。 他の多数のジェネレーターを呼び出し、ファイルの作成または変更、Gem のインストール、特定の Rake タスクの実行などのメソッドを提供します。これがどのように機能するかを理解するために、単純なモデル仕様ジェネレーターを作成してみましょう。
Ruby on Rails で独自のジェネレーターを作成する
次のコマンドを実行します。
これにより、/lib/generators/model_spec にいくつかの新しいファイルが作成されます。 。 model_spec_generator.rb を変更できます フォルダ lib/generators/model_spec/ 内 モデル仕様ファイルを正しいディレクトリに作成するには:
template コマンドは lib/generators/model_spec/templates でテンプレート ファイルを検索します。 ディレクトリに移動し、指定された場所 (spec/models) にレンダリングします。 ディレクトリ。このコマンドは、テンプレート ファイル内で見つかった ERB スタイルの変数を置き換えます。
source_root を設定することで 、ジェネレーターに、参照されたテンプレート ファイルがどこにあるかを知らせます。テンプレートmodel_spec.rb フォルダ lib/generators/model_spec/templates/ 内 次のようになります:
ファイルを作成したら、ジェネレーターを実行して新しい仕様ファイルを作成できます。
多くの宝石には、このようなジェネレーターが同梱されています。実際、私たちは Rspec に付属するジェネレーターの簡易バージョンを作成しました。 FactoryBot には工場用のジェネレーターがあります。他にも多くの例があります。
さまざまな gem のジェネレーターは、私たちが作成したものよりも洗練されています。ジェネレーターに引数を受け取らせたり、rails scaffold などの既存のジェネレーターにフックしたりすることもできます。 。詳細については、Rails ジェネレーターのドキュメントを参照してください。
したがって、ジェネレーターには、既存のアプリケーションのワークフローを簡素化する可能性があります。しかし、ジェネレータを使用して新しいアプリケーションのセットアップをカスタマイズすることもできますか?
テンプレートを入力してください!
Ruby on Rails のテンプレート
名前が示すように、テンプレートはアプリケーションのセットアップをカスタマイズするためのファイルです。これらを、前に説明したテンプレート ファイルと混同しないでください。テンプレート API で明らかなように、内部では、これらは特定の目的を持つ単なるジェネレーターです。ジェネレーターとまったく同じではありませんが、非常によく似ています。
既存のテンプレート ファイルがある場合は、次のように使用できます。
ローカル ファイルを指定する代わりに、URL を指定することもできます。これは、アプリケーション テンプレートを共有できるため、特に便利です。
rails new の実行時にテンプレートを使用することに限定されません。 どちらか。すでにアプリをセットアップしている場合は、次のコマンドを実行して後でテンプレートを適用できます。
テンプレートは非常に便利です。新しいアプリを作成するたびに、同じいくつかの gem を追加したり、同じ設定を変更したりすることを自動化したくない人がいるでしょうか?独自のアプリケーション テンプレートを作成することは、たとえ長期的には大幅な時間の節約にはならないとしても、非常に楽しいものです。
Rails で独自のテンプレートを作成する
これで、ジェネレーターとテンプレートの使用方法について理解できました。簡単なアプリケーション テンプレートを作成して、いくつかのセットアップ手順を自動化しましょう。
Rails アプリをどのように設定するかは個人の好みによって決まりますが、例を次に示します。
<オル>.env.development を作成します 開発環境用のファイル。
ローカル ファイルを作成しましょう — mytemplate.rb — dotenv を追加します gem を使用する コマンド。
dotenv gem を追加したので、.env.development も作成しましょう。 ファイルにデータベース構成を含めます。
create_file を使用して、特定のコンテンツを含む新しいファイルを作成できます。 。このメソッドは Thor によって提供されているため、テンプレートやジェネレーターのドキュメントには見つかりません。エイリアス file も見つかるかもしれません。 。アプリケーション テンプレートは Rails::Generators::AppGenerator のコンテキストで評価されます。 、まさにそこが file です。 エイリアスが定義されています。
app_name 変数には最初の引数 rails new が含まれています 。この変数を使用すると、構成ファイルが生成されたアプリケーションと一致することを確認できます。
次に、環境変数を使用してデータベースに接続しましょう。 config/database.yml 全体を上書きすることもできます。 create_file を使用する コマンドですが、代わりに inject_into_file を使用して変更しましょう。 .
after では、文字列または正規表現の両方を使用できます。 引数を使用して、コンテンツを挿入する場所を指定します。
もちろん、この種の構成の使用は、ユーザーが SQLite でアプリケーションを作成していない場合にのみ意味があります。options を使用して、特定の引数の存在を確認できます。 変数。 Rails のアプリ ジェネレーターのソース コードを読んで、どのオプションが利用できるかを確認することをお勧めします。
最後になりましたが、必要に応じてユーザーが Rspec をインストールできるようにしましょう。ユーザー入力を取得してインタラクティブなテンプレートを作成するには、さまざまな方法があります。 yes? メソッドはユーザーに確認を求めます:
gem についてはすでに知っています。 メソッドですが、generate および after_bundle
前に述べたように、Rspec は独自のジェネレーターを追加し、これらのジェネレーター (またはその他のジェネレーター) をテンプレートから直接呼び出すことができます。しかし、落とし穴があります。gem は gem で指定されます。 メソッドはテンプレートの最後にのみインストールされます。 generate に電話をかける このような gem によって提供されるジェネレーターを使用すると失敗します。そのため、コマンドを after_bundle を使用してコールバックとして登録する必要があります。 .
メモ :最後に、ファイルの作成または変更について簡単に説明します。 create_file を使用しました および inject_into_file 、しかし他にもたくさんの選択肢があります。 copy_file に遭遇する可能性があります または template さまざまなテンプレートを読み取るとき。物事を簡単にするために、ここではそれらについて言及しました。より高度なテンプレートを作成したい場合は、ファイルを処理するための他の方法が存在することを知っておく必要があります。
結果:Rails の最終テンプレート
最終的なテンプレートは次のようになります:
この特定のテンプレートをテストするには、次のコマンドを実行します。
または:
カスタム データベース構成を利用するため。
前述したように、このファイルは GitHub Gist として共有するのに最適です。ニーズに合わせて変更し、アップロードして、同僚、友人、カスタムアプリ テンプレートに興味のある他の人と共有します 😉。
Rails ジェネレーターとテンプレートの詳細
言うまでもなく、ここではほんの表面をなぞっただけです。
Rails アプリの作成と開発に対する好みは人それぞれ異なるため、世の中には多数のジェネレーターとアプリケーション テンプレートがあります。特定のカスタマイズについて読むことで、その実行について多くのことを学ぶことができます。 ChrisOliver の Jumpstart と RailsBytes をお勧めします。後者はコミュニティが厳選したテンプレートのコレクションです。
また、Thoughtbot の Suspenders もあり、これが私に Rails ジェネレーターとテンプレートをさらに深く掘り下げるきっかけを与えてくれました。私は独自のアプリケーション テンプレート、Schienenzeppelin も作成しました。これは最新ではありませんが、インスピレーションを提供してくれるかもしれません。
まとめ:Ruby on Rails ジェネレーターとテンプレートを使ってみる
この記事では、Rails ジェネレーターの基本とその使用方法について調べました。新しいモデル仕様の作成を簡素化するために、独自のジェネレーターを作成しました。
次に、テンプレートを詳しく調べ、アプリケーションのセットアップをカスタマイズするための簡単なテンプレートを作成する方法を学びました。これは少し大変な作業ですが、非常にやりがいのある作業でもあります。独自のテンプレートを作成するのが苦手な場合は、オンラインにある既存のテンプレートから選択してください。
テンプレート化を楽しんでください!
追記Ruby Magic の投稿を報道後すぐに読みたい場合は、Ruby Magic ニュースレターを購読して、投稿を 1 つも見逃さないようにしてください。
ハンス・イェルク・シュネドリッツ
ゲスト著者の Hans は、オーストリアのウィーン出身の Rails エンジニアです。彼はほとんどの時間をコーディングするかコーディングに関する読書に費やしており、時にはそれについてブログに書くこともあります。彼が画面の前に座っていないときは、おそらく彼が外で山に登っているのを見つけるでしょう。
Hans-Jörg Schnedlitz によるすべての記事
-
AppSignal Ruby Gem 3.1 に MRI VM Magic ダッシュボードが追加 – インスタント パフォーマンス インサイト
MRI VM 統計用の Magic Dashboard を追加する AppSignal for Ruby gem 3.1 をリリースできることを非常に楽しみにしています。最新の Ruby gem にアップグレードすると、新しいプローブからのデータが流入し始めるとすぐに、AppSignal でこのダッシュボードが自動的に作成されるようになります。 表示される内容は次のとおりです。 Magic Dashboards は、セットアップを必要とせずに、アプリケーションに関する驚くべき洞察を人々に提供します。これらは自動的に機能し、Puma、Sidekiq、ActiveJob、ActionMai
-
AppSignal が Alpine Linux ARM をサポート:安心してサーバーを監視
本日、Alpine Linux を実行するマシンの ARM サポートを開始します。この機能は、Ruby および Elixir ユーザーが利用できます。将来的には、Node.js パッケージに Alpine Linux ARM のサポートを追加したいと考えています。 ARM CPU アーキテクチャはますます人気が高まっています。これは開発マシンや運用サーバーに電力を供給するため、サポートするオペレーティング システムのリストにこれを追加することにしました。 インストール手順 以前と同じ方法でパッケージをインストールできます。 ARM マシンは自動的に検出され、一致する拡張機能とエージェントが