【Rails7】RailsAPI×GraphQLの環境構築したらちょっと詰まった
どうも、おいどん。です
Rails×GraphQLの組み合わせを触っているのですが、少し詰まってしまったので、備忘録的に記事に残しておこうと思います
TL;DR
- Rails×GraphQLの環境構築の仕方がわかる
- 初学者の私が詰まったので、初学者の人必見かもしれない
今回作成したリポジトリ
環境構築
rubyとrailsのバージョン
$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [arm64-darwin22]
$ rails -v
Rails 7.0.8
railsアプリを作成
- apiモードで作っていきます
$ rails new rails-graphql --api
必要なgemを追加
$ bundle add graphql
$ bundle add graphiql-rails
- 2つ目は
graphql
ではなくgraphiql
でi
が入っているので注意して下さい
graphqlに必要なファイルを生成する
$ rails g graphql:install
create app/graphql/types
create app/graphql/types/.keep
...
- たくさんcreateされます
/graphiql
のroutingする
gem graphiql-rails
の機能で、localhostのIDEからクエリを叩ける機能があるのですが、そのパスが/graphiql
なので、config/routes.rb
に追加してあげます。
また、開発環境のみアクセスできるようにif文をかまします
...
post "/graphql", to: "graphql#execute" # これは `rails g graphql:install`で追加されるはず
# この下を追加
if Rails.env.development?
mount GraphiQL::Rails::Engine, at: "/graphiql", graphql_path: "/graphql"
end
一旦起動してみる
$ rails s
Routing Error
だったのが、ActionDispatch::Request::Session::DisabledSessionError in GraphiQL::Rails::Editors#show
になっているとおもいます
セッションがDisabledだと言われているので有効化しましょう
config/application.rb
に以下の2行を追加します
config.middleware.use ActionDispatch::Cookies
config.middleware.use ActionDispatch::Session::CookieStore
再起動してみましょう
セッションエラーは解消しましたが、Loading...
から動かないと思います
railsをAPIモードで使用する場合は、もう一つ設定する必要があるみたいです
APIモードに必要な設定を追加する
公式ドキュメントの↑の部分に記述がありました
config/application.rb
にrequire "sprockets/railtie"
を追加する
require "rails/all"
require "sprockets/railtie" # これを追加
この状態でサーバー起動すると、
$ rails s
Expected to find a manifest file in `app/assets/config/manifest.js` (Sprockets::Railtie::ManifestNeededError)
But did not, please create this file and use it to link any assets that need
to be rendered by your app:
Example:
//= link_tree ../images
//= link_directory ../javascripts .js
//= link_directory ../stylesheets .css
and restart your server
こんなエラーが出ると思います。
公式ドキュメントにある通り、app/assets/config/manifest.js
を作ってあげましょう
app/assets/config/manifest.js
を作成する
作成したら、公式ドキュメントにある以下の2行を書き込みましょう
//= link graphiql/rails/application.css
//= link graphiql/rails/application.js
これでサーバーを起動すると、graphiqlのIDEが開くはずです
試しにテストクエリを叩いてみる
rails g graphql:install
した時点で生成された、app/graphql/types/query_type.rb
に予めテストクエリが用意されています
試しに叩いてみましょう
無事にHello World
が表示されれば環境構築Okです
自由にAPIを作りましょう!!
おわりに
環境構築はできるようになったけど、APIを作るのはまた別の話...
いろんなサービスでRailsが使われてて歴史もあって、なんだかRailsは夢があると感じました
Railsマスターしたったるで!
おいどん。でした〜
Discussion