Ubuntu 22.04でRuby on Railsアプリケーションを構築する方法

こんにちは、初めまして。

Rubyで書かれたWebアプリケーションフレームワークのRailsは、アプリケーションの開発において共通の目標がある場合、一貫性のあるアプローチを取ります。そのため、Railsはルーティング、状態管理、アセット管理などの処理に関する規約を提供し、ほとんどのWebアプリケーションが必要とする基本機能を提供します。

レイルズはモデルビューコントローラ(MVC)のアーキテクチャパターンに従っており、アプリケーションの論理をモデルに配置し、ルーティングやアプリケーション情報の表示から分離します。この組織的な構造は、開発者がコードをヘルパーやパーシャルに抽出することを可能にする他の規約と共に、アプリケーションコードが不必要に繰り返されることを防ぎます。

このチュートリアルでは、ユーザーがサメやその行動に関する情報を投稿できるRailsアプリケーションを作成します。このプロジェクトは、将来のアプリケーション開発の出発点となります。

前提条件

このチュートリアルに従うためには、次のものが必要です:

  • A local machine or development server running Ubuntu 22.04. Your development machine should have a non-root user with administrative privileges and a firewall configured with ufw. For instructions on how to set this up, read our Initial Server Setup with Ubuntu 22.04 tutorial.
  • Node.js and npm installed on your local machine or development server. This tutorial uses Node.js version 18.13.0 and npm version 8.19.3. For guidance on installing Node.js and npm on Ubuntu 22.04, follow the instructions in the Option 2 —Installing Using a PPA section of How To Install Node.js on Ubuntu 22.04.
  • Ruby, rbenv, and Rails installed on your local machine or development server, following Steps 1-4 in How To Install Ruby on Rails with rbenv on Ubuntu 22.04. This tutorial uses Ruby 3.2.0, rbenv 1.2.0-52, and Rails 7.0.4.

Node.js、Ruby、rbenv、およびRailsがインストールされている場合、アプリケーション用のデータベースをインストールする準備ができています。

ステップ1 – SQLite3のインストール

Railsシャークアプリケーションを作成する前に、ユーザーデータを保存するためのデータベースが必要です。RailsはデフォルトでSQLiteを使用するように設定されており、これは開発においてしばしば良い選択肢です。アプリケーションのデータがプログラム的な拡張性を要求していない場合、SQLiteはアプリケーションのニーズに適しています。

最初に、ターミナル内でパッケージインデックスを更新してください。

  1. sudo apt update

 

次に、sqlite3とlibsqlite3-devパッケージをインストールしてください。

  1. sudo apt install sqlite3 libsqlite3-dev

 

これにより、SQLiteおよび必要な開発ファイルが両方インストールされます。

インストールが成功したかどうかを確認するために、バージョンをチェックすることができます。

  1. sqlite3 –version

 

Output

3.37.2 2022-01-06 13:25:41 872ba256cbf61d9290b571c0e6d82a20c224ca3ad82971edc46b29818d5dalt1

SQLiteをインストールしたら、アプリケーションの開発を始める準備が整いました。

ステップ2 – 新しいRailsプロジェクトの作成

データベースをインストールしたら、rails newコマンドを使って新しいRailsプロジェクトを作成し、Railsが提供するデフォルトのボイラープレートコードにアクセスすることができます。

「sharkapp」という名前のプロジェクトを作成するために、以下のコマンドを使用してください。

  1. rails new sharkapp

 

出力は、新しいプロジェクトのためにRailsが作成するさまざまな要素を示しています。次の出力では、いくつかの重要なファイル、ディレクトリ、およびコマンドが強調されています。

Output

create . . . create Gemfile . . . create app . . . create app/controllers/application_controller.rb . . . create app/models/application_record.rb . . . create app/views/layouts/application.html.erb . . . create config create config/routes.rb create config/application.rb . . . create config/environments create config/environments/development.rb create config/environments/production.rb create config/environments/test.rb . . . create config/database.yml create db create db/seeds.rb . . . run bundle install . . . Bundle complete! 15 Gemfile dependencies, 69 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. . . .

以下は、Railsのファイルとフォルダのいくつかを簡単に説明します。

  • Gemfile: This file lists the gem dependencies for your application. A gem is a Ruby software package, and a Gemfile allows you to manage your project’s software needs.
  • app: The app directory is where your main application code lives. This includes the models, controllers, views, assets, helpers, and mailers that make up the application itself. Rails gives you some application-level boilerplate for the MVC model to start out in files like app/models/application_record.rb, app/controllers/application_controller.rb, and app/views/layouts/application.html.erb.
  • config: This directory contains your application’s configuration settings:config/routes.rb: Your application’s route declarations live in this file.
    config/application.rb: General settings for your application components are located in this file.
  • config/environments: This directory is where configuration settings for your environments live. Rails includes three environments by default: development, production, and test.
  • config/database.yml: Database configuration settings live in this file, which is broken into four sections: default, development, production, and test. Thanks to the Gemfile that came with the rails new command, which included the sqlite3 gem, the config/database.yml file has its adapter parameter set to sqlite3, specifying that you will use a SQLite database with this application.
  • db: This folder includes a directory for database migrations called migrate, along with the schema.rb and seeds.rb files. schema.db contains information about your database, while seeds.rb is where you can place seed data for the database.

最終的に、RailsはGemfileにリストされている依存関係をインストールするためにbundle installコマンドを実行します。

セットアップが完了したら、新しいsharkappディレクトリに移動してください。

  1. cd sharkapp

 

「sharkappディレクトリ内で、rails serverコマンドを使用してアプリケーションが正常に動作していることを確認するために、Railsサーバーを起動してください。ローカルマシンで作業している場合、以下のコードを入力してサーバーを起動します。」

  1. rails server

 

Railsはデフォルトでlocalhostにバインドされており、ブラウザでlocahost:3000にアクセスすることでアプリケーションにアクセスできます。

Rails default landing page.

開発サーバーで作業している場合は、まずポート3000での接続が許可されていることを確認してください。

  1. sudo ufw allow 3000

 

その後、–bindingフラグを使用してサーバーを開始し、サーバーのIPアドレスにバインドします。

  1. rails server –binding=your_server_ip

 

ブラウザでhttp://your_server_ip:3000にアクセスして、デフォルトのRailsランディングページに移動してください。

準備ができたら、ターミナルでCTRL+Cを押すことでサーバーを停止することができます。

Railsの雛形ができたら、ユニークなアプリケーションを作成するために、ビルドを開始する準備が整いました。

ステップ3 – アプリケーションの足場作り

鮫アプリケーションを作成するためには、アプリケーションデータの管理のためのモデルを作成し、そのデータとユーザーの対話を可能にするビューを作成し、モデルとビューの間の通信を管理するコントローラを作成する必要があります。これらを作成するためには、Railsのgenerate scaffoldコマンドを使用してください。これにより、モデル、データベーススキーマを変更するためのデータベースマイグレーション、コントローラ、アプリケーションのCreate、Read、Update、Delete(CRUD)操作を管理するためのビューの完全なセット、パーシャル、ヘルパー、およびテスト用のテンプレートが生成されます。

ジェネレートスキャフォールドコマンドは、裏で多くのことを実行します。このコマンドには、モデルの名前とデータベーステーブルに含めたいフィールドが含まれます。RailsはActive Recordを使用して、モデルとアプリケーションデータの関係を管理します。これらのモデルはRubyのクラスであり、同時にActiveRecord::Baseクラスを継承しています。つまり、Rubyのクラスと同様にモデルクラスを扱うことができます。さらに、Active Recordからメソッドを引き出すこともできます。Active Recordは、各クラスがデータベースのテーブルにマッピングされ、そのクラスの各インスタンスがそのテーブルの行にマッピングされることを保証します。

以下のコマンドを実行して、Sharkモデル、コントローラー、関連するビューを生成します。

  1. rails generate scaffold Shark name:string facts:text

 

このコマンドの中の「名前:文字列」と「事実:テキスト」のオプションは、データベースのテーブルで作成しているフィールドと、それらが受け入れるデータの種類を示しています。どちらのオプションも入力する内容を自由に設定することができます。ただし、「テキスト」オプションの方が文字数が多く入力できます。

このコマンドを入力すると、出力には生成されるさまざまなファイルが表示されます。

Output

invoke active_record create db/migrate/20190804181822_create_sharks.rb create app/models/shark.rb . . . invoke resource_route route resources :sharks invoke scaffold_controller create app/controllers/sharks_controller.rb invoke erb create app/views/sharks create app/views/sharks/index.html.erb create app/views/sharks/edit.html.erb create app/views/sharks/show.html.erb create app/views/sharks/new.html.erb create app/views/sharks/_form.html.erb . . .

Railsは、app/models/shark.rbにモデルを作成し、それに対応するデータベースマイグレーションも作成しました:db/migrate/20190804181822_create_sharks.rb。マイグレーションファイルのタイムスタンプは、例とは異なる場合があります。

また、アプリケーションのCRUD操作に関連するビューをapp/views/sharksの下に作成し、controllerであるapp/controllers/sharks_controller.rbも作成しました。これらのビューの中には、複数のビューで使用されるコードが含まれる部分ビューである_form.html.erbもあります。

最終的に、Railsはconfig/routes.rbに新しいリソースルートであるresources :sharksを追加しました。これにより、Railsのルーターは受信したHTTPリクエストをsharksコントローラーとその関連ビューにマッチさせることが可能になります。

Railsはアプリケーションコードの大部分を構築してくれましたが、何が起こっているのかをより理解するためにいくつかのファイルに深く入り込む価値があります。

コントローラーファイルを理解するために、端末に次のコマンドを入力してください。

  1. cat app/controllers/sharks_controller.rb

 

Output

class SharksController < ApplicationController before_action :set_shark, only: %i[ show edit update destroy ] # GET /sharks or /sharks.json def index @sharks = Shark.all end # GET /sharks/1 or /sharks/1.json def show end # GET /sharks/new def new @shark = Shark.new end # GET /sharks/1/edit def edit end # POST /sharks or /sharks.json def create @shark = Shark.new(shark_params) respond_to do |format| if @shark.save format.html { redirect_to shark_url(@shark), notice: “Shark was successfully created.” } format.json { render :show, status: :created, location: @shark } else format.html { render :new, status: :unprocessable_entity } format.json { render json: @shark.errors, status: :unprocessable_entity } end end end # PATCH/PUT /sharks/1 or /sharks/1.json def update respond_to do |format| if @shark.update(shark_params) format.html { redirect_to shark_url(@shark), notice: “Shark was successfully updated.” } format.json { render :show, status: :ok, location: @shark } else format.html { render :edit, status: :unprocessable_entity } format.json { render json: @shark.errors, status: :unprocessable_entity } end end end # DELETE /sharks/1 or /sharks/1.json def destroy @shark.destroy respond_to do |format| format.html { redirect_to sharks_url, notice: “Shark was successfully destroyed.” } format.json { head :no_content } end end private # Use callbacks to share common setup or constraints between actions. def set_shark @shark = Shark.find(params[:id]) end # Only allow a list of trusted parameters through. def shark_params params.require(:shark).permit(:name, :facts) end end

コントローラーは、情報の取得および関連するモデルへの渡し方、およびそれが特定のビューと関連付けられる方法の管理を担当しています。たとえば、シャークのコントローラーには、標準的なCRUD操作におおよそ対応する一連のメソッドがあります。エラーの場合の効率化を可能にするため、CRUDの機能以上のメソッドが存在します。

例えば、createメソッドを考えてみましょう。

~/sharkapp/app/controllers/sharks_controller.rbを日本語で言い換えると、以下のようになります:

~/sharkapp/app/controllers/sharks_controller.rb

. . .
  def create
    @shark = Shark.new(shark_params)

    respond_to do |format|
      if @shark.save
        format.html { redirect_to @shark, notice: 'Shark was successfully created.' }
        format.json { render :show, status: :created, location: @shark }
      else
        format.html { render :new }
        format.json { render json: @shark.errors, status: :unprocessable_entity }
      end
    end
  end
. . . 

新しいSharkクラスのインスタンスが正常に保存された場合、redirect_toは新しいリクエストを生成し、それがコントローラに向けられます。このリクエストはGETリクエストであり、showメソッドで処理されます。showメソッドは、ユーザーに最近追加された入力情報を表示します。

もし失敗があれば、Railsはルーターに別のリクエストを送る代わりに、同じアプリケーションのapp/views/sharks/new.html.erbテンプレートを再度レンダリングし、ユーザーにデータを再提出する機会を与えます。

シャークズコントローラーに加えて、Railsはインデックスビューのためのテンプレートも作成しました。このテンプレートは、コントローラー内のインデックスメソッドに対応しています。これをアプリケーションのルートビューとして使用します。

以下のコマンドを実行してファイルを出力してください。

  1. cat app/views/sharks/index.html.erb

 

Output

<p style=”color: green”><%= notice %></p> <h1>Sharks</h1> <div id=”sharks”> <% @sharks.each do |shark| %> <%= render shark %> <p> <%= link_to “Show this shark”, shark %> </p> <% end %> </div> <%= link_to “New shark”, new_shark_path %>

インデックスビューは、Sharkクラスのインスタンスをループ処理します。このクラスはデータベースのsharksテーブルとマッピングされています。ERBテンプレートを使用して、ビューは各フィールドを出力します。個々のサメのインスタンスに関連付けられたフィールドは、名前と事実です。

その後のビューは、link_to ヘルパーを使用して、リンクのテキストとして提供された文字列、宛先として提供されたパスを持つハイパーリンクを作成します。パス自体は、rails generate scaffold コマンドで定義した sharks リソースのルートによって可能にされたヘルパーを使用しています。

新しいビューは、パーシャルと呼ばれるものを使用しています。以下のコードを実行して、app/views/sharks/new.html.erb テンプレートを返します。

  1. cat app/views/sharks/new.html.erb

 

Output

<h1>New shark</h1> <%= render “form”, shark: @shark %> <br> <div> <%= link_to “Back to sharks”, sharks_path %> </div>

新しいサメの情報が入力欄を持たないように見えるこのテンプレートですが、’form’ を参照していることから、このテンプレートは _form.html.erb の部分を引っ張ってきています。これはビュー間で繰り返し使用されるコードを抽出します。

新しいサメインスタンスが作成される方法をより詳しく知りたい場合は、_form.html.erbファイルを出力してください。

  1. cat app/views/sharks/_form.html.erb

 

Output

<%= form_with(model: shark) do |form| %> <% if shark.errors.any? %> <div style=”color: red”> <h2><%= pluralize(shark.errors.count, “error”) %> prohibited this shark from being saved:</h2> <ul> <% shark.errors.each do |error| %> <li><%= error.full_message %></li> <% end %> </ul> </div> <% end %> <div> <%= form.label :name, style: “display: block” %> <%= form.text_field :name %> </div> <div> <%= form.label :facts, style: “display: block” %> <%= form.text_area :facts %> </div> <div> <%= form.submit %> </div> <% end %>

このテンプレートは、form_withフォームヘルパーを使用しています。フォームヘルパーは、特定のモデルのフィールドとスコープを使用して、ユーザーの入力から新しいオブジェクトの作成を容易にするために設計されています。この例では、form_withは引数としてmodel: sharkを取り、それが生成する新しいフォームビルダーオブジェクトには、sharksテーブルのフィールドに対応するフィールド入力があります。つまり、ユーザーはシャークの名前とシャークの情報を入力するためのフォームフィールドを持っています。

このフォームを送信すると、JSONレスポンスが作成され、アプリケーションの残りの部分はparamsメソッドを通じてアクセスできるユーザーデータが含まれます。これにより、そのデータでActionController::Parametersオブジェクトが作成されます。

rails generate scaffoldで生成されたものを知った今、アプリケーションのルートビューを設定することに進むことができます。

ステップ4-アプリケーションのルートビューの作成と機能のテスト

理想的には、アプリケーションのランディングページをアプリケーションのルートにマッピングすることが望ましいです。そうすることで、ユーザーはすぐにアプリケーションの目的を感じることができます。

たとえば、ウェルカムコントローラーと関連するインデックスビューを作成することができます。これにより、ユーザーに汎用のランディングページが提供され、アプリケーションのさまざまな部分へのリンクも可能となります。

これをセットアップするには、config/routes.rb のルーティング設定を変更してアプリケーションのルートを指定する必要があります。

nanoまたはお気に入りのエディタを使用して、編集のためにconfig/routes.rbを開きます。

  1. nano config/routes.rb

 

以下の文を日本語で自然な言い方で表現してください。一つのオプションで構いません。
「~/sharkapp/config/routes.rb」
Rails.application.routes.draw do
  resources :sharks
  # Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html

  # Defines the root path route ("/")
  # root "articles#index"
end

より具体的な設定をしない場合、http://localhost:3000またはhttp://your_server_ip:3000で表示される画面は、デフォルトのRailsのウェルカムページになります。

アプリケーションのルートビューをシャークコントローラーのインデックスビューにマッピングするには、デフォルトの#root “articles#index”の行のコメントアウトを解除し、#を削除してarticleをsharkに置き換えてください。

~/sharkapp/config/routes.rbを日本語で言い換えると、以下のようになります:
~/sharkapp/config/routes.rb
Rails.application.routes.draw do
  resources :sharks

  root 'sharks#index' 
  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
end

編集が終わったら、ファイルを保存し、エディターを終了してください。nanoを使用している場合、CTRL+X、Yを押し、次にENTERキーを押してください。

今では、ユーザーがアプリケーションのルートに移動すると、デフォルトのRailsのランディングページではなく、サメのランディングページに入るようになりました。さらに、彼らは新しいサメのエントリーを作成したり、既存のエントリーを確認したり、与えられたエントリーを編集または削除する機会を持つようになりました。

次に、次のコマンドを使用してマイグレーションを実行してください。

  1. rails db:migrate

 

この出力は移行が確認されていることを示しています。

Output

== 20230124215633 CreateSharks: migrating ===================================== — create_table(:sharks) -> 0.0041s == 20230124215633 CreateSharks: migrated (0.0045s) ============================

もう一度Railsサーバーを起動してください。ローカルで作業している場合は、次のコマンドを実行してください。

  1. rails s

 

開発サーバーで実行してください。

  1. rails s –binding=your_server_ip

 

ローカルで作業している場合は、localhost:3000に移動して、開発サーバーで作業している場合はhttp://your_server_ip:3000に移動して、新しいランディングページにアクセスしてください。

Application Landing Page

新しいサメを作成するには、「新しいサメ」リンクをクリックしてください。このリンクは「sharks/new」ルートに繋がります。

Create New Shark

あなたのアプリケーションをテストするために、いくつかの情報を追加することができます。「名前」のフィールドに「Great White」と書き、「事実」のフィールドに「Scary」と書いてください。

Add Great White Shark

その後、シャークを作成するために「シャーク作成」ボタンを押してください。

このボタンは、showルートにリンクします。このルートは、before_actionフィルターによって、set_sharkメソッドを介して設定されています。set_sharkメソッドは、作成したサメのIDを取得します。

~/sharkapp/app/controllers/sharks_controller.rbを日本語でパラフレーズしてください。一つのオプションだけ必要です。
class SharksController < ApplicationController
  before_action :set_shark, only: %i[ show edit update destroy ]

  . . . 
  # GET /sharks/1 or /sharks/1.json
  def show
  end

  . . . 

  private
    # Use callbacks to share common setup or constraints between actions.
    def set_shark
      @shark = Shark.find(params[:id])
    end
  . . .
Show Shark

「シャークエントリー」の編集機能を試すには、「このシャークを編集する」を押してください。これにより、そのシャークの編集画面に移動します。

Edit Shark

「恐ろしい」という表現を「大きい」という事実に更新し、「サメを更新」ボタンを押してください。これにより、ショーのルートに戻ることができます。

Updated Shark

最後に、バックを押してサメに戻ると、更新されたインデックスビューに移動します。

New Index View

あなたがアプリケーションの基本機能をテストしたので、バリデーションやセキュリティチェックを追加して、全体をより安全にすることができます。

Step 5 — バリデーションの追加

「ユーザーからの入力を受け付けるあなたのシャークアプリケーションですが、例えばユーザーが事実を追加せずにシャークを作ろうとしたり、既にデータベースに存在するシャークのエントリを作ろうとした場合を想像してみてください。モデルにバリデーションを追加することで、データがデータベースに入る前にチェックするメカニズムを作成できます。アプリケーションのロジックはモデルにあるため、そこでデータ入力のバリデーションを行うのが適切です。」

このチュートリアルではバリデーションテストの書き方については説明していませんが、Railsのドキュメンテーションを参照することで、テストについてもっと詳しく知ることができます。

もしまだサーバーを停止していない場合は、ターミナルでCTRL+Cを押してサーバーを停止してください。

「shark.rb」モデルファイルを開いてください。

  1. nano app/models/shark.rb

 

現在、ファイルは、SharkクラスがApplicationRecordを継承し、さらにActiveRecord::Baseから継承されていることを示しています。

~/sharkapp/app/models/shark.rbを日本語で書き換えると、次のようになります:
~/sharkapp/app/models/shark.rb
class Shark < ApplicationRecord
end

名前のフィールドにいくつかのバリデーションを追加して、フィールドが入力されており、エントリが重複していないことを確認してください。

~/sharkapp/app/models/shark.rbの内容を日本語で言い換えると、以下のようになります:
「〜/sharkapp/app/models/shark.rb」
class Shark < ApplicationRecord
  validates :name, presence: true, uniqueness: true
end

次に、事実の入力欄も記入されていることを確認するためのバリデーションを追加してください。

~/sharkapp/app/models/shark.rb の内容を日本語で書き換えると以下のようになります。
class Shark < ApplicationRecord
  validates :name, presence: true, uniqueness: true
  validates :facts, presence: true
end

「validates: facts, presence: true」という一行のコードは、事実の一意性には関与していません。このコードは、ユニークなシャークのエントリとの関連性を検証します。

作業が終わったら、ファイルを保存し閉じてください。

再びrails sまたはrails s –binding=your_server_ipでサーバーを起動し、次にhttp://localhost:3000またはhttp://your_server_ip:3000にアプリケーションのルートに移動してください。

「新しいサメ」のリンクを押してください。フォームに、「Name」欄に「グレートホワイト」を追加し、「Facts」欄に「大きな歯」を追加し、それから「サメを作成」ボタンを押してください。この場合、警告メッセージが表示されます。

Unique Validation Warning

他の検証を確認するには、ホームページに戻るために「サメへ戻る」をクリックしてください。そして、再び「新しいサメ」を押してください。新しいフォームにて、「名前」欄に「タイガーシャーク」と入力し、「事実」は空白のままにしてください。そして、サメを作成するボタンを押すと、以下の警告が表示されます。

Fact Presence Warning

これらの変更により、データベースに保存されるデータの一貫性を確保するためのいくつかの検証が、あなたのアプリケーションに導入されました。これで、アプリケーションのユーザーに注目し、どのユーザーがアプリケーションデータを変更できるかを定義することができます。

ステップ6 — 認証の追加

ある程度の検証が行われている場合、データベースに保存されるデータについては一定の保証があります。しかし、ユーザーについてはどうでしょうか?もし誰でもデータベースに追加できないようにしたい場合は、許可されたユーザーのみがサメを追加できるようにするため、いくつかの認証措置を追加する必要があります。これを行うには、http_basic_authenticate_withメソッドを使用し、ユーザーを認証するためのユーザー名とパスワードの組み合わせを作成します。

Railsでは、bcryptやdeviseのジェムを使用するなど、ユーザーの認証を行う方法はいくつかあります。しかし、今のところは、アプリケーション全体のアクションに適用されるメソッドをアプリケーションコントローラーに追加してください。これは、将来的にアプリケーションに他のコントローラーを追加する場合に役立ちます。

CTRL+Cでサーバーを停止してください。

あなたのApplicationControllerを定義しているファイルを開いてください。

  1. nano app/controllers/application_controller.rb

 

アプリケーションコントローラクラスの定義が内部にあり、他のコントローラーがこれを継承します。

~/sharkapp/app/controllers/application_controller.rbを日本語で言い換えると、「~/sharkapp/app/controllers/application_controller.rb」となります。
class ApplicationController < ActionController::Base
end

ユーザー認証のために、「http_basic_authenticate_with」メソッドを使用して、ユーザー名とパスワードをハードコードしてください。以下のコードをファイルに追加してください。

以下は日本語でのネイティブなパラフレーズです(いくつかのオプションを提示します):
1. ~/sharkapp/app/controllers/application_controller.rb をパラフレーズすると:
「~/sharkapp/app/controllers/application_controller.rb」というファイルを日本語にパラフレーズしてみましょう。
class ApplicationController < ActionController::Base
  http_basic_authenticate_with name: 'sammy', password: 'shark', except: [:index, :show]
end

ここでは、ユーザー名とパスワードの提供に加えて、認証が必要でないルートでの制限もしています。具体的には、indexとshowです。これを達成する別の方法は、[:create, :update, :destroy] のみを指定することです。この方法では、すべてのユーザーがすべてのサメにアクセスし、特定のサメの情報を読むことができます。ただし、サイトのコンテンツを変更する際には、ユーザーがアクセス権を証明する必要があります。

より堅牢な設定では、このように値をハードコードすることは避けたいものですが、この例ではアプリケーションのルートに認証を組み込む方法を示しています。Railsはデフォルトでセッションデータをクッキーに保存します。指定されたアクションで認証を行った場合、同じセッション内では再認証が必要なくなります。

編集が終了したら、アプリケーションコントローラー(app/controllers/application_controller.rb)を保存して閉じてください。これで認証のテストができます。

rails sまたはrails s –binding=your_server_ipコマンドを使用してサーバーを起動し、アプリケーションにはhttp://localhost:3000またはhttp://your_server_ip:3000のいずれかでアクセスしてください。

ランディングページで、「新しいシャーク」ボタンを押してください。これにより、以下の認証ウィンドウが表示されます。

User Authentication

ユーザー名に”Sammy”、パスワードに”Shark”を入力すると、アプリケーションコントローラーのapp/controllers/application_controller.rbに追加したこの組み合わせで安全に新しいサメを作成することができます。

現在、データの検証と基本的な認証システムを備えた、稼働するサメアプリケーションをお使いいただいています。

結論

このチュートリアルで作成したRailsアプリケーションは、さらなる開発に利用することができる出発点です。もしRailsエコシステムを探索したい場合は、プロジェクトのドキュメンテーションが良いスタート地点です。

あなたのプロジェクトにネストリソースを追加する方法については、『Ruby on Rails アプリケーションのネストリソースの作成方法』を読むことでさらに学ぶこともできます。このガイドでは、アプリケーションのモデルとルートをどのように構築するかを説明しています。

さらに、Reactのようなフレームワークを使用して、プロジェクトのフロントエンドをより堅牢にセットアップする方法を調べることをお勧めします。Reactフロントエンドを備えたRuby on Railsプロジェクトのセットアップ方法については、『Ruby on RailsプロジェクトのReactフロントエンドのセットアップ方法』がガイダンスとなります。

異なるデータベースの選択肢を探したい場合は、Ubuntu 20.04でのRuby on RailsアプリケーションでPostgreSQLを使用する方法について解説した「How To Use PostgreSQL with Your Ruby on Rails Application on Ubuntu 20.04」も参照してみてください。また、当社のPostgreSQLチュートリアルライブラリもご利用いただければ、このデータベースの操作方法についてより詳しく学ぶことができます。

コメントを残す 0

Your email address will not be published. Required fields are marked *