PyCon JP 2012参加レポート

第1回複雑さは幸せを殺す ─初日/2日目キーノートと開発者向け注目セッションから

2012年9月15日から17日の3日間、都立産業技術大学院大学で、毎年恒例となったPyCon JP 2012が開催されました。本記事では3回にわたって、PyCon JP 2012で行われたセッションについてレポートします。

第1回目の今回は、PyCon JPの紹介と、キーノートの模様を中心にお伝えします。

PyCon JPとは

PyCon JPとは、アメリカやヨーロッパを始めとする15ヵ国以上で開催されている、プログラミング言語Pythonのカンファレンス「PyCon」の日本バージョンです。日本国内はもちろんのこと、アメリカや台湾などからも参加者がありました。

また、PyCon JPの開催に先立ち開催された「PyCon Taiwan」にPyCon JPの運営スタッフが参加しました。その模様は「PyCon Taiwan 2012」参加レポートでご報告させていただいています。

参加に先立ち

PyCon JP 2012では昨年開催されたPyCon JP 2011に引き続いてスマートフォンアプリguidebookが配布されました。guidebookとはiOS、Android、Blackberry、Windows Phone 7で使用することができるイベントガイドブックアプリです。

セッションの一覧やセッション紹介、発表者プロフィールが見れることはもちろん、スケジュール機能がついており、どのセッションを聞くかを事前に決め、セッションが始まる前にアラートを出してくれる機能が搭載されています。

ノベルティ

画像

PyCon JP 2012ではノベルティとして参加者全員にPyCon JPステッカーにストラップ、そして缶バッジが渡されました。また、8月中に参加登録を済ませた方全員にグレーのTシャツも配られました。

キーノート

今回のPyCon JP 2012ではYouTube Liveによってすべてのセッションが生放送された上、セッションの録画がいつでもYouTubeで見ることができるようになっています。

[初日キーノート]Armin Ronacher(@mitsuhiko)

Armin氏は開発チームPocooの創立者の1人で、PacooチームとしてWSGIツールキットのWerkzeugをはじめ、ドキュメント作成支援ツールのSphinx、テンプレートエンジンJinja2、そしてマイクロウェブフレームワークのFlaskを開発したことで知られています。

またArmin氏は日本好きでも知られ、彼がハンドルとして使っている⁠mitsuhiko⁠は漫画「名探偵コナン」の登場人物から来ているとお話されていました。また、彼が発表で使用していたマシンのホスト名は名は⁠nausicaa⁠に設定されていました。

Armin氏のキーノートは「Happiness Through Ignorance」というタイトルで、技術に関することではなく、主にプログラマーに関することで、色々なことを無視することで幸せになれる、というお話でした。

Armin Ronacher氏
Armin Ronacher氏

あるオープンソースソフトウェアのゲーム

Armin氏は、後にMac App Storeで公開されたあるオープンソースソフトウェアのゲームを例に挙げました。このゲームの実装は残念なもので、コードはとても初心者的でした。しかし、このゲームは成功を収めました。それは、この開発チームが、初心者的な実装を気にせず、とても多くのことを⁠無視すること⁠によってもたらされたからです。

複雑さは幸せを殺す

SAML 2.0はXMLをベースにした認証情報提供者と、サービス提供者の間で認証情報を交換するためのオープンな規格です。この規格には、XML, XPath, XPath Filter 2.0, Xpointer, XLST, HTTP, XMLENC, X509, XMLDSIG, Canonical XMLが使われています。もし、これをスクラッチで実装しようとすると、これは非常に難しく、幸せになれません。SAMLは非常に複雑なので、SAMLを使うソリューションを販売する企業の金儲けの方法になっています。対して、SSO 101はわずか20数行で実装することができます。

また、PHPは成功した言語の1つだと思っています、とも述べました。PHPは問題を抱えている言語ですが、学ぶことは非常に簡単で、PHPをはじめることは簡単だからだそうです。

[2日目キーノート]小飼 弾(@dankogai)

小飼氏はプログラミング言語PerlのJcode.pmというライブラリを開発したことで知られています。また、Perl 5.8の開発にも携わりました。

小飼 弾氏
小飼 弾氏

The Three Virtues of a programmer

小飼氏はまず、Perl開発者であるLarry Wall氏が提唱した⁠The Three Virtues of a Programmer⁠にPerl、Ruby、Pythonを当てはめて、⁠Laziness⁠はPerl、⁠Impatience⁠はRuby、そして⁠Hubris⁠はPythonであると述べました。

PythonがHubrisである理由を⁠Zen of Python⁠に絡めてキーノートの主題としてお話になりました。

Zen of Python

Zen of Pythonとは、⁠Pythonらしさ⁠を示した19行の短い詩です。Pythonのインタプリタを立ちあげ、⁠import this⁠を実行することでいつでも全文を読むことができます。

Beautiful is better than ugly.

小飼氏はまず、Zen of Pythonの⁠Beautiful is better than ugly.⁠という記述について、配列の各要素をjoinする処理を例として取り上げました。

オブジェクト指向言語であるRuby、JavaScript、Pythonにおいて、RubyとJavaScriptは⁠配列オブジェクトのメンバメソッド⁠を使って配列要素をjoinするのに対し、Pythonは"文字列オブジェクトのメンバメソッド"を使って行う、という特徴を持っています。この独特な方法は果たして、⁠Beautiful⁠なのか、小飼氏は会場にいるPythonistaに問いかけました。結果、会場でこの実装を⁠Beautiful⁠だと思っている人がマイノリティであることが印象的でした。

Explicit is better than implicit.

次に、小飼氏はPythonで文字列を表現する際のuリテラルを取り上げました。

Python 2系では文字列を表すのに、str型とunicode型が存在します。ただのクオートでくくられたものはstr、uリテラル付きクオート(u""ないしu'')でくくられたものはunicode型として扱われています。小飼氏はまず、この表現は明示的でよい、と評価しました。

一方、Python 3では文字列を表すものはPython 2のunicode型が名を変えたstr型のみになりました。この変更に伴い、Python 3系ではuリテラルが廃止されました。しかし、Python 3.3ではこのuリテラルが復活し、ただのクオートとuリテラル付きクオートが同じものとして扱われることになりました。この過去からのimportについて、小飼氏は⁠わけがわからないよ⁠とおっしゃっていました。

セッションの部屋があふれたために別室でのストリームの放送も行われた
セッションの部屋があふれたために別室でのストリームの放送も行われた

There should be one- and preferably only one -obvious way to do it.

さらに小飼氏はPythonのlen関数を取り上げました。

len(u"\U0001F40D") これを実行するとどんな結果が返ってきますか?─小飼氏の問いかけに対して、会場から出てきた答えは、1, 2,⁠わからない⁠の3つで、小飼氏が示した正解は⁠わからない⁠でした。

u"\U0001F40D"はUnicodeのサロゲートペアで、未定義領域にある2文字をあわせて1文字を表現します。Pythonが"-enable-unicode=ucs4"オプションと共にコンパイルされたならサロゲートペアは適切に扱われlenは1を返しますが、そうでない場合は2を返します。この動作は言語としての一貫性を失っており大きな問題である、と小飼氏は指摘しました。

また小飼氏は、Perlはサロゲートペアの問題の対応を10年前に対応を終わらせ、Rubyは5年前に対応を終わらせているが、Pythonもこの問題の対応は終わったと言っているものの、このとおりの振る舞いを見せている、という事実も加えて説明しました。

小飼氏はPerlの開発者としてJcode.pmなど文字エンコードに関するモジュールを開発してきた経験からか、Pythonの文字の扱いに関することについて特に大きな時間を割いたお話となりました。

セッションの最後に小飼氏は

  • “禅は唱えるべきものではありません。禅はなすべきものです”

と述べ、キーノートを締めくくりました。

発表スライド
Python as a Foreign Language

MongoDB with Python

Mathias Stearn氏によるPythonからMongoDBを扱う方法を解説するセッションです。Mathias Stearn氏はMongoDBを開発している10genのエンジニアで、彼自身MongoDBサーバコアの開発やMongoDBのC++ドライバのメンテナンスを行っています。

Mathias Stearn氏
Mathias Stearn氏

MongoDB

MongoDBはリレーショナルでないデータベースで、JavaScriptで操作し、データをJSON(正確にはBSONというバイナリ化されたJSONライクな表現方式)で表現します。

PythonからMongoDBに接続するモジュールにpymongoがあります。このセッションではこのpymongoの使い方の解説が主なテーマでした。

MongoDBの開発元でMathias Stearn氏が所属している10genはPyCon JP 2012のスポンサーでもある
MongoDBの開発元でMathias Stearn氏が所属している10genはPyCon JP 2012のスポンサーでもある

CRUD

pymongoでは、ドキュメントを表すためにPythonのdict型を使用します。pymongoの各種メソッドにこのdictを渡すことでCRUDを実現します。

MapReduce

MongoDBでは冒頭に書いたとおり、JavaScriptで操作します。MapReduceも同様で、map,reduce共にJavaScriptの関数で定義します。pymongoからMapReduceを利用する場合も、JavaScriptの関数を定義するコードを文字列としてpymongoに渡すことで行います。

ORM

pymongoにORMの機能はありませんが、Pythonのclassmethodを利用することで、辞書ではなくオブジェクトとしてドキュメントを扱うことができます。サンプルコードをMathias Stearnさんのスライドより引用します。

import pymongo
conn = pymongo.Connection()
db = conn['test']

class Post:
    @classmethod
    def by_id(cls, id):
        p = cls()
        p.__dict__ = db.posts.find_one({'__id': id})
        return p

    def save(self):
        db.posts.save(self.__dict__)

筆者は自身で運営するサービスでMongoDBを利用していますが、このセッションの後半で主にMongoDB自身の機能について知らないことが多く取り上げられ、目から鱗でした。

シンプルなシステム構成フレームワーク alnair

稲田 尚也氏によるセッションで、ご自身がPythonで開発したサーバ構築ツールalnair(アルナイル)の解説でした。

サーバ構築ツール

複数台のサーバを構築する作業はとても面倒なものです。筆者も複数台のサーバを運用しているためその苦労がよくわかります。この作業をなるべく自動化するツールとして稲田氏があげられたのが以下の3つ。

  • Chef
  • Puppet
  • Kokki

しかし、これらには専用にサーバを立てる必要や、Rubyを導入する必要等があり、それぞれに導入コストがかかります。

alnair

稲田氏が製作したalnairは、作業マシンにPythonが入っていれば、専用のサーバを立てる必要も、インストール先のサーバに事前準備をする必要もなく、サーバを構築することができます。

alnairの導入は、alnairがPyPIに登録されているため、easy_installコマンドまたはpipコマンドによって導入することができます。

alnairでは個々のパッケージ導入方法をレシピと呼び、このレシピを定義するファイルは標準的なPythonスクリプトです。したがって、Pythonを知っていれば新たに専用のDSLや複雑な設定を覚える必要はなく使い始めることができます。さらに、レシピにはPythonからできるすべての操作を記述することができるので、導入が複雑なパッケージも自動で導入することができるそうです。

次回は?

次回はPyCon JPで行われたセッションのうち、主にWeb開発に関するものを取り上げる予定です。よろしくお願いします。

おすすめ記事

記事・ニュース一覧