質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
GraphQL

GraphQL は、アプリケーション・プログラミング・インタフェース (API) 向けのクエリ言語およびサーバーサイドランタイムです。APIの速度、柔軟性、開発者にとっての使いやすさを向上させるために設計され、データを複数のデータソースから取得するリクエストを1つのAPI呼び出しで構成できます。

Q&A

解決済

2回答

1744閲覧

Apollo Graphql Studio で"Cannot read property 'launchAPI' of undefined と言うエラーが表示されます。このエラーを表示させないためには

echizeyayota

総合スコア106

GraphQL

GraphQL は、アプリケーション・プログラミング・インタフェース (API) 向けのクエリ言語およびサーバーサイドランタイムです。APIの速度、柔軟性、開発者にとっての使いやすさを向上させるために設計され、データを複数のデータソースから取得するリクエストを1つのAPI呼び出しで構成できます。

0グッド

0クリップ

投稿2021/12/14 07:21

下記の質問についてご存知の方がいらっしゃいましたらご教示を願います。


【質問の主旨】

Apollo Graphql Studioで下記のGraphQLを実行しました。

query GetLaunches { launches { id mission { name } } }

すると画面上に** "message": "Cannot read property 'launchAPI' of undefined** と言うエラーが表示されます。このエラーを表示させず、クエリが要求するAPIデータをApollo Graphql Studioの画面上で表示させるためにはどうすれば良いでしょうか?」

イメージ説明

【質問の補足】

1.

私はApollo Basicsのチュートリアルに沿って、Webアプリを作成しようとしています。そのチュートリアルのRun queries in the playgroundと言う箇所を見て、上記のクエリを作成しました。

2.

このクエリを実行するためのファイ群全体は、GitHubにUPしています。

3.

Apollo Graphql Studioで表示されたエラーメッセージを読むと、 "Cannot read property 'launchAPI' of undefined「launchAPIのプロパティが属性が読むことができません」"となっています。ですが個人的には、launch.jsでLaunchAPIクラスをチュートリアルに書かれているものと同じ内容を記述しているつもりです(GitHub)。にもかかわらず、エラーが表示されることには納得がいきません。


以上、ご確認をよろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

本回答に対する直接的な答えになっていないかもしれませんが、そもそもApollo Basicsのチュートリアルを試したければ、ODYSSEYという Apollo GraphQLのチュートリアルサイトを使った方が良いと思います。

ODYSSEYは見た感じ、2021年12月中旬ごろに新しくできたチュートリアルサイトのようです。その内容に基づくと、Apollo Graphql Studioがドキュメントに書かれているとおりに動作します。

ひょっとしたら日本語訳がついたチュートリアルは情報がすでに古くなっているかもしれません。

投稿2021/12/26 07:27

echizeyayota

総合スコア106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

JavaScript(以下JS)の知識だけでGraphqlの知識やその派生サービスは門外漢ですが
解決の種になるかと思ってこちらに投げます。

Cannot read property 'launchAPI' of undefined

これはJSによくあるエラーです。
JSはオブジェクト指向プログラミング言語なので、
値.プロパティ名という指定をすれば、値が持っているプロパティの値にアクセスすることが出来ます。

しかし、JSは完全なオブジェクト指向言語ではありません。
一部プロパティを所持できず、参照を試みただけでエラーで落ちてしまう例外中の例外となる値が2個存在します。

  • null
  • undefined

例えば({name: "taro"}).ageというコードをJSで実行すると
nameプロパティしか所持していない値に対してageプロパティを参照します。
すると「そんなプロパティはない」という事でundefinedが得られます。

今回のケースはプロパティのチェインが1個でしたけど、
実際の業務だとval.name.toUpperCase()みたいに、
nameプロパティでString型の値がとれるから、決め打ちでtoUpperCaseメソッドを叩いて大文字にしようみたいな事はよくやります。

すると予想外な値が来すると途中でundefinedやnull値を踏んで、エラーで落ちる現象に繋がります。
今回のケースはまさにこのパターンを引いてしまっているので
JS上級者でなければ絶対に原因に辿り着く事が出来ない難度の高いエラーと言えるでしょう。


話をGraphqlに戻して、

launchAPIプロパティを参照しようとした親の値がundefinedになっているという話ですね。
しかしそんなプロパティは画面上にない。

画像にはスタックトレースというエラーが発生した番地の情報も記されており、
それを読むとnode_modules内というライブラリの中で発生していますね。

これは下記のような解釈が出来ます。

  • Apollo Graphql Studioの依存モジュールのバージョンアップ等で完全に使えなくなっている

復旧依頼を投げるとかそっちのフォーラム等で解消してもらうべき

  • 質問文で記載したquery GetLaunches {}から始まるクエリの書き方が誤っており、

向こうのモジュールでクエリをパースしてオブジェクトを生成することに失敗、大惨事が発生している


質問者さんの立場から出来る事は後者を疑うことだけです。

もしqueryの書き方をそこいらのブログ記事の情報を元にコピペしてたりしているならば、
サービス提供している人が出しているドキュメントやリファレンスを閲覧して、
その記述で本当に正しいのか?を検証してみてください。

こういうモジュールってバージョンアップで記述ルールが変わって
以前使えた機能や書き方が使えなくなってることも考えられますからね。

しかし実際パースに失敗したなら
「不正なクエリなのでパース出来ませんでした」と記載しろや!という話なので
推測が正しいと仮定した場合、モジュールの作りはあまり良くないとは思いますね。

投稿2021/12/15 07:15

編集2021/12/15 07:51
miyabi-sun

総合スコア21203

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

echizeyayota

2021/12/17 06:59

miyabi-sun さん。 詳しいコメントありがとうございます。 また今回のエラーに関してどこを疑うべきか、非常に参考になります。 > もしqueryの書き方をそこいらのブログ記事の情報を元にコピペしてたりしているならば、 queryはApolloが公開している、公式チュートリアルの記述をそのままコピペしているだけなので、おそらく間違いはないと思います。 https://apollographql-jp.com/tutorial/resolvers/#run-queries-in-the-playground ですからエラーが出る可能性は、「Apollo Graphql Studioの依存モジュールのバージョンアップ等で完全に使えなくなっている」の方が高いかもしれません。 いずれにしても、以下の質問で述べた対応に沿って、Apollo-GraphQLのコミュニティでも質問を投稿してみます。 https://teratail.com/questions/373921 今後ともどうぞよろしくお願いします。
miyabi-sun

2021/12/17 07:58 編集

b 解決したら自己解決で良いので、顛末書いてクローズという感じにしましょう
echizeyayota

2021/12/17 08:13

> 解決したら自己解決で良いので、顛末書いてクローズという感じにしましょう 了解です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問