私はRubyよりPythonを先に勉強したためか、ほとんどのWebシステムをPythonで書いています。PythonでRailsと同じくらい素晴らしいフレームワークにDjangoがあります。
しかし、Railsをいじってみると、ほとんどの操作がコマンドラインで解決する手軽さには驚きます。
そこで、DjangoでもRails並みの手軽さを実現するためにコマンドラインツールを実装しました。
ここでは、Rails信者とDjango信者が戦う形式でお送りします。
Railsはrails new [app name]
があるから楽!
確かに, Djangoはdjango-admin startproject [project name]
とコマンドラインが冗長で複雑なので覚えていられません。
なのでMirageでは
mg new
このように実行できるようにしました。
new
コマンドを叩くだけで自動的にインタラクティブシェルが聞いてくる内容に答えるだけです。
また、
mg new:ng
でAngularのプロジェクトを自動で作成できるようにしました。さらに--material
などのオプションでテーマも一緒にインストールされます。
mg new:react
React+Reduxの組み合わせにも対応しています。
RailsのAssets PipelineのようなDjangoとより密接な連携が取れるようにする予定です。
rails g controller hoge huga etc...
ないでしょ?
ないですね。そもそもcontroller自体がないと言っても良いのですが、それと同じような働きをするものにDjangoではappというものがあり、頻繁に作成します。python manage.py startapp [app name]
とこれもまたコマンドが冗長です。
なのでMirageでは
mg g app hode huga etc...
このように実行できるようにしました。
- DjangoにはRailsのControllerというのはないです。(Controllerっぽいのはあります)コントローラと同じくらい頻繁に作成するappというものがあります。
まっModelをコマンド一発で作れないっしょ!
確かに、無理ですね。RailsとDjangoのモデルは似ているようで似つかないのですが、いちいちmodels.py
にモデルクラスを書く必要があります。正確にはモデルクラスにテーブル構造を定義することによってマイグレーションを自動で作成してくれます。
Railsなら
rails g model ModelName value:string number:integer
みたいにコマンド一発でできます。
なのでMirageでは
mg g model ModelClass value:string number:integer
このように実行できるようにしました。
ちゃんとモデルクラスも作成されています。
from django.db import models
# Create your models here.
class ModelClass(models.Model):
value = models.CharField(max_length=255)
number = models.IntegerField()
さらに、文字列の長さを宣言するなどの高度なオプションもコマンドラインで一緒に作れるようにしました。
例えば、uuidカラムをプライマリーキーとしてセットし、文字列の長さを30文字にしたいなどの操作をする場合、
mg g model TestModel uuid:uuid+primary=True script:string+maxlen=400
このようにカラム名とデータ型とともにフィールドオプションを同時に定義できます。
なお、このコマンドによって作成されるクラスは以下のようになっています。
class TestModel(models.Model):
uuid = models.CharField(max_length=30, primary_key=True)
script = models.CharField(max_length=400)
デバッグサーバー立てるの簡単rails s
Djangoのデバッグサーバーはpython manage.py runserver
と非常に長いコマンドを実行しなければなりません。
ここはRailsに習ってmg s
これで起動するようにしました。
RailsのCLIに追いつけ追い越せ
Railsはcontrollerを削除する機能にdestroyコマンドがあります。しかし、destroyしてしまうと復元ができなくなります。現在はgitを使うことが多いので間違えて消してしまっても問題にならないかもしれませんが、コミットし忘れたりした場合に後悔することになります。ですからDjangoではdestoryする際にバックアップを自動的に取るようにしました。
今後
-
Django Rest API Franework周りのサポートを加える。
-
アプリ単位をほかのプロジェクトに移植できる機能を追加する。
Githubとインストール
Django Consoleというパッケージがすでに存在したためDjango Mirageに改めさせていただきました。
pip install django-mirage