http://sf.net/(sf.net)でも採用されているViewCVS(sourceforge.net)。私はずっとcvsweb(fh-heilbronn.de)を使っていると思っていたのだが実はそうではないらしい。ダウンロードしてみた。
このViewCVSはPythonで書かれている。しかもCGIはもちろん、standaloneでも動かせるというスグレモノだった。standaloneはおもしろい。-rでリポジトリを指定して動かすとWebサーバが上がって、そのリポジトリを見ることができる。しかも-gオプションをつけるとGUIのコントロールまでついてきちゃう。ログはApacheのに似たのがstdout(かstderr)に出てくる。
この実装力(?)は何からくるものなのだろう。普通はそこまで作らないでしょ。ソースを軽く眺めてみたのだけど、Webサーバを動かす力はBaseHTTPServerモジュールの威力のように見える。単にGETやPOSTのハンドラを定義するだけでWebサーバになるわけだから。GUIはおなじみTkinterだ。こいつには私も何度もお世話になっている。Tkだからネイティブ(?)のGUIと比べると今となってはショボい感じもあるが、WindowsでもLinuxでもほとんど同じように動いてくれる。
つまりPythonの偉いところはモジュールが最初からついてくるところだろう。Rubyもだんだんそうなるらしいが、PythonやPHPのモジュール力の強さはどうしようもないところまできている。Rubyけっこう好きだけど使わないのはそういうところだ。いくらPythonのスレッドがタコっぽくても、気づくとPythonを使ってしまう。あとPythonはモジュールの調査もしやすいんだよね。起動してimportほげほげ、help(ほげほげ)でだいたい使い方がつかめる。
それに、Pythonは性悪説の言語だから悪人でも安心して使えるというのもある。おれ、プログラマとしてはけっこう邪悪だからね。
(追記) 2003-08-08 11:02
Python 性悪説というのはあまりメジャーな説ではないらしい。
(追記) 2003-08-08 09:55
Pythonは追加モジュールもソースをとってきてpython setup.py bdist_rpmだけでRPMのパッケージができてしまうものが多い。Rubyは1.4時代は次のようなテンプレートからspecファイルを作っていた。今は1.8だから、もう使えないかもしれないが。
%define name ---rewrite-me--- %define ver x.x.x %define rel 1 %define prefix /usr Summary: ---rewrite-me--- Name: %name Version: %ver Release: %rel Vendor: Watanabe Packager: Watanabe T <XXXXXXXX@XXXX.XXX> Copyright: GPL ---checkit--- URL: http://www.rewrite-here.neto/ Group: Foo/Bar Source: http://www.rewrite-here.neto/%{name}-%{ver}.tar.gz BuildRoot: /var/tmp/%{name}-root NoSource: 0 # PreReq: hogehoge %description (from README) ---rewrite-me--- %prep %setup %build ruby extconf.rb if [ "$SMP" != "" ] ; then make -j $SMP else make fi %install rm -rf $RPM_BUILD_ROOT make install libdir=$RPM_BUILD_ROOT%{prefix}/lib/ruby/1.4 \ archdir=$RPM_BUILD_ROOT%{prefix}/lib/ruby/1.4/${RPM_ARCH}-linux %clean rm -rf $RPM_BUILD_ROOT %files %defattr(-,root,root) %doc README* COPYING ChangeLog TODO doc* %{prefix}/lib/ruby/*/*.rb %{prefix}/lib/ruby/*/*/*