Tizenは、SamsungとLinux Foundationが開発したLinuxベースのオープンソースオペレーティングシステムです。Galaxy Watchスマートウォッチ、Samsung Smart TV、家電製品、IoTデバイスで使用されています。ネイティブアプリケーションはC/C++、ウェブアプリケーションはHTML5/JavaScriptで開発します。Tizen SDKはエミュレータとVisual Studio CodeベースのIDEを提供します。Tizen Associationによると、エコシステムは2億台以上のデバイスを擁しています。
重要なポイント
Tizenは、SamsungとLinux Foundationが監修するオープンソースオペレーティングシステムです。最初の商用リリースTizen 1.0は2012年に行われました。システムはLinuxカーネルをベースとしており、さまざまなデバイスタイプ向けに独自のフレームワークアーキテクチャを使用しています:Tizen Mobile(スマートフォン — プロジェクトは2017年に終了)、Tizen Watch(時計)、Tizen TV(テレビ)、Tizen IoT(スマートホーム)。
2021年以降、Samsungは主にウェアラブルデバイスとテレビでTizenを使用しています。2021年以前のすべてのGalaxy WatchスマートウォッチはTizenで動作していました(Galaxy Watch、Watch Active、Watch 3)。Galaxy Watch 4以降、SamsungはOne UI Watchを搭載したWear OSに移行しましたが、Tizenは既存のデバイスとテレビ向けに引き続きサポートされています。Samsung(Tizen Ecosystem Report、2025年)によると、世界中で1億8000万台以上のテレビにTizen TVがインストールされています。
Tizenの重要な特徴は、2つの開発パラダイムをサポートしていることです:最大のパフォーマンスを提供するネイティブアプリケーション(C/C++)と、迅速な開発を可能にするウェブアプリケーション(HTML5、CSS、JavaScript)です。どちらのタイプもTizen Device APIにアクセスできます。これはBluetooth、NFC、Wi-Fi、センサー、カメラ、マルチメディアを操作するためのラッパーです。
Tizen 2.3(2014年)— Samsung Zスマートフォン向け初の安定版。Tizen 3.0(2017年)— 改善されたマルチタスク、Vulkanサポート、64ビットアーキテクチャ。Tizen 4.0(2018年)— 再設計されたフレームワーク、NPUでのAIアクセラレーションサポート。Tizen 5.5(2020年)— AVPlay 2.0、WebAssembly、改善されたレンダリングを備えたTizen TV。Tizen 6.0(2022年)— デバイス上のML推論サポート、IoT向けMatterプロトコル。
| Tizenバージョン | 年 | デバイス | 主な革新 |
|---|---|---|---|
| 2.3 | 2014 | スマートフォン | Samsung Zでの初の商用リリース |
| 3.0 | 2017 | スマートフォン、時計 | Vulkan、64ビット、Galaxy Watch |
| 4.0 | 2018 | 時計、テレビ、IoT | AIフレームワーク、Tizen TV 2019 |
| 5.5 | 2020 | テレビ、IoT | AVPlay 2.0、WebAssembly、WebGL改善 |
| 6.0 | 2022 | テレビ、IoT | ML推論、Matterプロトコル |
Tizenアーキテクチャは、多層構造を持つモジュール方式で構築されています。最下層は、エネルギー効率とリアルタイムタスク(テレビとオーディオ用のRT_PREEMPT)のパッチが適用されたLinuxカーネルです。カーネルの上にはハードウェア抽象化レイヤー(HAL)があり、カメラ、センサー、Bluetooth、Wi-Fi、NFC、ディスプレイドライバー(DirectFBまたはWayland経由)への統一アクセスを提供します。
Core Frameworkレイヤーには以下が含まれます:Application Framework(アプリケーションライフサイクル管理)、UI Framework(EFL — UI用のEnlightenment Foundation Libraries、DALi — ゲームとアニメーション用の3Dエンジン)、Multimedia Framework(GStreamerとMediaCodec経由のカメラ、オーディオ、ビデオ)、Network Framework(Bluetooth、Wi-Fi、NFC、HTTP、WebSocket)、Security Framework(SELinux、Smack、Tizen特権システム)。
Service Layerはシステムサービスを提供します:Application Manager(起動、停止、マルチタスク)、Package Manager(アプリケーションのインストール/アンインストール、.tpkおよび.wgt形式)、Location Manager(GPS、Wi-Fi測位、ジオフェンス)、Sensor Manager(加速度計、ジャイロスコープ、気圧計、心拍数モニター)、Context Manager(ユーザー活動認識:歩行、走行、睡眠)。
Tizenはウェブアプリケーション向けにDevice APIを提供します。これはネイティブAPIと同じ機能へのアクセスを提供するJavaScriptインターフェースです。APIはモジュールに分割されています:Application API、Bluetooth API、Calendar API、Call History API、Contact API、Content API、Data Control API、Download API、Gallery API、Media Controller API、Message API、NFC API、Notification API、Power API、Push API、System Info API、Time API、Web Setting API。
Tizenネイティブアプリケーションは、.tpk形式(Tizen Package Kit)の実行可能ファイルにコンパイルされます。主要言語はGCCまたはClangコンパイラを使用したC++11/14です。開発はTizen StudioまたはTizen拡張機能を備えたVisual Studio Codeで行います。ネイティブアプリケーションは、仲介者なしでEFL、DALi、GStreamer、およびすべてのシステムAPIに直接アクセスでき、最大のパフォーマンスを保証します。
ネイティブアプリケーションには、tizen-manifest.xmlファイル(AndroidManifest.xmlに類似)、1つ以上の共有ライブラリ(.so)、リソース(画像、フォント、ローカライゼーション)が含まれます。ライフサイクルはapp_event_cbを通じて管理されます:APP_EVENT_CREATE、APP_EVENT_RESUME、APP_EVENT_PAUSE、APP_EVENT_DESTROY。UIは、ウィンドウアプリケーションにはEFL(Edje + Elementary)、3DグラフィックスにはDALiを使用して構築されます。
// EFL UIを使用したC++のTizenネイティブアプリケーション
#include <app.h>
#include <efl_extension.h>
#include <dlog.h>
typedef struct appdata {
Evas_Object *win;
Evas_Object *conform;
Evas_Object *label;
} appdata_s;
static void
win_delete_cb(void *data, Evas_Object *obj, void *event_info) {
ui_app_exit();
}
static void
create_base_gui(appdata_s *ad) {
// Tizenウィンドウの作成
ad->win = efl_add(EFL_UI_WIN_CLASS, nullptr,
efl_ui_win_typename_set(efl_add(EFL_UI_WIN_CLASS, nullptr), "tizen-hello"));
// ウィンドウのタイトル
efl_text_set(ad->win, "Hello Tizen");
efl_event_callback_add(ad->win, EFL_UI_WIN_EVENT_DELETE_REQUEST, win_delete_cb, ad);
// Conformant — ウェアラブルデバイス用の標準Tizenコンテナ
ad->conform = efl_add(EFL_UI_CONFORMANT_CLASS, ad->win);
efl_content_set(ad->win, ad->conform);
efl_gfx_size_hint_weight_set(ad->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
// テキストラベル
ad->label = efl_add(EFL_UI_LABEL_CLASS, ad->conform);
efl_text_set(ad->label, "Tizenへようこそ!");
efl_content_set(ad->conform, ad->label);
// ウィンドウの表示
efl_gfx_size_hint_weight_set(ad->label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
efl_gfx_size_hint_align_set(ad->label, EVAS_HINT_FILL, EVAS_HINT_FILL);
}
static void
app_get_resource_cb(void *data) {
// アプリケーションリソース取得ハンドラ
appdata_s *ad = (appdata_s *)data;
create_base_gui(ad);
}
static bool
app_create_cb(void *data) {
// アプリケーション作成時に呼び出される
appdata_s *ad = (appdata_s *)data;
create_base_gui(ad);
return true;
}
int
main(int argc, char *argv[]) {
appdata_s ad = {0,};
ui_app_lifecycle_callback_s event_callback = {0,};
event_callback.create = app_create_cb;
return ui_app_main(argc, argv, &event_callback, &ad);
}ネイティブのTizen Hello Worldアプリケーションは、UIにEFL(Enlightenment Foundation Libraries)を使用します。ui_app_mainはライフサイクルコールバックを受け入れるTizenのエントリポイントです。efl_addはWin→Conformant→Labelの階層を通じてUIオブジェクトを作成します。EFL UIはEdje複合モデルに基づいています。テーマの記述は.edcファイルに記述され、.edjにコンパイルされます。
tizen-manifest.xmlファイルはネイティブアプリケーションの設定です。id(逆ドメイン形式の一意識別子)、package(パッケージ名)、version、label(表示名)、author、descriptionを指定します。特権はAPIアクセスを宣言します:http://tizen.org/privilege/bluetooth、http://tizen.org/privilege/location、http://tizen.org/privilege/camera。特権を指定しないと、対応するAPIの呼び出しはSECURITY_ERRエラーになります。
Tizenウェブアプリケーションは、.wgt形式(W3C Widget)にパッケージ化されたHTML5アプリケーションです。開発は通常のウェブサイト作成と同じですが、グローバルtizenオブジェクトを介したTizen Device APIへの追加アクセスがあります。ウェブアプリケーションは、WebKitエンジン(Tizen 2.x-4.x)またはChromium(Tizen 5.5+)に基づく独自のWeb Runtime(WRT)プロセスで実行されます。
ウェブアプリケーションには、index.html(エントリポイント)、config.xml(W3C Widget Configuration)、CSS、JavaScript、画像が含まれます。config.xmlファイルはKaiOSのmanifest.webappに類似しています。必須フィールドには、widget(id、version、時計の場合はheight/width)、name、description、authorが含まれます。Device APIの権限はtizen:privilege要素を通じて指定されます。CSP(Content Security Policy)セクションはスクリプトソースを制限します。
// Tizen Watchウェブアプリケーション用config.xml
<?xml version="1.0" encoding="UTF-8"?>
<widget xmlns="http://www.w3.org/ns/widgets"
xmlns:tizen="http://tizen.org/ns/widgets"
id="com.example.heartrate"
version="1.0.0"
height="360" width="360">
<tizen:application id="com.example.heartrate"
package="com.example.heartrate"
required_version="4.0"/>
<name>心拍計</name>
<description>Galaxy Watchでの心拍測定</description>
<author>Developer</author>
<tizen:privilege name="http://tizen.org/privilege/healthinfo"/>
<tizen:privilege name="http://tizen.org/privilege/sensor"/>
<tizen:profile name="wearable"/>
<tizen:content-security-policy>
default-src 'self'; script-src 'self'; style-src 'self'
</tizen:content-security-policy>
</widget>最小限のconfig.xmlスニペットは主要な要素を示しています:idとバージョンを持つwidget、円形の時計画面用のウェアラブルプロファイルを持つtizen:application、healthinfoとsensor API用のtizen:privilege、およびアプリケーションパッケージからのみコンテンツの読み込みを制限するContent Security Policy。
// Tizen Watchウェブアプリケーション:心拍数モニタリング
const HeartRateMonitor = {
hrSensor: null,
isMonitoring: false,
async init() {
try {
// HRMセンサーサポートの確認
const sensors = tizen.sensorservice.getAvailableSensors();
if (!sensors.includes('HRM')) {
throw new Error('HRMセンサーが見つかりません');
}
// 心拍数センサーへのアクセス取得
this.hrSensor = tizen.sensorservice.getDefaultSensor('HRM');
console.log('HRMセンサーが初期化されました');
} catch (err) {
console.error('初期化エラー:', err.message);
}
},
startMonitoring() {
if (!this.hrSensor) return;
this.isMonitoring = true;
this.hrSensor.startSensor({
interval: 1000, // 毎秒測定
callback: {
onsuccess: (data) => {
const heartRate = data.heartRate;
document.getElementById('hr-value').textContent = heartRate;
this.updateDisplay(heartRate);
},
onerror: (err) => {
console.error('センサーエラー:', err.message);
}
}
});
},
stopMonitoring() {
if (this.hrSensor && this.isMonitoring) {
this.hrSensor.stopSensor();
this.isMonitoring = false;
}
},
updateDisplay(heartRate) {
// 360x360の円形画面での心拍数表示
const canvas = document.getElementById('hr-canvas');
const ctx = canvas.getContext('2d');
ctx.clearRect(0, 0, 360, 360);
// 円形心拍数インジケーター
ctx.beginPath();
ctx.arc(180, 180, 120, 0, 2 * Math.PI);
ctx.strokeStyle = '#ff4444';
ctx.lineWidth = 8;
ctx.stroke();
}
};
document.addEventListener('DOMContentLoaded', () => {
HeartRateMonitor.init().then(() => {
HeartRateMonitor.startMonitoring();
});
});HeartRateMonitorアプリケーションは、Tizen Sensor APIを使用してGalaxy WatchのHRMセンサーにアクセスします。tizen.sensorservice.getDefaultSensor('HRM')で心拍数センサーを取得し、startSensorで1秒間隔で測定を開始します。360×360のキャンバスが円形インジケーターを描画します。これは円形のTizen時計画面の典型的なUIパラダイムです。
Tizen Watchには独自のUI機能があります:円形画面(Galaxy Watchでは360×360ピクセル)、ナビゲーション用の物理ベゼル(ロータリーベゼル)、3つのハードウェアボタン(Home、Back、Custom)。開発者は円形領域にインターフェースを適応させる必要があります。角の要素は切り取られる可能性があります。Circle UIは、円形画面向けの既製コンポーネントを備えたSamsungのライブラリです。
Rotary Bezel — Galaxy Watchの画面周囲の物理リングで、リストのナビゲーション、音量調整、ズームのために回転します。Tizenでは、回転イベントはrotarydetectorまたはEFLのedgeシグナルを通じて処理されます。ベゼルの各ノッチは回転角度(0-360度)を持つイベントを生成します。ウェブアプリケーションはrotarydetector API(tizen.rotarydetector)を通じてベゼルを処理します。
// Tizen WatchでのRotary Bezel処理
class RotaryNavigation {
constructor() {
this.currentAngle = 0;
this.sections = document.querySelectorAll('.rotary-section');
this.currentSection = 0;
this.init();
}
init() {
// ベゼル回転イベントの購読
const detector = tizen.rotarydetector;
detector.addEventListener('rotarydetector', (event) => {
// event.angle — 現在の角度(0-360)
// event.direction — 'cw'(時計回り)または'ccw'(反時計回り)
this.handleRotation(event);
});
// rotarydetectorの有効化
detector.start();
}
handleRotation(event) {
const delta = event.delta; // 角度変更
this.currentAngle += delta;
// 方向と移動の判定
if (delta > 0) {
// 時計回りの回転 — 次の要素
this.currentSection = Math.min(this.currentSection + 1, this.sections.length - 1);
} else {
// 反時計回りの回転 — 前の要素
this.currentSection = Math.max(this.currentSection - 1, 0);
}
this.updateUI();
}
updateUI() {
this.sections.forEach((el, i) => {
el.classList.toggle('active', i === this.currentSection);
el.scrollIntoView({ block: 'nearest', behavior: 'smooth' });
});
}
destroy() {
tizen.rotarydetector.removeEventListener('rotarydetector');
tizen.rotarydetector.stop();
}
}
// アプリケーション読み込み時の初期化
document.addEventListener('tizen-rotary-ready', () => {
const nav = new RotaryNavigation();
});RotaryNavigationクラスは、tizen.rotarydetector.addEventListenerを通じてrotarydetectorイベントを購読します。ベゼルが回転されると、方向(cw/ccw)と角度デルタが計算されます。現在のセクションはactiveクラスでハイライトされます。rotarydetector.start()は必須です。これがないとイベントは生成されません。destroy()は購読を解除して検出器を停止し、メモリリークを防ぎます。
Tizen Watchインターフェースは以下のコンポーネントを使用します:RotarySelector(ベゼル制御の円形リスト)、CircularList(円形スクロール付きリスト)、RadialMenu(円状に配置されたアイコン付きラジアルメニュー)、EdgePanel(画面端からスライドするパネル)、CircleProgressBar(円形進行状況インジケーター)。すべてのコンポーネントは360×360の解像度に最適化され、画面の角がないことを考慮しています。最小タッチターゲットサイズは48ピクセルです。
Tizen TV — 独自のSDKとエミュレータを備えたSamsung Smart TV向けプラットフォーム。TVアプリケーションは2つのタイプに分かれます:ウェブアプリケーション(HTML5/JS)とネイティブアプリケーション(C/C++)。TV向けウェブアプリケーションはより高速で簡単に開発できますが、ネイティブアプリケーションはビデオとゲームでより優れたパフォーマンスを提供します。Tizen TVはナビゲーションにD-pad付きリモコンを使用します。
AVPlay API — ビデオ再生のためのTizen TVの主要API。H.264、H.265(HEVC)、VP9、AV1形式をサポート。2024年以降のテレビでは8Kまでの解像度。AVPlay APIはハードウェアデコード、HDR10+、Dolby Atmos、字幕、複数のオーディオトラックを提供します。play()、pause()、stop()、seekTo(position)、setDisplayRect()で制御します。ストリームはローカルファイルまたはHLS/DASH URLです。
// AVPlay APIを使用したTizen TV用ビデオプレーヤー
class TizenVideoPlayer {
constructor(videoElementId) {
this.videoElement = document.getElementById(videoElementId);
this.avplay = null;
this.isReady = false;
}
async init(url) {
try {
// AVPlayの利用可能性の確認
if (typeof webapis === 'undefined' ||
!webapis.avplay) {
throw new Error('AVPlay APIを使用できません');
}
this.avplay = webapis.avplay;
this.avplay.open(url);
// テレビの全画面表示の設定
this.avplay.setDisplayRect(0, 0, 3840, 2160);
this.avplay.setDisplayMethod(webapis.avplay.AVPLAY_DISPLAY_METHOD_PLAYER);
// オーディオ設定(Dolby Atmos、対応している場合)
this.avplay.setStreamingProperty('ADAPTIVE_INFO', JSON.stringify({
width: 3840,
height: 2160,
bitrate: 25000000
}));
this.avplay.prepareAsync(
() => {
this.isReady = true;
console.log('動画の再生準備ができました');
},
(error) => {
console.error('準備エラー:', error);
}
);
} catch (err) {
console.error('初期化エラー:', err);
}
}
play() {
if (this.isReady) this.avplay.play();
}
pause() {
this.avplay.pause();
}
seekTo(positionMs) {
this.avplay.seekTo(positionMs);
}
setSubtitle(url, encoding) {
this.avplay.setStreamingProperty('SUBTITLE', JSON.stringify({
url: url,
encoding: encoding || 'UTF-8'
}));
}
}
// 使用法
const player = new TizenVideoPlayer('video-area');
player.init('https://example.com/stream.m3u8');
player.setSubtitle('https://example.com/subs.vtt', 'UTF-8');TizenVideoPlayerクラスはAVPlay APIの動作を示します。webapis.avplay.open()はメディアストリーム(ローカルまたはHLS/DASH)を開きます。setDisplayRectはレンダリング領域を設定します。テレビでは通常3840×2160のフルスクリーンです。prepareAsyncはコールバック付きの非同期準備です。AVPlayはADAPTIVE_INFOによるアダプティブビットレートとSUBTITLEプロパティによる字幕をサポートします。
Samsung Galaxy Store — Tizen(時計、テレビ、IoT)向け公式アプリストア。デベロッパー登録はSamsung Developersプログラムを通じて無料です。デベロッパーはSamsung証明書で署名された.tpk(ネイティブ)または.wgt(ウェブ)形式でアプリケーションをアップロードします。モデレーションには2〜5営業日かかります。Galaxy Storeは190カ国で利用可能です。
Tizenでは、Samsung証明書を使用したアプリケーションのデジタル署名が必要です。プロセス:Samsung Certificate ManagerでAuthor Certificateを生成し、ストア用のDistributor Certificateを作成し、Tizen Studio(Build Signed Package)でパッケージに署名します。証明書はデベロッパーアカウントにリンクされます。署名がない場合、アプリケーションはDeveloper Modeが有効な開発デバイスにのみインストールできます。
Galaxy Storeは有料アプリケーション(最初の$10,000までは30%の手数料、その後25%)、サブスクリプション(25%)、Samsung Adsによる広告、Samsung IAPによるアプリ内購入をサポートしています。TVアプリケーションにはSmart TV Premium Channelsモデルが利用可能です。最低価格は$0.99です。$100のしきい値に達すると毎月支払いが行われます。
| 要件 | ネイティブ(.tpk) | ウェブ(.wgt) |
|---|---|---|
| 言語 | C/C++ | HTML5、CSS、JS |
| UIフレームワーク | EFL、DALi、Tizen Circle UI | Circle UI(JS) |
| APIアクセス | 完全なシステム | Device API |
| パフォーマンス | 最大 | 低い(Web Runtime) |
| パッケージサイズ | 最大100 MB | 最大10 MB |
| 開始テンプレート | Tizen Native App | Tizen Web App |
よくある質問
ネイティブアプリケーションは、UIにEFLまたはDALiを使用してC/C++で記述されます。ウェブアプリケーションはTizen Device APIとともにHTML5、CSS、JavaScriptを使用します。Tizen TV向けには、Tizen .NETを通じて.NET(C#)での開発が可能です。Samsungは高性能アプリケーションにはC++、シンプルなインターフェースにはJavaScriptを推奨しています。
TizenはSamsungのハードウェアに最適化された独自のC/C++フレームワークを使用します。Wear OSはKotlin/Javaを使用したAndroidベースです。Tizenは同じハードウェアで30%少ない電力を消費しますが、ストアのアプリは少なくなっています。2021年以降、Samsungは新しい時計でWear OSに移行しましたが、Tizenは引き続きサポートされています。
Tizen TV用のウェブアプリケーションは、Tizen Device APIを使用してHTML5/JavaScriptで作成します。開発はTVエミュレータを備えたTizen Studioで行います。アプリケーションは.wgtパッケージにパッケージ化されます。主要API:AVPlay(ビデオ)、TVInfoDevice(TV仕様)、TVInputDevice(リモコン)、WebAudio(サウンド)。ナビゲーションはリモコンのD-padで行います。
Rotary Bezel — ナビゲーション用のGalaxy Watch画面周囲の物理的な回転リング。イベントはtizen.rotarydetector APIを通じて処理されます。各ノッチが回転角度と方向(cw/ccw)を持つイベントを生成します。Rotary Bezelはリストのスクロール、音量調整、ズーム、メニューナビゲーションに使用されます。
Samsung Galaxy Storeを通じて公開。デベロッパー登録は無料。アプリケーション(.tpkまたは.wgt形式)はSamsung証明書で署名されます。モデレーションは2〜5日。手数料は最初の$10,000の収益で30%、その後25%。最低価格は$0.99。$100から毎月支払い。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。