Python Web サービス開発者: 第 1 回 Python Web サービスの世界

常に Python が目指してきたモットー、それは、"バッテリー内蔵" ということです。要するに、Python という言語には、多数の標準ライブラリーや機能が付属しているのです。本稿では、Python で Web サービスを開発するためのツールや機能の概要と、それぞれの評価を示します。Python に組み込まれている機能だけでなく、サード・パーティーのオープン・ソース・ツールも取り上げることになっています。

Mike OlsonFourthought, Inc.

Mike Olson 氏と Uche Ogbuji 氏は、Fourthought Inc. の共同創設者であり、共に首席コンサルタントを務めています。オープン・ソースのツールである 4Suite と 4Suite Server も共同で開発したものであり、コンサルティング業務やトレーニング業務のほかに、XML や Web サービスを手がけるクライアントを対象にした 4Suite のカスタマイズ業務などを行っています。二人とも、アメリカのコロラド州ボールダー在住です。



Uche Ogbuji, Consultant, Fourthought, Inc.

Uche photoUche Ogbuji 氏は、Fourthought, Inc. のコンサルタント兼共同設立者です。この会社は、企業のナレッジ・マネジメントのための XML ソリューションを専門とするソフトウェア・ベンダー兼コンサルタント会社です。Fourthought では、XML、RDF、およびナレッジ・マネジメント・アプリケーション用のオープン・ソース・プラットフォームである 4Suite を開発しています。Ogbuji 氏は、ナイジェリア出身のコンピューター・エンジニア兼ライターで、現在は、米国コロラド州ボールダーに住み、そこで働いています。



2001年 1月 31日

Python 開発者のための Web サービス コラムにようこそ。といっても、「Python 開発者のための」といううたい文句に後ずさりする必要はありません。Python の専門家や上級者だけを対象としたコラムではないからです。初心者や、単に興味があるといった人たちにも、できるだけ楽しんでいただけるような内容を目指すつもりです。さらに、この連載で取り上げるそれぞれのトピックごとに、関連情報や高性能のツールなども紹介したいと思っています。このようにして、あらゆるレベルの Python 開発者たちが、このコラムから何か 1 つでも得られるようにすること、それが私たちの願いなのです。とはいえ、Python のコード自体は、実行可能疑似コードと呼ばれるほどにたいへん読みやすいので、コードに付いていくのに苦労するということはまずないはずです。

もちろん、コードはたくさん掲載する予定です。実践講座のような雰囲気で、すぐに役立てていただけるようなコラムになるでしょう。ほとんど毎回のように、便利な Web Service を実際に開発してみますので、それぞれの目的に合わせて少し手を入れるだけで、十分に活用できるはずです。では、少し気を引き締めて、Web サービスの構築に向けて気持ちの準備をしてください。思ったよりも生産的な作業になるのは間違いありません。今回はオープニングを飾って、たくさんの機能やツールなどを取り上げてみましょう。Web サービス開発用のプログラミング言語として Python がいかに優れているかは、そうした機能やツールに負うところが大きいのです。

予備知識を少々

ここは「SOA and web services」ゾーンなので、Web サービスとはいったい何か、という点については、いくらかでも知る機会があったに違いありません。もしその点で、まずは概要をつかみたいという読者がおられれば、参考文献に優れた資料を載せておきましたので、そちらのリンクをご覧ください。とはいえ、Web サービスの世界で Python がどういう位置付けになるのかを示すために、ここで少し話を戻し、全体的な枠組みを見ておきたいと思います。

Web は、10 年ほど前に誕生して以来、著しい発展を遂げてきました。最初は、記事やリンクを相互に接続した集合のようなものでしたが、そこに CGI が登場します。この CGI の登場によって、ソフトウェア開発の世界に革命を引き起こす Web の潜在能力が、少しだけ明らかになってきたわけです。CGI が提供したのは、動的コンテンツを表示するための機能でしたが、そうした機能はかなり範囲が狭く、分野が限定されていました。Web サービスには、まさにこうしたルーツがあるわけです。

Web サービスと他の動的 Web コンテンツの違いはどこにあるかと言えば、アプリケーション・オブジェクトとコンポーネントの違いによく似ています。オブジェクトとは、特定のアプリケーションの中の明確に定まった場所にはめ込むように設計された、特殊性の高いコードとデータの集合体と言えます。コンポーネントもオブジェクトの一種ですが、コンポーネントの場合は、基本的に汎用性が高く、さまざまなアプリケーションや環境での再利用が十分に可能です。したがって、他のコードとの通信や、他のコードに対するインターフェースの記述や、実行時の検出や管理のために、正式なプロトコル (CORBA、DCOM、EJB [専門用語の解説 を参照] など) をベースにしているのが普通です。

同じように、Web サービスも基本的には動的 Web コンテンツの一種ですが、やはり汎用性と再利用性が特色になっていることや、通信、インターフェース定義、管理方法などを標準化した正式なプロトコル (SOAP、UDDI、WebDAV [専門用語の解説 を参照] など) がベースになっていることなどが違っているわけです。


Python の位置付け

Python はこれまでも、インターネットの基本的なプロトコルを幅広くサポートしてきました。さらに、コードが読みやすく、保守が簡単だということも、動的プログラミングの強力な基盤として、重要な要素になっています。ここで、Web サービスの開発に役立つ Python のコア機能をいくつか取り上げてみましょう。いずれも Python に付属している機能であり、追加のダウンロードやインストールは不要です。

  • HTTP: コア・ライブラリーには、完全版の HTTP 1.1 サーバーの実装が組み込まれています。これには、ファイル・サーバーと CGI サーバーも含まれます。これらのサーバーは、それぞれの目的に合わせて簡単にカスタマイズすることができるばかりか、Web サービスに関連したタスクがすでにいくらか自動化されています。もちろん、HTTP 要求のためのツールも用意されています。たとえば、基本レベルの httplib からは、HTTP 要求のあらゆる側面を制御できますし、手軽な urllib を使った場合は、URL を受け取って、適切な場所からデータを取り込むことができます。Python では、SSL サポートが用意されているというのも注目に値します。だからこそ、HTTP によるセキュアな Web サイトが実現できるのです。
  • URL の構文解析/構築機能: URL を分解したり、もっと自然な Python データ構造から URL を構築したりするためのモジュールが用意されています。そういうモジュールを活用した Web Service では、要求パラメーターやフラグメントなどによって、簡単に URL を処理できるようになります。
  • CGI: CGI 要求を解釈したり、効率的な CGI ハンドラーを簡単に記述したりするためのツールの完全セットが用意されています。
  • HTML (プラス SGML): Python には、HTML とその母体になった SGML の構文解析用モジュールが組み込まれています。
  • XML: XML の歴史自体は短いですが、Python では、当初から XML を強力にサポートしてきました。標準ライブラリーには、DOM ライブラリーと SAX ライブラリーという 2 つの XML パーサーが用意されています。
  • FTP、SMTP、NNTP、POP、IMAP など: これらの重要なインターネット・プロトコルについても、クライアント・モジュールが豊富にそろっています。各モジュールには、セッションの隅々にまで行き届く十分な制御機能と、データ形式を Python 構造に近づけるための構文解析ツールキットが組み込まれています。こうした機能は、Web サービスを他のインターネット・アプリケーションと結び付けるときに威力を発揮します。電子メールによるイベント通知などは、その一例です。
  • 基本レベルのソケット: 面倒なネットワーク・プログラミングに手を染めたいと思うような場合があれば、これまでに取り上げたような便利なモジュールを脇に置いて、ネットワーク関連の細かなプログラミングを好きなようにいじってみることもできます。そのために、Python ライブラリーには、クライアントとサーバーのソケット・プログラミング・モジュールが用意されています。
  • ブラウザー制御機能: Python には、webbrowser という気の利いたモジュールが組み込まれています。多彩な Web ブラウザー (Netscape、Internet Explorer、Konqueror など) を起動したり制御したりするためのモジュールです。イントラネット環境などで、従来のコンポーネントと Web Service の橋渡しをするのに役立ちます。

このようにして機能を並べてみると、確かに壮観です。Python には、Web サービスのための基本機能がそろっているのです。とはいえ、すでに述べたとおり、Web サービスの利点として、さらに高いレベルの要素もあります。要するに、上記のような機能は基本的に、サード・パーティーによる Python 向けの追加機能やアプリケーションの宝庫にもなっているのです。


サード・パーティーの Python ツールの寸評

専門用語の解説

本稿で使用する専門用語をここで簡単に定義しておきましょう。

Common Object Request Broker Architecture (CORBA): オブジェクト指向コンポーネントのための Object Management Group の規格。

Distributed Component Object Model (DCOM): オブジェクト指向コンポーネントのための Microsoft の規格。

Enterprise JavaBeans (EJB): Java ベースのコンポーネント開発の規格。

Simple Object Access protocol (SOAP): HTTP や SMTP などのプロトコルを使用して、リモート・オブジェクトへのメッセージを XML でエンコードするための仕様。

Universal Description, Discovery and Integration (UDDI): Web サービスのディレクトリーのための仕様。

Web Document Authoring and Versioning (WebDAV): リモート Web サーバー上の文書を変更したり管理したりするための規格。

Document Object Model (DOM): XML 文書や HTML 文書に対するオブジェクト指向アクセスのための規格。

Simple API for XML (SAX): イベント・ベースのモデルを使用して XML 文書にアクセスするための仕様。

Secure Sockets Layer (SSL): インターネットなどのネットワーク経由で行われる暗号化通信のための規格。

Web Distributed Data Exchange (WDDX): プログラム・データを高度な XML 構造で交換するためのスキーマ。

Python の標準ライブラリーの "バッテリー内蔵" という方針とは別に、Web Service 開発用の (というよりも、ほとんどの用途に応用可能な) サード・パーティーのアドオン製品も豊富にそろっています。参考文献には、Python 用として活用できるツールのありかを見つけるためのサイト・リンクを載せておきましたので、参考にしてください。本稿で取り上げるソフトウェアはすべてオープン・ソースです。

XML は、Web Service 用のデータ形式として一世を風靡しています。構造がしっかりしていること、拡張性に富んでいること、幅広いサポートがあること、関連規格が多彩であることなどが理由で、Web Service のサブコンポーネント間の要求、応答、通信をエンコードするための標準的な形式になっているわけです。Python に組み込まれている XML 機能については、すでに触れたとおりですが、サード・パーティーの XML ツールもたくさんあります。たとえば、Python XML SIG が開発した PyXML パッケージには、さまざまなパーサー、DOM ツールや SAX ツール、WDDX と XML-RPC 用のデータ配列ツール、各種の XML 処理ツールが用意されています。さらに、Sean McGrath 氏の Pyxie も、独創的な XML 処理を実現しています。

XML ツールのパッケージとしては、4Suite (筆者らによる共同開発) もあります。PyXML がベースになっているわけですが、DOM (一時/永続)、XPath、XPointer、XSLT、XLink、RDF、XInclude など、さらに多数の XML 関連機能が盛り込まれています。このような機能を使うだけで、カスタム・コードをほとんど追加せずに、Web Service のいろいろな側面を開発できます。特に RDF は、Web サービス用に索引化しなければならないデータや相互関係を記述するための、きわめて前途有望なテクノロジーです。Python の場合、RDF サポートを組み込んでいるパッケージとしては、この 4Suite のほかに、James Tauber 氏の Redfoot フレームワークがあります。

SOAP はまさに、Web サービスにとってなくてはならないプロトコルです。HTML や SMTP などの基本レベルのプロトコルに、厳密に指定した XML を組み込んで、リモート・システムにメッセージを送信するためのプロトコル、それが SOAP です。Pythonware の soaplib には、SOAP と XML-RPC に関する Python 用の基本的なサポートが用意されています。この soaplib と他の一般的な SOAP 実装との間には、今のところ相互運用に関する問題がいくらか残っていますが、間もなく発表される新しいリリースでは、相互運用の問題が改善され、SOAP サポートが拡張されることになっています。やや完成度の低い古めの SOAP コードとしては、Ken MacLeod 氏の Scarab プロジェクトもあります。

Fourthought の 4Suite Server (これも筆者らによる共同開発) は、4Suite をベースにした XML データ・サーバーであり、XML の格納、管理、送信、処理用の優れたサポートを提供しています。CORBA や HTTP やごく基本的な SOAP を使用した通信もサポートしており、WebDAV や SMTP といったプロトコルが間もなく追加される予定です。

Digital Creations が開発した Zope は、Python ベースの人気が高いアプリケーション・サーバーであり、汎用のオブジェクト・サービス、テンプレート・ベースの HTML 出力、それに WebDAV をサポートしています。XML サポートについては、現在開発中です。

Chuck Esterbrook 氏の Webware は、Web ベースのアプリケーションを Python で開発するためのツール群です。Java サーブレットや JSP などの機能とよく似ています。

最後に、HTML のみの Web ブラウザーで Web にアクセスするユーザーが今でも大半を占めている現状からすれば、HTML の処理機能は、ほとんどの Web サービスで重要な役割を果たすことになります。DOM には、HTML 文書を作成するための機能がありますし、4Suite の場合は、DOM や XSLT から HTML を出力できます。テンプレート・ベースの方法を好むのであれば、Robin Friedrich 氏の HTMLgen モジュールは、たいへん完成度が高いと言えます。


次の停車駅: コード

今回取り上げたようなツールから是非始めてみてください。できれば、実際に使ってみていただきたいと思います。次回からは基本的に、現実の世界で起きる問題を解決するための実践的なコードを取り上げる予定です。何回かに分けて、実用的な Web Service を 1 つ開発してみましょう。その Web Service とは、ソフトウェア・ライブラリー・サービスです。本稿で見たいろいろなツールが活躍することになりますので、是非お楽しみに。

参考文献

  • SOA and web services ゾーンのコラムニスト Graham Glass 氏の Web サービスの進化と革命: 第 1 回には、Web サービスの概要が見事にまとめられています。
  • Python は、汎用のアプリケーション開発言語として人気が高く、コードが読みやすいこと、設計が行き届いていること、標準ライブラリーの内容が豊富であることなどは定評があります。
  • Python の入門資料やチュートリアルは、オンラインで豊富に提供されています。たとえば、IBM の developerWorks には、Linux Journal の Python Programming for Beginners があります。Python の添付資料には、チュートリアルが付いています。Magnus Lie Hetland 氏のプログラマー向け非プログラマー向けのチュートリアルは、かなりの言語に翻訳されています。Josh Cogliati 氏のチュートリアルも、たいへん分かりやすい入門資料です。
  • The faqts Python knowledgebase では、Python について尋ねられるあらゆる種類の質問の答えが得られます。
  • David Mertz 氏の developerWorks のいくつかのコラムでは、Python で XML を処理する方法が取り上げられています。以下の資料をご覧ください。
  • Python XML SIG が開発した PyXML パッケージでは、Python に組み込まれている XML サポートが強化されています。
  • Sean McGrath 氏の Pyxie には、XML の構文解析ツールと処理ツールが組み込まれています。基本的には、処理の流れを重視した方法が採用されており、デベロッパー・フレンドリーなツールだと言えます。McGrath 氏は、XML Processing with Python (Prentice-Hall 発行、2000 年 2 月、ISBN: 0130211192) の著者でもあります。
  • 4Suite4Suite Server (筆者らによる共同開発) には、XML 関連のテクノロジーがふんだんに盛り込まれています。
  • soaplib は、Pythonware の SOAP 実装です。
  • James Tauber 氏の Redfoot プロジェクトは、RDF サーバー用の Python ベースのフレームワークです。
  • Digital Creations が開発した Zope は、Python 用の汎用アプリケーション・サーバーであり、多彩な Web サービス機能を搭載しています。
  • Chuck Esterbrook 氏の Webware には、ASP や Java サーブレットや JSP などのユーザーになじみやすい Web 開発ツール群が用意されています。

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。プロフィールで選択した情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=SOA and web services
ArticleID=241871
ArticleTitle=Python Web サービス開発者: 第 1 回 Python Web サービスの世界
publish-date=01312001