PyCon APAC 2013参加レポート

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

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

2日目基調講演 Rian Hunter氏 ─One Million Lines of Python

初日のGeorgさんの講演は同時通訳を使わずに聞いたのですが,Rianさんの講演では同時通訳を使わせていただきました。案内にあった通り,会場左奥に同時通訳用の機器が置いてあり,早めに席を確保しておかないと,席が埋まってしまう状況でした。

画像

RianさんとDropbox,Pythonの関わり

アイスブレイク的にゼルダやドラゴンボールの画像から始まったRianさんの基調講演は,いかにDropboxがPythonを使って成功したか,という内容です。セッションの最後に言われた,

"You're gonna start $4 billion company with Python."

という言葉がとても気に入りました。私自身,起業し,Pythonで書いた自社サービスを運用しているので,とても共感できます。

RianさんはDropbox三番目のエンジニアで,創業期からDropboxにエンジニアとして関わっています。Rianさんは2008年のMIT卒業生で,大学時代からデータ同期アルゴリズムについて学んでいたそうです。Dropboxに入社し,数億人が利用するサービスを開発することで,これらの知識がさらに洗練されていったと言います。

Rianさんは2008年から2011年までDropboxのDesktopクラアントを担当しており,入社当時はWindows版しかなかったそうです。生粋のLinuxユーザであるRianさんは,自分でLinux版のDesktopクライアントを書くために入社したと話していました。

Rianさんが主に利用する言語はC,C++,Python,Haskellだそうです。Cを書くときは,自分ってすごい(C makes me feel competent)⁠Haskellを書くときは自分って賢い(Haskell makes me feel smart)と思わせてくれると言います。では,肝心のPythonはというと,自分を気持よくさせてくれる(Python makes me feel good)そうです。確かに,Pythonを書いているときは気持ちよくプログラムを書いている気がして, 納得して聞いていました。

今日はもちろんPythonの話ということで,Pythonを使って大規模なシステムを開発する話題に移ります。

DroboxのコードはすべてPythonで書かれており,そのコードベースは937,707行にもおよぶそうです。働いているエンジニアは125人で,少し少ないよね,と冗談交じりに話していました。この90万行におよぶコードにはサーバもDesktopクライアントも含まれているそうですが,今日のメインの話はDesktopクライアントの開発についてです。

Rian Hunterさん

Rian Hunterさん

Pythonを使ったDroboxの開発

RianさんはDropboxのDesktopクライアントを開発する上で必要になる要素を4つ挙げました。

  • 正確性(Must be correct)
  • 速度(Must be fast)
  • リソース(Must be resource efficient)
  • ポータビリティ(Must be portable)

どれもDropboxのシステムをよく表している要素です。データを失うことは許されませんし,同期速度が遅ければユーザが離れていくと語っていました。

最後のポータビリティは難しい問題で,Mac,Linux,Windowsの違いはもちろんのこと,各OSのバージョンにも対応させたDesktopクライアントを動作させる必要があります。さらにはOSごとに異なるファイルシステムも考える必要があり,プログラマなら考えるだけでも嫌になる作業です。

Dropboxではこれらの難しい作業をすべてPythonを使って解決しているそうです。DropboxのDesktopクライアントには大きく4つの要素があります。

  • データ同期のためのコアプログラム(LARGE platform indepentet sync core)
  • 各プラットフォームに依存したデータ同期のためのプログラム(small platform dependent file system implementation)
  • GUIのためのコアプログラム(LARGE platform independent GUI controller logic)
  • 各プラットフォームに依存したGUIのためのプログラム(small platform dependent GUI implementation)

データ同期のためのコアプログラムは約1万行にもおよぶ大きなプログラムで,各プラットフォームのためのデータ同期プログラムは全てで3,000行ほどだそうです。

Dropboxでは以下のライブラリを使ってDesktopクライアントを開発しているそうです。

  • Native
    • PyWin32
    • PyObjC
    • CTypes
  • UI
    • WxPython
    • Cocoa
    • WebKit/HTML
  • パッケージング
    • py2exe
    • py2app
    • bbfreeze

Dropboxほど大規模でかつ各プラットフォームで動作するサービスはないので,こういったサービスを開発する上でこのライブラリ構成はとても参考になります。Twitterでも「このライブラリってまだ開発続いていたんだ!」という反応をちらほら見かけました。

著者プロフィール

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

FULLER株式会社

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

Fuller, Inc. CTO

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

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

コメント

コメントの記入