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

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

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

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

3回答

4658閲覧

next.js 画像が表示されません。

mimizu16

総合スコア1

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

Next.js

Next.jsは、Reactを用いたサーバサイドレンダリングなどを行う軽量なフレームワークです。Zeit社が開発しており、nextコマンドでプロジェクトを作成することにより、開発環境整備が整った環境が即時に作成できます。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2021/06/02 10:43

前提・実現したいこと

現在ホームページの開発を行なっています。
使用しているフレームワークやライブラリはnext.jsとreact.jsです。
Google cloud platformでデプロイを行なってステージングをしている段階なのですが、ページを確認してみると画像が表示されていません。デベロッパーツールでエラーを確認してみると以下のようなものが表示されました。

発生している問題・エラーメッセージ

❌ GET “画像のpath” 504

ソースコード

react

1import Image from ‘next/image’ 2 3<Image src=‘images/path.png’ width={~} height={~} />

試したこと

next.jsを使用していますのでimgタグではなくImageコンポーネントを使用してみたり、pathは(publicをパスに入れていないかなど)何度も確認しましたが間違えはなさそうでした。

エラーはタイムアウトを示しているようだったので写真の容量も確認しましたが大きすぎるものはなにもありませんでした。また、時間をおいても解決はしなかったです。(デプロイをしすぎていることによってエラーが出ることがあるのでありますか?)

ちなみに写真の中の一部はimgタグを使用していても表示されることがありました。

補足情報

FWのバージョン
next:10.2.0

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

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

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

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

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

FKM

2021/06/03 02:50 編集

imagesディレクトリはプロジェクトのディレクトリから見てどこにありますか?
mimizu16

2021/06/03 06:53

こんな感じのファイル構造です。 public |- images src |- components   |- imagesを呼び出しているファイル |-... • • •
mimizu16

2021/06/03 06:54

わかりにくくて申し訳ありません。
FKM

2021/06/03 07:37

大元のプロジェクト用のディレクトリの配下にpublicがあるということですか?
mimizu16

2021/06/03 11:47

そういうことです
mimizu16

2021/06/04 09:24

やってみましたが、できませんでした。回答ありがとうございます。 ちなみに、画像はurlではなくpathで指定しているので直接ブラウザで開くというのはできないと思っていたのですができるのでしょうか?
mimizu16

2021/06/06 22:31

解決しました。ありがとうございました
guest

回答3

0

import Image from 'next/image' <Image src='/images/path.png' width={~} height={~} />

試しにですが、上記のようにsrcのパスを絶対パスにしてみてください。

プロジェクトのpublicフォルダにあるファイルはnext build後のnext startによるサーバー稼働やnext exportでの静的ファイル生成では、パスのトップに対応するようになっています。
Imageを使っているURLが/のようなトップなら相対パスでも平気だと思いますが、
例えば/about/1みたいな下層だと相対パスでURLを構築して失敗するかもしれません。

投稿2021/06/04 03:18

attakei

総合スコア2738

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

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

mimizu16

2021/06/04 09:29

Web上に画像をあげていないのですがfirebase storage などで上げたほうがいいのでしょうか?
mimizu16

2021/06/04 11:10

nextjsのImageコンポーネントなので相対パスや絶対パスというような概念はあるのですか?知識不足で申し訳ありません。
attakei

2021/06/04 15:58

> Web上に画像をあげていないのですがfirebase storage などで上げたほうがいいのでしょうか? 「どうデプロイしているか」「どう動かしているか」が書かれていないので、なんとも言えません。 ただ、自分が知っている範囲のNext.jsベースの実装においてはpublic配下のリソースはCloud Storageに上げることは考えないと思っています。 > nextjsのImageコンポーネントなので相対パスや絶対パスというような概念はあるのですか?知識不足で申し訳ありません。 https://nextjs.org/docs/api-reference/next/image ドキュメントにもある通り、Imageコンポーネントのsrcは画像のパスまたはURLとなっています。 「パス」という表記になっている以上、URLとして持つパスの要素(絶対・相対)を持つのは自然と解釈しています。 追える範囲でImageコンポーネントの実装を見る限りでは、結局のことろ内部でimgタグをレンダリングしてるだけみたいです。 https://github.com/vercel/next.js/blob/c922c6a3f4d4e463cce4713d9cf8f61c13b3fac8/packages/next/client/image.tsx#L274
mimizu16

2021/06/06 22:30

解決しました。ありがとうございました。
guest

0

Nextでは標準実装のコンポーネントだったみたいですね。失礼しました。

## 以下はreact-nativeなどの話です

これ、イメージタグじゃなくて、Imageという子コンポーネントですよね?
srcプロパティはコンポーネント内に記述されたimgテンプレートに書かないと反映されません。

js

1//どこかにこんな感じのテンプレートがあるはず 2const Image = ()=>{ 3 return( 4 <img src=‘images/path.png’ width={~} height={~} /> 5 ) 6}

js

1//これはただの子コンポーネントなので、valueプロパティ以外は反映されない 2<Image />

投稿2021/06/03 02:55

編集2021/06/03 07:46
FKM

総合スコア3644

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

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

mimizu16

2021/06/03 07:11

回答していただきありがとうございます。 まず説明不足で申し訳なかったのですが、この Image はnext.jsの提供しているコンポーネントです。最適化を行なってくれるなどの利点があり導入しています。 そのため、src width height を指定してあげると property としてnextの提供しているImageコンポーネントに渡されてコンポーネント内のimgタグに埋め込まれているはずです。公式ページでも同様の記述をしていました。 また、firebase.jsonのhostingのpublicがoutになっていたのでそれが原因かもしれません。
FKM

2021/06/03 07:47

src='xxxxx.png'で見えているものもあるということですか?
mimizu16

2021/06/03 11:46

ごめんなさい、どういうことでしょうか?
FKM

2021/06/04 04:01

動的に制御していない画像をimagesフォルダに置いた場合です。
mimizu16

2021/06/04 09:16

えっと、src='xxxxx.png'でみえているというのはどういう事でしょうか。 画像は全て映っていません
mimizu16

2021/06/06 22:31

解決しました。回答してくださりありがとうございました。
guest

0

自己解決

一つのドメインで二つ以上のものを表示するためにbasepathをnext.config.jsで設定していましたがImageコンポーネントでは自動でpathが設定されないことが判明しました。それだと思われます。

投稿2021/06/05 09:19

mimizu16

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問