Skip to content
uupaa edited this page May 21, 2016 · 27 revisions

Spec.js はモバイルデバイスのカタログスペックを、JavaScript から取得可能にするライブラリです。

以下の特徴があります。

  • 日本国内のキャリア(docomo, au, SoftBank)から発売されたほぼ全てのモバイル端末のスペックをカタログ化してあります
    • 2009年以降に発売されたスマートフォンとフィーチャーフォンのデータを搭載しています
  • JavaScript からは通常取得できないパフォーマンスの上限を決定するデータ(メモリ,最大スレッド数,最大テクスチャサイズ)などを取得できます

以下は、Nexus 7 (2013) のデバイススペックを取得する例です。

var ua = new UserAgent();
var spec = new Spec(ua);

ua.DEVICE               // -> "Nexus 7 2nd"
ua.OS                   // -> "Android"
ua.OS_VERSION           // -> "4.3.0"
ua.USER_AGENT           // -> "Mozilla/5.0 (Linux; Android 4.3; Nexus 7 Build/JSS15Q) ..."
ua.BROWSER              // -> "Chrome"
ua.BROWSER_ENGINE       // -> "Blink"
ua.BROWSER_VERSION      // -> "29.0.1547"
ua.LANGUAGE             // -> "ja"

spec.UNKNOWN            // -> false
spec.SOC                // -> "APQ8064"
spec.GPU                // -> "ADRENO 320"
spec.RAM                // -> 2048
spec.BLE                // -> true
spec.NFC                // -> true
spec.ATOM               // -> false
spec.SIMD               // -> true
spec.H265_ENCODER       // -> false
spec.H265_DECODER       // -> false
spec.FORCE_TOUCH        // -> false
spec.FORCE_CLICK        // -> false
spec.MAX_THREADS        // -> 4
spec.MAX_TOUCH_POINTS   // -> 10
spec.MAX_TEXTURE_SIZE   // -> 4096
spec.GLES               // -> 3.0
spec.METAL              // -> 0.0
spec.VULKAN             // -> 0.0
spec.LOW_END            // -> false
spec.OUTMODED           // -> false

フィーチャーフォンの UserAgent を元にスペックを取得するには以下のようにします。
FP_xxx は フィーチャーフォン用のプロパティです。

var ua = new UserAgent("DoCoMo/2.0 P07A3(c500;TB;W24H15)");
var spec = new Spec(ua);

spec.FP_CERT_SHA1       // -> true
spec.FP_UTF8            // -> true
spec.FP_TLS             // -> true
spec.FP_COOKIE          // -> true
spec.FP_FLASH_LITE      // -> 3.1
spec.FP_MALFUNCTION     // -> true
spec.FP_DISPLAY_LONG    // -> 662
spec.FP_DISPLAY_SHORT   // -> 480

Spec.js は古いデバイスの断捨離を応援します

古いデバイスのサポートをいつ切るか、何を根拠にサポートを切るかは、かなり悩ましい問題です。

  • どこかで線を引く必要がありますが、サービス毎にバラバラの状態です
  • 業界にも統一的な見解がありません

Spec.js はデバイスを断捨離するための情報 を提供しています。

Smart Phone なら

  • Spec#LOW_END で、ローエンドデバイスかどうかを判別できます
  • Spec#OUTMODED で、発売から24〜30ヶ月が経過した古いデバイスかどうかを判別できます
  • Spec.dump("modern") で、十分な表現力をもったデバイスの一覧を取得できます
  • Spec.dump("lowend") で、ゲームに不向きな低スペックデバイスの一覧を取得できます
  • Spec.dump("outdated") で、発売から24〜30ヶ月が経過した古いデバイスの一覧を取得できます
  • Spec.dump("onehand") で、片手で操作可能なデバイスの一覧を取得し、
    Spec.dump("bothhands") で両手持ちデバイスの一覧を取得できます
    • 親指の届く範囲や、画面レイアウトを決定するための情報を取得できます

Feature Phone なら

  • Spec#FP_CERT_SHA1 から HTTPSが利用できるかどうかを取得できます
    • HTTPS が利用できない端末は、ログインや決済ができません
  • Spec#FP_MALFUNCTION から端末がデザインされたとおりに正常に機能するかどうかを取得できます
    • カレンダーに不具合があったり、HTTPS が利用できない端末では、この値は true になります
Spec.dump("modern")

iPhone 6 Plus,iPhone 6,iPhone 5s,iPhone 5c,iPad Air 2,iPad Air,iPad mini 3,iPad mini 2,iPod touch 6,XT1058,Nexus 9,Nexus 7 2nd,Nexus 6,Nexus 5,Mi Pad,Redmi Note,ASUS_T00P,ASUS_Z00AD,K017,ME581C,SHIELD Tablet,Nexus Player,SO-03G,SO-04G,SO-05G,SC-04G,SC-05G,SH-03G,SH-04G,SH-05G,F-04G,DM-01G,SO-01G,SO-02G,SC-01G,SC-02G,SC-03G,SH-01G,SH-02G,F-02G,F-03G,SC-04F,SO-03F,SO-04F,SO-05F,SH-04F,SH-05F,SH-06F,F-05F,F-06F,L-01F,SC-01F,SC-02F,SH-01F,SH-01FDQ,SH-02F,SH-03F,SO-01F,SO-02F,F-01F,F-02F,F-03F,F-04F,SC-04E,SO-04E,SO-04EM,SH-08E,F-08E,F-09E,SO-02E,SCV31,SOV31,SOT31,HTV31,LGV32,SHV32,KYV35,KYV34,KYT31,KYV33,SHV31,KYV32,KYL23,SHF32,SHF31,SCT21,LGV31,KYV31,SOL26,SCL24,AST21,SOT21,HTL23,KYY24,KYY23,SHL25,SCL23,SOL25,LGL24,SHT22,SHL24,URBANO L02,LGL23,SOL24,FJT21,SOL23,SCL22,KYL22,LGL22,SHL23,FJL22,HTL22,SOL22,402SO,404SH,403SH,404SC,404KC,402LG,403SC,402SH,403HW,401SH,401SO,302KC,305SH,304SH,WX05SH,SBM303SH,DM016SH,301F,SBM302SH,101F,WX04SH,EM01F,DM015K,DM014SH,LGL25,VA-10J,KFSAWA,KFSAWI,KFAPWA,KFAPWI,KFTHWA,KFTHWI