KaiOSは、MozillaのBoot to Gecko(B2G)Web技術に基づいたフィーチャーフォン向けオペレーティングシステムです。アプリケーション開発はHTML5、CSS、JavaScriptで行われ、ネイティブ言語を学ぶ必要はありません。KaiOSは256~512MBのRAMを搭載したデバイスで動作し、4G VoLTE、GPS、Bluetoothをサポートしています。KaiOS Technologiesによると、2025年には世界中で2億台以上のアクティブデバイスがありました。
重要なポイント
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 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.5 | 2018 | 48 | 最初の安定版リリース、JioPhone 1 |
| 2.5.3 | 2021 | 48 | Google Apps、Assistant、セキュリティ向上 |
| 3.0 | 2022 | 84 | ES2020、WebGL 2.0、CSS Grid、JSパフォーマンス向上 |
| 3.1 | 2024 | 84 | 256MB RAM、TLS 1.3、Audio Channel API |
KaiOSのアーキテクチャは、3つの主要レイヤーで構成されています:Linuxカーネル(Gonk)、Gecko Webエンジン、Gaiaユーザーインターフェースです。Gonkはハードウェア依存レイヤーで、ドライバー、HAL(Hardware Abstraction Layer)、RIL(Radio Interface Layer)モデムスタック、センサーサポートを含みます。ブートローダー、ドライバー、一部のライブラリはAndroid Open Source Project(AOSP)から取得されています。
GonkはGeckoにハードウェアへのアクセスを提供します:カメラ、Bluetooth、Wi-Fi、GPS、オーディオ、バイブレーション、センサー。AndroidでアプリがDalvik/ART向けに書かれるのとは異なり、KaiOSではアプリはGeckoによってGonk IPCに変換されるWeb APIを介してハードウェアにアクセスします。無線インターフェース(RIL)は4G VoLTE、SMS、USSD、SIMカード管理を提供します。
KaiOSにおけるGeckoは単なるブラウザエンジンではなく、完全なアプリケーション実行環境です。すべてのHTML5アプリケーションはGecko Process Manager内で実行され、各アプリケーションを個別のプロセスに分離します。GeckoはW3C Widget Packaging仕様とハードウェアアクセスのためのMozilla拡張機能を実装しています。Geckoのバージョンによって、開発者が利用できるWeb APIが決まります。
GaiaはOS自体のWebインターフェースです:ロック画面、ホーム画面(ランチャー)、通知パネル、ダイヤラー、連絡先、SMSクライアント。すべてのシステムアプリケーションは同じOpen Web Appsです。開発者は、マニフェストに対応するアクティビティハンドラーを登録することで、標準のカメラやキーボードを独自のアプリに置き換えることができます。
// 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アプリは、HTMLファイル、CSS、JavaScript、画像、マニフェストを含むZIPアーカイブ(形式.zip、.apkではありません)です。最小限のアプリ構造には、manifest.webapp(アプリの説明)、index.html(エントリポイント)、style.css、icon.png(90×90ピクセルの正方形アイコン)が含まれます。マニフェストはW3C Manifest for Web Apps仕様に従います。
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配列で指定されます。
// 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はステータスバーを非表示にします。
KaiOSのHTML5ページは、限られた画面(通常240×320ピクセル)を考慮して標準タグを使用します。ビューポートメタタグは必須です:<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">。KaiOSはタッチイベントをサポートしていません(フィーチャーフォンにタッチスクリーンはありません)。すべてのナビゲーションはキーを介して行われます:移動にArrowUp、ArrowDown、選択にEnter、戻るにBackです。
// 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は、電話のハードウェア機能へのアクセスを提供するJavaScriptインターフェースのセットです。ほとんどのAPIはMozillaの独自拡張機能(mozプレフィックス付き)であり、通常のブラウザでは利用できません。APIを使用するには、アプリのマニフェストでprivilegedまたはcertifiedタイプである必要があります。
MozMobileConnection — ネットワーク情報:事業者、信号強度、ネットワークタイプ(4G/3G/2G)、IMEI、ローミングステータス。MozTelephony — 通話管理:発信、着信、終了、会議通話、通話ステータス。MozSms — SMS、MMSの送受信、SIMメッセージ管理。MozContacts — 電話帳の読み書き。MozBluetooth — Bluetooth管理:デバイス検出、ペアリング、ファイル転送。Push API — サーバーからのプッシュ通知の受信。
// 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を返します。
KaiOS Web APIには制限があります:通話とSMSのAPIは電話機でのみ利用可能(タブレットでは不可)、カメラは物理カメラが存在する場合のみ、Bluetoothは限定的なHSP/HFPプロファイル。Push APIにはGoogle Firebase(FCM)サーバーのサポートまたはカスタムサーバーが必要です。地理位置情報APIは、ハードウェアサポートに応じてA-GPSまたはCell IDを使用します。
| API | アプリタイプ | 利用可能性 | KaiOSバージョン |
|---|---|---|---|
| MozMobileConnection | privileged | すべての電話 | 2.5+ |
| MozTelephony | privileged | 電話のみ | 2.5+ |
| MozSms | privileged | 電話のみ | 2.5+ |
| MozContacts | privileged | すべての電話 | 2.5+ |
| MozBluetooth | certified | Bluetoothモジュール搭載 | 2.5+ |
| Geolocation API | web | GPS/Cell ID対応 | 2.5+ |
| Push API | privileged | インターネット接続時 | 3.0+ |
| WebGL 2.0 | web | GPUアクセラレーション対応 | 3.0+ |
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クラスで強調表示されます。
// 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 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は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は一部の国で有料アプリをサポートしていません(支払いはキャリア決済のみ)。アプリのサイズは2G/3Gネットワークでのダウンロード用に10MBに制限されています。アプリは50MB以上のRAMを使用してはなりません。マニフェストでの明示的な宣言なしにmozMobileConnection APIへのアクセスは禁止されています。ポリシー違反は開発者アカウントの停止につながります。
よくある質問
KaiOSは、MozillaのGecko Webエンジンに基づくフィーチャーフォン向けオペレーティングシステムです。256~512MBのRAMを搭載したデバイスで動作し、4G VoLTE、GPS、Bluetoothをサポートしています。アプリはHTML5、CSS、JavaScriptで記述されます。Counterpoint Researchによると、KaiOSは2億台以上のデバイスにインストールされています。
唯一の開発スタックはHTML5、CSS、JavaScriptです。KaiOSはC++やJavaなどのネイティブ言語をサポートしていません。すべてのアプリはW3C仕様に準拠したOpen Web Appsです。ハードウェア機能にアクセスするには、mozプレフィックス付きのMozilla Web APIが使用されます。アプリはmanifest.webappとともにZIPアーカイブとしてパッケージ化されます。
公式ストアはKaiStoreで、KaiOS Developer Portalへの登録が必要です。アプリは開発者証明書で署名され、.zip形式でアップロードされます。審査には3~5日かかります。代替チャネルとして、OEMメーカーとの契約による新規デバイスへのプリインストールがあります。KaiStoreの手数料は30%です。
KaiOSはHTML5アプリにGecko Webエンジンを使用し、256~512MBのRAMを必要とします。Android GoはDalvik/ARTでネイティブAPKを実行し、1~2GBのRAMを必要とします。KaiOSは最大30ドルのフィーチャーフォンで動作し、Android Goは50ドルからの低価格スマートフォンで動作します。KaiOSは消費電力が少なく、1回の充電での動作時間が長くなります。
主要なAPI:MozMobileConnection(ネットワーク)、MozTelephony(通話)、MozSms(SMS)、MozContacts(連絡先)、MozBluetooth(Bluetooth)、Geolocation API、Vibration API、Push API、Notification API。カメラAPIへのアクセスにはprivilegedアプリタイプが必要です。Push APIはKaiOS 3.0以降で利用可能です。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。