Ubuntu日和

【第2回】Windowsに対するUbuntuの利点

UbuntuとWindowsのストアアプリ

 第1回ではUbuntuの基本的な歴史を紹介したところで、今回はWindowsに対するUbuntuの利点を紹介しよう。

 ちなみに今回の比較対象はWindowsとUbuntuのみに限定している。確かにOSと言えば他にもmacOSやBSD系、Android、iOS、Chrome OS、OpenIdiana、HaikuにGenodeなどなど、今も開発が続いているものだけでも枚挙にいとまがない。しかしながらユーザー数だけで言えばWindowsが他を圧倒していることには異論がないはずだ。そしてその多くが「多種多様なOSの中から、Windowsを選んだ」ではなく「PCを買ったらWindowsが入っていたのでそのまま使い続けている」に該当するだろう。そんな利用者に向けて「別の選択肢の可能性」を提案することが目的となる。

 まず最初にタイムがマネーな読者に向けて、結論だけ述べておこう。「一般的なユーザーが使う上で、UbuntuがWindowsに対して特別優れている点はあまりない」。もちろん個々の機能においては、「これいいよね」というものはたくさんある。たくさんあるのだが、Ubuntuの強みを語れば語るほど玄人向けの話になってしまうのだ。

 ただし「Ubuntuを初心者にはおすすめできない」かと言うとそこまででもない。まごうことなき本物の初心者であれば、おそらくUbuntuでも困ることはないはずだ。困りはしないのだが、そんなユーザーはそもそもOSを変えるという発想には至らない。困った。

 結局総論としては「まあ、うん、PC Watchの読者なら好きな方を使えばいいんじゃない?」ぐらいが関の山、となってしまう。特に本サイトであれば「あえてWindowsを使っている」という読者も多いとは思われるが、そこは「こういうユースケースならUbuntuに分があるのか」という風に読んでくれるとうれしい。

 と言うわけで、これだけハードルを下げておけば、この先も心穏やかに読んでいただけるものと思っている。だからとりあえず、その手にした刃物のようなものを置いていったん落ち着こう。お願いだから。

便利なパッケージ管理システム

 「Ubuntuの利点」としてよく挙げられるものが、最初から用意されている「パッケージ管理システム」の利便性と、インストールできるソフトウェアの充実度だ。

 昨今のソフトウェアプラットフォームにおいて、エコシステムの成長速度や充実度合いは非常に重要な要素となっている。AndroidもiOSも、いろんな便利なソフトウェアがあるからこそみんなが使っているのだし、みんなが使っているからこそ日々さまざまなソフトウェアがリリースされている。どんなに優れたOSであってもソフトウェアがなければ、ユーザーは増えない。

 Ubuntuも登場から急速にユーザーを増やせたのは、すでにDebianが構築していたソフトウェアエコシステムに便乗できたのが大きい。およそ3万個を超えるソフトウェアを、単一のUIでインストールし、必要に応じてアップデートできるのだから、単なる数字だけならWindowsにも負けていないことが分かるだろう。

 Debian/Ubuntuやその派生ディストリビューションは「debファイル」をパッケージフォーマットとして採用し、debファイルの生成・管理ツールとしてdpkgを、dpkgのフロントエンドとしてAPTシステムを採用している。このうちdebファイルとdpkgは、Debian登場間もない0.91の頃には登場している。最初のdpkgコマンドは、Debianの創始者であるIan Murdock氏が作成した単なるシェルスクリプトだった。

 ちなみに初期のdpkgスクリプトには「Greg Wettstein博士のStopALOPに触発されて」と書いてある。StopALOPは当時存在したLinux向けのパッケージ管理システムの1つで、名前を直訳すると「脱毛症の阻止」だ。当時のソフトウェアのインストールが如何に面倒な作業だったかよく分かる。その後dpkgコマンドをよりユーザーフレンドリーにしたdselectが採用され、さらにパッケージ間の依存関係を自動解決するツールであるDeity(神)が登場し、その名前は宗教的にいろいろまずいだろうということでAPT(A Package Tool)に改名し、今に至る。一時期「APT(Advanced Package Tool)」だったりもしたが、今は特に何の略でもない「APT」ということになっている。

 話を元に戻そう。APTは大まかにわけると次の3種類のコンポーネントで構築される。

  • パッケージリポジトリ
  • ソースパッケージ
  • バイナリパッケージ(debファイル)

 「パッケージリポジトリ」が各種パッケージを配布する主体だ。これはHTTPサーバーさえ用意し、APTの流儀に従ったファイルを用意すればだれでも構築できる。APTの各種ツールは、このリポジトリからHTTP経由でファイルをダウンロードする。

 ソースパッケージは、ソフトウェアのソースコードをdebファイルの流儀に従って再アーカイブしたものだ。オリジナルのソースコードに加えて、Debian/Ubuntuによるパッチファイル一式、パッケージのメタデータファイルなどが同梱されている。

 バイナリパッケージは、ソースパッケージを元にビルド等を行なったバイナリデータだ。これもdebファイルの流儀に従って構築された単なるアーカイブになっている。ソースパッケージさえ入手すれば誰でも再ビルドできる。ユーザーがソフトウェアをインストールする時にダウンロードするのはバイナリパッケージになるため、単なる「パッケージ」と呼ぶとこちらを意味することが多い。

 Ubuntuのパッケージ管理システムを利用すれば、多種多様なソフトウェアに対して次のような機能を利用できる。

  • リポジトリ上のパッケージの検索・インストール・アップデート・削除・再インストール機能
  • インストール時の依存関係の自動的な解決
  • インストールされたファイルのリストアップ
  • 古いバージョンを維持する機能
  • サードパーティのリポジトリの追加
  • OSのリリース間のアップグレード

 よってUbuntuだと「何か追加でソフトウェアをインストールしたい」となったら、まずはUbuntu Softwareやaptコマンドでソフトウェアを検索しインストールする。そのソフトウェアが依存している他のソフトウェアやライブラリもセットでインストールしてくれるので、うまくいけばコマンド1つで完了するのだ。

Ubuntuにおけるソフトウェアをインストールする代表的な手順(CLI版)
$ apt search 検索ワード
$ sudo apt install パッケージ名

 アップデートもシステムに組み込まれているのは、大きなポイントだろう。Ubuntuの場合、インストール済みのソフトウェアの更新通知はOSが担っている。ソフトウェアリポジトリに定期的に問い合わせを行ない、インストールされているソフトウェアのうち更新があったら、ユーザーに通知しアップグレードを促す。ちなみにインストール時点ではセキュリティアップデートの場合、自動的にアップグレードする設定になっているものの、このあたりは柔軟に変更可能だ。

Ubuntuにおけるソフトウェアの更新ダイアログ(GUI版)
「ソフトウェアとアップデート」ツールを起動すると、アップデート周期や適用方法などを変更できる。

 このようなことが実現できるのは、Ubuntuが「フリーソフトウェア」によって構築されていることに起因している。ソースコードが公開されており、改変や再配布の自由が保証されているため、「Ubuntu側で」ソフトウェアをUbuntuのリリースごとにビルドし、パッケージとして単一の仕組みで再配布できるからこそ、ユーザーは統一的なUIでさまざまなソフトウェアをインストールできるようになっているのだ。

 Debianはこのパッケージの品質を非常に重要視している。更新時はソースパッケージが幾人かの目でチェックされ、共通のビルドシステムによってビルドされ、リポジトリにアップロードされる。20年以上前から現在で言うところの「CI/CD」に近い仕組みを実現していたのだ。品質チェックの方法も人間だけには頼らず、静的解析ツール(lintian)等を通す前提になっている。他にもインストール・アップグレード・削除テスター(piuparts)やバイナリパッケージの自動テストツール(autopkgtest)なども使われている。

Ubuntuがリリースされたら、通常のアップデートのUIから、新しいリリースにアップグレードできる。

 よってソフトウェアの更新で問題になることはほとんどないだろう。Ubuntu自体の新バージョンへのアップグレードもほとんど問題が起きることはない。

 もちろんこれは「Ubuntuの公式のリポジトリからソフトウェアをインストールしている」場合のみに限定される。Ubuntuの場合、比較的簡単にサードパーティのリポジトリを追加できるし、追加したほうが便利な場合も多い。ただし、サードパーティのリポジトリはDebianの厳密な品質管理を経ていないことが多いため、アップデート等で困ることに遭遇しやすい。

 Ubuntuのパッケージ操作に関してはさまざまな便利機能もあるため、また別の機会に紹介しよう。

ソースコードにアクセスできる

 Ubuntuのパッケージ管理システムは、リポジトリから提供しているのがフリーソフトウェアであることからこそ、Ubuntuプロジェクトとしてその品質を担保できている。そして万人向けとは言えないものの、その「ソースコードに簡単にアクセスできる」こと自体も、Windowsとそのエコシステムに対する強力なアドバンテージだ。

 世にあるソフトウェアのほとんどは何らかの不具合を抱えている。「何もしていないのに壊れた」は現実に起こりうる事象だ。そんなときソフトウェアが悪いのか、ハードウェアが悪いのか、使い方が悪いのか、運が悪いのかを切り分けるのはそれなりに大変だ。そこでソースコードにアクセスできると、難易度がぐっと下がる。

普通に接しているだけなのに、突然キレるソフトウェアたち

 もちろんコードを理解できないといけないし、たとえ文法を理解していても「お前は何を言っているんだ」と思うコードはたくさんある。それでもブラックボックスなソフトウェアの原因追求をするよりは遥かに楽だ。

 さらに問題点と対応策がはっきりしたら自分で修正できる。修正した結果は、開発元に修正提案を投げるもよし、Ubuntu側に不具合報告する手もあるだろう。自分でパッケージに適用すれば次のバージョンを待つ必要もなくなる。

「ソフトウェアとアップデート」で「ソースコード」にチェックをいれると。「apt source パッケージ名」でソースコードを取得できる。

 これらはあくまで理想論である。大抵の人はソースコードは読まないし、読んでも自分で修正しようとは思わない。あくまでそういう選択肢があるという程度でしかない。さらに空気を吸うようにアセンブリ言語を解釈できる人なら、別にソースコードがなくても問題とはならないだろう。

 しかしながら実際にUbuntuを使ってみるとわかるが、「いざとなったらコードを読んで確認しよう」は「理不尽な不具合」に遭遇した際の心理的バリアとして非常に有用なのだ。なお、残念なことに、このバリアを多用すると時間がものすごい勢いで溶けていく。

 フリーソフトウェアの利点の1つが「複製・再配布の自由」だ。つまり今まさに動いているUbuntuシステムをストレージごと複製し、他のマシンに展開して同時に使うことも可能だし、仮想マシン上で動かしてもまったく問題ない。つまりトラブル時にとりあえず状態をまるっと保存して、別のPCで動作確認みたいな使い方もできる。

 ところでUbuntuは主にフリーソフトウェアで構築されているが、すべてがそうなっているわけではない。代表的なものが「ファームウェア」と呼ばれるバイナリデータだろう。特にネットワークデバイスやGPUはドライバーソフトウェアだけでなく、メーカーが配布するファームウェアのロードが必要になることが多い。これらのバイナリデータは再配布については問題ないものの、ソースコードが公開されているわけではないため、中身を理解したり改変することはかなり難しくなる。

 そしてファームウェアに起因する不具合は結構多い。当然のことながらUbuntuと言えどストレスフリーになれるわけではない点に注意しよう。

CLIで完結できる世界

 「Ubuntuが初心者向けって言ったって、結局GUIでは完結できずCLIでの操作が必要になるんでしょ?」とはよく言われる。そしてそれは間違っていない。

 Windowsで何かしようと思ったら、一般的にはマウスを操作しGUI(Graphical User Interface)を操作することのほうが多いだろう。それが直感的かどうかはUIの作りに依存するものの、いわゆる「黒い画面に白い文字」しか表示されないCLI(Command Line Interface)に比べたら、はるかに初心者に優しい。

 UbuntuもWindowsと同じく、基本的な操作であればGUIだけで完結できる。完結はできるのだが、何かUIが想定していない特別なことをしようと思ったら、CLIを使うことが多い。これは「CLIでないとできない」こともあるのだが、それ以上に「CLIのほうが楽にできる」という意味合いのほうが強い。

Ubuntuの設定も、おおよそGUIでなんとかなる

 言い方を変えると「CLIの操作ができるなら大抵のことは実現できる」とも言える。たとえばアプリケーションの検索やインストールなんかは前述したようにaptコマンドだけで完了するし、他にもCapsキーにCtrlキーを割り当てたいなら、端末アプリを開いて次のコマンドを実行するだけだ。

UbuntuでCapsキーをCtrlキーに割り当てる方法
$ gsettings set org.gnome.desktop.input-sources xkb-options "['ctrl:nocaps']"

 何より他人に手順を支持する場合に、コマンドの羅列で済むのがいかに便利かは、技術系の記事を読み書きする人なら理解してもらえると思う。Ubuntuを使えば使うほど、CLIの操作がいかに楽なのかが分ってくる。学習コストは高いもののそれだけの価値はあると思ってほしい。

Ubuntuの利点に対するよくある誤解

 たまに「Ubuntuの利点」としてあげられることがあるものの、実はそこまででもないものも説明しておこう。

 「Windowsに比べて軽量」というのは、Linuxを使う上で期待されるものの1つだ。Windows自体が「新しいPCで動かす」ことを前提にリリースしているため、「型落ちマシンをLinuxで再活用」という話はよく出てくる。

 Ubuntuの場合、「最新のWindows」に比べると要求スペックはそこまで高くない。Skylake以降のそこそこのマシンなら特に問題なく動くだろう。ただし「すごく軽量か」というとそうでもない。x86の32bit CPUはもうサポートしていないし、デスクトップ版ならメモリも4GiB以上は欲しいところだ。GPUも3Dアクセラレーションが欲しい。もし古いPCでも軽量に動作するOSを求めているなら、Ubuntu以外を選ぶことをおすすめする。Ubuntuの派生だとXubuntuやLubuntuが軽量性をうたっている。x86_64非対応CPUだと最近は選択肢が少なくなってきた。DebianやArch Linux 32などをカスタマイズして使うのがいいかもしれない。

 Windowsでよくある不満の1つが「リリースするたびにUIがころころ変わる」ことだという話を聞く。Ubuntuもこの点は変わらない。リリースごとにベースとなるGNOMEやUbuntu自身の変更によってUIがそれなりに変わるため、変化に対応する力が必要だ。ただしWindowsと異なり、OSやUIに対するカスタマイズ性は高いし、他の選択肢も用意されているため、気になるなら自分で変えてしまうという自由はある。

 「ウィルス対策ソフトがいらない」もコメントが難しいところだ。確かにWindows向けのウィルスはUbuntuでは動かないことが多い。しかしながらもう少し広い意味での「マルウェア」と考えた場合、Linux向けのマルウェアはそれなりに存在する。よって「まったく対応しなくていい」かというとそんなことはない。悪意のあるソフトウェアが利用できるセキュリティ脆弱性は、Ubuntuにもたくさん存在するし、そもそも人間が使うという点ではWindowsと違いはない。

 セキュリティ対策は必要であるものの、Ubuntuのデスクトップ版であればまずは「怪しいプログラムは実行しない」「怪しいサイトにはアクセスしない」「パスワードはきちんと長いものを設定する」といった当たり前の対応を心がけることが重要だ。そのほかの具体的な対策例は、別の機会に紹介することにしよう。

Windowsに対してUbuntuが弱い点

 もちろんWindows側のUbuntuに対する利点をあげればきりがない。

 まずユーザーが多い。ユーザーが多いから、日本語の情報も充実している。そして何より便利なソフトウェアや面白いゲームがたくさん存在する。最近はLibreOfficeやBlenderのようにWindowsもLinuxもサポートするツールは多いし、Microsot自身Visual Studio CodeやMicrosoft Edge、Teamsなどなど、Linux向けのGUIアプリケーションもリリースしている。さらにSteamのようにWindowsゲームがLinux上でも動くようになってきた。それでも「ちょっとしたGUIのツール」なら、Windowsのほうがまだまだ充実しているだろう。

 周辺機器も基本的にWindowsやmacOSのみがサポートされている。USBやBluetoothといった標準的な接続方法やプロトコルが充実してきたおかげで「専用ドライバー」は不要になってきたし、Ubuntuでも大抵は認識するものの、それでもそのデバイス専用の設定ツールはWindows/macOSだけというのはよくある話だ。

 ビジネス的には「スケープゴートがいる」のもWindowsの利点かもしれない。Windowsで何かトラブルが起きれば、とりあえず「Microsoftのせい」にしておけば溜飲は下がる。

 このように真面目に考えれば考えるほど、「Ubuntuでなければいけない」理由はないように見える。しかしながらUbuntuが目指しているのは「Ubuntuでもいい」と言える世界だ。今回あげた利点はもちろん、あげられなかった利点でもいいので、何か1つでも琴線に触れるものがあれば、ぜひUbuntuも試してみてほしい。

 初回から2回に渡ってUbuntuの位置づけ的な話をしたので、次からはもう少し実用的な話を始めることにしよう。