LoginSignup
5
5

More than 5 years have passed since last update.

Exodusで簡単scaffolding(Rust+nickelフレームワーク+PostgreSQLでAngular.jsのSPAのscaffolding)

Last updated at Posted at 2016-02-21

はじめに。

以下の記事です。

  • 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とかのフォルダあるところで行ってね。

  1. まだプロジェクト無かったら以下のコマンドを入力。(hogeプロジェクトが生成される)

    cargo new hoge --bin

  2. hogeプロジェクトに入ります。

    cd hoge

  3. 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のパクリです。 :bowtie:

exodus g movie name:string price:integer description:text

そうすれば、以下にファイルが生成されていることを確認できる。
stringtextも結局は両方共同じものができます。

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にするかも?

5
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5