開発
Linux最先端! Snapアプリケーションを作ってみる
Yuki Ito
スマートフォン(iPhone)の仕組み・操作性がPCに逆輸入されるという流れが続いていますね。
「タッチパネルディスプレイ付きPC」
「ナチュラルスクロール」
「音声ナビゲーション(Siri/Cortana)」
スマートフォン時代以前から市場にあったものもありますが、上記のものはどれもスマートフォンが出てから見直され、成熟/PCにも浸透したものと言えると思います。
そして、「アプリ」。
これもスマートフォンから、PCに新たな流れとして取り込まれました。
ここでいう「アプリ」は、以下の特徴を持ちます。
- 「アプリストア」がある。また、インストール/削除手順が統一的であり、「アプリ」ごとに異なったりしない
- 他の「アプリ」への依存関係がなく、単体での移植性が確保されている
- サンドボックス化されている(Macアプリケーションがこの特徴を持つのは2013年になってからでした。)
スマートフォンが普及してから、上記の特徴を持つ仕組みとしてUWP(Windows)やMac App Storeなどが発表されました。
そして、Linuxでも、同様の仕組みが現在開発が続けられています。
それが“Snapアプリケーション”です。
Snapアプリケーションとは何か?
Linuxにはディストリビューションによってパッケージという概念が存在し、自分の環境に対応したバイナリを直接インターネットからダウンロードできる(= コンパイルの必要がない)方法が存在します。
しかし、パッケージはディストリビューション間での互換性が無いだけでなく、多くの場合ディストリビューションのバージョンごとに用意されている場合がほとんどです。
この「ディストリビューションの壁」「バージョンの壁」という2つの壁を超えることができるのが、Snapアプリケーションです。
対応するプロセッサとディストリビューションであれば、コマンド一つでそのアプリケーション特有のインストール作業を自動かつ環境を汚さずにできます。
また、Snappyというパッケージマネジメントツールによって簡単に管理ができます。
Snapアプリケーションを使ってみる
snapアプリケーションをインストールするには、snapコマンドを使用します。お使いのディストリビューションにない場合は、既存のパッケージマネージャからインストールできます。
hello-world
パッケージをインストールしてみます。
$ sudo snap install hello-world
インストールに成功すると、コマンドが使用可能になります。
$ hello-world
Hello World!
Snapアプリケーションを作ってみる
以降はUbuntu限定でお話を進めます。
Snapアプリケーションを作成するためには、snapcarftパッケージが必要です。
build-essentialsと一緒にインストールしましょう。
$ sudo apt install snapcraft build-essentials
ここから作成に入っていきます。作業用のディレクトリを一つ作りましょう。
$ mkdir snapcraft-test
$ cd snapcraft-test
まずプログラム本体を用意します。みんな大好きnode.jsにしましょうか。
ppap.js:
#!/usr/bin/env node
console.log("Pen-Pineapple-Apple-Pen!");
こんな感じでどうでしょうか。
次にpackage.jsonを作成します。
{
"name": "ppap",
"version": "0.0.1",
"private": true,
"bin": {
"ppap": "./ppap.js"
},
"main": "ppap.js"
}
重要なのはbin
プロパティです。npm init
コマンドでファイルを作成すると、ここを書いてくれないので注意しましょう。
最後に、snapcraft.yaml
です。
name: ppap
version: 0.1
summary: PPAP
description: Dance with you.
apps:
ppap:
command: ppap
parts:
ppap:
plugin: nodejs
source: .
pluginプロパティにnodejsと指定するだけで、snapにnodeのバイナリが組み込まれます。すごい!
インストールされているプラグインのリストはsnapcraft list-plugins
で見ることができます。
それではsnapファイルを生成してみます。
$ snapcraft
これだけです。ppap_0.1_amd64.snap
などのファイルが作成されましたか?
インストールしてみましょう。
$ sudo snap install --dangerous ppap_0.1_amd64.snap
$ ppap
どうですか? PPAPできましたか?
まとめ
他にもDocker(/LXD)を組み込んだり、プラグインを自作したりと楽しいことがいろいろできそうです。
公式のSnap Storeには誰でも自作Snapを公開することができるので、お気に入りのSnapができたら公開してみるのもいいですね!
Let’s Snapcraft!