日本 KDE ユーザ会 塙 様,
株式会社アスキー 様のご厚意により,
書籍 "KDE プログラミング入門" を
ブックレビューコーナー にご献本いただきました.
この本のレビューをして頂くべく,
Linux Users ML
や本サイトにおいて
公募
を行い,
これにご希望頂いた方々より感想などをレビュー記事にまとめていただきました.
ここに, レビューアの方々から寄せられたレビュー記事を公開します. (原稿到着順)
日本 KDE ユーザ会 塙 様, 株式会社アスキー 様および レビューアの皆様のご厚意に感謝いたします.
なお, 以下のレビューは初版を対象としています.
識者は CUI 中心でも十分に仕事をこなして行けるでしょうが, GUI 中心の OS しか見た事が無く, ワープロ, 表計算止まりの殆どのユーザにとっては, CUI は受け入れ難いものでしょう. 今後, Linux においても GUI の基盤が整えられて行く事は間違いなく, その時に仕事に必要なアプリケーションを何を用いて用意するのか. これは多種多様な選択肢を持つ Linux では開発者の悩みの種となります.
本書は, KDE (Qt) を選択肢の一つに加えるに当たって, 必要な知識を読者に与えてくれます. また, KDE (Qt) の世界に一歩を踏み入れようとする者にとって, 適切な足がかりとなるでしょう. しかし KDE (Qt) を利用し開発するに当たっては, 本書以外の情報収集手段を必要とするでしょう. 本書はいわゆる Inside 本では無く, あくまでも題名どおり, 入門書なのです.
現在, 書店に出回っているプログラミング入門書の一部には, 前置きが長く, 一番大切なプログラミング解説が希薄なものが見受けられます. 本書では, 前述のような駄本とは異なり, 前置きは最低限に押さえてあります. 「これだけで大丈夫なのだろうか」と最初は心配になるぐらいです. しかし必要な情報の URL や参考書は各ページ下部の注釈に記載されていますので大丈夫. 9 割以上をプログラミング入門に費やしてあり, 好感が持てます. また説明文が人間的に書かれているので, 動作の仕組みや組み方がイメージしやすく, 初心者に配慮された文章でした.
段階的に例題アプリケーションの機能を増やして行く事で, プログラミングの説明を行う手法は良く見受けられます. 本書も同様です. 段階的に機能を増やして行く際に必要なメソッドのみ記述されています. 限られた紙面という事も有り, 全体のプログラムを記載していないのでしょうが, 逆に C++, Qt のオブジェクト指向プログラミングの特徴を捉えるという面から見ると, 良い方法だと思います.
残念ながら, 本書に掲載されている例は Qt の 1.42 をベースに開発されたとあります. 「日本 KDE ユーザ会」を見てみると現時点 (2000/11/25) で は, 2000/11/13 の Qt-2.2.2 が最新のようです. 差分情報は所々に記載されていますし, フレームワークは変わっていないようですので, 問題は無いのでしょう. しかし入門書をひもとく側としては, 漠然とした不安が残ります.
入門書には無くてはならない例題ですが, 本書では「巡回セールスマン問題 (TSP)」と「大洪水アルゴリズム (GDA)」を視覚的に表示する為の アプリケーションを例題としています. もちろんアルゴリズムの解説が主題ではないので, それらの情報は最小限度に留めていますが この例題では今後アプリケーションを開発して行こうとする者にとっては, 例題と自作アプリケーションとのつながりが感じにくいので、 もう少し汎用的な題材の方が良かったでしょう。
章立てが分かりやすく, 順番も適当と思いますが、 各章のまとめが無い為に, 後に本書を参考資料として用いる場合、文章を再読する必要があります。 ある程度の分量を読み流して理解する事は難しいので各章毎のまとめをつくるか, もしくは巻末にまとめをつくって参照ページ数を入れて欲しかった.
本書は GUI プログラミングに興味のある人すべてにお勧めできる本です. 自分は C 言語と GTK を少し触った程度の知識しか持っていませんが, それでもプログラミングの知識さえ持っていれば多少苦労しますが理解できると思いました.
QT 及び KDE は C++ を使って書かれており, 本書でも C++ で解説してあります. C++ というだけで身を引いてしまう人も多いと思いますし, 実際自分もそうでしたが, 本書では C++ に感じていたわかりにくさなどが感じられず, ほんの少しだけ C++ についての予備知識さえあれば理解に苦しむことはないと思いました. しかし, 予備知識すらない場合は本書に C++ の解説がまったくないので, C++ の入門書を合わせて読むなりした方が良いと思いました.
本書は KTsp というプログラムを開発する過程を通して KDE プログラミングの解説をしています. GUI プログラミングの本というと 普通は window を作るところから始まって部品部品を少しづつ解説して 最後にアプリケーションを作るというイメージがあるのだが, 本書では最初のバージョン ktsp-0.0.1 の段階で window だけでなくメニューバーなどの GUI の基礎部分や国際化, シグナルなどの 基礎的であるが, 少し難しいことまで挙げて解説しています. そのため無駄な部分が始めからほとんどないのが良かった.
また, 章を進めるごとに機能を追加する作業に焦点を当てているため, 実際のプログラマーの作業を感じることができて, 経験が少ないプログラミング初心者にはプログラムを組む実例を学ぶ良いきっかけとなって良かった.
また, 全体を通してよくある Unix の使い方などの必要のない記述自体がほとんどないのも良かった.
付録がなく, サイズが他のプログラミングの本に比べて小さく, 手軽に持ち運べるのが良かった. 授業中に机の下に隠しても読めます.
本書には CD-ROM などの付録がなく, プログラムのソースコードは全てインターネット上から落としてこないといけないのだが, その記述が最初から一切なく, 2 章でいきなり「ktsp-0.0.1.tgz をコピーして」と書いてあるので一体何の話をしているのか分からなかった. 3 章で初めて「New Riders の Web サイトから」と書いてあるが, そこでも URL などが書いてなく, 1 章にある GPL へのリンクから推測するしかなかった. たぶん原書のままにしてあると思うのだが, 普通なら訳注として訂正を入れるなり ASCII の Web にミラーしておくなりするのが当然だと思いました.
あとソースコードにファイル名を書いてないのも気になりました. ソースコードの部分部分しか書いてないのなら, ファイル名と始めの行番号があった方が便利だと思いました.
それとソースコードの解説内の誤字が目立ちました. 解説がソースコードの近くに書いてある分どちらが正しいのかよく迷いました.
KDE を扱う本がまだ少なく比べる対象があまりないのだが, KDE のプログラミングを学びたいと思っている人には, 本書は文句なく勧めることができます. また, 本書の内容が実装を中心にしているため, 初心者にこそよい刺激となる良書だと思います.
翻訳物ではあるけれども日本語で読める KDE の本は恐らく, これが最初の筈だ.
それにしても, 原著が書かれたのが KDE1.0 の頃.
原著が出版された頃には KDE1.1 となっており, 本書の出版が KDE2.0 リリース直前.
そしてこのブックレビューが公開される頃には KDE2.0.1 が出ているかもしれない.
これほどに変化の速い中で本を作ろうと言うのは大変な事なのだと,
原著者, 翻訳者他関係者の御苦労に頭が下がる思いだ.
実際, 本書の内容も, KDE2.0 では API がかなり変わってしまっている為, そのままでは適用できない部分もある (翻訳者の方々の御尽力により KDE2.0 の差分情報が付けられているが). にも関らず, 本書は読む価値があると思う.
当り前と言えば当り前のことながら 「プログラマにとっても便利な環境だから KDE アプリケーションを作る」のであって, 「とにかく KDE アプリケーションを作ろう」ではない. 本書を手にしてそんな感慨を持つ事自体間抜けな話ではある. しかし正直本書を読むまで私は, どうにも入口が分からず途方に暮れていたのである. KDE アプリケーションを作ってみたいが, 敷居が高い. いささか本末転倒気味な見方をしていたのだ.
KDE2.0 になって, KDE ライブラリはドキュメントが随分, 充実した. KDE の基礎ライブラリである Qt もドキュメントは非常に充実している. どちらのドキュメントにもチュートリアルがあって, 秀逸だ (らしい. 実際私は面倒になって途中で投げ出したから大きなことは言えない). ただし英語で, だ. 如何に充実していても, ちょっとしたプログラムを作ろうとしてあのドキュメントの塊に首を突っ込む気にはなれなかった. それはやりたい事に比べると苦労が大きすぎるように思えたのだ.
要するに気軽に日本語で読めるものが必要だったのである. 幸いにして Qt については日本語の入門書が 2 冊も出ていて, 取り敢えず Qt で何かを作るのが億劫には感じなくなったところだった. そこへ, この本だ. まさに渡りに船だった.
本書は, チュートリアルだと言って良いと思う. 1 つのアプリケーションを単純な機能から拡張して作り上げていく. その過程で KDE の機能を学んで行く. とすれば, ドキュメントに含まれているチュートリアルとどう違うのか?
濃いのである.
巡回セールスマン問題というのが教材として適当かどうかは分からない. しかし著者はこの問題を面白がっている. だから, 最大公約数的な公式チュートリアルの教材と異なり, 説明に勢いがある. 読み物として読める.
そう, 読める, と言うことが私には有難かった. 御勉強をするように読むのは, ごめん蒙りたかった. 本書はその点, 通勤途中に電車の中で読むのに最適だ (本のサイズも, A5 サイズで片手に持ちやすく手が疲れる程は重くない ―もっともこの種の他の本のお蔭で私の腕も随分強くはなっているが).
しかし, その濃さ故に, 投げ出したくなる読者も居るかもしれない. 本書の主旨からすれば巡回セールスマン問題のアルゴリズム云々は, 重要では無い (と訳者序文にもある). が, 第三章の半分以上を費し, 嬉々としてアルゴリズムの説明を繰り広げられると, さすがに「重要ではない」と言われても, はいそうですか, と読み飛ばすわけにも行かない. この辺は, 恐らく読者の評価を分ける要因になるだろう.
また, 本書は唖然とする程, チュートリアルに徹している. クラス体系の説明すらしない. KDE のアプリケーションフレームワークだって正面切っては扱わない. 四の五の言わず, こういう風に利用すれば良いだけのことだ, と. それを潔いと見るか, 物足らないと見るか.
いずれにせよ KDE のクラス体系について知りたいと思うのなら, 本書は向いていない. だが, そのお蔭で本書は却って, KDE2.x になっても十分通用する内容の本となっていると言えるのではないか? 本書の中で書かれている, 最初のアプリケーションから順に機能を追加するステップ自体は, KDE1.x でも 2.x でも変わりは無いのだから. 例え KDE3.x となっても同じように差分情報を補記して十分通じるかもしれない. 案外, KDE ですら無くても通用するかもしれない. もしクラス体系の説明なんぞをしていようものなら, こうは行かなかっただろう.
でどうだったか?
読んだ感想は, 「うむ, これなら俺にも作れそうだ」だ.
現在 KDE2.0 を使っているので, そのままではソースはコンパイルが通らない. が KDE2.0 の差分情報に従って, KDE2.0 対応版に修正する作業は面白かった. (実は, この本を読み始めた時点では, 巻末にある KDE2.0 対応版ソースはまだアップロードされていなかったので, 自分でやることにしたのである). 丁度, KDE アプリ化したいアイディアがあるので, このレビューを書き上げたら着手するつもりだ.
実を言うと, 内容に反して売り物の本としては, 配慮の欠ける点が目に付くのも事実だ.
恐らく他のレビューアの方も指摘されるだろうが, ソースコードの入手先の説明が無いのは, まずいを通りこして呆れてしまう不備だ. 本文中, 何度も "New Riders" のサイトからダウンロードしろ, とあるにも関らず, URL を明記した箇所は無い. p.27 の脚注に GPL 全文の入手先として書かれている URL が実はそれなのだが, 気が付かない読者が居ても不思議は無い. (巻末の KDE1.91 対応ソースの URL の先が空だったので KDevelop のメーリングリストで指摘させて頂いたところ, 翻訳者の方々に対応頂き 11 月 24 日現在では, ソースコードが公開されている. しかしこの辺については出版元が配慮して告知等を行うべきだと思う).
また本文中のソースコードの引用にミスが若干ある.
特に p.174 のソースの誤りは致命的だ.
「入門」としては, こうしたミスは決して看過出来ないと思う.
KDE アプリケーションをこれから作ろうと考えていて, その入口を探しあぐねているのなら, 本書はお薦めだ.
それにしても, 面白いチュートリアルと言うのは, 恐らくは読者を選ぶに違いない. 最大公約数的でないから面白い, となれば 色々なチュートリアルが各々読者を獲得しても良いように思う. KDE2.0 を最初からターゲットとした本 (メニューやツールバーには XMLUI を使い, automoc の代わりに am_edit を使う等) もあったら嬉しい.
それに日本発のものがあればもっと嬉しい. となれば, 今度はこの訳者の面々による入門書も読んでみたいと言うのは贅沢な望みだろうか?
最近は翻訳の仕事が忙しくてプログラミングとはとんとご無沙汰していますが, 評者もかつては職業プログラマでした. 仕事に占める Windows プログラムの割合は年と共に増え続け, 最後の方は 9 割以上 Windows になってしまいましたが, 今から何か作るなら, できたら Windows よりは Linux を始めとするフリーな環境にしたいと考えています. 考えてはいるのですが, VC++ や Delphi に甘やかされた体ではつい腰が引けてしまい, 「まあ Kylix が出たら何か作ろうか」とか言いわけモードに入ってしまうという次第です. こうした「ぐうたらな予備軍」の背中を押してくれることを期待して, 本書をひもときました.
しかし, 本書は KDE の入門書ではなく, KDE プログラミングの入門書であることを, 最初から思い知らされました. KDE についての紹介やインストールの方法などは, 実にあっさりしたもので, あっと言う間にサンプル・コードの解説に入ってしまいます. Linux で何かの開発環境をインストールした経験が無ければ, これだけの記述だとちょっと途方に暮れてしまうでしょう (その割に, tar のオプションについて説明があったりするところが, ちょっとチグハグな気もしますが).
肝心のサンプル・コードがどこにあるのかも説明が無く, 何だか突き放されたような気分で紙面のリストを追うことになります (サンプル・コードについては, ずっと後になってから, New Riders のサイトからダウンロードしろという説明が出てきますが, その New Riders って一体何なの? という感じで, とにかく初心者には訳が分からないまま話が進んで行きます).
ちなみに, 今時珍しく, 本書には CD-ROM が付属していません. コスト以外にも色々 (たぶん正当な) 理由があるのでしょうが, 「××については○○の FTP サーバから入手可能である」と言われたら, 「じゃあ今度取りに行こう」と思って, そのままになってしまう評者のような人間もいます. ネットから何かを取ってくるのは結構面倒なものです. 本書が KDE の普及と啓蒙を狙っているのなら, たとえ原書に付いていなくても翻訳書には (たとえ古くても良いから) 必要物すべてをパックして, それだけ突っ込めば取り敢えずの開発環境が整うような CD-ROM を添付して欲しかったと思います. もっとも, そこまで面倒見ないとダメな奴になど用は無いという考えなら, それはそれで良いかも知れません.
また, 意識的かどうか分かりませんが, 本書には GNOME に対する言及がまったくありません. たいていの Linux 本に「FreeBSD と比べてどうなんだ?」という節があるように, 開発者の視点から見た GNOME との比較が書かれているかと思ったのですが, ちょっと残念でした.
サンプル・コードとしては, いわゆる巡回セールスマン問題が取り上げられています. ここで, 数学嫌いなアプリケーション・プログラマは 2 つめの壁に突き当たることになります. 訳者は「巡回セールスマン問題自体は重要ではない」と言っていますが, 一応ちゃんと読んでおかないと, 計算集約的なロジック部分と GUI 部分の間のインタラクションという構図が見えてこないと思います. ここで, KDE の要諦である「シグナルとスロット」の具体的な使い方を習得することになるのですが, 例によってあっさりした記述なので, 斜め読みしていると本書のエッセンスに気付かずに通り過ぎてしまいかねません. 後は, 代表的なウィジェットの使用法と, 情報の永続化, テキストデータの国際化/地域化といったところが, 本書で解説されている主なトピックです.
本書は, すでに Linux で開発を行っており, KDE についても多少の知識はあるが, 実際に使う上で何かまとまったサンプル (それも日本語の説明付きの) が欲しいと思っているプログラマのための本です. そういう観点で見れば, 一通り具体的なアプリケーションの枠組みを示してくれる良書だと思います. 本書のキャッチコピーは, 決して「ぐうたら」な人間の背中を押してやろうというのではなく, 勤勉な Linux プログラマに「ぐうたら」になる方法を伝授するという主旨だったわけです. 従って, 冒頭で述べたような勝手な期待を持って読むと「やっぱり Kylix が出るまで待とうか」になってしまうので, 本書を開くのは KDE の開発環境を整えてからにすべきでしょう.
応募時の公約には反しますが, 訳者がプロの翻訳家ではないことを考え, 翻訳の質については評価を差し控えます. これよりひどい仕事をしているプロの翻訳家はいくらでもいるとだけ言っておきましょう. ただ, 本書のキーワードとして「ぐうたら」という訳語を選定したセンスには疑問を感じます. この語には「役立たず, ろくでなし」といった語感が強く伴うからです. 訳者は序文で「決して悪い意味ではない」と書いていますが, 勝手に日本語の意味を変えてもらっては困ります. ことさらに受けを狙わず, 「不精 (者)」のような無難な訳語を選択して欲しかったところです (こういうスタイルを好むコミュニティ向けの書籍なのだと言われればそれまでですが).
原稿未着