Dropboxは全部Pythonで信頼性の高いソフトウェアを作った(前編)~PyCon APAC 2013

2013年9月19日

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

fig

このカンファレンスに呼んでいただけて大変光栄です。日本には初めて来ました。

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

fig

あらためまして、Rian Hunterです。MITを5年前に卒業し、Dropboxの3番目の社員となりました。WindowsとMacだけに対応していたDropboxをLinuxに最初に移植したのは私です。

そのあと2008年から2011年まではDropboxのデスクトップクライアントチームを率いていました。

この期間にPythonについてたくさんのことを学びましたし、ファイルシステム、ネットワーキング、同期アルゴリズムについても多くのことについて知ることができました。

Pythonは気分がいい

さて、C、C++、Python、Haskellなどの自分の印象をここで紹介しましょう。

Cを使っているときは、自分がすごく強力に感じて、本物のプログラマになった気になります。すごくいい感じです。

fig

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

fig

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

fig

ということで今日はPythonについて話しましょう。

DropboxはすべてをPythonで開発している

大規模なPythonでの開発。Dropboxでは、サーバとクライアントのコードをまとめてて93万7707行の規模になっています。

fig

これを125人程度のエンジニアで開発しています。まだ比較的小規模なチームです。

私は現在はサーバまわりを開発していますが、ここではデスクトップクライアントの開発で得たことを中心にお話しします。

何はともかく、デスクトップ版Dropboxは確実なものにしなくてはなりません。ユーザーのデータを失うわけにはいかないのです。と同時に、高速に動作しなければなりません、サーバへ高速に同期するように最適化するとともに、リソースを効果的に使わなければなりません。CPUリソースを100%使えばユーザーのマシンの動作を遅くすることになりますし、使用メモリも小さくしなければなりません。

と同時にポータブルにしなければいけません。Windows、Mac、Linuxの各OSとそれぞれのバージョン違いにも対応しなければならないですし、Linuxの複数のディストリビューションや、さまざまなファイルシステムにも対応する必要があります。

私たちはこうしたことをすべてPythonでやっています。かなりクールでしょう。

fig

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

fig

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

fig

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

fig

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

fig

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

fig

Pythonはシンプルで学ぶのも簡単

なぜ私たちはPythonを使っているのか。これまで6年ほど使ってきた実績からお話します。

Pythonはシンプルです。学ぶのが簡単で、読みやすく書きやすい。

fig

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

fig

安全でもあります。Cよりもバッファオーバーフローを起こしにくく、配列のインデックスの間違いなど、だいたいのミスはPythonが知らせてくれて、クラッシュすることがほとんどないのです。

それに大規模な標準ライブラリが用意されていて、コミュニティの質も高い。

fig

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

fig

Pythonで信頼性の高い基盤を作ることは可能だ

Pythonには正直に言うと悪いこともあります。

よく言われるのは、遅いしマルチスレッドをサポートしていない、ということ。検索すればこの手の話がいっぱいでてきます。

fig

例えば、Pythonは大規模に対応していない、少なくとも並行処理を要求するのならば、とか。なんでここでPythonを取り上げるのかは分からないけれど。

それから動的型付けは問題だというのもよく見かけます。動的型付けはセーフじゃない、コンパイル時に発見できるはずのバグが実行時に起こると。

fig

でもこうした主張がそうだとは思いません。プロパガンダのようなものです。

Pythonで信頼性の高い基盤を作ることはできるのです。

fig

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

fig

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

fig

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

fig

これらを見ていただければ、Pythonで信頼性の高いソフトウェアを作れることは約束されているのではないでしょうか。

後編では、Pythonが遅いこと、マルチレッドに対応していないこと、などについての答えを紹介しています。

あわせて読みたい

プログラミング言語 殿堂入り Dropbox Python SaaS システム開発




タグクラウド

クラウド
AWS / Azure / Google Cloud
クラウドネイティブ / サーバレス
クラウドのシェア / クラウドの障害

コンテナ型仮想化

プログラミング言語
JavaScript / Java / .NET
WebAssembly / Web標準
開発ツール / テスト・品質

アジャイル開発 / スクラム / DevOps

データベース / 機械学習・AI
RDB / NoSQL

ネットワーク / セキュリティ
HTTP / QUIC

OS / Windows / Linux / 仮想化
サーバ / ストレージ / ハードウェア

ITエンジニアの給与・年収 / 働き方

殿堂入り / おもしろ / 編集後記

全てのタグを見る

Blogger in Chief

photo of jniino

Junichi Niino(jniino)
IT系の雑誌編集者、オンラインメディア発行人を経て独立。2009年にPublickeyを開始しました。
詳しいプロフィール

Publickeyの新着情報をチェックしませんか?
Twitterで : @Publickey
Facebookで : Publickeyのページ
RSSリーダーで : Feed

最新記事10本