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

あと、graphiqlをつかうので、APIモードでデフォルトでオフになっているcookieのミドルウェアの設定をconfig/applocation.rbに記述しないと動かなかったです。

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

デプロイを自動化する

デプロイは、このブログを参考にほぼコピペして、github actionでpushされるたびに自動デプロイできるようになりました。

自分で追加で加えた変更としては、すでにlolipopマネージドクラウドに上がっている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を学ぶ環境ができたので活用していく。