electron/docs-translations/jp/tutorial/desktop-environment-integration.md

14 KiB
Raw Blame History

デスクトップ環境の統合

異なるオペレーティングシステムは、それぞれのデスクトップ環境でデスクトップに統合されたアプリケーション用に異なる機能を提供します。例えば、Windows アプリケーションではタスクバーのジャンプバーリストにショートカットをおけ、Macではドックメニューにカスタムメニューをおけます。

このガイドでは、Electron APIでデスクトップ環境にアプリケーションを統合する方法を説明します。

通知 (Windows, Linux, OS X)

3つのオペレーティングシステム全てで、アプリケーションからユーザーに通知を送る手段が提供されています。通知を表示するためにオペレーティングシステムのネイティブ通知APIを使用しするHTML5 Notification APIで、Electronは、開発者に通知を送ることができます。

var myNotification = new Notification('Title', {
  body: 'Lorem Ipsum Dolor Sit Amet'
});

myNotification.onclick = function () {
  console.log('Notification clicked')
}

オペレーティングシステム間でコードとユーザ体験は似ていますが、細かい違いがあります。

Windows

  • Windows 10では、通知はすぐに動作します。
  • Windows 8.1 と Windows 8では、Application User Model IDで、アプリへのショートカットはスタートメニューにインストールされます。しかし、スタートメニューにピン止めをする必要がありません。
  • Windows 7以前は、通知はサポートされていません。 しかし、Tray APIを使用してバルーンヒントを送信することができます。

通知にイメージを使うために、通知オプションの icon プロパティにローカルのイメージファイル(pngが望ましい)を設定します。 正しくない、またはhttp/httpsの URLを設定した場合でも、通知は表示されますが、イメージは表示されません。

new Notification('Title', {
  body: 'Notification with icon',
  icon: 'file:///C:/Users/feriese/Desktop/icon.png'
});

その上で、bodyの最大サイズは250文字であることに留意してください。Windowsチームは、通知は200文字にすることを推奨しています。

Linux

通知は、libnotifyを使用して送信されます。デスクトップ通知仕様に対応したデスクトップ環境上Cinnamon、Enlightenment、Unity、GNOME、KDEなどで通知を表示できます。

OS X

通知は、そのままOS Xに通知されます。しかし、通知に関するAppleのヒューマンインターフェイスガイドライン英語版を知っておくべきです。

通知は、256バイトサイズに制限されており、制限を超えていた場合、通知が破棄されます。

最近のドキュメント (Windows と OS X)

Windows と OS Xは、ジャンプリストやドックメニュー経由で、アプリケーションが開いた最近のドキュメント一覧に簡単にアクセスできます。

JumpList:

JumpList Recent Files

Application dock menu:

最近のドキュメントにファイルを追加するために、app.addRecentDocument APIを使用できます:

app.addRecentDocument('/Users/USERNAME/Desktop/work.type');

app.clearRecentDocuments API を使用して、最近のドキュメント一覧を空にできます:

app.clearRecentDocuments();

Windows 留意点

Windows で、この機能を使用できるようにするために、アプリケーションにドキュメントのファイルタイプのハンドラーを登録すべきです。さもなければ、ジャンプリストに表示されません。Application Registrationで、登録しているアプリケーションをすべて見れます。

ユーザーがジャンプリストからファイルをクリックしたとき、アプリケーションの新しいインスタンスは、コマンドライン引数にファイルのパスを渡して開始します。

OS X 留意点

ファイルが最近のドキュメントメニューからリクエストされた時、 app モジュールの open-file イベントが発行されます。

ドックメニュー (OS X)のカスタマイズ

通常アプリケーションで使用する共通機能用のショートカットを含める、ドック用のカスタムメニューをOS Xでは指定できます。

Dock menu of Terminal.app:

カスタムドックメニューを設定するために、OS Xのみに提供されている app.dock.setMenu APIを使用できます。

const electron = require('electron');
const app = electron.app;
const Menu = electron.Menu;

var dockMenu = Menu.buildFromTemplate([
  { label: 'New Window', click: function() { console.log('New Window'); } },
  { label: 'New Window with Settings', submenu: [
    { label: 'Basic' },
    { label: 'Pro'}
  ]},
  { label: 'New Command...'}
]);
app.dock.setMenu(dockMenu);

ユーザータスク (Windows)

Windowsでは、ジャンプリストの Tasks カテゴリでカスタムアクションを指定できます。 MSDNから引用します。

アプリケーションでは、プログラムの機能とユーザーがプログラムを使用して実行する可能性が最も高い主な操作の両方に基づいてタスクを定義します。タスクを実行するためにアプリケーションが起動している必要がないように、タスクは状況に依存しないものにする必要があります。また、タスクは、一般的なユーザーがアプリケーションで実行する操作の中で、統計上最も一般的な操作です。たとえば、メール プログラムでは電子メールの作成や予定表の表示、ワード プロセッサでは新しい文書の作成、特定のモードでのアプリケーションの起動、アプリケーションのサブコマンドを実行することなどです。一般的なユーザーが必要としない高度な機能や、登録などの 1 回限りの操作によって、メニューがわかりづらくなることがないようにしてください。アップグレードやキャンペーンなどの販売促進用の項目としてタスクを使用しないでください。

タスク一覧は静的なものにすることを強くお勧めします。アプリケーションの状態や状況に関係なく、タスク一覧は同じ状態にすることをお勧めします。リストを動的に変更することも可能ですが、ユーザーはターゲット一覧のこの部分が変更されると考えていないので、ユーザーを混乱させる可能性があることを考慮してください。

Internet Explorerのタスク:

IE

実際のメニューであるOS Xのドックメニューとは異なり、ユーザーがタスクをクリックしたとき、Windowsではユーザータスクはアプリケーションのショートカットのように動作し、プログラムは指定された引数を実行します。

アプリケーション用のユーザータスクを設定するために、app.setUserTasks APIを使用できます:

app.setUserTasks([
  {
    program: process.execPath,
    arguments: '--new-window',
    iconPath: process.execPath,
    iconIndex: 0,
    title: 'New Window',
    description: 'Create a new window'
  }
]);

タスクリストをクリアするために、app.setUserTasks をコールし、配列を空にします。

app.setUserTasks([]);

アプリケーションを閉じた後もユーザータスクは表示されていてるので、アプリケーションをアンインストールするまではタスクに指定したアイコンとプログラムのパスは存在し続けてる必要があります。

サムネイルツールバー(縮小表示ツールバー)

Windowsでは、アプリケーションウィンドウのタスクバーレイアウトに、指定のボタンを縮小表示ツールバーに追加できます。アプリケーションのウィンドウを元のサイズに戻したりアクティブ化したりすることなく、主要なコマンドにアクセスできるようにします。

MSDNからの引用:

このツール バーは、単純に、使い慣れた標準的なツール バー コモン コントロールです。最大で 7 個のボタンが配置されます。各ボタンの ID、イメージ、ツールヒント、および状態は構造体で定義され、その後タスク バーに渡されます。アプリケーションでは、現在の状態での必要に応じて、縮小表示ツール バーのボタンの表示、有効化、無効化、非表示を実行できます。 たとえば、Windows Media Player の縮小表示ツール バーでは、再生、一時停止、ミュート、停止などの、標準的なメディア トランスポート コントロールを提供できます。

Windows Media Playerの縮小表示ツールバー:

player

アプリケーションに縮小表示ツールバーを設定するために、BrowserWindow.setThumbarButtonsを使えます:

const BrowserWindow = require('electron').BrowserWindow;
const path = require('path');

var win = new BrowserWindow({
  width: 800,
  height: 600
});
win.setThumbarButtons([
  {
    tooltip: "button1",
    icon: path.join(__dirname, 'button1.png'),
    click: function() { console.log("button2 clicked"); }
  },
  {
    tooltip: "button2",
    icon: path.join(__dirname, 'button2.png'),
    flags:['enabled', 'dismissonclick'],
    click: function() { console.log("button2 clicked."); }
  }
]);

縮小表示ツールバーボタンをクリアするために、 BrowserWindow.setThumbarButtons をコールして配列を空にします:

win.setThumbarButtons([]);

Unity ランチャーショートカット (Linux)

Unityでは、.desktop ファイルの修正を経由してランチャーにカスタムエントリーを追加できます。Adding Shortcuts to a Launcherを参照してください。

Audaciousのランチャーショートカット:

audacious

タスクバーの進行状況バー (Windows & Unity)

Windowsでは、タスクバーボタンは、進行状況バーを表示するのに使えます。ウィンドウを切り替えることなくウィンドウの進行状況情報をユーザーに提供することができます。

Unity DEは、ランチャーに進行状況バーの表示をするのと同様の機能を持っています。

タスクバーボタン上の進行状況バー:

Taskbar Progress Bar

Unityランチャーでの進行状況バー:

Unity Launcher

ウィンドウに進行状況バーを設定するために、BrowserWindow.setProgressBar APIを使えます:

var window = new BrowserWindow({...});
window.setProgressBar(0.5);

Windowのファイル表示 (OS X)

OS Xでは、ウィンドウがrepresented fileを設定でき、タイトルバー上にファイルのアイコンを表示でき、タイトル上でCommand-クリックまたはControl-クリックをすると、パスがポップアップ表示されます。

ウィンドウの編集状態を設定できるように、このウィンドウのドキュメントが変更されたかどうかをファイルのアイコンで示せます。

Represented file ポップアップメニュー:

ウィンドウにrepresented fileを設定するために、BrowserWindow.setRepresentedFilenameBrowserWindow.setDocumentEdited APIsを使えます:

var window = new BrowserWindow({...});
window.setRepresentedFilename('/etc/passwd');
window.setDocumentEdited(true);