Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

Mongoid と Sinatra の統合

このガイドでは、Sinatra を Webフレームワークとして使用する Mongoid Webアプリケーションを作成する方法を学ぶことができます。Sinatra は、 Rubyで Web アプリケーションを作成するためのドメイン固有言語(DSL)です。Sinatra アプリケーションはセットアップが簡単で、他のフレームワークよりも高速なリクエスト処理を提供できます。

このチュートリアルのアプリケーションは、次のレイヤーで構成されています。

  • データベースレイヤー: MongoDB は、データのストレージと検索を提供します。

  • アプリケーションレイヤー: Sinatra は、 HTTPリクエスト、ルーティング、およびロジックプロセシングを取り扱います。

  • プレゼンテーションレイヤー: 埋め込みRubyテンプレートは、ウェブ ページ上のレストラン データをレンダリングします。

Tip

Mongoid を既存のアプリケーションに統合する方法については、「 既存のアプリケーションに Mongoid を追加する 」のガイドを参照してください。

MongoDB をMongoid および Sinatra と統合することで、Mongoid の ODM(Object-Document Mapper、オブジェクト ドキュメント マッパー)を使用して、MongoDB の 柔軟なドキュメントモデルを操作できます。Mongoid は Rails の ActiveRecord ORM の軽量な代替手段を提供しており、MongoDB のスキーマの柔軟性を活用できると同時に、Sinatra の最小限のアプローチを使用して、データのモデル化方法と表示方法を簡単に制御できます。

このチュートリアルでは、 Rubyと Sinatra を使用して Webアプリケーションをビルドする方法を説明します。アプリケーションはサンプルレストラン データにアクセスし、データをクエリし、その結果をローカルでホストされているサイトに表示します。このチュートリアルには、 MongoDB AtlasでホストされているMongoDBクラスターに接続し、データベースのデータにアクセスして表示する手順も含まれています。

このセクションの手順に従って、プロジェクトの依存関係のインストール、Atlas クラスターの作成、およびアプリケーション構造の設定を行います。

1

クイック スタートアプリケーションを作成する前に、開発環境に次のソフトウェアをインストールしてください。

前提条件
ノート

Ruby

バージョン 3.1 以降を使用します。

これはRuby用のパッケージマネージャーです。

コードエディター

お好みのコード エディターを使用してください。

ターミナルアプリとシェル

MacOS ユーザーの場合は、 ターミナル または 類似アプリを使用します。Windowsユーザーの場合は、 PowerShell を使用します。

2

MongoDB Atlas は、 MongoDB配置をホストするフルマネージドクラウドデータベースサービスです。 MongoDBデプロイがない場合は、 MongoDBを使い始める チュートリアルを完了することで、 MongoDBクラスターを無料で作成できます。 MongoDBを使い始めるsample_restaurants チュートリアルでは、このチュートリアルで使用される データベースなどのサンプルデータセットをクラスターにロードする方法も説明します。

MongoDBクラスターに接続するには、接続 URI を使用する必要があります。接続文字列を検索する方法については、MongoDBを使い始めるチュートリアルの接続文字列の追加セクションを参照してください。

重要

接続stringを安全な場所に保存します。

3

Atlas クラスターに接続する場合は、操作するデータベースを接続文字列のデフォルトデータベースとして指定する必要があります。ホスト名の接続オプションの前にデータベース名を接続文字列に追加する必要があります。

次の例では、サンプル接続文字列で sample_restaurants ターゲットデータベースを指定しています。

mongodb+srv://user0:pass123@mongo0.example.com/sample_restaurants?retryWrites=true&w=majority

サンプル接続文字列には、mongo0.example.com ホスト名の後、および retryWrites 接続オプションと w 接続オプションの前にデータベースが含まれます。

4

次のコマンドを実行して、my-sinatra-app という新しいアプリケーションディレクトリを作成し、そのディレクトリに移動します。

mkdir my-sinatra-app
cd my-sinatra-app
5

すべてのRubyアプリケーションには、必要な gem をリストする Gemfile が必要です。 次のコマンドを実行して、アプリケーションに Gemfile を作成します。

touch Gemfile

次に、次のコマンドを実行して必要な gem を Gemfile に追加し、インストールします。

bundle add mongoid sinatra rackup webrick
bundle install

プロジェクト構造と依存関係を設定したら、このセクションの手順に従ってMongoDBに接続し、データモデルを設定します。

1

my-sinatra-appディレクトリに、config サブディレクトリを作成します。次に、このサブディレクトリに mongoid.yml というファイルを作成します。

次のコードをmongoid.ymlファイルに貼り付けます。

my-sinatra-app/config/mongoid.yml
development:
clients:
default:
uri: <connection string>

<connection string> プレースホルダーを、前の手順で保存した接続 URI に置き換えます。URI に sample_restaurantsデータベース名が含まれていることを確認します。

2

my-sinatra-appディレクトリに、app.rb というファイルを作成します。次の内容を app.rbファイルに貼り付けて、必要な gem と構成ファイルをロードします。

my-sinatra-app/ アプリ.rb
require 'sinatra'
require 'mongoid'
Mongoid.load!(File.join(File.dirname(__FILE__), 'config', 'mongoid.yml'))
3

app.rbファイルに次のコードを追加して、Restaurant というモデルを作成します。

my-sinatra-app/ アプリ.rb
class Restaurant
include Mongoid::Document
field :name, type: String
field :cuisine, type: String
field :borough, type: String
end

Restaurant モデルは、sample_restaurantsデータベース内の restaurantsコレクションを表します。レストラン データを保存するための namecuisineborough フィールドを定義します。

4

app.rbファイルには、レストラン データを表示するための次のルートを追加します。

my-sinatra-app/ アプリ.rb
get '/' do
@restaurants = Restaurant.all
erb :index
end
get '/browse' do
@restaurants = Restaurant
.where(name: /Moon/i).and(borough: "Queens")
erb :browse
end

/ ルートにはすべてのレストランが表示されますが、/browse ルートでは、大文字と小文字を区別しない一致を使用して、名前に "Moon" が含まれるクイーンズのレストランのクエリをルートします。

データレイヤーを設定したら、このセクションの手順に従ってユーザー インターフェースのテンプレートを作成します。

1

my-sinatra-appディレクトリに、views というサブディレクトリを作成します。

次に、views サブディレクトリに layout.erb というファイルを作成し、次のコードを貼り付けます。

my-sinatra-app/views/layout.erb
<!DOCTYPE html>
<html>
<head>
<title>Restaurant Directory</title>
<style>
body {
font-family: Arial, sans-serif;
margin: 0;
padding: 20px;
background-color: #a8d5ba;
}
.header {
text-align: center;
margin-bottom: 30px;
}
.nav {
text-align: center;
margin-bottom: 20px;
}
.nav a {
text-decoration: none;
color: #6a9bd2;
margin: 0 10px;
font-size: 16px;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: white;
padding: 20px;
border-radius: 10px;
}
.restaurant-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
gap: 20px;
margin-top: 20px;
}
.restaurant-card {
background: #f8f9fa;
padding: 20px;
border-radius: 8px;
border: 1px solid #ddd;
}
.restaurant-card h3 {
margin-top: 0;
color: #333;
}
.cuisine-tag {
background: #4a9d5f;
color: white;
padding: 4px 8px;
border-radius: 4px;
font-size: 12px;
display: inline-block;
}
</style>
</head>
<body>
<div class="header">
<h1>Restaurant Directory</h1>
</div>
<div class="nav">
<a href="/">All Restaurants</a>
<a href="/browse">Browse Filtered Restaurants</a>
</div>
<div class="container">
<%= yield %>
</div>
</body>
</html>

このファイルは、埋め込みRuby (ERB)のテンプレートです。これらのテンプレートには、動的 HTML コンテンツの生成に使用される埋め込みRubyコードを含む HTML が含まれています。

2

views サブディレクトリで、index.erb というファイルを作成し、次のコードを貼り付けます。

my-sinatra-アプリ/views/インデックス.erb
<h2>All Restaurants</h2>
<p>Total restaurants: <%= @restaurants.count %></p>
<div class="restaurant-grid">
<% @restaurants.each do |restaurant| %>
<div class="restaurant-card">
<h3><%= restaurant.name %></h3>
<p><strong>Borough:</strong> <%= restaurant.borough %></p>
<span class="cuisine-tag"><%= restaurant.cuisine %></span>
</div>
<% end %>
</div>

このビューファイルには、すべてのレストランがアプリケーションユーザーインターフェイスにグリッド メニューで表示されます。

3

views サブディレクトリで、browse.erb というファイルを作成し、次のコードを貼り付けます。

my-sinatra-app/views/browse.erb
<h2>Browse Restaurants</h2>
<p>Restaurants in Queens with "Moon" in the name</p>
<h3>Filtered Results</h3>
<div class="restaurant-grid">
<% @restaurants.each do |restaurant| %>
<div class="restaurant-card">
<h3><%= restaurant.name %></h3>
<p><strong>Borough:</strong> <%= restaurant.borough %></p>
<span class="cuisine-tag"><%= restaurant.cuisine %></span>
</div>
<% end %>
</div>

このビューファイルには、カスタム browse ルートのレストランが表示されます。これにより、名前に "Moon" が含まれるクイーンズのレストランがフィルタリングされます。

最後に、このセクションの手順に従って、ブラウザインターフェイスを使用してウェブアプリケーションを実行し、レストランのデータを調べます。

1

プロジェクトディレクトリに移動し、次のコマンドを実行してください。

bundle exec ruby app.rb

このコマンドは、Sinatra のデフォルトポートであるポート 4567 でウェブサーバーを起動します。成功した場合、コマンド出力は次の例のようになります。

[2024-10-01 12:36:49] INFO WEBrick 1.8.2
[2024-10-01 12:36:49] INFO ruby 3.2.5 (2024-07-26) [arm64-darwin23]
== Sinatra (v4.0.0) has taken the stage on 4567 for development with backup from WEBrick
[2024-10-01 12:36:49] INFO WEBrick::HTTPServer#start: pid=79176 port=4567
2

ウェブ ブラウザで http://localhost:4567 を開きます。最初のランディング ページには、 sample_restaurants.restaurantsコレクション内のすべてのレストランが、データベースに出現する順序で表示されます。

すべてのレストランを表示するウェブページ

次に、Browse Filtered Restaurants リンクをクリックして、名前に "Moon" が含まれるクイーンズのレストランを表示します。

フィルタリングされたレストランを表示するウェブページ

Sinatra クイック スタート チュートリアルが完了しました。これらの手順を完了すると、 MongoDBの配置に接続し、サンプルレストラン データに対してクエリを実行し、ローカルでホストされているウェブ インターフェースに結果を表示するRubyと Sinatra Webアプリケーションが作成されます。

Ruby、Sinatra、Mongoid、およびMongoDBの詳細については、次のリソースを表示します。

Tip

その他のフレームワークに関するチュートリアル

ウェブフレームワークとして Rails を使用する場合は、「Mongoid を Ruby on Rails と統合する」ガイドを参照してください。

戻る

はじめに: Rails でRuby

項目一覧