too late amatuar programmer

[python] 文芸的プログラミングのためのツール?

2010-10-08 by ebon | Lavel:

コードとコード解説(解説といっても大したものではない.)文書の管理方法を模索している.
対象言語はpythonであり、特にpython用として, コードと文書管理のためのツールで何かいいものはないかというところだ.

そんな中探していると,「文芸的プログラミング」をコンセプトにしたプロジェクトをいくつか発見した.
それらツールをピックアップしてみる.

先に書いておくと、詳細を比較検討した訳ではないが、
ざっと見てみた中で、特に使いたいと思ったのは「Pweave」,「PyLit」の2つだ.

要件


ツール評価のその前にまず、自分の要件の確認が必要だ.
まず文芸的というワードで考えをめぐらす場合、動悸は以下2つのどちらかである場合が多いと思う.

  1.  ”文書をまず書いて、その内容をコードにしていく”というプログラミングのスタイルを取りたい(本来の文芸的)
  2. 文書とコードを一つのファイルで管理したい, それを上手くサポートできるツールが欲しい
  
私の目的はやはり後者だ.
1が有益になるのは,大人数で共有するライブラリを書いている場合などに限られるだろう。
ほとんどの場合は, 仰々しいスタイルを求めているのでなく、何らか後者の目的に近いものだろう.

細かい要件は以下のようなものだ.

  • ソースコードと文書が同じ1つのファイル
  • 実行時はコード部分を抽出した実行ファイルと文書ファイルが作られる.
  • htmlや様々な形式で出力できる
  • 文書記述はできればreSTで記述(せっかくだからsphinxとの連携もスムースにしたい)
  • IDE的なツールとしてでなく、単にファイルを編集する

実際に全てに合致するというよりは、これらを尺度にし、自分に合ったものを探すということになる。 
それ以前に、当然プログラムの規模や共同作業者の人数などで、使いやすさは大きく変わってくると思う.

候補


上記要件に合う、かつ使いやすそうなものとして、Pweave、PyLitという2つのツールが候補に挙がってきた。
# まだ触り始めただけなので、使用感比較などは別途書きたい..。

  • pweav
    統計言語R用のLatexドキュメント作成ツールであるSweaveを元に開発した、
    python用の文芸的プログラミングツール.
    文書部分はreStructured text, Latexシンタックスをサポート、
    コード部分はnowebシンタックスで記述する.

    Sweaveを基調にmatplotlib,Latexもそのままサポートしていることからも、メジャーな文芸的プログラミングツールをrSTの対応と共に、Pythonに適応させた形と言える。

  • PyLit
    "プログラムのドキュメントを (後追いで) 書かずに、プログラムを組み込んだ ドキュメントを書こう、という考え方"がもららす複雑な側面に対して、うまい形で対応した文芸的プログラミング用ツール.

    その一番の特徴は、デュアルソースであることだ.
    ドキュメントとコードを1つのファイルに書く、本来の文芸的スタイル:シングルソースではなく、
    ”コードが埋め込まれたドキュメント”と”コメントが書かれているコード”を相互にコンバートするスタイルと取っている.  
    あくまでコードはコード、ドキュメントはドキュメントとして扱うことで、編集活動のシンプルさを維持しつつ、相互コンバートにより双方の整合性を保てるというコンセプトだ.
    # 「セミ文芸的プログラミング」なんて呼ぶ人もいるらしい。

上記2つを候補とした理由は、そのシンプルさにある。

  • ファイルを自分の環境(エディタなど)でそのまま扱える
  • reSTで記述できる、特別なシンタックスの負担がない
  • purePythonのシングルスクリプトでできている

やはりこの手のツールは、導入ハードルの低さが肝心だ.

他のツール


他にも、「文芸的プログラミングのためのツール for python」というプロジェクトはいくつかある.自分の要件に対しては、帯に短したすきに長しなものばかりだったと言えるのだけど.
 
pyWeb
独自のシンプルな文書記法を使用したツールpythonだけでなく、いろいろな言語で使用できる事が特徴. 
 
Leo
pythonによる文芸的プログラミングのIDE的ツール.アウトライン機能・リビジョン管理機能が付属しておりかなり本格的な文芸的スタイル向けのツールと言える.
 
lpy
ソースを""html""にコンバートするコマンドラインツール
 
Epydoc
ソースからapiのドキュメントを生成する目的であればこれで問題なさそうだ.

関連サイト

  • 文芸的プログラミングのポータルサイト
    探している過程でこんなサイトを見つけた.初めて知った..

    文芸的プログラミングの参考情報として、様々な種類の情報がまとめられているサイトだ.
    テーマ別(アルゴリズム・データベースなど)、言語別、環境別などでカテゴリ化されており、
    実際の参考ソース、ツールなど豊富な情報が置かれている.
    見ているだけで楽しそうだ.


最後に


何はともあれ、文芸的とワードを使うのはいいが、やはり「何がしたいのか」を明確にし、
メリットデメリットをちゃんと把握することが重要だろう.
「文芸的プログラミング」に興味を覚えたての人間は、その真意を理解していないものだ.
そして、その人間の要件は、別に「文芸的プログラミング」でなかったりする.
つまり、私のことです.

ただ、概念を知っておくこと・不細工なりに近い考えを試みてみること自体は,
どんなレベルにある人間にとっても有意義であると思っている..

なので、どうにかこれらツールをうまく使い、コード管理・ドキュメント作成の心理的負担を軽減、自然に良いサイクルができる仕組みでコードを書きたい.

ただ、現実的にデメリットが目立つのは避けられないとも思う.

  •  コード部分が見づらくなる
  • エディタなど環境面で使いやすさの差異が出る
  • reSTや固有の記法の知識有無でも差異が出る ..etc

協働作業者が多くなればなるほど、デメリットが圧倒的に上回ると言える.
結局、実用的なツール・手法にはなり切れないのか・・・

0 comment:

Post a Comment