5-1ソフトウェアパッケージ
春の新作パンに合わせて、こむぎ堂ではチラシを作り直し、月ごとの売上表もきちんと付けることになりました。店のパソコンにはまだ文書や表を作るソフトが入っていません。店長は家電量販店のチラシを広げ、オフィスソフトの値段を指でなぞってうなります。「ちょっと高いな」。ミナトは自分のノートパソコンを開いて言いました。「無料で使えるオープンソースのソフトもありますよ」。ついでにミナトは、予約サイトに組み込もうと目を付けていた、予約カレンダーを表示する無料のプログラムの説明を読み返します。その最後の行に「GPL」とだけ書いてありました。無料で手に入るなら、どう使ってもよいのでしょうか。
店長が見ていた箱は、どの店や会社でも使えるように作られ、完成品として売られているソフトです。このように、利用者が自分で作るのではなく、既製品として購入して導入するソフトウェアをパッケージソフトウェアといいます。文書作成ソフトや表計算ソフトのほか、会計や給与計算のように特定の業務向けのものもあります。自社の業務に合わせて一から作るより安く、すぐに使い始められます。そのかわり、業務の進め方のほうをソフトに合わせる場面が出てきます。
お金を払わずに使えるソフトもあります。作者が対価を求めずに配っているソフトウェアをフリーウェアといいます。しばらく試してから気に入ったら代金を払う方式のソフトは、シェアウェアと呼んで区別します。フリーウェアは無料で使えても、中身のプログラム(ソースコード)まで公開されているとは限りません。ソースコードを公開し、誰でも利用・改変・再配布できるようにしたソフトウェアはOSS(オープンソースソフトウェア)と呼ばれ、ミナトが勧めたのはこちらです。OSSの決まりは5-4で見ます。
買ったソフトも配られたソフトも、そのままでは動きません。プログラムのファイルを決まった場所に置き、OSに登録し、必要な設定を済ませて、はじめて使える状態になります。この導入の作業を自動で進めるプログラムがインストーラです。画面の案内に従って「次へ」を押していけば、置き場所の決定やメニューへの登録までを片づけてくれます。
入れたソフトに、あとから機能を足すこともできます。本体に組み込んで機能を広げる、別に提供される小さなプログラムをプラグインといいます。ほぼ同じ意味でアドオン(拡張機能)という呼び方も使われます。プラグインは本体が用意した差し込み口に合わせて作られたプログラムを指すことが多く、アドオンは後付けの追加機能全般を広く指す、という程度の違いです。ブラウザに入れる広告ブロックや翻訳の機能は、どちらの名前でも呼ばれます。
チラシを作りながら、去年の売上の表を横に開いて数字を写すこともあります。画面の中に複数の作業領域(ウィンドウ)を同時に開き、切り替えたり並べたりしながら使える方式をマルチウィンドウといいます。いまのパソコンのOSでは当たり前の方式で、一つのソフトの中で複数の文書を並べることもできます。
作った文書は、ファイルとして保存されます。Microsoft Officeが標準で使う .docx(文書)、.xlsx(表)、.pptx(プレゼンテーション)の形式は、文書の中身をXMLという書式で書き、それらをまとめて一つのファイルに圧縮したものです。このファイル形式の規格をOpen XML(OOXML:Office Open XML)といい、ISO/IEC 29500として国際規格にもなっています。中身の書き方が公開されているので、ほかの会社のソフトやOSSのオフィスソフトでも開けます。OSSのオフィスソフトがもともと使う形式には、別の国際規格のODF(OpenDocument Format)があります。
5-2文書作成ソフトとプレゼンテーションソフト
ミナトはOSSのオフィスソフトを入れ、チラシの下書きを打ち始めました。店長が後ろからのぞき込みます。「この行、先頭に『。』が来てるけど、いいの?」。ミナトが一文字消すと、句点はひとりでに前の行の末尾へ移りました。
文字を入力して、編集し、見た目を整えて印刷するためのソフトを文書作成ソフト(ワープロソフト)といいます。文字の大きさや書体を変える、表を作る、写真や図を貼り込む、といった操作がまとめてできます。別のソフトで作った売上のグラフをコピーしてチラシに貼り付けるときは、コピーした内容をいったんクリップボードという一時的な置き場所に預け、貼り付け先で取り出しています。
句点が行頭に来なかったのは、文書作成ソフトが自動で文字の並びを整えたからです。句読点や閉じ括弧が行の先頭に来たり、開き括弧が行の末尾に来たりしないように、文字の送り方を調整する処理を禁則処理といいます。日本語の文書を読みやすくするための処理で、読み手は普段その存在に気づきません。
チラシの見出しは大きく、値段は太く見せたいところです。ここで、文字の形をどう記録しているかで、フォントの仕上がりが変わります。文字の形を点(ドット)の並びとして記録したものがビットマップフォントで、決まった大きさでは速くくっきり表示できますが、拡大すると点が大きくなって輪郭がぎざぎざになります。これに対し、文字の輪郭を直線や曲線の情報として記録したものがアウトラインフォントで、大きさを変えるたびに輪郭から形を描き直すので、見出しを何倍にしても縁がなめらかなままです。いまのパソコンで使う書体の多くは、アウトラインフォントです。
文字の横幅の決め方でも、フォントは二つに分かれます。「i」も「W」も同じ幅で並べるフォントが等幅フォントで、縦の桁がそろうので、プログラムや値段の一覧に向いています。文字ごとの形に合わせて幅を変えるフォントがプロポーショナルフォントで、英文の文章が詰まりすぎず空きすぎず、自然に読めます。
| 分け方 | 種類 | 特徴 |
|---|---|---|
| 形の記録のしかた | ビットマップフォント | 点の並び。拡大すると輪郭がぎざぎざになる |
| アウトラインフォント | 輪郭の線。拡大しても輪郭がなめらか | |
| 文字の横幅 | 等幅フォント | どの文字も同じ幅。桁がそろう |
| プロポーショナルフォント | 文字ごとに幅が違う。文章が自然に読める |
チラシと同じ内容を、商店街の集まりで発表することにもなりました。スライドを1枚ずつ作り、順に映しながら説明するための資料を作るソフトをプレゼンテーションソフトといいます。文字のほかに図形や写真を並べ、スライドを切り替えるときの動きも付けられます。
さらに凝って、焼き上がりの動画や店の音を入れた紹介の作品にしたいなら、別の種類のソフトが向いています。文字・画像・音声・動画といった素材を組み合わせ、一つのマルチメディアの作品として編集・制作するソフトウェアをオーサリングソフトといいます。プレゼンテーションソフトが「話し手を助けるスライド」を作るのに対し、オーサリングソフトはそれだけで見る人に届く作品を組み立てます。
5-3表計算ソフト
次は売上表です。店長がレジの日報を1か月ぶん持ってきました。「食パンが何本、バゲットが何本。これを月ごと、品目ごとに見たいんだ」。日報には、日付と品目と本数が、売れた順に何百行も並んでいます。
行と列のます目に数値や式を入れ、計算や集計、グラフ作りをするソフトを表計算ソフトといいます。ます目の一つ一つをセル、列と行で区切られたセルの集まりの一枚分をワークシートと呼びます。こむぎ堂では、4月の日報を「4月」のワークシートに、5月の日報を「5月」のワークシートに入れ、複数のワークシートを一つのファイル(ブック)にまとめることにしました。
セルの位置は、列の記号と行の番号の組み合わせで表します。A列の1行目なら「A1」、C列の5行目なら「C5」です。この表記をセル番地といいます。いくつものセルをまとめて指すときは、長方形の左上と右下のセル番地をコロンでつなぎ、「C2:C31」のように書きます。これがセル範囲で、C2からC31までの30個のセルを表します。本数の合計を出すなら、合計(C2:C31)のように、セル範囲を関数に渡します。
表計算ソフトでよく使うのが、端数を処理する関数です。食パン1斤の本体価格が345円で、消費税8%を加えた税込価格を出すとします。345×1.08=372.6円なので、1円未満をどう扱うかを決めなければなりません。
| 処理 | 考え方 | 結果 |
|---|---|---|
| 四捨五入 | 小数第1位の6は5以上なので繰り上げる | 373円 |
| 切り上げ | 端数があれば、大小に関係なく繰り上げる | 373円 |
| 切り捨て | 端数を捨てる | 372円 |
| 整数部 | 372.6以下で最大の整数を取り出す | 372円 |
指定した桁の一つ下の数字が5以上なら繰り上げ、4以下なら切り捨てる処理が四捨五入です。指定した桁より下に端数が少しでもあれば、値の大小に関係なく繰り上げる処理が切り上げで、345×1.08が372.01円だったとしても373円になります。本体価格が340円なら税込は367.2円で、四捨五入は367円、切り上げは368円と、ここで結果が分かれます。
ある数を超えない最大の整数を整数部といいます。試験で使われる表計算ソフトでは、関数の名前もそのまま「整数部」で、整数部(372.6)は372を返します。負の数では小数点以下を取り除くのと結果が違い、整数部(−3.5)は−4になります。
日報の品目は「食パン」「バゲット」と名前で並んでいます。単価は別のワークシートに表にしてあり、表の何行目・何列目かを指定すれば、そこにある値を取り出せます。このように、表の中から目当ての値を取り出す処理を表引きといいます。試験の表計算ソフトの関数「表引き」は、セル範囲の左上から数えて何行目・何列目かを指定し、その場所のセルの値を返します。表引き(A3:H11, 2, 5)なら、A3から数えて2行目・5列目のセルE4の値です。
最後に、何百行もの日報を「月ごと・品目ごと」にまとめ直します。日付・品目・本数が1行ずつ並んだ表を元に、どの項目を行に、どの項目を列に置き、何を集計するかを指定するだけで集計表を作る機能がピボットテーブルです。行に品目、列に月、値に本数の合計を置くと、次のような表ができます。
| 品目 | 4月 | 5月 | 合計 |
|---|---|---|---|
| 食パン | 620 | 580 | 1,200 |
| バゲット | 310 | 355 | 665 |
| 合計 | 930 | 935 | 1,865 |
元の日報には一切手を加えていません。行と列を入れ替えれば月ごとの品目の表に、本数を売上金額に替えれば金額の表に、すぐ組み替えられます。食パンが4月から5月に40本減り、バゲットが45本増えていたことは、何百行の日報を眺めていても見えませんでした。
5-4OSSのライセンス
売上表ができたところで、ミナトは予約サイトの話に戻りました。カレンダーのプログラムを少し直して組み込み、出来がよければ、同じ予約サイトを隣の八百屋にも分けてあげるつもりでいます。相棒に聞くと、こう返ってきました。「分けるなら、その『GPL』という文字が何を求めているかを先に読もう」
OSSは、無料で配られているだけのソフトではありません。ソースコードが公開されていること、再配布を制限しないこと、そして作者が動作を保証しない(無保証)こと、といった特徴があります。そのうえで、OSSごとに「どう使い、どう配ってよいか」の条件が、利用許諾の文書(ライセンス)にまとめられています。無料かどうかではなく、このライセンスが使い方を決めます。
ライセンスの考え方で、まず押さえたいのがコピーレフトです。OSSを改変して作ったもの(派生物)を配るときにも、元と同じライセンスの条件を引き継がせる、という考え方です。自由に改変してよい、ただし配るときは受け取った人にも同じ自由を渡しなさい、という約束で、著作権(コピーライト)の仕組みを使って自由を守るところから、この名前が付きました。
コピーレフトを採る代表的なライセンスがGPL(GNU General Public License)です。GPLのプログラムを改変したり、自分のプログラムに組み込んだりして配布するなら、配った相手にソースコードを渡せるようにし、配布物全体をGPLの条件で提供しなければなりません。ミナトがカレンダーのプログラムを直して予約サイトに組み込み、八百屋に配れば、予約サイトのソースコードも八百屋に渡せる状態にすることになります。
ここから基本情報!GPL以外のライセンス
すべてのOSSのライセンスがGPLほど強く条件を引き継がせるわけではありません。BSDL(BSDライセンス、Berkeley Software Distribution License)は、著作権の表示と無保証の断り書きを残せば、改変したものをソースコードを公開せずに配ってもよい、という緩やかなライセンスです。コピーレフトの性質を持ちません。
中間にあたるのが、Mozilla Foundationが定めたMPL(Mozilla Public License)です。MPLの条件はファイル単位でかかります。MPLのファイルを改変したら、そのファイルのソースコードはMPLで公開しますが、自分で新しく書いたファイルは別のライセンスにしてよく、一つの製品の中で混ぜられます。このように範囲を限ったコピーレフトを、弱いコピーレフトと呼ぶこともあります。
Apache Software Foundationが定めたApacheライセンスは、BSDLと同じく緩やかな側のライセンスです。改変や商用での利用、ソースコードを公開しない配布も認めます。そのかわり、ライセンスの文書や著作権の表示を添えること、改変したファイルには改変したことを書いておくことを求め、特許の利用許諾についての決まりも持っています。
一つのソフトウェアを、複数のライセンスの中から選べる形で提供する方式がデュアルライセンスです。よくあるのは、GPLのようなOSSのライセンスと、有償の商用ライセンスの二本立てです。ソースコードを公開できる人はOSSの条件で無償で使い、自分の製品のソースコードを公開したくない会社は商用ライセンスを買う、と使い分けられます。
| ライセンス | コピーレフト | 公開を求められる範囲 |
|---|---|---|
| GPL | あり(強い) | 組み込んだ配布物の全体 |
| MPL | あり(弱い) | 改変したMPLのファイルだけ |
| BSDL | なし | 求められない(著作権の表示は残す) |
| Apacheライセンス | なし | 求められない(ライセンスと表示を添え、改変を明記する) |
基本情報の範囲ここまで
ライセンスのほかにも、OSSを使う前に考えておくことがあります。OSSは無保証なので、動かなくなったときに問い合わせる窓口が決まっていません。自分で調べて直すか、OSSを扱う会社と有償のサポート契約を結ぶかで、手間か費用のどちらかがかかります。また、多くの人に使われているOSSは、脆弱性が見つかるとすぐ直されることが多い一方で、更新が止まったOSSを使い続けると、見つかった脆弱性が直されないまま残ります。シラバスでは、こうした考慮点として安全性と信頼性が挙げられています。安全性は、脆弱性への対応が続いていて安心して使えるか、信頼性は、期待どおりに動き続け、不具合が出ても開発が続いて直されていくかを見る観点です。
5-5代表的なOSS
「で、OSSって、オフィスソフトのほかにどんなのがあるの」と店長が聞きました。ミナトは自分のノートパソコンの中を見せます。ブラウザも、メールのソフトも、OSSでした。相棒が付け加えます。「予約サイトの裏側のデータベースも、たぶんOSSだよ」
OSSは、OS、通信のソフト、オフィスソフト、データベース管理システム、さまざまな応用ソフトと、あらゆる分野にあります。身近な例では、Webページを見るブラウザのFirefoxと、電子メールのソフトのThunderbirdがあります。どちらもMozillaのもとで開発されてきたOSSで、Thunderbirdはいまも、Mozillaの系列の組織で開発が続いています。
データベース管理システム(データを整理して保存し、取り出すためのソフト)にも、広く使われるOSSがあります。MySQLは、Webサイトの裏側で長く使われてきた関係データベース管理システムで、OSSのライセンスと商用ライセンスの両方で提供されています。PostgreSQLも同じく関係データベース管理システムのOSSで、標準のSQLへの準拠の度合いが高く、機能が豊富なことで知られます。
OSSを作っているのは、一つの会社とは限りません。世界中の開発者や企業が、インターネットを通じてソースコードを持ち寄り、不具合の報告や修正を重ねて育てていきます。こうした開発の集まりをオープンソースコミュニティと呼びます。ミナトがOSSで困ったことを公開の掲示板に書けば、コミュニティの誰かが答えてくれることもあります。
ここから基本情報!OSSで組むWebシステムとライブラリ
Webシステムを動かすのに必要なソフトを、OSSだけでそろえる組み合わせがよく使われます。OSにLinux(5-6で見ます)、WebサーバにApache(Apache HTTP Server)、データベースにMySQL、プログラムを書く言語にPHPを使う構成を、頭文字をとってLAMPといいます。データベースをPostgreSQLに替えた構成がLAPPです。四つともOSSなので、ソフトウェアの購入費をかけずにWebシステムを動かす環境をそろえられます。
プログラムに組み込んで使う小さなプログラムも、OSSで配られています。ソースコードが公開され、誰でも自分のプログラムに組み込んで使える、機能ごとにまとめたプログラムの集まりをオープンソースライブラリといいます。ミナトが見つけたカレンダーのプログラムも、その一つです。組み込むときは、ライブラリごとのライセンスがそのまま自分のプログラムの配り方に関わってきます。
言語ごとに、ライブラリを集めて配る置き場もあります。Perlという言語のライブラリ(モジュール)を集め、検索して入手できるようにしたアーカイブがCPAN(Comprehensive Perl Archive Network)です。PHPには、再利用できるコードを集めて配る仕組みとしてPEAR(PHP Extension and Application Repository)があります。
ブラウザの中で動くJavaScriptにも、よく知られたオープンソースライブラリがあります。Webページの要素の書き換え、クリックなどのイベントの処理、ページを読み込み直さずにサーバと通信するAjaxを、短い記述で書けるようにしたものがjQueryです。
基本情報の範囲ここまで
5-6UNIX系のOSS
予約サイトを作った業者に問い合わせると、サーバのOSは「Linuxです」という返事でした。店長は首をかしげます。「パソコンのOSって、WindowsかMacじゃないの」
パソコンではあまり見かけなくても、サーバの世界ではOSSのOSが広く使われています。その代表がLinuxです。1991年にLinus Torvaldsが開発を始め、GPLで公開されているUNIX系のOSで、Webサーバやクラウドのほか、家電やスマートフォンの中にも入っています。UNIX系とは、1969年にアメリカのベル研究所で生まれたOSのUNIXと同じ考え方や使い方を受け継いだOSのことです。
ここから基本情報!LinuxとBSD系のOS
Linuxという名前は、厳密にはOSの中核の部分だけを指します。プロセスやメモリの管理、ハードウェアの制御といった、OSのいちばん内側の働きを受け持つ部分がLinuxカーネルです。カーネルだけでは使いにくいので、ふつうは、カーネルに操作のためのツールやアプリケーションを組み合わせ、インストーラを付けた「ディストリビューション」の形で配られます。業者が「Linux」と言ったのも、正確にはどれかのディストリビューションのことです。
UNIX系のOSSには、Linuxとは別の流れもあります。カリフォルニア大学バークレー校で作られたUNIXの系統、BSDから派生したOSです。FreeBSDは、性能と安定性からサーバなどで使われてきたBSD系のOSです。NetBSDは、できるだけ多くの種類のハードウェアで動くこと(移植性)を重んじています。OpenBSDは、セキュリティを特に重んじて設計・開発されています。三つとも、BSDライセンスやそれに近い緩やかなライセンスで配られています。
では、何をもって「UNIX」と名乗れるのでしょうか。UNIXの商標を管理し、UNIXと名乗るための仕様の標準化や認証を進めている業界団体がThe Open Groupです。1996年に、X/OpenとOSF(Open Software Foundation)という二つの団体が統合して生まれました。LinuxやFreeBSDは、UNIXに似た作りの「UNIX系」のOSであって、その認証を受けた「UNIX」とは区別されます。
基本情報の範囲ここまで
店長の疑問への答えは、OSには使われる場所の向き不向きがある、ということでした。人が画面を見て操作するパソコンではWindowsやmacOSが多く、画面の前に誰もいないまま一日中動き続けるサーバではLinuxなどのUNIX系のOSが多く使われています。
5-7大規模データを扱うOSS
ピボットテーブルを気に入った店長が、こんなことを言い出しました。「商店街の全部の店の売上を集めたら、もっと面白いことが分かるかな」。ミナトは相棒に聞きます。「何十万行になっても、表計算ソフトでいけるかな」。相棒の答えは「そこから先は、1台のコンピュータで足りるかどうかの話になるね」でした。
こむぎ堂の1か月の日報なら、表計算ソフトで十分に扱えます。ところが、大きな通販サイトのアクセス記録や、街中のセンサが送り続けるデータは、1台のコンピュータの記憶装置にも処理能力にも収まりません。こうした大量のデータは、データを何台ものコンピュータに分けて置き、同時に処理させる方法で扱います。この分野でも、中心になっているのはOSSです。
ここから基本情報!分散処理のOSS
大量のデータを複数のサーバに分けて保存し、分けたまま処理するためのOSSのフレームワークがApache Hadoop(Hadoop)です。データを複数台にまたがって保存する分散ファイルシステム(HDFS)と、処理を複数台に分担させる仕組みで成り立っています。
Hadoopの処理の考え方がMapReduceです。データを分けて各サーバで同じ処理をする段階をMap、その結果を項目ごとに集めて一つにまとめる段階をReduceといいます。商店街の3店の売上記録を、3台のサーバで1店ずつ数える例で見てみます。
| 段階 | サーバ1(こむぎ堂) | サーバ2(喫茶店) | サーバ3(八百屋) |
|---|---|---|---|
| Map(店ごとに数える) | 食パン 620、バゲット 310 | 食パン 40 | バゲット 15 |
| Reduce(品目ごとに足す) | 食パン 620+40=660、バゲット 310+15=325 | ||
Mapの段階は、3台が互いを待たずに同時に進められます。店が300に増えても、サーバを増やせば一台あたりの仕事量はほとんど変わりません。この性質が、データが増えても処理を続けられる理由です。
MapReduceは、段階ごとに途中の結果をディスクに書き出すので、同じデータに何度も処理をかける分析では時間がかかります。そこで、途中のデータをメモリ上に置いたまま処理を進めて速くした分散処理のフレームワークがApache Spark(Spark)です。
ここまでの二つは、たまったデータをまとめて処理する使い方です。これに対し、次々に流れ込んでくるデータを、来たそばから扱いたい場面もあります。大量のデータを、送り手から受け手へリアルタイムに受け渡す分散型のメッセージングシステムがApache Kafka(Kafka)です。送り手はデータを話題(トピック)ごとに出版(パブリッシュ)し、受け手は必要な話題を購読(サブスクライブ)して受け取ります。流れ込んでくるデータ(ストリームデータ)を、複数台でリアルタイムに分散処理するシステムにはApache Storm(Storm)があります。レジを通るたびに売上を数え直し、在庫が減ってきた品目をその場で知らせる、といった処理に向いた仕組みです。
基本情報の範囲ここまで
商店街の数十店の1か月分の売上なら、まだ表計算ソフトとピボットテーブルで足ります。店長の思いつきは、もう少し小さく、こむぎ堂の表から始めることになりました。
週末、新しいチラシが刷り上がりました。OSSのオフィスソフトで作ったので、ソフトの代金はかかっていません。売上表はピボットテーブルで月別にまとめ、食パンが減ってバゲットが伸びていることも分かりました。予約サイトのカレンダーは、ライセンスを読んだうえで、改変したものを配るときにソースコードの公開を求めない、緩やかなライセンスの別のプログラムに替えました。これなら、八百屋に分けるときにも条件で困りません。店長はチラシの束をレジ横に置いて言います。「無料のソフトにも、ちゃんと約束ごとが付いているんだね」。ミナトはうなずきながら、元のプログラムのGPLのページを閉じずにおきました。八百屋が予約サイトのソースコードを見たいと言い出したら、どちらを選ぶのがよかったのか、まだ決めきれていなかったからです。