Eyes, JAPAN Blog > Linux最先端! Snapアプリケーションを作ってみる

Linux最先端! Snapアプリケーションを作ってみる

Yuki Ito

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

ubuntusnappy-580x358

スマートフォン(iPhone)の仕組み・操作性がPCに逆輸入されるという流れが続いていますね。

「タッチパネルディスプレイ付きPC」
「ナチュラルスクロール」
「音声ナビゲーション(Siri/Cortana)」

スマートフォン時代以前から市場にあったものもありますが、上記のものはどれもスマートフォンが出てから見直され、成熟/PCにも浸透したものと言えると思います。

そして、「アプリ」

これもスマートフォンから、PCに新たな流れとして取り込まれました。

ここでいう「アプリ」は、以下の特徴を持ちます。

  • 「アプリストア」がある。また、インストール/削除手順が統一的であり、「アプリ」ごとに異なったりしない
  • 他の「アプリ」への依存関係がなく、単体での移植性が確保されている
  • サンドボックス化されている(Macアプリケーションがこの特徴を持つのは2013年になってからでした。)

スマートフォンが普及してから、上記の特徴を持つ仕組みとしてUWP(Windows)やMac App Storeなどが発表されました。

そして、Linuxでも、同様の仕組みが現在開発が続けられています。

それが“Snapアプリケーション”です。

Snapアプリケーションとは何か?

ubuntu_16-04_universalsnaps2

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

screenshot-from-2016-12-31-23-18-20

どうですか? PPAPできましたか?

まとめ

他にもDocker(/LXD)を組み込んだり、プラグインを自作したりと楽しいことがいろいろできそうです。

公式のSnap Storeには誰でも自作Snapを公開することができるので、お気に入りのSnapができたら公開してみるのもいいですね!

Let’s Snapcraft!

参考文献

Comments are closed.