はじめに。
以下の記事です。
- Rust(言語)
- Cargo(パッケージ管理ツール)
- nickel(Webフレームワーク)
- PostgreSQL(DB)
- Angular.js(JS)
まえがき
時代はSPA(シングルページアプリケーション)らしい。
あと、ReactJSではなくてごめんなさい。Angular.jsです。
そこで、自動SPAのscaffoldingツールExodus(エクソダス)を使おう。
みなさんはそんなの知らないと思います。
そうですよね。なぜなら私が勝ったに作ったから。
コマンドでSPAのscaffolding(土台)を作ってくれる。
gulp
とかはいりません。npm
のインストール自体もいりません。
名前の由来(興味ない人は読み飛ばしてもいい)
Exodusはモーセが主役の出エジプト記です。
僕のアイコンがモーセなのと、単にかっこいいからそうしました。
要件定義
- Mac OS X
- Rust
- Nickel
- Cargo インストール前提
インストール
brew tap shinriyo/exodus
brew install exodus
公式brewではないのでtapが必要。
一応brewのgithub晒しておきます。
install
コマンドの駄目だしをするならここにpull request
してね。
こちら本体
https://github.com/shinriyo/exodus.rs
使い方
使いたいところのnickelフレームワークでのプロジェクトの中でコマンドを打ちます。
src
とかのフォルダあるところで行ってね。
- まだプロジェクト無かったら以下のコマンドを入力。(
hoge
プロジェクトが生成される)
cargo new hoge --bin
-
hoge
プロジェクトに入ります。
cd hoge
- exodusの初期化コマンドを行う。
exodus init
このコマンドはプロジェクトで一度でいいです。
生成に失敗したらまた行ってね。
すると以下のメッセージが出るはず。
Initialize....
Generated template in src/main.rs.
Generated AngularJS libraries.
Finish initialize.
You shall take [dependencies] of the Cargo.toml your project.
[dependencies]
nickel = "*"
postgres = "0.11"
openssl = "*"
rustc-serialize = "*"
hyper = "*"
あら不思議!以下のものが生成されます
※gulp
を使ってる人はこのありがたみわからないかも?
$ ls src
main.rs
$ ls app/assets/css
app.css bootstrap.min.css
$ ls app/assets/lib
angular-resource.min.js angular-ui-router.min.js angular.min.js
まぁこんな感じでcss
とかAngularJS
のファイル類など”僕が”動作保証しているものをとってきます。
最新版とかではないですよ。
コマンドまだ入れるのためらってる人、以下のgithubのような構成になります。
https://github.com/shinriyo/nickel-helloworld
さてさて、先ほどのこのメッセージをお読みになっただろうか?
You shall take [dependencies] of the Cargo.toml your project.
[dependencies]
nickel = "*"
postgres = "0.11"
openssl = "*"
rustc-serialize = "*"
hyper = "*"
これはモーセの十戒の英語のパロディーですよ。
あなたのCargo.toml
に[dependencies]
の内容を追記してねってこと。
そうしたら準備OK.
モデルの生成
どっかで見たようなコマンドでしょうか?
そうです。Railsのパクリです。
exodus g movie name:string price:integer description:text
そうすれば、以下にファイルが生成されていることを確認できる。
※string
もtext
も結局は両方共同じものができます。
src/movie/mod.rs
このように定義されているでしょうか?
気に入らなければ後でご自身で修正してね。
struct Movie {
_id: Option<i32>,
name: String, price: i16, description: String
}
モデルの生成後のmainへの追記
何を追記するのでしょうか?
実は先程の生成時に見ましたね。
Generate Scaffolding....
[Success] Scaffolding.
You shall add 'mod movie;' against your src/main.rs.
You shall add 'movie::url(shared_connection.clone(), &mut router);' against your src/main.rs.
Run 'cargo run' commandment.
はい、これもモーセの十戒のパロディーですよ。
要はsrc/main.rs
に
mod movie;
をmain()の上の// later you add module there!
の下にに追記。
movie::url(shared_connection.clone(), &mut router);
を// later you add scaffolding url there!
のところの下に追記しよう。
サーバ起動
cargo run
で起動。
最初はbuildが行われるので時間かかります。
ビルドだけしたい人は
cargo build
まぁnickelの時と同じですね。
Running `target/debug/hoge`
Listening on http://[::1]:6767
Ctrl-C to shutdown server
がコンソールに出たらWebアクセスはOK。
DBのテーブル初期化
Djangoでいうsyncdb的なことをやりますが、コマンドではなくこれはアクセするだけ。
簡単でしょう!コマンド作るのがめんどくさかった
単にhttp://localhost:6767/setup/movie
にアクセスするだけです。
PostgreSQLの起動忘れずに!
postgres -D /usr/local/var/postgres
URLはhttp://localhost:6767/setup/モデル名
という規則になってます。
1度しか作れないのでもし、以下のメッセージが出れば2つ作れないよー的なエラーなので無視して完了。
Error running query: Db(DbError { severity: "ERROR", code: DuplicateTable, message: "relation \"movie\" already exists", detail: None, hint: None, position: None, where_: None, schema: None, table: None, column: None, datatype: None, constraint: None, file: "heap.c", line: 1056, routine: "heap_create_with_catalog" })
アクセス
以下にアクセスしてくだい。
追加や削除や編集ができますよ。
あとがき
※気に入った方はプルリクしてみたら変わるかも?
英語でも日本語でも韓国語でも質問受け付けます。
https://github.com/shinriyo/exodus.rs
※今後Python(Django)やGo(beego)とかにも対応するかも?もうAngularJS自体オワコンらしいのでReactにするかも?