Python/Django製のコードレビューツールを使ってみた

後藤大地(オングス) 2007年06月01日 15時03分

  • このエントリーをはてなブックマークに追加

 Google Codeに「Review Board」というプロジェクトが追加された。Djangoを使って開発されたWebベースのソースコードトラッキングシステムだ。ライセンスについて、Review BoardのサイトにはThe MIT Licenseと記載されているが、成果物に含まれているライセンスファイルはなぜかApache Software License Version 1.1。どのみちオープンソースソフトウェアではある。

 VMwareとともに動作するという興味深い特徴があるが、VMwareなしでも使うことは可能だ。今のところサポートしているリポジトリはSubversionとPerforceだ。

 CVSであればCVSWebなど、リポジトリにWeb経由でアクセスするためのアプリケーションは存在する。Review Boardは同じジャンルのシステムだが、扱いやすさや複数リポジトリへの対応など、今後が期待できるものとなっている。

 公開されて間もないこともあって、インストールなどはまだまだ手間がかかる。とはいえ、順次必要なコンポーネントを用意していけば問題なく動作するので試してみよう。必要なものはWikiの"Basic Dependencies"を参照のこと

 Review Boardのソースコードは執筆現在、アーカイブでの提供は行われていないので、Subversionクライアントを使って取得する。

% svn checkout http://reviewboard.googlecode.com/svn/trunk/ reviewboard

 次に、設定ファイルsettings_local.pyをコピーして編集する。SQLite3を使ってlocalhostで動作させる場合は、次のようなファイルを用意する。MySQLよりもSQLiteを使う方が簡単なので、試すだけならSQLite3を使った方がいい。設定内容はファイル内のコメントに説明が書いてあるので、それにしたがって作成しよう。

Review Board設定ファイルをテンプレートからコピー

% cd ./reviewboard/reviewboard/
% cp settings_local.py.tmpl settings_local.py

settings_local.pyファイルの編集例 - SQLite3とlocalhostを使う場合

DATABASE_ENGINE = 'sqlite3'           # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
DATABASE_NAME = 'reviewboard.sqlite'  # Or path to database file if using sqlite3.
DATABASE_USER = '********'            # Not used with sqlite3.
DATABASE_PASSWORD = '********'        # Not used with sqlite3.
DATABASE_HOST = ''     # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''     # Set to empty string for default. Not used with sqlite3.

# Make this unique, and don't share it with anybody.
SECRET_KEY = 'p8923yaernva4tqkwdavo8qi2v7349qc3q23479-p123youwidhoq8923yco'

CACHE_BACKEND = 'locmem:///'

SEND_REVIEW_MAIL = False

 あとは成果物に含まれているスクリプト(manage.py)を使ってデータベースを初期化する。途中、管理者権限のユーザを作成するので、入力したユーザ名とパスワードを忘れないように。

データベースを初期化

% ./manage.py syncdb
Creating table django_admin_log
Creating table auth_message
Creating table auth_group
Creating table auth_user
Creating table auth_permission
Creating table django_content_type
Creating table django_site
Creating table django_session
Creating table accounts_profile
Creating table diffviewer_diffset
Creating table diffviewer_diffsethistory
Creating table diffviewer_filediff
Creating table reviews_comment
Creating table reviews_group
Creating table reviews_quip
Creating table reviews_screenshot
Creating table reviews_review
Creating table reviews_reviewrequestdraft
Creating table reviews_reviewrequest
Creating table reviews_screenshotcomment
Creating table scmtools_tool
Creating table scmtools_repository

You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes  ←ここでyesと入力
Username (Leave blank to use 'testuser'): ←ユーザ名を入力
E-mail address: testuser@example.com ←メールアドレスを入力
Password:            ←パスワードを入力
Password (again):    ←パスワードを再度入力
Superuser created successfully.
Installing index for admin.LogEntry model
Installing index for auth.Message model
Installing index for auth.Permission model
Installing index for accounts.Profile model
Installing index for diffviewer.DiffSet model
Installing index for diffviewer.FileDiff model
Installing index for reviews.Comment model
Installing index for reviews.Review model
Installing index for reviews.ReviewRequestDraft model
Installing index for reviews.ReviewRequest model
Installing index for reviews.ScreenshotComment model
Installing index for scmtools.Repository model
Loading 'initial_data' fixtures...
Installing json fixture 'initial_data' from '/usr/home/testuser/reviewboard/reviewboard/../reviewboard/scmtools/fixtures'.
Installed 2 object(s) from 1 fixture(s)
% 

 これでインストールは完了だ。

インストールが失敗するんだけど…… という場合は

 次のような表示が出て、インストールが失敗することがある。これはpysqlite2モジュールがないというものなので、システムに用意されているパッケージ管理システムなり、成果物をダウンロードしてきてインストールするなり、自力でコンパイルするなりしてインストールすることになる。

Review Boardが動かない - 必要なPythonモジュールが用意されていないので、追加インストール

% ./manage.py syncdb
Traceback (most recent call last):
  File "./manage.py", line 11, in ?
    execute_manager(settings)
  File "/usr/local/lib/python2.4/site-packages/django/core/management.py", line 1672, in execute_manager
    execute_from_command_line(action_mapping, argv)
  File "/usr/local/lib/python2.4/site-packages/django/core/management.py", line 1571, in execute_from_command_line
    action_mapping[action](int(options.verbosity), options.interactive)
  File "/usr/local/lib/python2.4/site-packages/django/core/management.py", line 486, in syncdb
    from django.db import connection, transaction, models, get_creation_module
  File "/usr/local/lib/python2.4/site-packages/django/db/__init__.py", line 11, in ?
    backend = __import__('django.db.backends.%s.base' % settings.DATABASE_ENGINE, {}, {}, [''])
  File "/usr/local/lib/python2.4/site-packages/django/db/backends/sqlite3/base.py", line 18, in ?
    raise ImproperlyConfigured, "Error loading %s module: %s" % (module, e)
django.core.exceptions.ImproperlyConfigured: Error loading pysqlite2 module: No module named pysqlite2
% 

 筆者はFreeBSDで動作確認をとっている。この場合、pysvnやp4pythonはPorts Collectionに入っていないので、自力ビルド&インストールがちょっと面倒だったりする。ほかにもlibresolvはlibcに統合されているので、コンパイルオプションからはずさないとpysvnはコンパイルできないので注意だ。

  • このエントリーをはてなブックマークに追加
関連キーワード
開発

関連ホワイトペーパー

SpecialPR

  • デジタル変革か?ゲームセットか?

    デジタルを駆使する破壊的なプレーヤーの出現、既存のビジネスモデルで競争力を持つプレイヤーはデジタル活用による変革が迫られている。これを読めばデジタル変革の全体像がわかる!

  • 「奉行シリーズ」の電話サポート革命!活用事例をご紹介

    「ナビダイヤル」の「トラフィックレポート」を利用したことで着信前のコール数や
    離脱数など、コールセンターのパフォーマンスをリアルタイムに把握するに成功。詳細はこちらから