Next.js + react-pdfを利用 iPhoneでPDF1ページしか表示されない解決方法

react-pdf 実装

iPhone Safari での PDF 全ページ表示問題を解決するため、<iframe> を使った PDF 表示を廃止し、react-pdf を用いた全ページレンダリングに切り替えた。 iframe では、 iOS Safari において PDF が1ページ目しか表示されなかった。

使用パッケージとバージョン

パッケージバージョン備考
react-pdf^10.4.1Document / Page コンポーネント提供
pdfjs-dist^5.4.296react-pdf が内部で使うバージョンに合わせる(重要)

インストール

pnpm install react-pdf pdfjs-dist@5.4.296

pdfjs-dist のバージョンは必ず react-pdf が要求するものに揃えること。 バージョンが異なると後述のバージョン不一致エラーが発生する。

遭遇したエラーと解決

エラー 1: DOMMatrix is not defined(SSRエラー)

エラー内容:
const SCALE_MATRIX = new DOMMatrix();
digest: ‘534975899’

原因: pdfjs-dist のモジュール初期化時に DOMMatrix(ブラウザ専用API)を使用しているため、 Next.js の SSR フェーズ(Node.js 環境)でクラッシュする。
'use client' を付けてもモジュールの初期化はサーバーで走るため回避できない。

解決策: react-pdf を使うコンポーネントを別ファイル(PdfViewer.tsx)に分離し、next/dynamic の ssr: false でクライアントのみ読み込む。

// IntroMediaOverlay.tsx
import dynamic from 'next/dynamic';

const PdfViewer = dynamic(
  () => import('@/components/PdfViewer'),
  { ssr: false }
);

エラー 2: API version does not match Worker version

エラー内容:
UnknownErrorException: The API version "5.4.296" does not match the Worker version "5.5.207".

原因: package.json に直接インストールされた pdfjs-dist が 5.5.207 だったのに対し、react-pdf 内部が使う pdfjs-dist は 5.4.296 だった。 Worker ファイルの解決に 5.5.207、API には 5.4.296 が使われバージョン不一致になった。

解決策: pdfjs-dist を react-pdf が要求するバージョンに固定する。

pnpm install pdfjs-dist@5.4.296

確認方法:

cat node_modules/react-pdf/package.json | grep pdfjs-dist
# → "pdfjs-dist": "5.4.296"

実装コード

PdfViewer.tsx(react-pdf 本体)

// src/components/PdfViewer.tsx
'use client';

import { useRef, useState, useCallback } from 'react';
import { Document, Page, pdfjs } from 'react-pdf';
import 'react-pdf/dist/Page/AnnotationLayer.css';
import 'react-pdf/dist/Page/TextLayer.css';

pdfjs.GlobalWorkerOptions.workerSrc = new URL(
  'pdfjs-dist/build/pdf.worker.min.mjs',
  import.meta.url,
).toString();

export default function PdfViewer({ url }: { url: string }) {
  const [numPages, setNumPages] = useState<number>(0);
  const containerRef = useRef<HTMLDivElement>(null);
  const [containerWidth, setContainerWidth] = useState<number>(600);

  const onDocumentLoadSuccess = useCallback(
    ({ numPages }: { numPages: number }) => {
      setNumPages(numPages);
      if (containerRef.current) {
        setContainerWidth(containerRef.current.clientWidth);
      }
    },
    []
  );

  return (
    <div ref={containerRef} className="overflow-y-auto max-h-[60vh] p-2">
      <Document
        file={url}
        onLoadSuccess={onDocumentLoadSuccess}
        loading={<span>PDF読み込み中...</span>}
      >
        {Array.from({ length: numPages }, (_, i) => (
          <Page
            key={i}
            pageNumber={i + 1}
            width={containerWidth - 16}
            className="mb-2"
          />
        ))}
      </Document>
    </div>
  );
}
Win版 Jsree スクショ 無音ガメラ Web版

Big Five(五因子モデル)診断 | 5つの観点から“傾向”とは

Big Five(五因子モデル)

Big Five(五因子モデル)診断とは?

Big Five(五因子モデル)は、心理学で広く使われている性格特性モデルです。
人の性格を「良い・悪い」で判断するのではなく、5つの観点から“傾向”として捉えることが特徴です。

  • 外向性(Extraversion)
  • 協調性(Agreeableness)
  • 誠実性(Conscientiousness)
  • 神経症傾向(Neuroticism)
  • 開放性(Openness)

この診断では、それぞれの因子を0〜100のスコアで可視化し、あなたの性格のバランスを直感的に確認できます。

ビッグファイブ

この診断でわかること

  • 自分がどんな場面でストレスを感じやすいか
  • 人付き合いにおける距離感や関わり方の傾向
  • 仕事・学習で自分に合いやすい進め方

結果はレーダーチャートとコメントで表示され、
スマホでも見やすく、直感的に理解できる設計になっています。

結果は画像でシェア可能

診断結果は画像として生成でき、X(旧Twitter)などのSNSへそのまま共有できます。
PWA対応のため、スマホではアプリ感覚で利用できます。

ご利用にあたって

本診断は自己理解を深めるための簡易チェックです。
医療的・専門的な診断を目的としたものではありません。

直感でサクッと答えることで、今のあなたの傾向がより分かりやすく表れます。

ビッグファイブ

無音カメラ | ブラウザで動く インストール不要

無音カメラ

本アプリは、iPhone / Windows / macOS などで動作するインストール不要のカメラアプリです。PWA(Progressive Web App)に対応しているためインストール不要で、ホーム画面に追加するだけでネイティブアプリのように高速で動作します。

無音カメラ スクショ

特に iPhoneユーザー向けに最適化したUI・カメラ制御を搭載しており、外カメラ・内カメラの切り替え、ミラー表示、保存を実装しています


🔥 このカメラアプリの主な特徴

■ 1. iPhone最適化(インカメ・外カメ切替+ミラー表示対応)

iOS特有のカメラ仕様に最適化し、

  • ミラーON → 内カメラ(フロントカメラ)
  • ミラーOFF → 外カメラ(リアカメラ)
    のように直感的に切り替え可能。
    通常のウェブカメラアプリでは難しい iPhone特有のカメラ制御にも対応しています。

■ 2. 撮影と同時に自動保存(共有シート or ダウンロード)

撮影した瞬間に画像が自動生成され、

  • iPhone・Android → 共有シートが開き「写真に保存」が簡単にできる」
  • PC → 自動ダウンロード(PNG)

というように、使用環境に最適な保存方法が自動で選択されます。


■ 3. 撮影後に小さなサムネイルを3秒だけオーバーレイ表示

撮影後の画像(フル解像度PNG)を、動画プレビュー上に 小さく3秒表示
邪魔にならず、撮れた内容もすぐ確認でき、実用性が非常に高い仕上がりです。


■ 4. ダークUI

UIは黒+ネオンブルーを基調としたダークテーマで統一。
明るい場所でも、夜間でも使いやすく、アプリ全体に統一感があります。
PWAインストール時にも映える洗練されたデザインです。


■ 5. 高解像度撮影(4K / 1080p / 端末最大)

端末の性能を活かし

  • 4K
  • フルHD(1080p)
  • 端末最大解像度
    を自動で最適化して使用できます。

ウェブカメラアプリとしては非常に高品質な撮影が可能です。


■ 6. タイマー撮影にも対応(0・3・5・10秒)

集合写真や自撮りのときに便利な カウントダウンタイマーを搭載。
撮影前に画面中央に大きく数字が表示され、見やすさ・使いやすさも抜群。


🌐 ブラウザだけで動く

このカメラアプリは HTML + JavaScript だけで構築され、追加インストール不要。
PWAによりオフラインでも動作し、アプリのように高速で軽量です。


🎉 まとめ

この無音カメラアプリは、
iPhoneユーザーにも最適化されたWebカメラアプリの決定版です。

  • 高画質
  • 高速
  • インストール不要
  • 保存簡単
  • デザインもクール

そんな “未来のウェブカメラ” を、今すぐ体験できます。

無音カメラ