Django の便利な外部モジュール  dj-database-url

記事
IT・テクノロジー

Django の便利な外部モジュール  dj-database-url

Django で利用できる便利なモジュールに「dj-database-url」があります。機能をちょっと見ただけだと余りメリットがないように見えますが、便利な外部モジュールです。特に、開発に「SQLite」を利用する場合は、インターネットに公開する際は別の SQL データベースに置き換えるケースが殆どです。こうした切り替えを上手く管理できるモジュールです。

公開の際はデータベースを入れ替える場合が殆どです!

前回も触れましたが、Django の開発時とインターネットに公開時では設定が違うのが普通です。 特にデータベースは、Web アプリや Web サービスの性能に影響する部分なので、公開時には MySQL や PostgreSQL など本格的な SQL データベースを使うのが普通です。 SQLite はデータベースと行っても一つのファイルにデータを保村する簡易的なデータベースなので、沢山の人が同時にアクセスするような使用は想定されていません。しかし、開発時は開発者以外のアクセスは基本的にないので、こうしたシンプルなデータベースで開発しても大きな問題ではありません。SQLite の場合、SQLiteBrowser など、データベースの中身をチェックできる便利なツールもあるので、開発時には便利です。

先日紹介した、「django-configurations」で環境変数を使えばこの問題にも対処できますが、データベースの指定には、「dj-database-url」も便利です。

dj-database-url を利用するには、外部のモジュールのためインストールが必要です。 インストールは「pip」で行いますが、Django のプロジェクト環境で使用している仮想環境にインストールします。こうすることで、システム全体の設定には影響を与えずに、Django のプロジェクトに限定してモジュールをインストールすることができます。

$ pip3 install dj-database-url
でインストールできます。

Django で使用するデータベースの指定

通常は、Django のプロジェクトフォルダにある「settings.py」に以下のような記述をして使用するデータベースを指定します。

DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.sqlite3',
            'NAME': BASE_DIR / 'db.sqlite3',
        }
    }
Django の標準設定では、「SQLite」を利用する設定になっています。 データベースは、プロジェクトフォルダに作成される「db.sqlite3」がデータベースの実態です。

この記述を、「dj-database-url」を使うと以下のように書き換える事ができます。

import dj_database_url
DATABASES = {
    'default': dj_database_url.parse('sqlite:///{}db.sqlite3'.format(BASE_DIR))
}
記述的には記述のフォーマットが変わった程度で大きな差はありません。

データベースに MySQL を使う場合は以下のようになります。

* データベースのユーザー名:user_name
* データベースのユーザーのパスワード: password
* データベースのホスト名(IP アドレス): localhost
* アクセスの為のポート番号:port
* データベースの名前: database_name
の場合以下にようになります。

DATABASES = {
    'default': dj_database_url.parse('mysql://user_name:password@localhost:port/database_name')
}
URL 形式にすると、Python のディクショナリー形式ではなく、一行で記述できる程度で、これでも余りメリットは感じられないかと思います。この辺りが、dj-database-url を余り魅力的に感じない理由です。

環境変数を使うと便利になる!

実は、dj-database-url の真価は環境変数と併用する事にあります。 どういうことかというと、このデータベースの URL の設定を環境変数から読み込ませるようにすると格段に便利になります。こうすることで、データベースの設定を「settings.py」を書き換える事なく、「外側」から変更できるようになります。

DATABASES = { 'default': dj_database_url.config() }
記述がシンプルになっています。この設定にすると、データベースの設定は、「DATABASE_URL」という環境変数から読み込むようになります。これで、環境変数の指定を外部から変更できるようになります。

このままだと、環境変数を指定しない場合は、データベースの設定が読み込めないことになるので、デフォルトの設定を予め指定しておくことができます。

DATABASES = {'default': dj_database_url.config(default='sqlite:///{}db.sqlite3'.format(BASE_DIR))}
これで、環境変数の指定がない場合には、Django の標準設定である、「SQLite」を利用して、環境変数をしてすると、別の SQL データベースを利用できるようになります。

こうすることで、開発用は SQLite で行って、インターネットに公開する際は、別の SQL データベースを指定することが、「settings.py」を書き換えることなく可能になります。

切り替えを簡単にする事を考える!

前回紹介した、環境変数やクラスによる設定もそうですが、開発用とインターネットの公開用の設定をどう管理するかは意外に重要な事です。設定を変更する度にファイルを入れ替えたりするのは面倒ですし、ミスも起こりやすい部分です。特に、設定ファイルが2つある場合は、共通で使用する設定を変更した場合など、両方の設定を忘れずに更新するのは意外に大変でミスが起こりやすくなります。こうしたミスは見つけるのも大変です。


切り替えをスムーズにして、設定をできるだけ共通にする事で、ミスを減らして開発やデバッグの効率を向上させることを考える事はとても重要です。

まとめ

dj-database-url は一見すると、「なんで使うの?」と思ってしまう感じです。説明を簡単に見ただけではメリットもわかりづらく、利用している人も意外に少ないようです。 しかし、環境変数と併用して、データベースの指定を柔軟に管理できる仕組みに大きく貢献する外部モジュールです。開発用のデータベースは、Django の標準設定のデータベースを利用するようにしておいて、公開時に環境変数で上書きして設定を変更できるようにしておくと、開発と公開用の切り替えもスムーズにできますし、デバッグの際にも稼働中のデータベースを切り離して問題の調査を行うことも簡単にできます。

Javascript の場合も同じですが、GitHub などをはじめとして、便利で使いやすいモジュールがインターネット上で公開されていて、全て自分で作らなくても利用できる時代になっています。

外部のモジュールを上手く活用して開発を進めると、効率的に高品質の開発が可能になります!
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す