Dropboxは全部Pythonで信頼性の高いソフトウェアを作った(前編)~PyCon APAC 2013
Pythonユーザーが集まり、情報交換し、交流するためのカンファレンス「PyCon APAC 2013」が9月13日、14日に都内で開催されました。PyCon APACはこれまでシンガポールで開催されており、今回初めて日本で開催されました。
Pythonは日本ではあまり利用事例が多くありませんが、海外ではGoogleやDropboxなどで使われていることが知られ、人気のあるスクリプティング言語の1つです。Pycon APAC 2013の2日目の基調講演には、そのDropboxの3番目の社員であるRian Hunter氏が登壇、Dropboxの社内事例も交えてPythonの大規模開発について紹介しています。
基調講演の内容をダイジェストで紹介しましょう。
One Million Lines of Python

このカンファレンスに呼んでいただけて大変光栄です。日本には初めて来ました。
僕が初めて日本を意識したのは9歳か10歳のときにセーラームーンを見てからでした。そしてファイナルファンタジー、ドラゴンボールも好きです。ゼルダの伝説も。長い間私にとってはこれが日本でした。そしてここに来られてとても嬉しく思います。

あらためまして、Rian Hunterです。MITを5年前に卒業し、Dropboxの3番目の社員となりました。WindowsとMacだけに対応していたDropboxをLinuxに最初に移植したのは私です。
そのあと2008年から2011年まではDropboxのデスクトップクライアントチームを率いていました。
この期間にPythonについてたくさんのことを学びましたし、ファイルシステム、ネットワーキング、同期アルゴリズムについても多くのことについて知ることができました。
Pythonは気分がいい
さて、C、C++、Python、Haskellなどの自分の印象をここで紹介しましょう。
Cを使っているときは、自分がすごく強力に感じて、本物のプログラマになった気になります。すごくいい感じです。

Haskellを使うと、賢くなったような、アタマが良くなった感じがします。

そしてPythonだと気分がいい。これが求めていたことなんだと感じました。

ということで今日はPythonについて話しましょう。
DropboxはすべてをPythonで開発している
大規模なPythonでの開発。Dropboxでは、サーバとクライアントのコードをまとめてて93万7707行の規模になっています。

これを125人程度のエンジニアで開発しています。まだ比較的小規模なチームです。
私は現在はサーバまわりを開発していますが、ここではデスクトップクライアントの開発で得たことを中心にお話しします。
何はともかく、デスクトップ版Dropboxは確実なものにしなくてはなりません。ユーザーのデータを失うわけにはいかないのです。と同時に、高速に動作しなければなりません、サーバへ高速に同期するように最適化するとともに、リソースを効果的に使わなければなりません。CPUリソースを100%使えばユーザーのマシンの動作を遅くすることになりますし、使用メモリも小さくしなければなりません。
と同時にポータブルにしなければいけません。Windows、Mac、Linuxの各OSとそれぞれのバージョン違いにも対応しなければならないですし、Linuxの複数のディストリビューションや、さまざまなファイルシステムにも対応する必要があります。
私たちはこうしたことをすべてPythonでやっています。かなりクールでしょう。

それをどうやっているか。私たちは大規模なプラットフォーム非依存の同期コアを持っています。だいたい数万行。そして、比較的小さなプラットフォーム依存のファイルシステム実装。

また、大規模なプラットフォーム非依存のGUIコントローラーロジック、そしてプラットフォーム依存のGUI実装、例えば線の描画のようなものもあります。

これらの実装には次のようなライブラリを使っています。

UIにはWxPytho、CocoaはMac用です。

パッケージングに使っているのはこれらです。

Pythonはシンプルで学ぶのも簡単
なぜ私たちはPythonを使っているのか。これまで6年ほど使ってきた実績からお話します。
Pythonはシンプルです。学ぶのが簡単で、読みやすく書きやすい。

拡張性があります。Pythonはオープンソースですし、ライブラリもすぐ手に入るし、だいたいのことはライブラリで済みます。ダイナミックな型付けも使いやすい。

安全でもあります。Cよりもバッファオーバーフローを起こしにくく、配列のインデックスの間違いなど、だいたいのミスはPythonが知らせてくれて、クラッシュすることがほとんどないのです。
それに大規模な標準ライブラリが用意されていて、コミュニティの質も高い。

そしてもっとも大事なことは、楽しいこと。それにDropboxには(Pythonの開発者である)Guido van Rossumがいますから。

Pythonで信頼性の高い基盤を作ることは可能だ
Pythonには正直に言うと悪いこともあります。
よく言われるのは、遅いしマルチスレッドをサポートしていない、ということ。検索すればこの手の話がいっぱいでてきます。

例えば、Pythonは大規模に対応していない、少なくとも並行処理を要求するのならば、とか。なんでここでPythonを取り上げるのかは分からないけれど。
それから動的型付けは問題だというのもよく見かけます。動的型付けはセーフじゃない、コンパイル時に発見できるはずのバグが実行時に起こると。

でもこうした主張がそうだとは思いません。プロパガンダのようなものです。
Pythonで信頼性の高い基盤を作ることはできるのです。

実際にわれわれはそうしたのですから。

われわれは何百万ものユーザーがいて、これはGoogleやFacebookやTwitterに比肩する規模です。

何億ものユーザーがわれわれのソフトウェアをデスクトップにインストールしていて、これはChromeやFirefoxといったソフトウェアに比肩する規模でもあります。

これらを見ていただければ、Pythonで信頼性の高いソフトウェアを作れることは約束されているのではないでしょうか。
あわせて読みたい
Dropboxは全部Pythonで信頼性の高いソフトウェアを作った(後編)~PyCon APAC 2013
≪前の記事
Sencha Touch、次バージョンでPhoneGap/Cordova採用へ