px: 本質、モバイル開発における物理ピクセル

著者: IT Sectr 公開日: 2026-02-25 読了時間: 7 分

px — 物理ピクセル、デバイス画面上の画像の最小要素。モバイル開発では、pxは画面解像度とピクセル密度(PPI)の基本単位として使用されますが、インターフェースレイアウトには実質的に使用されません — 代わりに論理ユニットpt、dp、spが使用されます。この記事では、pxが論理ユニットとどのように異なるか、解像度とPPIがどのように関連するか、そしてコードでpxを直接使用することがアンチパターンである理由を説明します。

重要なポイント

  • px — 画面密度(PPI)を考慮しないディスプレイの物理ピクセル
  • 画面解像度(px) — 幅と高さのピクセル数、例:1179 × 2556 px
  • PPI — 1インチあたりのピクセル数、画像鮮明度の主要指標
  • 論理ユニット(dp、pt、sp)はpxを抽象化し、異なる画面にインターフェースを適応させる
  • コードでのpxの使用はアンチパターン。異なる密度のデバイスでインターフェースが正しく表示されない

pxとは?

px(ピクセル、ピクチャエレメント) — ラスター画像またはディスプレイの最小アドレス可能要素。各ピクセルは、RGBモデル(赤、緑、青)でチャンネルあたり8〜10ビットの色深度で色情報を保存します。最新のモバイルデバイスのディスプレイには数百万のピクセルが含まれています:iPhone 15 Pro — 300万、iPad Pro 12.9" — 560万ピクセル。

ピクセルの物理サイズはディスプレイ密度(PPI)に依存します。326 PPI(iPhone 11)のデバイスでは、1ピクセルは約0.078 mmです。460 PPI(iPhone 15 Pro)のディスプレイでは — 0.055 mm。ピクセルの物理サイズが小さいほど、画像の鮮明度が高くなります。同時に、ピクセル密度はレンダリングパフォーマンスに直接影響します:ピクセルが多い = GPUへの負荷が大きい。

Appleによると、iPhone 15 Proのディスプレイ解像度は1179 × 2556 px、460 PPIです。比較すると、iPhone SE(第3世代) — 750 × 1334 px、326 PPI。総ピクセル数の差は約3倍で、ProモデルでのGPU要件の高さを説明しています。

ピクセルでの画面解像度

画面解像度 — 水平および垂直方向の物理ピクセルの数。幅×高さの形式で記述され、例:1179 × 2556 px。解像度はディスプレイの基本特性であり、プログラムで変更することはできません — ハードウェアとマトリックスレベルで固定されています。

デバイス解像度(px)PPIアスペクト比
iPhone SE(第3世代)750 × 133432616:9
iPhone 141170 × 253246019.5:9
iPhone 15 Pro Max1290 × 279646019.5:9
Samsung Galaxy S24 Ultra1440 × 312050519.5:9
Google Pixel 8 Pro1344 × 299249020:9
iPad Pro 12.9"2048 × 27322644:3

ピクセル単位の解像度を画面の論理サイズ(iOSのptやAndroidのdp)と混同しないでください。例えば、iPhone 14の論理サイズは390 × 844 ptですが、物理解像度は1170 × 2532 px — スケールファクターが3のため、正確に3倍大きくなっています。

PPIとピクセル密度

PPI(1インチあたりのピクセル数) — ディスプレイの1インチあたりのピクセル数。計算式:PPI = √(幅² + 高さ²)/ 対角線。PPIが高いほど、個々のピクセルが小さくなり、画像が滑らかに見えます。Appleは、標準的な視聴距離でPPIが300を超えるディスプレイをRetinaディスプレイと見なしています。

デバイスカテゴリによって密度は異なります:Apple Watch — 326 PPI、iPhone — 326〜460 PPI、iPad — 264 PPI、MacBook Pro — 254〜264 PPI。AndroidデバイスはDensity Bucketsで密度を分類します:mdpi(160 dpi)、hdpi(240)、xhdpi(320)、xxhdpi(480)、xxxhdpi(640)。これらのバケットは、デバイスにどのリソース(画像、dimens)がロードされるかを決定します。

開発におけるPPIの影響:密度が高いほど、テクスチャや画像の保存により多くのメモリが必要になります。500 PPIのディスプレイの1ピクセルは、同じ論理要素サイズで320 PPIのディスプレイよりも2.5倍多くのGPUメモリを必要とします。特定の密度バケットに合わせたアセットの最適化は、Android開発の標準的なプラクティスです。

px vs 論理ユニット:pt、dp、sp

物理ピクセル(px)は論理ユニット(ptdpsp)とは異なり、ハードウェア解像度に結びついておりスケーリングされません。論理ユニットは逆に、開発者を特定のディスプレイから抽象化し、100 ptの単一の値が異なるデバイスで同じ物理サイズで表示されることを可能にします。

ユニットプラットフォームPPI依存スケール目的
pxすべてはい(物理ピクセル)いいえ画像、バッファ、Metal
ptiOS/macOSいいえ(論理ポイント)スケールファクターレイアウト、UIKit、SwiftUI
dpAndroidいいえ(密度非依存)密度バケットレイアウト、要素サイズ
spAndroidいいえ(スケール非依存)密度 + フォントスケールテキスト(textSize)

変換式:iOSの場合 — px = pt × scale(scale = 1、2、または3)。Androidの場合 — px = dp ×(dpi / 160)。コードでpxを直接使用すると、異なる密度のデバイスでインターフェースの見え方が異なります:高PPI画面では要素が小さすぎ、低PPIでは大きすぎます。

コードでpxが使用されない理由

モバイルアプリケーションのソースコードでpxを使用することは、異なるピクセル密度のデバイスでインターフェースが正しく表示されない原因となるアンチパターンです。最新のフレームワーク(UIKit、SwiftUI、Jetpack Compose、XML Layouts)は、ピクセルでのサイズ指定を禁止または推奨していません。

  • iOS UIKit — すべてのframe、bounds、constraint constantsはptで設定されます。ピクセルはUIGraphicsImageRendererを介したラスタライズ段階でのみ現れます
  • SwiftUI — pxでサイズを設定するAPIはありません。すべての値はFont、frame、paddingを介してptです
  • Android XML — dimens.xmlでpxを指定すると、Android Studioはlint警告を表示します:「テキストサイズには`px`ではなく`sp`を使用してください」
  • Jetpack Compose — テキストにはTextUnit、要素にはDp。コンパイラは型の混在を許可しません

コードでpxを使用する唯一の正当なケースは、ラスターを扱う場合です:Bitmapの読み込み、Canvasでの画像レンダリング、MetalやOpenGLでの作業。これらの場合、pxはターゲットバッファの物理ピクセルであり、正しいレンダリングのために考慮する必要があります。それ以外のすべての場合、論理ユニットが使用されます。

画像とアセットのピクセル

画像とアイコンはピクセルで保存されますが、画面タイプごとに異なるバージョンが提供されます。iOSはAssets.xcassetsで@1x@2x@3xの接尾辞を使用します。Androidはdrawable-mdpi(1×)、drawable-hdpi(1.5×)、drawable-xhdpi(2×)、drawable-xxhdpi(3×)、drawable-xxxhdpi(4×)フォルダを使用します。システムは画面密度に基づいて自動的に正しいファイルを選択します。

iOSスケールAndroidバケット係数例(48 pt/dp)
@1xmdpi(160 dpi)48 × 48 px
@2xxhdpi(320 dpi)96 × 96 px
@3xxxhdpi(480 dpi)144 × 144 px
xxxhdpi(640 dpi)192 × 192 px

アセット提供ルール:ベクター形式(PDF、SVG)で画像を作成し、必要なサイズのラスターコピーにエクスポートします。ベクターアセットは品質を損なうことなくスケーリングでき、リポジトリの容量を節約します。Androidでは、VectorDrawableを介してベクターリソースを直接使用でき、複数のラスターコピーの必要性がなくなります。

よくある質問

pxとdpの違いは何ですか?

px — 画面の物理ピクセル。dp(密度非依存ピクセル) — 160 dpiの密度の画面で1 pxに等しいAndroidの論理ユニット。異なる密度では、dpは自動的に異なる数のpxに変換され、要素の物理サイズを保持します。

なぜコードでpxでサイズを指定できないのですか?

pxは画面密度を考慮しないためです。100 pxの要素はPPIが異なるデバイスで異なって見えます:326 PPIの画面では460 PPIよりも大きく見えます。論理ユニット(dp、pt、sp)はこの問題を自動的に解決します。

PPIとは何ですか?どのように計算されますか?

PPI(1インチあたりのピクセル数) — ディスプレイの1インチあたりのピクセル数。計算式:PPI = √(w² + h²)/ d。ここでwとhはpx単位の解像度、dはインチ単位の対角線。PPIが高いほど画像は鮮明になります。AppleのRetinaディスプレイは300 PPIから始まります。

pxの使用が正当化されるのはいつですか?

pxはラスターバッファを扱う場合に正当化されます:Bitmapの作成、Canvasでのレンダリング、Metal/OpenGLシェーダーのプログラミング、カメラ画像の処理。レイアウトとタイポグラフィでは、pxは使用されません — pt(iOS)、dp、sp(Android)が適用されます。

pxで画面解像度を調べるには?

iOSの場合:UIScreen.main.nativeBoundsがpx単位のサイズを返します。Androidの場合:DisplayMetrics.widthPixelsheightPixelsをcontext.resources.displayMetricsから取得。SwiftUIの場合:GeometryReaderがpt単位のサイズを返し、pxにするにはdisplayScaleを掛ける必要があります。

まとめ

  • px — ディスプレイの物理ピクセル、画面解像度の基本単位
  • 解像度 — 水平および垂直方向のピクセル数、ハードウェアレベルで固定
  • PPI — 1インチあたりのピクセル数、画像鮮明度とGPU要件を決定
  • 論理ユニット(pt、dp、sp)はpxを抽象化し、任意の画面にインターフェースを適応
  • アンチパターン — レイアウトとタイポグラフィでのpx使用;正しい領域はラスターバッファ
  • アセットは異なる解像度で提供(iOSは@1x/@2x/@3x、Androidは密度バケット)
  • ベクター形式(PDF、SVG、VectorDrawable)が複数のラスターコピーよりも推奨

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください