KaiOS:概要、システムアーキテクチャ、Webアプリケーション

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

KaiOSは、MozillaのBoot to Gecko(B2G)Web技術に基づいたフィーチャーフォン向けオペレーティングシステムです。アプリケーション開発はHTML5、CSS、JavaScriptで行われ、ネイティブ言語を学ぶ必要はありません。KaiOSは256~512MBのRAMを搭載したデバイスで動作し、4G VoLTE、GPS、Bluetoothをサポートしています。KaiOS Technologiesによると、2025年には世界中で2億台以上のアクティブデバイスがありました。

重要なポイント

  • KaiOS — MozillaのGeckoエンジン上で動作するフィーチャーフォン向けWeb指向OS
  • HTML5/CSS/JS — 開発スタック。ネイティブプログラミング言語を学ぶ必要なし
  • KaiStore — モデレーションとパッケージ署名を備えた公式アプリストア
  • Web API — 電話ハードウェア機能にアクセスするためのMozMobileConnection、MozTelephony、MozSms
  • Gecko — バージョン48(KaiOS 2.5)または84(KaiOS 3.0)がAPIの利用可否を決定

KaiOSとは?

KaiOSは、KaiOS Technologiesによって開発されたフィーチャーフォン向けモバイルオペレーティングシステムです。このシステムは、MozillaのオープンソースプロジェクトBoot to Gecko(B2G)に基づいており、元々は超低価格デバイス向けのWebベースのAndroid代替として作成されました。最初の商用リリースは2017年にインドのReliance JioPhoneで行われました。

Counterpoint Research(2025年第2四半期)によると、KaiOSは世界のモバイルOS市場の2.8%を占めており、Android(72%)とiOS(27%)に次ぐものの、他のプラットフォームを上回っています。インドでは、JioPhoneプログラムのおかげでKaiOSのシェアは14%に達しています。KaiOSデバイスの平均価格は20~30米ドルで、新興市場にとって重要な存在となっています。

KaiOSの主な特徴は、すべてのアプリケーションがWebアプリケーションであることです。開発者はHTML5、CSS、JavaScriptでコードを書き、マニフェストとともにZIPアーカイブにパッケージ化してKaiStoreに公開します。このシステムはネイティブAPKファイルのインストールをサポートしておらず、W3C Widget仕様に準拠したOpen Web Appsのみをサポートします。

KaiOSのバージョン履歴

KaiOS 2.5(2018年) — Gecko 48カーネルを搭載した最初の安定版で、JioPhone 1に搭載されました。KaiOS 2.5.3(2021年) — Google Assistant、Google Maps Go、YouTube Goのサポート。KaiOS 3.0(2022年) — Gecko 84、パフォーマンス向上、WebGL 2.0、CSS Grid。KaiOS 3.1(2024年) — 256MB RAM向け最適化、新しいAudio Channel Web API、改善されたTLS 1.3セキュリティ。

KaiOSバージョンGecko主な変更点
2.5201848最初の安定版リリース、JioPhone 1
2.5.3202148Google Apps、Assistant、セキュリティ向上
3.0202284ES2020、WebGL 2.0、CSS Grid、JSパフォーマンス向上
3.1202484256MB RAM、TLS 1.3、Audio Channel API

KaiOSのアーキテクチャ:LinuxカーネルとGeckoエンジン

KaiOSのアーキテクチャは、3つの主要レイヤーで構成されています:Linuxカーネル(Gonk)、Gecko Webエンジン、Gaiaユーザーインターフェースです。Gonkはハードウェア依存レイヤーで、ドライバー、HAL(Hardware Abstraction Layer)、RIL(Radio Interface Layer)モデムスタック、センサーサポートを含みます。ブートローダー、ドライバー、一部のライブラリはAndroid Open Source Project(AOSP)から取得されています。

Gonk — ハードウェアレイヤー

GonkはGeckoにハードウェアへのアクセスを提供します:カメラ、Bluetooth、Wi-Fi、GPS、オーディオ、バイブレーション、センサー。AndroidでアプリがDalvik/ART向けに書かれるのとは異なり、KaiOSではアプリはGeckoによってGonk IPCに変換されるWeb APIを介してハードウェアにアクセスします。無線インターフェース(RIL)は4G VoLTE、SMS、USSD、SIMカード管理を提供します。

Gecko — Webエンジン

KaiOSにおけるGeckoは単なるブラウザエンジンではなく、完全なアプリケーション実行環境です。すべてのHTML5アプリケーションはGecko Process Manager内で実行され、各アプリケーションを個別のプロセスに分離します。GeckoはW3C Widget Packaging仕様とハードウェアアクセスのためのMozilla拡張機能を実装しています。Geckoのバージョンによって、開発者が利用できるWeb APIが決まります。

Gaia — ユーザーインターフェース

GaiaはOS自体のWebインターフェースです:ロック画面、ホーム画面(ランチャー)、通知パネル、ダイヤラー、連絡先、SMSクライアント。すべてのシステムアプリケーションは同じOpen Web Appsです。開発者は、マニフェストに対応するアクティビティハンドラーを登録することで、標準のカメラやキーボードを独自のアプリに置き換えることができます。

javascript
// KaiOSのバージョンとAPI可用性の確認
function checkKaiOSVersion() {
    const ua = navigator.userAgent;
    let version = 'unknown';

    if (ua.includes('KAIOS/2.5')) {
        version = '2.5';
    } else if (ua.includes('KAIOS/3')) {
        version = '3.0';
    }

    const features = {
        geolocation: 'geolocation' in navigator,
        vibration: 'vibrate' in navigator,
        mozMobileConnection: 'mozMobileConnection' in navigator,
        mozTelephony: 'mozTelephony' in navigator,
        mozSms: 'mozSms' in navigator,
        bluetooth: 'bluetooth' in navigator
    };

    return { version, features };
}

// Google Appsの可用性の確認(KaiOS 2.5.3+のみ)
const systemInfo = checkKaiOSVersion();
console.log('KaiOS version:', systemInfo.version);
console.log('Available APIs:', JSON.stringify(systemInfo.features, null, 2));

// 可用性確認付きバイブレーションの使用
function triggerHapticFeedback() {
    if (navigator.vibrate) {
        navigator.vibrate([200, 100, 200]); // バイブレーション、一時停止、バイブレーション
    }
}

checkKaiOSVersion関数はUser Agentを読み取ってKaiOSのバージョンを判別し、主要なWeb APIの利用可能性を確認します。バージョン2.5では、mozMobileConnection、mozTelephony、mozSmsが利用可能です。これらは通常のブラウザにはなく、KaiOS固有のものです。triggerHapticFeedback関数は下位互換性を持ってVibration APIを使用します。

KaiOSアプリの作成:構造とマニフェスト

KaiOSアプリは、HTMLファイル、CSS、JavaScript、画像、マニフェストを含むZIPアーカイブ(形式.zip、.apkではありません)です。最小限のアプリ構造には、manifest.webapp(アプリの説明)、index.html(エントリポイント)、style.css、icon.png(90×90ピクセルの正方形アイコン)が含まれます。マニフェストはW3C Manifest for Web Apps仕様に従います。

マニフェスト manifest.webapp

manifest.webappファイルはKaiOSアプリのルート設定ファイルです。必須フィールド:name(名前)、description(140文字までの説明)、launch_path(index.htmlへのパス)、icons(アイコンサイズ30×30、60×60、90×90、120×120)。typeフィールド:'certified'(システムアプリ)、'privileged'(Web APIアクセス)、'web'(特別な権限なし)。privilegedアプリの権限はpermissions配列で指定されます。

javascript
// manifest.webapp — KaiOSアプリケーション設定
{
    "name": "懐中電灯",
    "description": "カメラフラッシュのオン/オフを切り替える",
    "launch_path": "/index.html",
    "icons": {
        "30": "/icons/icon-30.png",
        "60": "/icons/icon-60.png",
        "90": "/icons/icon-90.png",
        "120": "/icons/icon-120.png"
    },
    "type": "privileged",
    "permissions": {
        "camera": {
            "description": "フラッシュを有効にするために必要"
        }
    },
    "default_locale": "ru",
    "orientation": "portrait-primary",
    "fullscreen": true
}

マニフェストはアプリがprivilegedタイプであることを指定します。これにより、権限を通じてカメラAPIへのアクセスが許可されます。アイコンサイズは厳密に30×30、60×60、90×90、120×120ピクセルです。orientationフィールドは縦向きモードに制限します。フィーチャーフォンには通常、画面回転のための加速度センサーがありません。fullscreen:trueはステータスバーを非表示にします。

HTMLページ構造

KaiOSのHTML5ページは、限られた画面(通常240×320ピクセル)を考慮して標準タグを使用します。ビューポートメタタグは必須です:<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">。KaiOSはタッチイベントをサポートしていません(フィーチャーフォンにタッチスクリーンはありません)。すべてのナビゲーションはキーを介して行われます:移動にArrowUp、ArrowDown、選択にEnter、戻るにBackです。

javascript
// index.html — KaiOS向け簡易懐中電灯アプリ
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport"
          content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>懐中電灯</title>
    <link rel="stylesheet" type="text/css" href="style.css">
</head>
<body>
    <div id="app">
        <div id="status" class="status-off">オフ</div>
        <div id="hint">有効にするにはEnterキーを押してください</div>
    </div>

    <script>
        const statusEl = document.getElementById('status');
        const hintEl = document.getElementById('hint');
        let isFlashOn = false;
        let camera = null;

        async function initCamera() {
            try {
                camera = navigator.mozCameras.getListOfCameras()[0];
                const cameraControl = await
                    navigator.mozCameras.getCamera(camera, { mode: 'picture' });
                return cameraControl;
            } catch (e) {
                showError('カメラを使用できません: ' + e.message);
            }
        }

        async function toggleFlash() {
            const cam = await initCamera();
            if (!cam) return;

            isFlashOn = !isFlashOn;
            try {
                await cam.setConfiguration({
                    mode: 'picture',
                    flashMode: isFlashOn ? 'on' : 'off'
                });
                statusEl.textContent = isFlashOn ? 'オン' : 'オフ';
                statusEl.className = isFlashOn ? 'status-on' : 'status-off';
            } catch (e) {
                showError('エラー: ' + e.message);
            }
        }

        // ハードウェアEnterボタンの処理
        document.addEventListener('keydown', function(e) {
            if (e.key === 'Enter') {
                toggleFlash();
            }
        });

        initCamera();
    </script>
</body>
</html>

懐中電灯アプリはMozCamera APIを使用してカメラフラッシュを制御します。ユーザーがハードウェアのEnterボタンを押すと、keydownハンドラーが起動し、flashModeをonとoffの間で切り替えます。ステータスは、視覚的な表示のためにstatus-on/status-offクラスを持つテキストブロックに表示されます。MozCamera APIは、マニフェストにカメラ権限があるprivilegedアプリでのみ利用可能です。

KaiOS Web API:電話とハードウェアの操作

KaiOS Web APIは、電話のハードウェア機能へのアクセスを提供するJavaScriptインターフェースのセットです。ほとんどのAPIはMozillaの独自拡張機能(mozプレフィックス付き)であり、通常のブラウザでは利用できません。APIを使用するには、アプリのマニフェストでprivilegedまたはcertifiedタイプである必要があります。

主要なWeb API

MozMobileConnection — ネットワーク情報:事業者、信号強度、ネットワークタイプ(4G/3G/2G)、IMEI、ローミングステータス。MozTelephony — 通話管理:発信、着信、終了、会議通話、通話ステータス。MozSms — SMS、MMSの送受信、SIMメッセージ管理。MozContacts — 電話帳の読み書き。MozBluetooth — Bluetooth管理:デバイス検出、ペアリング、ファイル転送。Push API — サーバーからのプッシュ通知の受信。

javascript
// KaiOS Web APIを介した連絡先と通話の操作
const TelephonyManager = {
    // 番号による発信
    async makeCall(phoneNumber) {
        if (!navigator.mozTelephony) {
            throw new Error('Telephony APIを使用できません');
        }

        const call = navigator.mozTelephony.dial(phoneNumber);
        call.onconnected = () => console.log('通話が接続されました');
        call.ondisconnected = () => console.log('通話が終了しました');
        return call;
    },

    // 電話帳から連絡先リストを取得
    async getContacts() {
        const cursor = navigator.mozContacts.getAll({
            sortBy: 'familyName',
            sortOrder: 'ascending'
        });

        const contacts = [];
        return new Promise((resolve, reject) => {
            cursor.onsuccess = function() {
                if (this.result) {
                    contacts.push(this.result);
                    this.continue();
                } else {
                    resolve(contacts);
                }
            };
            cursor.onerror = function() {
                reject(this.error);
            };
        });
    },

    // SMSの送信
    async sendSms(phoneNumber, message) {
        if (!navigator.mozSms) {
            throw new Error('SMS APIを使用できません');
        }
        const request = navigator.mozSms.send(phoneNumber, message);
        return new Promise((resolve, reject) => {
            request.onsuccess = () => resolve(request.result);
            request.onerror = () => reject(request.error);
        });
    }
};

// 使用例
TelephonyManager.getContacts()
    .then(contacts => console.log('見つかった連絡先:', contacts.length))
    .catch(err => console.error(err));

TelephonyManagerオブジェクトは、3つの主要なKaiOS APIを組み合わせています:通話用のmozTelephony、電話帳用のmozContacts、メッセージ用のmozSmsです。カーソルを使用したgetAll()は、大量のデータ(1000件以上の連絡先エントリに典型的)を非同期に読み取るパターンです。すべてのAPIは、onsuccessハンドラーとonerrorハンドラーを持つDOMRequestを返します。

Web APIの制限事項

KaiOS Web APIには制限があります:通話とSMSのAPIは電話機でのみ利用可能(タブレットでは不可)、カメラは物理カメラが存在する場合のみ、Bluetoothは限定的なHSP/HFPプロファイル。Push APIにはGoogle Firebase(FCM)サーバーのサポートまたはカスタムサーバーが必要です。地理位置情報APIは、ハードウェアサポートに応じてA-GPSまたはCell IDを使用します。

APIアプリタイプ利用可能性KaiOSバージョン
MozMobileConnectionprivilegedすべての電話2.5+
MozTelephonyprivileged電話のみ2.5+
MozSmsprivileged電話のみ2.5+
MozContactsprivilegedすべての電話2.5+
MozBluetoothcertifiedBluetoothモジュール搭載2.5+
Geolocation APIwebGPS/Cell ID対応2.5+
Push APIprivilegedインターネット接続時3.0+
WebGL 2.0webGPUアクセラレーション対応3.0+

UIとナビゲーション:T9、ボタン、240×320画面

KaiOSのユーザーインターフェースは、T9キーボードとハードウェアボタンでの操作向けに設計されています。ほとんどのフィーチャーフォンの標準画面解像度は240×320ピクセル(QVGA)です。タッチスクリーンがないため、すべてのナビゲーションはkeydown/keyupイベントを介して実装されます:ArrowUp、ArrowDown、ArrowLeft、ArrowRight、Enter、Back(またはEscape)。

フォーカス管理

KaiOSは通常の方法でのCSS :focusをサポートしていません。フォーカスはtabindexとJavaScriptを介して管理されます。開発者は現在選択されている要素を手動で追跡し、キー押下時にフォーカスを移動する必要があります。ナビゲーションを簡素化するために、リスト要素にdata-indexを使用することを推奨します。選択された要素は通常、対照的なCSS background-colorを持つ.selectedクラスで強調表示されます。

javascript
// KaiOS向けリストフォーカスナビゲーション
class ListNavigation {
    constructor(containerSelector) {
        this.container = document.querySelector(containerSelector);
        this.items = this.container.querySelectorAll('[data-index]');
        this.currentIndex = 0;
        this.init();
    }

    init() {
        this.updateFocus();

        document.addEventListener('keydown', (e) => {
            switch (e.key) {
                case 'ArrowUp':
                    e.preventDefault();
                    this.moveFocus(-1);
                    break;
                case 'ArrowDown':
                    e.preventDefault();
                    this.moveFocus(1);
                    break;
                case 'Enter':
                    e.preventDefault();
                    this.selectItem();
                    break;
                case 'Backspace':
                case 'Escape':
                    e.preventDefault();
                    this.goBack();
                    break;
            }
        });
    }

    moveFocus(direction) {
        this.items[this.currentIndex].classList.remove('selected');
        this.currentIndex = (this.currentIndex + direction + this.items.length) % this.items.length;
        this.updateFocus();
    }

    updateFocus() {
        const el = this.items[this.currentIndex];
        el.classList.add('selected');
        el.scrollIntoView({ block: 'nearest' });
    }

    selectItem() {
        const el = this.items[this.currentIndex];
        const event = new CustomEvent('itemselected', {
            detail: { index: this.currentIndex, element: el }
        });
        this.container.dispatchEvent(event);
    }

    goBack() {
        history.back();
    }
}

// メニューリストのナビゲーション初期化
const nav = new ListNavigation('#menu-list');
nav.container.addEventListener('itemselected', (e) => {
    console.log('選択された要素:', e.detail.index);
});

ListNavigationクラスは、KaiOS向けの完全なフォーカスナビゲーションを実装します。ArrowUp/ArrowDownはdata-indexを持つ要素を循環的にフォーカス移動します。Enterはカスタムのitemselectedイベントをトリガーします。Backspace/Escapeは前の画面に戻ります。block:nearestを指定したscrollIntoViewは、表示領域からはみ出たときに自動的に画面をスクロールします。

KaiOS向けCSS

KaiOS 2.5はCSS 2.1 + 部分的にCSS3(border-radius、box-shadow、gradients)をサポートしています。FlexboxはKaiOS 2.5で部分的にサポートされ、KaiOS 3.0ではCSS Gridを含めて完全にサポートされています。互換性のために、固定幅のfloatベースのレイアウトを使用することを推奨します。デフォルトのフォントはTizenSans、またはアジア市場向けにNoto Sans CJKです。テキストサイズはメインコンテンツが14~16ピクセル、見出しが18~20ピクセルです。

KaiStoreとアプリ公開

KaiStoreはKaiOSの公式アプリストアで、すべてのデバイスにプリインストールされています。開発者はKaiOS Developer Portal(developer.kaiostech.com)に登録し、署名付きZIPパッケージをアップロードして説明を記入します。モデレーションでは、セキュリティ、安定性、コンテンツポリシーの準拠を確認します。平均審査時間は3~5営業日です。

アプリの署名

KaiOSでは、KaiOS Certificateによるアプリのデジタル署名が必要です。開発者はkaios-signユーティリティを使用して鍵ペア(秘密鍵+公開鍵)を生成し、公開鍵をKaiOS Developer Portalに送信して証明書を受け取ります。署名付き.zipファイルには、META-INFフォルダーに署名が含まれています。署名がない場合、アプリは開発デバイスにのみインストールできます。

配信モデルと収益化

KaiStoreは無料アプリ、KaiOS Ads SDKによる広告、キャリア決済(Direct Carrier Billing)によるアプリ内購入をサポートしています。KaiStoreの手数料は収益の30%です。代替チャネルとして、OEMメーカー(Jio、Nokia、Alcatel、Doro)を通じたプリインストールがあります。プリインストールにはデバイスメーカーとの直接契約が必要です。

段階アクション時間
登録KaiOS Developer Portalでアカウント作成1日
署名鍵の生成、証明書の取得1~2日
ビルドマニフェストと署名付き.zipのパッケージ化1時間
アップロードパッケージのアップロード、説明の記入1日
審査セキュリティと品質の確認3~5日
公開全地域向けKaiStoreでのリリース1日

KaiStoreの制限事項

KaiStoreは一部の国で有料アプリをサポートしていません(支払いはキャリア決済のみ)。アプリのサイズは2G/3Gネットワークでのダウンロード用に10MBに制限されています。アプリは50MB以上のRAMを使用してはなりません。マニフェストでの明示的な宣言なしにmozMobileConnection APIへのアクセスは禁止されています。ポリシー違反は開発者アカウントの停止につながります。

よくある質問

KaiOSとは?

KaiOSは、MozillaのGecko Webエンジンに基づくフィーチャーフォン向けオペレーティングシステムです。256~512MBのRAMを搭載したデバイスで動作し、4G VoLTE、GPS、Bluetoothをサポートしています。アプリはHTML5、CSS、JavaScriptで記述されます。Counterpoint Researchによると、KaiOSは2億台以上のデバイスにインストールされています。

KaiOS開発にはどの言語が使われますか?

唯一の開発スタックはHTML5、CSS、JavaScriptです。KaiOSはC++やJavaなどのネイティブ言語をサポートしていません。すべてのアプリはW3C仕様に準拠したOpen Web Appsです。ハードウェア機能にアクセスするには、mozプレフィックス付きのMozilla Web APIが使用されます。アプリはmanifest.webappとともにZIPアーカイブとしてパッケージ化されます。

KaiOSアプリを配布するには?

公式ストアはKaiStoreで、KaiOS Developer Portalへの登録が必要です。アプリは開発者証明書で署名され、.zip形式でアップロードされます。審査には3~5日かかります。代替チャネルとして、OEMメーカーとの契約による新規デバイスへのプリインストールがあります。KaiStoreの手数料は30%です。

KaiOSとAndroid Goの違いは?

KaiOSはHTML5アプリにGecko Webエンジンを使用し、256~512MBのRAMを必要とします。Android GoはDalvik/ARTでネイティブAPKを実行し、1~2GBのRAMを必要とします。KaiOSは最大30ドルのフィーチャーフォンで動作し、Android Goは50ドルからの低価格スマートフォンで動作します。KaiOSは消費電力が少なく、1回の充電での動作時間が長くなります。

KaiOS開発者が利用できるAPIは?

主要なAPI:MozMobileConnection(ネットワーク)、MozTelephony(通話)、MozSms(SMS)、MozContacts(連絡先)、MozBluetooth(Bluetooth)、Geolocation API、Vibration API、Push API、Notification API。カメラAPIへのアクセスにはprivilegedアプリタイプが必要です。Push APIはKaiOS 3.0以降で利用可能です。

まとめ

  • KaiOS — Gecko(B2G)上のフィーチャーフォン向けWeb OS、256~512MB RAMでHTML5アプリをサポート
  • アーキテクチャはGonk(Linuxカーネル+ドライバー)、Gecko(Webエンジン)、Gaia(HTML5 UI)で構成
  • 開発はHTML5/CSS/JSで行われ、アプリはmanifest.webappとデジタル署名付きのZIP
  • Web APIにはMozTelephony、MozSms、MozContacts、MozMobileConnection、MozBluetooth、Geolocationを含む
  • ナビゲーションはハードウェアボタン(Arrow、Enter、Back)を介してkeydown/keyupイベントで実装
  • KaiStore — 3~5日の審査、30%の手数料、キャリア決済対応のアプリストア
  • KaiOS 3.0はGecko 84、ES2020、WebGL 2.0、CSS Grid、Push API、パフォーマンス向上を追加

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

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

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

こちらもお読みください