Snapcraftガイド(Linux)
このガイドでは、Ubuntuソフトウェアセンターを含む、あらゆるSnapcraft環境向けにElectronアプリケーションをパッケージする方法について説明します。
背景と要件
より広範なLinuxコミュニティと共に、Canonicalはsnapcraft
プロジェクトで、一般的なソフトウェアインストールに関する多くの問題を解決することを目指しています。Snapsは、必要な依存関係を含み、自動更新を行い、システム変更なしに主要なLinuxディストリビューションすべてで動作するコンテナ化されたソフトウェアパッケージです。
.snap
ファイルを作成する方法は3つあります。
- Electron Forgeまたは
electron-builder
を使用します。どちらのツールも、すぐに使用できるsnap
サポートが付属しています。これが最も簡単なオプションです。 electron-installer-snap
を使用します。これは@electron/packager
の出力を使用します。- 既に作成された
.deb
パッケージを使用します。
場合によっては、snapcraft
ツールをインストールする必要があります。特定のディストリビューションにsnapcraft
をインストールする手順については、こちらをご覧ください。
electron-installer-snap
の使用
このモジュールは、snapパッケージの構築に範囲が限定されているという点で、electron-winstaller
や同様のモジュールのように動作します。以下を使用してインストールできます。
npm install --save-dev electron-installer-snap
ステップ1:Electronアプリケーションのパッケージ化
@electron/packager(または同様のツール)を使用してアプリケーションをパッケージ化します。最終的なアプリケーションで不要なnode_modules
を必ず削除してください。実際に必要のないモジュールはアプリケーションのサイズを大きくするためです。
出力は、おおよそ次のようになるはずです。
.
└── dist
└── app-linux-x64
├── LICENSE
├── LICENSES.chromium.html
├── content_shell.pak
├── app
├── icudtl.dat
├── libgcrypt.so.11
├── libnode.so
├── locales
├── resources
├── v8_context_snapshot.bin
└── version
ステップ2:electron-installer-snap
の実行
PATH
にsnapcraft
があるターミナルから、唯一の必須パラメータ--src
を指定してelectron-installer-snap
を実行します。これは、最初のステップで作成したパッケージ化されたElectronアプリケーションの場所です。
npx electron-installer-snap --src=out/myappname-linux-x64
既存のビルドパイプラインがある場合は、electron-installer-snap
をプログラムで実行できます。詳細については、Snapcraft APIドキュメントを参照してください。
const snap = require('electron-installer-snap')
snap(options)
.then(snapPath => console.log(`Created snap at ${snapPath}!`))
@electron/packager
でのsnapcraft
の使用
ステップ1:サンプルSnapcraftプロジェクトの作成
プロジェクトディレクトリを作成し、以下をsnap/snapcraft.yaml
に追加します。
name: electron-packager-hello-world
version: '0.1'
summary: Hello World Electron app
description: |
Simple Hello World Electron app as an example
base: core22
confinement: strict
grade: stable
apps:
electron-packager-hello-world:
command: electron-quick-start/electron-quick-start --no-sandbox
extensions: [gnome]
plugs:
- browser-support
- network
- network-bind
environment:
# Correct the TMPDIR path for Chromium Framework/Electron to ensure
# libappindicator has readable resources.
TMPDIR: $XDG_RUNTIME_DIR
parts:
electron-quick-start:
plugin: nil
source: https://github.com/electron/electron-quick-start.git
override-build: |
npm install electron @electron/packager
npx electron-packager . --overwrite --platform=linux --output=release-build --prune=true
cp -rv ./electron-quick-start-linux-* $SNAPCRAFT_PART_INSTALL/electron-quick-start
build-snaps:
- node/14/stable
build-packages:
- unzip
stage-packages:
- libnss3
- libnspr4
既存のプロジェクトにこの例を適用する場合
source: https://github.com/electron/electron-quick-start.git
をsource: .
に置き換えます。electron-quick-start
のすべてのインスタンスをプロジェクトの名前に置き換えます。
ステップ2:snapのビルド
$ snapcraft
<output snipped>
Snapped electron-packager-hello-world_0.1_amd64.snap
ステップ3:snapのインストール
sudo snap install electron-packager-hello-world_0.1_amd64.snap --dangerous
ステップ4:snapの実行
electron-packager-hello-world
既存のDebianパッケージの使用
Snapcraftは、既存の.deb
ファイルを取得して.snap
ファイルに変換できます。snapの作成は、ソース、依存関係、説明、その他のコアビルディングブロックを記述するsnapcraft.yaml
ファイルを使用して構成されます。
ステップ1:Debianパッケージの作成
まだ.deb
パッケージがない場合は、electron-installer-snap
を使用する方が、snapパッケージを作成する簡単な方法かもしれません。ただし、Electron Forge、electron-builder
、またはelectron-installer-debian
など、Debianパッケージを作成するための複数のソリューションが存在します。
ステップ2:snapcraft.yamlの作成
使用可能な構成オプションの詳細については、snapcraft構文に関するドキュメントを参照してください。例を見てみましょう。
name: myApp
version: '2.0.0'
summary: A little description for the app.
description: |
You know what? This app is amazing! It does all the things
for you. Some say it keeps you young, maybe even happy.
grade: stable
confinement: classic
parts:
slack:
plugin: dump
source: my-deb.deb
source-type: deb
after:
- desktop-gtk3
stage-packages:
- libasound2
- libnotify4
- libnspr4
- libnss3
- libpcre3
- libpulse0
- libxss1
- libxtst6
electron-launch:
plugin: dump
source: files/
prepare: |
chmod +x bin/electron-launch
apps:
myApp:
command: bin/electron-launch $SNAP/usr/lib/myApp/myApp
desktop: usr/share/applications/myApp.desktop
# Correct the TMPDIR path for Chromium Framework/Electron to ensure
# libappindicator has readable resources.
environment:
TMPDIR: $XDG_RUNTIME_DIR
ご覧のとおり、snapcraft.yaml
は、electron-launch
というファイルを起動するようにシステムに指示しています。この例では、アプリのバイナリに情報を渡します。
#!/bin/sh
exec "$@" --executed-from="$(pwd)" --pid=$$ > /dev/null 2>&1 &
または、strict
制約でsnap
をビルドする場合は、desktop-launch
コマンドを使用できます。
apps:
myApp:
# Correct the TMPDIR path for Chromium Framework/Electron to ensure
# libappindicator has readable resources.
command: env TMPDIR=$XDG_RUNTIME_DIR PATH=/usr/local/bin:${PATH} ${SNAP}/bin/desktop-launch $SNAP/myApp/desktop
desktop: usr/share/applications/desktop.desktop
オプション:デスクトップキャプチャの有効化
デスクトップのキャプチャには、Waylandプロトコルを使用する一部のLinux構成でPipeWireライブラリが必要です。PipeWireをアプリケーションにバンドルするには、ベーススナップがcore22
以降に設定されていることを確認してください。次に、pipewire
という名前のpartを作成し、アプリケーションのafter
セクションに追加します。
pipewire:
plugin: nil
build-packages: [libpipewire-0.3-dev]
stage-packages: [pipewire]
prime:
- usr/lib/*/pipewire-*
- usr/lib/*/spa-*
- usr/lib/*/libpipewire*.so*
- usr/share/pipewire
最後に、PipeWire用にアプリケーションの環境を構成します。
environment:
SPA_PLUGIN_DIR: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/spa-0.2
PIPEWIRE_CONFIG_NAME: $SNAP/usr/share/pipewire/pipewire.conf
PIPEWIRE_MODULE_DIR: $SNAP/usr/lib/$CRAFT_ARCH_TRIPLET/pipewire-0.3