水曜日 2 p.m.–2:45 p.m.
Room 203 #pyconjp_203仕事で使うちょっとしたコードをOSSとして開発メンテしていく - Django Redshift Backend の開発
Takayuki Shimizukawa
- 対象レベル:
- 中級
- カテゴリ:
- Useful libraries
- スライド:
- http://www.slideshare.net/shimizukawa/why-dont-you-share-your-code-snippet-for-your-jobas-a-open-source-software-pycon-jp-2016
- ビデオ:
- https://youtu.be/1riLQHii8rU?list=PLMkWB0UjwFGlYvIcvKsGhJ7SJIODj_zJZ
説明
AWSの「Redshift」は、Postgresqlベースで作られたデータウェアハウスです。ポスグレベースなのでpsqlで接続したりPythonのpostgres用ドライバが使えます。Djangoもポスグレ用ドライバで使えます、と思ったら色々問題あった。仕事で必要なんですけど。しょうがないので、Djangoに不慣れな私が手探りでDjangoのバックエンドを作って、公開して、バグレポに対応して、テストを書いて、テスト自動化して。OSS活動の各段階でどうやって進めてきたのか、紹介します。
概要
手探りでDjangoのバックエンドを作って、公開して、バグレポに対応して、テストを書いて、テスト自動化して。OSS活動の各段階でどうやって進めてきたのか、紹介します。
DjangoのRedshift用データベースバックエンドを実装したのは、仕事で必要だったからです。
最初はSELECTでのみ動作確認していて、使える使える~と思ってたんですが、Django Adminでレコードを追加しようとしたら問題が起きました。Djangoが発行するSQLにRedshiftが対応してなかったんです。もうプロジェクトは進んでいて、そこ確認してなかったのかよ!状態。さてどうする?ということでDjangoのRedshift用バックエンドを実装しました。データベース接続する「ドライバー」はデータベースサーバーと通信しないといけないので実装とか大変そうに見えるんですが、今回作ったのはドライバではなくバックエンド。DjangoのデータベースバックエンドはDjangoのORMのやりたいことをSQLで組み立ててドライバに伝える中間層です。つまり、DjangoのコードどこかにあるSQL組み立て部分をハックして別のSQLを組み立てさせれば良い、ということです。それくらいなら、と思って作ってみたらコメント空白行除いて30行程度でした。しかもほとんど元コードのコピペです。これが django-redshift-backend の最初のバージョンでした。
そういったコードをどうして業務外の時間で実装したのか、どうしてPyPIに公開したのか、どうやって育てていったのか。また、自分が使っていない用途に対する利用者からの要望にどう対応していったのか。OSSコードを書いてメンテナンスしていくモチベーションは何か。Djangoのdatabase backendがどういう仕組みで書かれているのか、Djangoのようなフレームワークの中身のテストの書き方はどう調べたのか。django-redshift-backendの開発を題材に紹介します。
アウトライン
* DjangoとRedshiftの紹介
* Redshiftはポスグレ互換!からの~
* django-redshift-backend 紹介
* 最初の実装、最初のPull Request、PyPIへの公開
* なぜ仕事で使うコードを個人の時間で実装してOSSで公開したの?
* OSS開発とどうやってつきあっていくのか