📌

PWAのManifestにおけるorientationメンバの挙動メモ

2022/10/29に公開

https://developer.mozilla.org/ja/docs/Web/Manifest/orientation
を読んでもよくわからなかったので調査したことをメモ。素人の雑記。

結論

深く考えないのであれば、指定しないほうが良い。Androidでしか有効でないメンバだし。

orientationは何をするか

アプリの向きを固定する。その方向を以下のワードで指定する。

  • landscape 横向きで固定する。ユーザーは縦にできない。180度回転はできる。
  • landscape-primary 横向きであるが、より自然な横向き(primary)である。つまり、スマートフォンの縦方向を考慮したうえで、自然な横方向(音量ボタンが上みたいな)に固定される。端末によってはその設定がないので無視されうるらしい。ユーザーは縦にできず、180度回転もできなくなる。
  • landscape-secondary 自然でないほうの横向き。あとは同じ。
  • portrait 縦向きで固定する。(以下略)
  • portrait-primary 縦向きで固定するが、上下方向が自然な向きになる。カメラが上になり、USBポートが下になるみたいな。
  • portrait-secondary ノッチを下にしたい変人向けの設定ということになる。
  • natural 最も自然な向きに固定される。スマートフォンの場合、portrait-primaryと同じになることが多いのではないか。ユーザーは一切の方位変更ができない。
  • any 全方位に固定することを許可する。ユーザはスマホを傾けることで任意の方位に向きを変えることができる。

これらはThe Screen Orientation APIのOrientationLockTypeと同一であるそうだ。
https://triple-underscore.github.io/screen-orientation-ja.html#orientationlocktype-enum

端末によっては指定した設定が無視されることがある。極端な例はデスクトップPCのモニタであり、すべて無視される。モバイルデバイスでも、primarysecondaryも無視されやすそうだ。ノッチがあるデバイスでは、portrait-secondary方位への回転がそもそもシステム上許可されていない場合もあるようだ。

自動回転の設定をorientationは無視する。

多くのスマートフォンには自動回転のON/OFF設定があるが、orientationはこれをすべて無視する。例えばanyを指定すると、自動回転がOFFでも回転が行われる。当たり前だが、naturalを指定すると、自動回転がONでもビクともしなくなる。

設定しないほうがいいと思う理由

まず、アプリはユーザーの自動回転設定を尊重すべきである。これを実現する答えはorientationメンバを指定しないことである。

また、PWAのマニフェストはデバイスの種類ごとに設定できない。スマートフォンではportrait-primaryでいいかもしれないが、タブレットでそれは不便ではないか?向きの制御には他の方法もあると思うので、マニフェストで指定するのは悪手だと思う。

Discussion