ソフトウェア規模の増大に比例してインストール作業も肥大化してしまう。
問題
インストールするためには作業手順が必要。その手順を明らかにするためにはソフトウェア文脈の理解が必要。そのためには学習が必要。ただインストールしたいだけなのに一定のリテラシーを求められる。
- 楽したい!
- 楽できるツールを発見
- 楽できるツールをインストールしたい
- エラー発生…
- ツールには依存している別のツールがあると発覚。そのインストールからせねばならない
- 依存ツールは膨大。そして依存ツールが依存しているツールもあると発覚。以下無限ループ
- 依存関係を自動で解決したい
- パッケージ管理ツールを使う!
- エラー発生…
- 別のパッケージ管理ツールを使って依存ツール入手せねばならないと判明
- ツールが実行できるソフトウェアの構成について把握し、それを準備する手順について知らねばインストールすらできない状況
開発をしなくていいから十分楽はできている。しかし別の苦労が生じる。インストールするだけなのにシステム構造を把握していなければならない。読み解くための学習や思考が必要。学習コストを要する。無知のままで楽したいのに楽できない。ツールの利用者や利用頻度が減る。ツールの価値低下。または情報格差が拡大する。情報強者と情報弱者の差が大きくなり「利用者の価値の差」にまでなってしまう。「え、お前使えないの?プークスクス」。情弱に対する社会的排除が加速する。なんと由々しき事態!
状況把握
インストールする方法について把握してみる。
1. 手動インストール
- 楽したくてツールをインストールしようとする
- ツールの実行には他のツールのインストールが必要と判明
- 2が無限ネスト。多すぎて一向にインストール完了できず。余計な苦労をするだけで楽とは遠ざかる
依存ライブラリがさらに別の依存ライブラリを要しており、さらに依存ライブラリは別のライブラリに依存しており…。しかもバージョン差違によって動作しないor誤動作する。原因特定できず。ツールをインストールできないから、ツールを使った開発も進まず。開発のための環境構築すらできずに終わる。
- ツール
- 依存ライブラリA
- ...
- 依存ライブラリZ
- 依存ライブラリZ1
- 依存ライブラリZ2
- 依存ライブラリZ2a
- 依存ライブラリZ2b
- 依存ライブラリZ2a1
- ...
- 依存ライブラリZ2a1
2. パッケージ管理ツールを使う
- 手動インストールの問題を解決すべくパッケージ管理ツールが颯爽登場!
- 2を使うも実際は他のパッケージ管理ツールを駆使して依存パッケージを入手する必要が生じると判明
- パッケージ管理ツールの依存関係を知らないからどうしていいか追えずにインストールできない
- 楽するどころか余計な苦労をしただけで終わり、骨折り損のくたびれもうけ
2のとき、そのパッケージツール内における文脈だけでは解決できない依存関係が存在していることがある。たとえばPythonのPILパッケージ。入手はpipでできるが実行するにはImageMagicというツールが必要。ImageMagicはPythonより下位層で実装されている。OSのパッケージ管理ツールからでないとインストールできない。OSのパッケージ管理ツールapt-get
を使ってImageMagic
をインストールした後、Pythonのパッケージ管理ツールpip
を使ってPIL
をインストールする必要がある。文脈とその階層について理解している必要があり、それらの文脈で使うコマンドがどれなのか、どう使うのか把握しておらねば環境構築できない。インストールするだけなのに必要な知識や技術が増えてしまう。
3. 文脈ごとに存在するパッケージ管理ツールを使い分ける
- パッケージ管理ツールの依存関係を把握する
- 上位or下位パッケージ管理ツールから依存ツールをインストールする
- 上位or下位のネスト数だけ2をくりかえす
- 対象次元のパッケージ管理ツールに戻ってインストールする
- 目的のツールがインストールされる
ソフトウェアの規模が大きくなるたびにこの階層ネスト数は増えていくかもしれない。「パッケージ管理ツールを管理するツールを管理するツールを管理する...を使ってツールをインストールする」となっていく。一体いつになったらインストールできるのか。それを一発でやってくれるのが「パッケージ管理ツール」のはずなのに…。という問題については今は考えないでおく。
所感
ソフトウェア危機の一つ?ソフトウェアの複雑化ゆえに品質どころかインストールすら難しくなってしまう。インストールするために概念、構造、仕組みの把握やそれを使いこなす技術を要する。どこまでも肥大化していく。この程度のことを問題と感じているのが情弱の証なのだろう。