Pexels

Pexels API取得と安全なキー管理・Next.jsで画像検索実装ガイド

ⓘ本ページはプロモーションが含まれています

お得なお知らせ

スポンサードリンク
デザイン本が読み放題

Figma・UI/UX・配色の深いノウハウを

動画・記事の断片情報より、1冊の体系書籍のほうが圧倒的に速い。Kindle Unlimited対象のデザイン書籍が豊富です。

Kindle Unlimited 30日無料▶ Audible|デザイン発想本を耳で▶

▶ デザイン→エンジニアリングの橋渡しに興味があれば プログラミング / エンジニア転職 もどうぞ。


タイプ別にすぐ選べる

クリエイティブの引き出し、どう増やす?

Figma・UI/UX・配色・タイポグラフィ。"手を動かす"学びと"発想力を磨く"学びは、使うサブスクが違います。

▷ Figma・UI/UX・配色の具体テクニックを体系化したい実務デザイナー

Kindle Unlimited 30日無料|デザイン本読み放題▶

▷ ブランド・発想・ディレクション系のインプットを"耳で"増やしたい人

オーディオブックAudible

※無料期間中の解約で料金発生なし

▶ デザイン→エンジニアリングの橋渡しに興味があれば プログラミング / エンジニア転職 もどうぞ。


スポンサードリンク

Pexels API の取得と安全なキー管理

Pexels の画像検索機能を自プロジェクトに組み込む際は、まず公式サイトで API キーを取得し、安全に保管することが最重要です。キーが漏洩すると不正利用やレートリミット超過の原因になるため、環境変数やシークレット管理サービスを活用して「コードに埋め込まない」設計を徹底しましょう。

アカウント登録手順

公式サイト(https://www.pexels.com/api/) の指示に沿ってアカウントと API キーを取得します。以下の流れで作業できます。

  1. サインアップ – メールまたは Google アカウントで無料会員登録
  2. ダッシュボードへ移動 – ログイン後、左側メニューの「API」セクションを開く
  3. キー発行Create New API Key をクリックし、表示された文字列をコピー

⚠️ 取得したキーは機密情報です。リポジトリやフロントエンドコードに直接埋め込まないよう必ず注意してください。

環境変数での保存方法

Node.js / Next.js のプロジェクトでは、.env.local にキーを記述し .gitignore で除外します。これだけでローカルと本番環境両方で同一コードが利用できます。

アプリ側では process.env.PEXELS_API_KEY を参照すれば OK です。

シークレット管理サービスの活用例

CI/CD パイプラインやサーバーレス環境では、以下のマネージドサービスでシークレットを保管すると安全性が向上します。設定画面から「Environment Variables」または「Secrets」に PEXELS_API_KEY を登録してください。

サービス 設定手順の概要
Vercel Project Settings → Environment Variables にキーを追加
Netlify Site settings → Build & deploy → Environment → Add variable
AWS Secrets Manager aws secretsmanager create-secret で作成し、Lambda の環境変数へ注入

いずれも「コードにキーを書かない」原則を守れるため、実務での採用が推奨されます。


認証ヘッダーとリクエスト構築

Pexels API は Authorization: Bearer {API_KEY} ヘッダーで認証します。ここではヘッダー生成関数を共通化し、fetchaxios の両方で利用できる実装例をご紹介します。

Authorization ヘッダー取得関数

ヘッダー作成ロジックをユーティリティに切り出すことで再利用性が向上します。以下は TypeScript/JavaScript 共通のシンプルな実装です。

fetch と axios の実装例

fetch を使う場合(Node ≥18 またはブラウザ)

axios を使う場合(Node またはブラウザ)

Next.js API Route でのサーバー側呼び出し

API Route にリクエストを集約すれば、フロントエンドからはキーが完全に隠蔽されます。

フロントエンドは fetch('/api/pexels-search?...') と呼び出すだけで、キー漏洩リスクを回避できます。


画像検索エンドポイントとフロントエンド連携

Pexels の画像検索は /v1/search エンドポイントで提供されます。本章ではパラメータの意味を整理し、Next.js API Route と React フック・コンポーネントの組み合わせで安全にデータ取得する手順を示します。

クエリパラメータ概要

検索時に指定できる主なオプションです。公式ドキュメント(https://www.pexels.com/api/) を参照してください。

パラメータ 説明
query 検索キーワード(必須) nature
per_page 1 リクエストあたり取得件数(最大 80) 30
page ページ番号(1 始まり) 2
orientation landscape, portrait, square のいずれか portrait
size large, medium, small large

Next.js API Route の利用例

先ほど作成した /api/pexels-search をフロントエンドから呼び出すだけで、検索結果が取得できます。

コンポーネントでの検索 UI

以下は検索入力と結果一覧を表示するシンプルなコンポーネントです。ページングボタンも備えています。

この構成により、フロントエンドは API Route 経由でキーが隠蔽された状態で画像検索を利用できます。


レスポンス解析と UI 活用

Pexels が返す JSON は階層化されており、必要な情報だけを抽出して UI に組み込むことがポイントです。ここでは主要フィールドの概要と、React で扱いやすい形への変換例をご紹介します。

JSON 構造と重要フィールド

  • photos 配列が画像情報本体
  • src オブジェクトにサイズ別 URL が格納されているので、表示用途に合わせて選択可能

必要情報だけを抽出する方法

React コンポーネントで扱うデータは以下の形に整形するとシンプルです。

ギャラリーコンポーネント例

サムネイル一覧とクリック時にモーダルで拡大表示する最小構成です。アクセシビリティを意識し、alt 属性は必ず設定しています。

データ抽出と UI 表示を分離すれば、将来的に新しいサイズや追加フィールドが増えても容易に拡張できます。


レートリミット・ページング・エラーハンドリング

実運用で安定させるためには、公式ドキュメントに記載されているリクエスト上限と、超過時の対策をしっかり設計する必要があります。

公式のリクエスト上限

2024 年 6 月時点の Pexels API 公式ページ(https://www.pexels.com/api/) によると、無料プランは月間 20,000 リクエスト が上限です。1 時間あたりの上限は 200 リクエストで、超過すると 429 Too Many Requests が返ります(有料プランに切り替えると上限が大幅に緩和されます)。

ページング実装パターン

無限スクロールや「次へ」ボタンでページ番号を管理する際は、取得済み件数と総件数を比較しつつリクエスト回数を抑える工夫が必要です。

指数バックオフと再試行ロジック

429 が返った場合は待機時間を伸ばす「指数バックオフ」を実装すると、短期間のリクエスト集中による失敗を緩和できます。

axios インターセプタで統一的エラー処理

全リクエストに対して共通のハンドリングを入れれば、個別 try/catch の記述が減り、ユーザーには「再試行中」や「しばらく待ってください」といったフィードバックが提供できます。

このインターセプタをプロジェクト全体で使うことで、レートリミットや一時的なサーバ障害への耐性が格段に向上します。


利用規約・クレジット表記と有料プランの判断基準

Pexels の画像は商用利用も可能ですが、撮影者名と Pexels へのリンク が必須です。ここでは正しいクレジット表記方法と、有料プランへ移行すべきシーンを整理します。

必須クレジット表記

公式ドキュメント(https://www.pexels.com/api/) に基づくと、最低でも以下の情報が必要です。

HTML 実装例:

画像カードやモーダルのフッターに必ず埋め込むようにしてください。

商用利用時の注意点

項目 内容
再配布禁止 取得した画像をそのまま販売・再配布しないこと
加工は許可 サイズ変更や色調整は自由だが、クレジット表記は残す必要あり
商標利用制限 「Pexels」ロゴの使用はガイドラインに従うこと

無料枠を超える場合のプラン比較

無料プラン(月間 20,000 リクエスト)で足りないケースでは、以下の指標で有料プランへの移行を検討してください。

判定ポイント 無料プランでの課題 有料プランのメリット
リクエスト数 20k/Month 超過で 429 エラー 上限解除(例:200k/Month)
画像解像度 大サイズ取得が制限されることあり オリジナルフル解像度へのアクセス
サポート コミュニティベースのみ SLA と専用サポート窓口
優先キュー 高トラフィック時に遅延が発生 優先処理で低レイテンシ

代替サービスとの比較

プロジェクトの要件次第で他社画像 API の併用も検討できます。

サービス 無料リクエスト上限 クレジット必須 主な特徴
Pexels 20,000 / 月 必要 高品質写真が豊富、API がシンプル
Unsplash 5,000 / 月 推奨(明示的に要求なし) デザイナー向けビジュアルが多い
Pixabay 5,000 / 日 不要 イラスト・ベクターも多数、商用利用が自由

代替サービスはライセンスやリミットが異なるため、プロジェクトのスケールと画像ジャンルに合わせて最適な組み合わせを選びましょう。


まとめ

  • キー取得 & 安全管理:公式サイト(https://www.pexels.com/api/)でキーを発行し、.env や Vercel / Netlify のシークレットに保管。コードへの埋め込みは絶対に避ける。
  • 認証ヘッダーAuthorization: Bearer {KEY} をユーティリティ関数で統一し、fetchaxios 両方で利用可能にする。Next.js API Route でサーバー側に隠蔽すればフロントエンドは安全に呼び出せる。
  • 検索エンドポイント:クエリパラメータを理解し、React フックとコンポーネントでシンプルかつ再利用可能な UI を構築。ページングや無限スクロールも同様のフローで実装できる。
  • レスポンス解析photos[i].src.{size} から必要サイズだけを抽出し、クレジット情報と共にカード・モーダル UI に組み込む。データ整形はコンポーネントから分離して保守性を確保。
  • レートリミット対策:無料プランは月間 20,000 リクエスト、1 時間あたり 200 リクエストが上限。指数バックオフと axios インターセプタで 429 / 5xx エラーに自動リトライし、ユーザー体験を損なわない設計を行う。
  • 利用規約遵守:必ず撮影者名と Pexels へのリンクをクレジット表記。商用利用時は再配布禁止・加工許可のルールを守る。上限超過や高解像度が必要な場合は有料プラン、または Unsplash / Pixabay といった代替サービスを比較検討する。

これらのベストプラクティスに沿って実装すれば、Pexels API を安全・効率的にプロダクション環境へ組み込むことができます。ぜひ本稿を参考に、品質とセキュリティを両立した画像検索体験を提供してください。

スポンサードリンク

お得なお知らせ

スポンサードリンク
デザイン本が読み放題

Figma・UI/UX・配色の深いノウハウを

動画・記事の断片情報より、1冊の体系書籍のほうが圧倒的に速い。Kindle Unlimited対象のデザイン書籍が豊富です。

Kindle Unlimited 30日無料▶ Audible|デザイン発想本を耳で▶

▶ デザイン→エンジニアリングの橋渡しに興味があれば プログラミング / エンジニア転職 もどうぞ。


タイプ別にすぐ選べる

クリエイティブの引き出し、どう増やす?

Figma・UI/UX・配色・タイポグラフィ。"手を動かす"学びと"発想力を磨く"学びは、使うサブスクが違います。

▷ Figma・UI/UX・配色の具体テクニックを体系化したい実務デザイナー

Kindle Unlimited 30日無料|デザイン本読み放題▶

▷ ブランド・発想・ディレクション系のインプットを"耳で"増やしたい人

オーディオブックAudible

※無料期間中の解約で料金発生なし

▶ デザイン→エンジニアリングの橋渡しに興味があれば プログラミング / エンジニア転職 もどうぞ。


-Pexels