青い鴉のブログ

闇のプログラマーの青い鴉(ぶるくろ)が情報発信していくブログです。

JunkUtil開発の経緯について

自分の長年のJavaプログラミングで多くの障害になってきたのは、とにもかくにもライブラリの不足であった。PerlPHPなら、そこにあって当然のクラスが、メソッドが、全く用意されていないという問題であった。

通称Commons(旧Jakarta Commons、現Apache Commons)の登場で、その状況は好転に向かったかに思えたが、俺の視点から見れば、それは五十歩百歩であった。ほとんどのライブラリはベータバージョンで開発が停止しており、ドキュメントの量と和訳は不十分であり、それらの詳しい使い方を包括的に解説したサイトは一向に現れなかった。
結局、その都度英語を読み、ライブラリの使い方に習熟せねばならないというのが、それが嫌なら、車輪の再発明(無駄な努力)をせねばならないというのが、Javaプログラマの悲しい現実であった。

俺には、JavaでCatを実装するのに、Grepを実装するのに、なぜあれほどぐちゃぐちゃしたコードが必要とされるのかが分からなかった。OOPLであるということは、煩雑さを許容するということなのだろうか。俺は「それは違う」と思う。少なくとも、Javaプログラマgrepもどきを以下のようにシンプルに書くことが許されて然るべきだ。

List lines = FileUtil.readLines("readFile.txt"); //行の全読み込み
DataDumper.dumpList(System.out, new LzList(lines).grep("^B").list()); //Bで始まる行のダンプ

(これは一見無意味なプログラムだが、巨大なバッチファイルの一部だけを取り出して処理するためには、どうせこれと似たような処理が必要になる)

そうして、数年の月日が流れた。若かった俺は、世界(にいるであろう自分より優秀な人間)を信じて待った。きっとどこかの誰かが、俺の満足のいく完璧なライブラリを公開するだろうと。
実際、Apache CommonsやGoogleはそういう種類のライブラリを公開したかもしれない。しかしそれはやはり根本的に不完全で、俺が思っていた「簡単さ」を実現するものではなかった。上記のようなコードを書くことはできなかった。特にListとMapについては、まともな実装は皆無に近かった。

ファイルを一気読みしてListに格納するメソッドは現れなかった。
PerlのOptGetsのJava版は現れなかった。
PerlのConfigのJava版は現れなかった。
PerlのData::DumperのJava版は現れなかった。
ListやMapを集合論的に処理するライブラリは(それはサーブレットのパラメータを処理するための基礎となる)現れなかった。
俺の欲しいものは、結局誰も与えてくれなかった。

もう一度言おう。PerlのモジュールやPHPの関数のような、あるいはワンライナのような、それを呼べばたちまち仕事が終わる類のライブラリは、Javaには存在しない。
それはJavaJavaらしくあるために必要なことだったが、現実にコードを書くプログラマの観点から見れば、単なる悪夢でしかなく。スクリプト言語の簡単さは常に羨望の的であった。

Javaはそれでも使われ、書かれた。ServletJSPは、あるいはXMLは、Strutsという巨大で不気味なフレームワークと拡張タグに支配され、本来は不要であるはずのぐちゃぐちゃしたコードと記述で荒廃していた。
GUIアプリケーションはJFrameにメニューとショートカット・キーをつけるのもままならず、画面にはボタンが溢れていた。業務アプリでは未だにCSVの読み込みとExcelの出力(素のPOIは使いづらい)に苦労していた。

業務アプリの世界では、JavaCOBOLの置き換えに使われた。無数のバッチが書かれ、無数のWEB帳票が書かれた。デファクトスタンダード。しかしだからどうだというのだろう。Javaは依然として小回りの利かない言語であり続けた。俺は苛立った。

統失という病気になり、俺は仕事のかわりに時間を手に入れた。労働はもはや難しかった。俺は膨大な余暇を、何かで埋め合わせなければならなかった。その時間を、オープンソースに割くことは妥当なことに思われた。なぜなら、相応に年を取った俺は、世界を信じて待つことの無意味さを理解していたからである。
俺はまずなによりも、自分のために、Javaを「簡単にする」ためのコードを書くことにした。

オーケー。分かっている。JunkUtil(ジャンク・ユーティリティ)は始まったばかりのプロジェクトだ。まだ機能は洗練されておらず、まだきっと多くのクラスとメソッドを追加する余地がある。俺の掲げる理想には程遠く、未来の行先は不透明だ。

だがこのプロジェクトは既に開始された。もう後戻りはできない。その名の通りJunk(ゴミ屑)と呼ばれても、車輪の再発明と呼ばれても、かまわない。俺はJavaを少しでも「簡単」にするために、その膨大な時間を投資しようと決めたのだ。

http://sourceforge.jp/projects/junkutil/