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