こんにちは。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デプロイ周辺を学習していこうと思います。
アクトインディでは、エンジニアを募集しているので、興味のある方はご連絡よろしくお願いします!