PyCon APAC 2013参加レポート

第1回 高エネルギー研究,Dropboxを支えるPythonの力 ─Georg Brandl氏, Rian Hunter氏による基調講演から

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

Pythonを使う理由

RianさんはPythonを使う理由として以下の6つを挙げていました。

  • シンプルさ(Simple)
  • 拡張性(Extensible)
  • 安全性(Safe)
  • ポータビリティ(Portable)
  • 巨大なスタンダードライブラリとコミュニティ(Large standard library, large community)
  • 楽しさ(Fun)

Pythonはコンセプトをそのままコードに落とせるシンプルさが良いそうです。これは今回のPyCon APAC 2013のセッションの中で,みんなが話していたことです。みんな,シンプルなPythonが好きなようです。

また,たくさんのライブラリがあり,それを簡単に使えるPythonは素敵だとも言っていました。後に触れるダイナミックタイピングができることもPythonの良さとして挙げていました。

Dropboxとしてはクラッシュしないことが大事ということで,Cと違いバッファーオーバーフローが起きないPythonを使うメリットは安全性にあると話していました。

そして最大の理由が「GuideがDropboxにいることだよね」と,最近Dropboxに入社したGuideに関しても触れていました。

Pythonを使って信頼性の高いシステムを作れるか

ここからは逆にPythonのThe Bad Partsということで,Pythonに対する批判を取り上げての講演です。以下のようなことがよくPythonに対する批判として挙げられると語っていました。

  • Pythonって遅いよね
  • マルチスレッディングをサポートしていない
  • ダイナミックタイピングは悪だ

Stack OverflowやブログのPythonに対する批判をスライドに映しながら,Rianさんが所感を述べていきます。Dropboxの成功事例を紹介しながら,Pythonを使って信頼性の高いシステムを構築することは可能だと説きます。

Pythonが遅いという批判には,CPUバウンスになる事例はそんなに多くないという回答で,もしCPUバウンスになる場合はCythonやPyPyを使えば良いとのこと。または,問題となる小さなコンポーネントをCで書きなおせば良いと言っていました。

マルチスレッディングをサポートしていないという批判には,マルチスレッディングとは並列実行と平行実行を実現するための機構だということを述べた上で,Pythonには並行実行の機構としてmultiprocessingのモジュールが,並列実行のライブラリとしてtornade,twsted,stackless,geventがあると話します。並行実行と並列実行を実現できるので,Pythonはマルチスレッディングが不要だと結論づけていました。

ダイナミックタイピングに関する批判には,ダイナミックタイピングというより,ダックタイピングについて語るべきと話を持っていきます。"Discipline and The Zen of Duck Typing" という投稿がRianさんがダックタイピングを深く理解するきっかけになったそうです。

ファイルをコピーする関数を取り上げて,ダックタイピングについて説明していました。

def copy_file(src_file, dest_file):
    while True:
        buf = src_file.read(4096)
        if not buf:
            break
        dest_file.write(buf)

これはsrc_fileをdest_fileにコピーする関数ですが,src_fileがread関数を,dest_fileがwrite関数を持っていればこの関数をさまざまな用途で使い回すことができます。

Rianさんは例として以下のコードを挙げていました。

import StringIO

src_file = open("src.txt", "rb")
dest_file = StringIO.StringIO()

copy_file(src_file, dest_file)

string_contents = dest_file.getvalue()

このように書くことで,同じ関数を使ってファイルオブジェクトを文字列に変換することができます。ネットワークにファイルを送りたい場合は,以下のように書くことができます。

import socket

src_file = open("src.txt", "rb")

s = socket()
s.connect(("dropbox.com", 80))
dest_file = s.makefile()

copy_file(src_file, dest_file)

ここで重要なのはcopy_file関数を一切変更していないことです。シンプルな例ですが,ダックタイピングの力強さを感じることができる,とRianさんは語っていました。

さらに,ダックタイピングはインターフェース指向プログラミングだと語った上で,Javaや他の言語と比べて,Pythonはこれがデフォルトで採用されていることが強みだと話します。Pythonを使うと,インターフェースを定義するのに,別に余分なコードを書く必要はありません。プログラマは制約という言葉について再考すべき,とも話していました。

最後にダックタイピングのtipsと,いくつかの細かいPythonに関する批判ついて触れ,講演は終了しました。

個人的にはとても参考になる講演でした。プログラマをやっていると,よく静的型付けと動的型付けの議論に巻き込まれますが,それに対する良い回答になっていたように感じます。最終的には感情論になってしまいますし,どっちが優れているという話ではないですが,お互いの利点を理解しておくことは重要です。Dropboxで巨大なPythonのコードをメンテナンスし続けたRianさんはPythonの利点と欠点をよく理解していると思いますし,そういう点でとても参考になる話だったと思います。

次回は筆者が聴いたセッションの内容を中心に,PyCon APAC 2013の様子をまとめたいと思います。

著者プロフィール

藤原敬弘(ふじわらたかひろ)

FULLER株式会社

1986年生まれ。北海道苫小牧市出身。苫小牧工業高等専門学校卒業。

Fuller, Inc. CTO

Webプログラマ,よく利用する言語はPython。Pythonコミュニティによく出没する。趣味でArduinoやRaspberry Piなどを使って,便利なものを自作する。

twitter:@wutali
github:https://github.com/wutali

コメント

コメントの記入