Zuruzuru Blog
🍜< ズルズル

April 21, 2022

lolipopマネージドクラウドにrailsAPIモードでgraphqlAPIを用意する

#Rails
#Graphql
#Lolipop

lolipopマネージドクラウドでrails7のAPIモードでgraphql gemを使用して、graphqlAPIを用意します。

最終的にできた環境がこれです。

lilipopマネージドクラウドでのコントロールパネルの設定については触れないので、事前に https://note.com/mclolipopjp/n/n624c9c20853b を参考に環境変数などの設定をいい感じにしておきます。 rubyのバージョンについては、僕のマネージドクラウドの環境では2.7.3だったんですが、新しいものに変わったりするらしいのでruby "~> 2.7.3"みたいな感じでGemfile書いておくと無難そうでした。

RailsをAPIモードで始める

viewはいらないので、RailsをAPIモードで始めます。 APIモードがどんなモードでどういったメリットがあるかは、RailsGuideの説明がわかりやすくてよかったのでリンクを貼っておきます。

rails new app_name --api

GraphQLを導入する

GraphQLとついでにGraphiQLも使用するのでGemfileに以下を追記します。

gem 'graphql'
# 以下2つはgraphiqlで使う
gem 'graphiql-rails'
gem 'sass-rails'

readmeにしたがってGraphiQLの設定を進めていきます。 まず、GraphiQLのpathをroute.rbに追加してアクセスできるようにします。僕の場合、サービスを作るのではなくて勉強に使うのでproductionでも読み込むようにしました。

if Rails.env.development? || Rails.env.production?
	mount GraphiQL::Rails::Engine, at: '/graphiql', graphql_path: '/graphql'
end

sass-rails + Sprockets4をうまく動かすのに追加で設定がいるらしいです。app/assets/config/manifest.jsに以下を追記しました。

//= link graphiql/rails/application.css
//= link graphiql/rails/application.js

また、APIモードではデフォルトでオフになっているcookieのミドルウェアの設定をconfig/applocation.rbに記述しないと動きませんでした。

config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore

デプロイを自動化する

デプロイは、このブログを参考にほぼコピペすることで自動化することができました。GitHub Actionを使っており、GitHub上のリモートリポジトリにpushされ次第、ロリポップマネージドクラウドへ自動デプロイされます。

ymlの内容はすこしだけいじっていて、すでにロリポップマネージドクラウドに上がっているgitリポジトリのデフォルトブランチがmasterだったのに対して、開発している環境ではmainだったので以下のようにrenameして毎回デプロイしています。

	- name: git rename
		run: git branch -m main master
	- name: deploy
		run: git push -f lolipop master

ただ、よくよく考えると直接sshしてデフォルトブランチをrenameすれば済むので、なんでこんなことしたんだろう過去の自分。

まとめ

いつでも壊して遊びながらrailsとgraphqlを学ぶ環境ができた。