🦁

【環境構築編】Rails API × Meilisearch SDK をつかってみる

2024/01/10に公開

Rails API から Meilisearch API を呼び出したいので、Docker 環境の構築を行いました。

RailsMeilisearch の開発環境を Docker で構築します。
構築の部分は下記の2記事でほとんど補完することができて、異なるのは compose.yml くらいです。なのでこの記事ではほとんど手順をまとめているだけです。
オプションやコマンドの説明については、下記記事もしくは、下記記事の参考文献がより詳しいです。

https://zenn.dev/ndjndj/articles/c8b6359d2b42b0
https://zenn.dev/ndjndj/articles/ffcf6d9b535f86

サンプルリポジトリ

https://github.com/ndjndj/playground/tree/main/rails-meili-docker

続編

https://zenn.dev/ndjndj/articles/dc480aa28a7f39

ディレクトリ構造

各ファイルは以下のように設置されています。
Meilisearch 用のサンプルデータ(sample.json)だけはわかりやすいように meili 直下においていますがどこでも大丈夫です。

.
├─ compose.yml
├─ meili
│   └─ sample.json
└─ rails
    ├─ Gemfile
    ├─ Gemfile.lock
    └─ entrypoint.sh

環境設定

compose.yml
version: '3'
services: 
  db: 
    container_name: postgres
    image: postgres:16.0
    ports: 
      - "5432:5432"
    volumes: 
      - pg-data:/var/lib/postgresql/data
    environment: 
      - POSTGRES_DATABASE=postgres 
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=password 
      - POSTGRES_ROOT_PASSWORD=root
  meilisearch: 
    image: getmeili/meilisearch:v1.5 
    ports:
      - "7700:7700"
    environment: 
      - MEILI_MASTER_KEY=meili-master-key
    volumes: 
      - ./meili_data:/meili_data
  rails: 
    build: 
      context: ./rails
    command: bash -c "rails s -b '0.0.0.0'"
    volumes:
      - ./rails:/usr/src/app
    ports: 
      - 3000:3000
    depends_on:
      - db 
    tty: true 
    stdin_open: true
volumes: 
  pg-data:
  bin: 
    driver: local

構築手順

冒頭にも書いた通り、手順のみ書いておきます。

rails 環境構築

# rails new 
docker compose run --rm rails rails new . --force --database=postgresql --api --skip-bundle

ここでいったん、database.yml, Gemfile を書き換える。

config/databse.yml
default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: postgres
  password: password 
  host: db
  port: 5432

development:
  <<: *default
  database: postgres_dev
  password: password

test:
  <<: *default
  database: postgres_test
  password: password
Gemfile
source "https://rubygems.org"
git_source(:github) {|repo| "https://github.com/#{repo}.git" }

ruby "3.3.0"

gem "bootsnap", require: false

gem "pg", "~> 1.1"

gem "puma", "~> 6.4.0"

gem "rails", "~> 7.1.2"

gem "tzinfo-data", platforms: %i[mingw mswin x64_mingw jruby]
# bundle install
docker compose run --rm rails bundle install

# コンテナ立ち上げ
docker compose build --no-cache
docker compose up -d

# DB 作成
docker compose exec api /bin/bash
rails db:create

# 疎通確認
# localhost:3000 にアクセス

meilisearch 環境構築

# 疎通確認
# rails 環境構築の際、docker up -d しているなら、meilisearch も立ち上がっている
# localhost:7700 にアクセス
# 必要に応じて APIkey をセットしておく

# インデックス作成、sample.json があるディレクトリに移動しておく
curl \
  -X POST 'http://localhost:7700/indexes/{インデックス名}/documents?primaryKey={任意のキー}' \
  -H 'Content-Type: application/json' \
  -H 'Authorization: Bearer meili-master-key' \
  --data-binary @sample.json
  
# 作成状況の確認
curl \
  -X GET 'http://localhost:7700/tasks/0' \
  -H 'Authorization: Bearer meili-master-key'
  
# localhost:7700 にアクセス/画面更新
# インデックスが追加されていること、検索ができることを確認する

さいごに

結構あっさりめですが、今回は以上です。
当初は環境構築+SDK 利用の記事にしようと考えていましたが、思ったよりも長くなってしまいそうだったので、一度区切りをつけます。

続きかきました
https://zenn.dev/ndjndj/articles/dc480aa28a7f39

Discussion