カテゴリー:Python

私がPythonistになれない理由

2007年6月1日 (金)

ソフトウェアの開発は、すべての開発ツールがひとつの環境に統合されている統合開発環境(IDE)で必ず行うもの、と私は思い込んでいた。

もちろんIDEの存在する前、十数年前まで、デバッグはいわゆるprintfデバッグというトレースデバッグだった。デバッグ文をC言語のprintf()関数でコンソールに出力、またはログ出力させるデバッグ法である。デバッガはよほどのことがなければ使用しなかった。アプリケーション開発にはそれで充分だった。

その後C/C++言語開発環境では、マイクロソフトのVisualC++(開発環境はVisualStudio)というIDEが登場した。これは非常に優れたIDEだった。いまでも一番優れている、と私は思う。

十数年前に登場したJava言語のIDEは、最初はJBuilder、そして今はEclipseというこれまた優秀なIDEに収斂していった。

そしていま、Javaの次世代言語は何か、ということが議論される時代になってきた。もちろんJavaは衰退しているわけではないが、もっと開発スピードアップの可能な言語が求められている。その次世代言語として、PythonとRubyが筆頭候補となっている。

先日私のPython事始で書いたように、私は最近Python言語を始めた。VisualStudio,JBuilder,Eclpiseという、優れたIDEを経験している私としては、将来を嘱望されているPython言語には同程度のIDEが存在するもの、と思い込んでいた。

どうもそうではないらしい。私はいま発売されているPython言語関連書籍をすべて買い求めて勉強したが、IDEについて記述はほとんど無し。Python付属の文字ベースデバッガについては記述はあったが、文字ベースデバッガでは私にとっては時代が逆に戻ってしまう。

ちょうどPythonのメーリングリストにもPython用IDEを探している投稿があったが、Pythonのメーリングリストのお歴々の反応は、「なぜIDEが必要なのかわからない」、「IDEではなく文字ベースで充分である。海外の著名なPython開発者もIDEは使用していない」だった。

それでは私の主義に反するので、私なりにいろいろ探した。結局、上記Java用IDEであるEclipseにPython用プラグインのPyDEVが最も適切、という結論になった。私はWEBアプリケーション開発が目的なので、Pythonプログラム以外にHTML,css,JavaScript,XML等を扱う必要があり、それらがすべて処理可能なIDEはEclipseのみだった。(Komodoは可能だが有料ソフト。EclipseとPyDEVはフリーソフト。)

ただ問題は残った。PythonによるWEB開発フレームワークであるTurboGearsを使用したときデバッグできないのである。ブレークポイントは設定できるが、実行してもそこで止まらないのである。

Pythonメーリングリストも参考にしていろいろ調べた結果、TurboGearsのデバッグにはリモートデバッグしか方法は無さそう、ということがわかった。アプリ側にデバッガコールの文を埋め込んでおき、その箇所が実行されたときデバッガとアプリが通信し、デバッガがアプリ側のスタックフレーム等にアクセスしてデバッグする、という方法である。このリモートデバッグはPyDEVプラグインにその機能は無い。上位のPyDEV EXTENSIONSにしなければならない。PyDEVはフリーソフトだがPyDEV EXTENSIONSは有料。残念だがこれしか方法は無い。この方法を採用することにした。

Pythonを主に開発する人、またはPythonオタクをPythonistと言うらしい。そしてPythonistである必要条件のひとつが、IDEを使わないで開発、またはIDE嫌い、だ。

というわけで、IDE主義者の私はPythonistになれないし、なりたくない。

そして、Windows上で動く優秀なPython用IDEが登場するまで、本格的なPython普及はあり得ない、と私は思っている。

私のPython事始

2007年5月25日 (金)

私はソフトウェア開発を生業としている。メインの開発言語はC++とJava。C++はWindowsのスタンドアローンアプリケーション開発、JavaはWebアプリケーション開発に使用している。

私は自分のソフト開発スピードは速い方だと思っている。数年前に一人で開発したJavaのWebアプリケーションの場合、空白・コメント込みのステップ数(プログラム行数)は、Javaが20万行、JSPが5万行であった。設計と総合テストは別にして、コーディングと単体テストに要した期間は約4ヶ月。それも他の仕事も行いながら、である。速いでしょ?このときはさすがに痩せたが。

その開発時、そのアプリ専用の基本ライブラリ(クラス)の作成に1ヶ月近くを要してしまった。またそのときはJavaのStrutsフレームワークを使用したがそれに対し若干の不満もあった。その経験から、もっと「お手軽」にWebアプリケーションを開発できる言語がないか、探し始めた。

「お手軽」とは言っても、オブジェクト指向であることと、実行速度がそれほど遅くないことが条件である。この条件に合致したのは、RubyとPythonの2言語であった。

早速入門書を買い求め、勉強した。私の視点での両言語の特徴は次のとおりであった。

  • Ruby
    1. オブジェクト指向言語である。
    2. 実行速度はそれほど速くない。
    3. 日本人が開発している言語なので日本語情報は多い。
    4. 日本語処理に問題はない。
    5. Webアプリ開発フレームワークとして”Ruby On Rails”が有力。これはRubyの世界的に有名なフレームワークである。
    6. 言語設計者は否定しているようだが、私の嫌いなPerl言語臭さが少し残っている。

  • Python
    1. オブジェクト指向的にも使用できる。完全なオブジェクト指向言語ではない。
    2. 実行速度は充分速い。事前に中間言語にコンパイルされているからである。
    3. 日本語情報はかなり少ない。この数ヶ月でやっと日本語書籍が出回るようになり、日本においては今年が「Python元年」のようである。
    4. 文字コードをutf-8にすれば日本語処理に問題はない。
    5. Webアプリ開発フレームワークとして”TurboGears”が有力。”Pylons”も可能性を秘めている。
    6. Perl臭さは無し。
    7. Googleが社内開発言語に採用した、ということで言語の将来性有り。

この各項目に点数を付けて合計すれば、Rubyの勝ちかもしれない。ただ私は、実行速度の観点と、なんとなく感じた言語との相性から、Pythonを採用した。

早速Pythonのテストプログラムを何本か書いてみた。最初はかなり不安になった。

「型の宣言無しで大丈夫なの?」

いままでC++,Javaのコンパイラに型の整合性チェックを任せていたので当然の不安である。型が無いPythonクラスはC++,Javaのテンプレートによるクラスと同じ、と思い込むことで型宣言無しを利点と考えるようにした。たとえば、Pythonでソート処理を書けば、C++のテンプレートでソート処理を書いたのと同等と見なせる。普通に何気なく書いたPythonクラスがいろいろ宣言して苦労して書いたC++のテンプレートクラスと同等とはスゴイ、と思うようにした、ということである。

そうこうするうちにPython的考え方に慣れ、型宣言の無いことに不安どころか何も感じなくなった。コンピュータ言語はその考え方に慣れれば習得は速い。ある程度Pythonに慣れたが、まだPythonオタク(Pythonist)には成れない。成りたくない!!その理由は、後日。

 

QLOOK ANALYTICS