アクトインディ開発者ブログ

子供とお出かけ情報「いこーよ」を運営する、アクトインディ株式会社の開発者ブログです

Serverless Framework Jets Rubyを触ってみました

こんにちは。Webエンジニアのnakamuraです。

Serveless Frameworkを勉強するにあたって、Ruby製のサーバーレスフレームワークJetsを使ってみました。 サーバーレスフレームワークと言っても、どこから始めていったらいいのかわからなかったので、RailsライクなJetsは非常に助かりました。 今回は、Dockerでの環境構築でJetsを動かすまでを紹介します。

Docker環境でJetsをインストール

まず、ローカル環境に作業用ディレクトリを準備します。

$ mkdir src
$ cd src

次に、Dockerでruby2.6のコンテナを作成。

$ docker run -it --rm -v ${PWD}:/usr/src/app ruby:2.6 bash

コンテナが作成されたらyarnをインストールします。

root@4aac8522c43b:/# apt-get update -qq && apt-get install -y build-essential
root@4aac8522c43b:/# curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
root@4aac8522c43b:/# echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
root@4aac8522c43b:/# apt-get update && apt-get install yarn

コンテナ側の作業ディレクトリに移動して、jetsをインストールします。

root@3883f5341486:# cd /usr/src/app
root@3883f5341486:/usr/src/app# gem install jets

ここで一旦、exitしてコンテナから抜けます。

root@3883f5341486:/usr/src/app# exit

docker-composeを準備

まず、空のdockerfileを準備し、編集します。

FROM ruby:2.6

RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
RUN curl -sL https://deb.nodesource.com/setup_10.x | bash - && \
    apt-get install nodejs
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
    echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
    apt-get update && apt-get install -y yarn

RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY Gemfile* /usr/src/app/
RUN bundle install
COPY . /usr/src/app/

次にdocker-compose.ymlを以下のように編集。

version: '3'
services:
  db:
    image: mysql:5.7.17
    ports:
      - "3306:3306"
    volumes:
      - db-data:/var/lib/mysql
    env_file:
      - .env.development

  web:
    build: .
    command: /bin/sh -c "bundle exec jets server --host '0.0.0.0'"
    ports:
      - "8888:8888"
    volumes:
      - .:/usr/src/app
    environment:
      RAILS_ENV: development
    env_file:
      - .env.development
    depends_on:
      - db

volumes:
  db-data:

database.ymlのpassword部分を変更。

password: <%= ENV['MYSQL_ROOT_PASSWORD'] %>

env.developmentにMYSQL_ROOT_PASSWORDとDB_HOSTを追記。

MYSQL_ROOT_PASSWORD=長いパスワード
DB_HOST=db

docker-compose upを実行し、JetsのWelcomeページが表示されれば成功です。

アプリケーション作成開始

scaffoldで雛形を作成してみます。

$ docker-compose exec web jets generate scaffold Post title:string

すると、railsと似たようなファイルが作成されます。

      invoke  active_record
      create    db/migrate/20190201085745_create_posts.rb
      create    app/models/post.rb
      invoke  resource_route
       route    resources :posts
      invoke  scaffold_controller
      create    app/controllers/posts_controller.rb
      invoke    erb
      create      app/views/posts
      create      app/views/posts/index.html.erb
      create      app/views/posts/edit.html.erb
      create      app/views/posts/show.html.erb
      create      app/views/posts/new.html.erb
      create      app/views/posts/_form.html.erb
      invoke    helper
      create      app/helpers/posts_helper.rb

migrateを実行し、http://localhost:8888/postsにアクセスするとお馴染みのCMSが表示されるはずです。

$ docker-compose exec web jets db:create db:migrate

参考URL

参考にさせていただいたサイト

Jets Ruby Serverless Framework

Ruby 製サーバーレスフレームワークの Jets を検証してみたら、Rails ライクに使えていい感じだった - Qiita

最後に

JetsはRailsを触ったことがある人ならかなり学習コスト少なめで始められるのではと感じました。 引き続き、Jetsを触りながら、AWSデプロイ周辺を学習していこうと思います。

アクトインディでは、エンジニアを募集しているので、興味のある方はご連絡よろしくお願いします!

actindi.net