PyCon JP 2012参加レポート

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

この記事を読むのに必要な時間:およそ 3.5 分

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開発に関するものを取り上げる予定です。よろしくお願いします。

著者プロフィール

吉田昂平(よしだこうへい)

高校2年生。小学6年生の時に同級生からウェブサイト制作を依頼されたことからプログラミングの世界に足を踏み入れる。得意とする言語はPython。PyCon JP 2012では,「ナウでヤングな17歳のVPS構築記」というタイトルでセッションをしたことに加え,運営スタッフも務めた。

URL:http://yosida95.com/

Twitter:@yosida95