(Quick Reference)

18 スカッフォルド - Reference Documentation

Authors: Graeme Rocher, Peter Ledbrook, Marc Palmer, Jeff Brown, Luke Daley, Burt Beckwith

Version: 2.3.0

Translated by: T.Yamamoto, Japanese Grails Doc Translating Team. Special thanks to NTT Software.
【注意】このドキュメントの内容はスナップショットバージョンを元に*意訳*されているため、一部現行バージョンでは未対応の機能もあります。

18 スカッフォルド

Scaffolding lets you generate some basic CRUD interfaces for a domain class, including:
スカッフォルドは以下を含むドメインクラスの基礎的なCRUDインターフェイスを自動生成します。

  • The necessary views
  • Controller actions for create/read/update/delete (CRUD) operations

  • 必要なビュー
  • 作成/参照/更新/削除(CRUD)処理のコントローラアクション

As of Grails 2.3, the scaffolding feature has been moved to a plugin. By default this is configured for installation in new applications, but if you are upgrading from a previous version of Grails you will need to add the following configuration to your BuildConfig.groovy file:

plugins {
        …
        compile ">>
        …
    }

Version 1.0.0 of the plugin provides the same scaffolding seen in Grails 2.2.x and below. Version 2.0.x of the scaffolding plugin includes different scaffolding templates that are aligned with the new REST APIs introcued in Grails 2.3 and above.

Dynamic Scaffolding

動的スカッフォルド

The simplest way to get started with scaffolding is to enable it with the scaffold property. Set the scaffold property in the controller to true for the Book domain class:
スカッフォルドを利用する一番シンプルな方法はscaffoldプロパティを設定することです。以下はBookドメインクラスのコントローラにてscaffoldプロパティをtrueに設定しています。

class BookController {
    static scaffold = true
}

This works because the BookController follows the same naming convention as the Book domain class. To scaffold a specific domain class we could reference the class directly in the scaffold property:
これが動作するのはBookControllerBookドメインクラスと同じ命名規則に従っているためです。特定のドメインクラスに対してスカッフォルドを利用する場合、以下の様にscaffoldプロパティからそのクラスを直接参照できます。

class SomeController {
    static scaffold = Author
}

With this configured, when you start your application the actions and views will be auto-generated at runtime. The following actions are dynamically implemented by default by the runtime scaffolding mechanism:
この設定により、アプリケーション実行時にアクションとビューが自動生成されます。以下のアクションはデフォルトで実行時に動的生成されます。

  • index
  • show
  • edit
  • delete
  • create
  • save
  • update

  • index
  • show
  • edit
  • delete
  • create
  • save
  • update

A CRUD interface will also be generated. To access this open http://localhost:8080/app/book in a browser.
CRUDインターフェイスもまた生成されます。これらにアクセスするにはブラウザからhttp://localhost:8080/app/bookを開いてください。

If you prefer to keep your domain model in Java and mapped with Hibernate you can still use scaffolding, simply import the domain class and set its name as the scaffold argument.
JavaとHibernateマップのドメインモデルを保ったままスカッフォルドを使いたい場合は、そのドメインクラスをインポートしその名前をscaffoldの引数に設定してください。

You can add new actions to a scaffolded controller, for example:
以下例のように、スカッフォルドのコントローラに新たなアクションを追加することができます。

class BookController {

static scaffold = Book

def changeAuthor() { def b = Book.get(params.id) b.author = Author.get(params["author.id"]) b.save()

// redirect to a scaffolded action redirect(action:show) } }

You can also override the scaffolded actions:
スカッフォルドのアクションを上書きすることもできます。

class BookController {

static scaffold = Book

// overrides scaffolded action to return both authors and books def index() { [bookInstanceList: Book.list(), bookInstanceTotal: Book.count(), authorInstanceList: Author.list()] }

def show() { def book = Book.get(params.id) log.error(book) [bookInstance : book] } }

All of this is what is known as "dynamic scaffolding" where the CRUD interface is generated dynamically at runtime.
これらはCRUDインターフェイスが実行時に動的に生成される"動的スカッフォルド"として知られています。

By default, the size of text areas in scaffolded views is defined in the CSS, so adding 'rows' and 'cols' attributes will have no effect.

Also, the standard scaffold views expect model variables of the form <propertyName>InstanceList for collections and <propertyName>Instance for single instances. It's tempting to use properties like 'books' and 'book', but those won't work.

デフォルトではスカッフォルドで生成されるビューのテキストエリアのサイズはCSSで定義されているため、'rows'や'cols'属性追加は無効です。 また標準的なスカッフォルドのビューはコレクションには<propertyName>InstanceList書式の変数モデルを期待し、シングルインスタンスには<propertyName>Instanceを期待します。'books'や'book'といったプロパティを使ってみたくなるかもしれませんが、うまく機能しません。

Customizing the Generated Views

生成されるビューのカスタマイズ

The views adapt to Validation constraints. For example you can change the order that fields appear in the views simply by re-ordering the constraints in the builder:
ビューはバリデーション制約に従います。例えばビルダー内の制約順序を入れ替えるだけで、簡単にビュー上のフィールド表示順序を入れ替えることができます。

def constraints = {
    title()
    releaseDate()
}

You can also get the generator to generate lists instead of text inputs if you use the inList constraint:
またinList制約を使うとテキスト入力の代わりにリストを生成することができます。

def constraints = {
    title()
    category(inList: ["Fiction", "Non-fiction", "Biography"])
    releaseDate()
}

Or if you use the range constraint on a number:
あるいは以下のように数字と共にrange制約を使用することもできます。

def constraints = {
    age(range:18..65)
}

Restricting the size with a constraint also effects how many characters can be entered in the generated view:
以下のような制約によるサイズ制限は、生成されたビュー内で何文字入力できるかに影響します。

def constraints = {
    name(size:0..30)
}

Static Scaffolding

静的スカッフォルド

Grails also supports "static" scaffolding.
Grailsは"静的な"スカッフォルドもサポートします。

The above scaffolding features are useful but in real world situations it's likely that you will want to customize the logic and views. Grails lets you generate a controller and the views used to create the above interface from the command line. To generate a controller type:
前述したスカッフォルドの機能は便利ですが、現実的にはそのロジックとビューをカスタマイズしたくなることでしょう。Grailsでは、前述のCRUDインターフェースを表示するためのコントローラとビューを、静的なファイルとしてコマンドラインから生成することができます。

grails generate-controller Book

or to generate the views:
ビューを生成するには以下の通りです。

grails generate-views Book

or to generate everything:
すべて生成するには以下の通りです。

grails generate-all Book

If you have a domain class in a package or are generating from a Hibernate mapped class remember to include the fully qualified package name:
パッケージ内にドメインクラスがある場合、またはHibernateマップクラスから生成する場合は完全修飾パッケージ名で指定することを忘れないでください。

grails generate-all com.bookstore.Book

Customizing the Scaffolding templates

スカッフォルドテンプレートのカスタマイズ

The templates used by Grails to generate the controller and views can be customized by installing the templates with the install-templates command.
Grailsでコントローラやビューを生成するのに使用されているテンプレートはテンプレートをインストールすることによりカスタマイズできます。テンプレートのインストールはinstall-templatesコマンドを使用してください。