
エントリーまたは小麦粉
こんにちは Grailsについて少しお話しし、簡単なWebアプリケーションを作成する方法を示したいと思います。 まず、迅速な開発のための便利で機能的なWebフレームワークを探していました。 私はDjango、Ruby On Rails、およびさまざまなJava開発に交互に目を向けました。 もちろん、私はJava、Spring Framework、Hibernateが好きです。すべて一緒にすると強力なものになります。 しかし、いくつかの点は私に合わなかった:
- 他の現代言語の機能におけるJava言語の遅れ、および言語の設計の制限。 これは、Beanを記述する便利な方法がない場合に表されます-各プロパティにゲッターとセッターのペアを作成するのはやや面倒で、オブジェクトに対して直感的な数学的操作を使用する可能性はありません(演算子のオーバーロード)特定の値で満たされたコレクションを作成します。 これだけでなく、Javaプログラムは、Pythonのような類似のものよりも多少面倒で簡潔になります。
- Webアプリケーションの開発の低速さと複雑さ-多くの場合、作業はコードを書く代わりに、XMLの多数の構成ファイルを設定することになり、追加の調査が必要になります。
私は代替手段を探し始めました。 PHPは、この言語の不完全さと「自転車製造」の伝統のために、すぐに取り払われました。 Pythonが大好きなDjangoは試され、そのシンプルさと便利さが気に入っています。 Djangoで小規模なプロジェクトを行うことは適切だと思いますが、テンプレートエンジンの制限された機能、たとえばテンプレートの条件や変数の割り当ての欠如は好きではありませんでした。 もちろん、テンプレートには最小限のロジックがあるべきだと言う人もいますが、変数やブランチはありません。 実際のプロジェクトでの私の意見では、これにより多くの不便が生じることに反対します。 確かに、Djangoの新しいバージョンでは、これらの問題はすぐに解決されます。 このフレームワークのすべての利点により、私はその手続き指向を好みません-これは純粋に主観的な意見であり、Python自体の手続き指向であり、OOPが昨日だけで登場したかのようであり、プログラミング言語自体のレベルでのアプリケーションコードのセキュリティの欠如も同様です定数はありません。クラスではすべてのメソッドとプロパティがパブリックであり、クラスメンバーをプライベートにするためにアンダースコアを使用する必要があり、コードが非常に読みにくくなります。 私は、RubyをOOPに大きな偏りがあるPythonの改良版と見なしましたが、Rubyを試した多くの人々のように、インタプリタの構文とスローダウンに追われました。 別のものが欲しかった。 そして、私はそれを見つけました-聖杯。
Groovy-Java Next
Javaが大好きな私は、次世代のJavaベースの言語であるGroovyを詳しく調べ始めました。 これは、優れたJava構文を備えたコンパイル済みプログラミング言語であり、使いやすく、簡潔で、強力です。 Groovyプログラムは、Java仮想マシンでバイトコードにコンパイルされます。 主な利点には、コードとライブラリのレベルでのJavaとの互換性、関数型プログラミングのサポート、便利な構文糖、多くの新機能が含まれます。GroovyはJavaクラスとライブラリを使用できるため、すべての経験が得られるわけではありません船外に残ります。 Groovyの欠点の中で、この言語の動的型付けに注意する必要があります-変数の型は明示的に指定できますが、すべてのチェックはコンパイルではなくコード実行の段階で行われます。その結果、Javaに比べて速度が遅くなり、テストで示したように、Groovyコードは平均的です同様のJavaコードの40倍遅い。 しかし、この問題には、まもなく本格的なソリューションが登場すると思います-最近ではGroovy ++が登場しました。これは、1つのプロジェクトで動的型と静的型の両方を使用できる静的コードコンパイラです。 アノテーションを使用して静的型付けが有効になり、テスト結果によると、コードは「クラシック」Javaコードと速度が同等になります。
聖杯
知らない人のために、私はGrailsについて話しています。Grailsは、新世代の言語であるGroovyでWebアプリケーションを開発するためのWebフレームワークです。 なぜ杯? Grailsは、既存の最高のテクノロジーを取り入れています。 イデオロギーは、Ruby on railsに似ており、しばらくの間、Groovy on Railsとまったく同じように呼ばれていました。 Grailsは、Sitemeshテンプレートエンジンとカスタムgspタグを使用したSpring、Hibernateのアドオンです。 単純なアプリケーションを作成するために追加のライブラリが必要なSpringとは異なり、Grailsにはすべて「すぐに使用可能」に含まれており、XML構成を構成する必要はなく、すべての操作は簡単かつ自然な方法で行われます。 Grailsは現在、Java開発リーダーのSpring Sourceが所有しています。 Grailsの機能を拡張するプラグインがあります。たとえば、承認と認証を処理するacegiです。 GrailsはMVCの原則に従い、URLをコントローラーにバインドし、アプリケーションをローカライズし、モデルデータを検証するなどの便利なツールを提供します。 典型的なプロジェクト構造は次のとおりです。
%PROJECT_HOME% + grails-app + conf->設定 +休止状態 +春 BootStrap.groovy->アプリケーションのダウンロード BuildConfig.groovy->ビルド構成 Config.groovy->一般設定 DataSource.groovy->データベース設定 UrlMappings.groovy->コントローラーへのURLバインディング +コントローラー->コントローラー +ドメイン->モデル + i18n->ローカライズ +サービス->サービス + taglib->ユーザータグ + utils->ヘルパークラス +ビュー->ビュー +レイアウト->レイアウト(テンプレートコンテナー) + lib->ライブラリ +プラグイン-> Grailsのプラグイン +スクリプト->スクリプト + src +グルーヴィー + java +メイン +ターゲット +テスト->単体テスト + Webアプリ + WEB-INF
それでは、Grailsを試してみましょう。
クイックスタート
次のツールが必要です。
- Java SDK 1.4以降
- グライル
- メイヴン
- 開発用のIDE。 Spring Sourceから特別なEclipseビルドを選択しました
Grails(http://www.grails.org/Releases)をダウンロードして解凍し、GRAILS_HOME環境変数を設定します。この環境変数は、解凍されたアーカイブへのフルパス(例えば〜/ grails)を指し、GRAILS_HOME / binを起動パスに追加します。 www.grails.org/STS+IntegrationからIDEをダウンロードし、サイトの説明に従ってインストールおよび構成します。
Mavenを使用してtestappアプリケーションのスケルトンを作成しましょう。
$ mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate -DarchetypeGroupId = org.grails -DarchetypeArtifactId = grails-maven-archetype -DarchetypeVersion = 1.2.0 -DgroupId = testapp -DartifactId = testapp
$ cd testapp
$ mvn initialize
Eclipseを実行して、アプリケーションをインポートします。 ファイル->インポート->既存のプロジェクトをワークスペースに
インポート後、次の構造が表示されます。

それでは、アプリケーションを構成しましょう。 grails-app / conf / DataSource.groovyファイルを開き、次の内容を確認します。
dataSource {pooled = true driverClassName = "org.hsqldb.jdbcDriver" username = "sa" password = ""} hibernate {cache.use_second_level_cache = true cache.use_query_cache = true cache.provider_class = 'net.sf.ehcache.hiberacheate.h '} //環境固有の設定environment {development {dataSource {dbCreate = "create-drop" // one' 'create'、 'create-drop'、 'update' url = "jdbc:hsqldb:mem:devDB"}} test {dataSource {dbCreate = "update" url = "jdbc:hsqldb:mem:testDb"}} production {dataSource {dbCreate = "update" url = "jdbc:hsqldb:file:prodDb; shutdown = true"}}}
dataSourceには、データベースに接続するための設定が含まれています。 それらをmysqlで動作するように適合させましょう:
dataSource { プールされた= true driverClassName = "com.mysql.jdbc.Driver" ユーザー名=「ルート」 パスワード= "" }
さらに検討すると、次のセクションが表示されます。
環境{ 開発{ dataSource { ... } }
環境セクションでは、アプリケーションモードについて説明します。 それらの3つだけがあります:開発、テストおよび生産モード。 各モードは、独自のデータベース接続設定を使用します。 現時点では、開発モードに興味があります。設定を次のように修正します。
開発{ dataSource { dbCreate = "更新" url = "jdbc:mysql:// localhost:3306 / testapp" } }
mysqlサービスが実行されており、testappデータベースが作成されていることを確認することを忘れないでください。
次に、grails-app / conf / BuildConfig.groovyファイルを開きます。 上で書いたように、これはアプリケーションのビルドファイルです。 次のコードに興味があります。
リポジトリ{ grailsPlugins() ホーム() //リモートの依存関係の解決を有効にするには、以下のコメントを解除します //パブリックMavenリポジトリから // mavenLocal() // mavenCentral() // mavenRepo "http://snapshots.repository.codehaus.org" // mavenRepo "http://repository.codehaus.org" // mavenRepo "http://download.java.net/maven/2/" // mavenRepo "http://repository.jboss.com/maven2/" } 依存関係{ //ここで 'build'、 'compile'、 'runtime'、 'test'または 'provided'スコープのいずれかで依存関係を指定します。 //ランタイム 'mysql:mysql-connector-java:5.1.5' }
これは、ビルドの依存関係を解決するためのセクションです。 次のように修正します。
リポジトリ{ grailsPlugins() ホーム() //リモートの依存関係の解決を有効にするには、以下のコメントを解除します //パブリックMavenリポジトリから mavenLocal() mavenCentral() // mavenRepo "http://snapshots.repository.codehaus.org" mavenRepo "http://repository.codehaus.org" mavenRepo "http://download.java.net/maven/2/" // mavenRepo "http://repository.jboss.com/maven2/" } 依存関係{ //ここで 'build'、 'compile'、 'runtime'、 'test'または 'provided'スコープのいずれかで依存関係を指定します。 ランタイム 'mysql:mysql-connector-java:5.1.5' }
mysqlドライバーを追加しました。 そして、今度は簡単なアプリケーションを作成します。 最初に、製品モデルを作成します。そのためには、Grailsコンソールでcreate-domain-classコマンドを実行する必要があります。 モデルを作成するとき、データベースにテーブルを手動で作成する必要はありません。Grailsは自分で作成します。 Eclipseで次を開きます: ナビゲート-> Grailsコマンドプロンプトを開いて実行します:
grails> create-domain-class com.testapp.Product
モデルを作成するプロセスは、Eclipseコンソールで確認できます。 作成中に次のメッセージが表示された場合:
アプリケーションはgrailsバージョン[1.2.0]を想定していますが、GRAILS_HOMEはバージョン[1.2.1]です。このGrailsバージョンがアプリケーションが想定するバージョンよりも新しい場合は、正しいGrailsバージョンを使用するか「grailsアップグレード」を実行します。
これは、mavenを使用してgrails 1.2.0のアプリケーションスケルトンを作成し、システムに新しいバージョンがあることを意味します。 指示に従って、アップグレードコマンドを実行します。
grails>アップグレード
モデル作成プロセスが成功した場合、grails-app / domain / Product.groovyに次のコードが表示されます。
パッケージcom.testapp クラスProduct { 静的制約= { } }
モデルに必要なフィールド(製品名、説明、価格)を入力します。
クラスProduct { 文字列名 文字列の説明 フロート価格 静的制約= { 名前(nullable:false、空白:false、サイズ:1..50) 説明(ヌル可能:false、ブランク:false、サイズ:1..255) } 文字列toString(){ 名前を返す; } }
いいね! 次に、彼女のCRUDを作成しましょう。 これを行うために、コントローラーとビューを作成する必要はなく、すべてを生成する1つのコマンドで対応できます。
grails> generate-all com.testapp.Product
その結果、次のことがわかります。
ドメインクラスcom.testapp.Productのビューを生成しています...
ドメインクラスcom.testapp.Productのコントローラーを生成しています...
ドメインクラスcom.testapp.Productの生成が終了しました
このコマンドは生成しました:
com.testapp.ProductControllerコントローラー
grails-app / views / productディレクトリにcreate.gsp、edit.gsp、list.gsp、show.gspを表示します
これで、簡単なアプリケーションの準備ができました。 これで、run-appコマンドを使用して実行できます。 起動されたアプリケーションはローカルホストで利用可能になります:8080 / testapp



