Zuruzuru Blog 🍜< ズルズル
April 21, 2022
lolipopマネージドクラウドにrailsAPIモードでgraphqlAPIを用意する
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を学ぶ環境ができた。