ラベル Groovy の投稿を表示しています。 すべての投稿を表示
ラベル Groovy の投稿を表示しています。 すべての投稿を表示

2008年2月11日月曜日

Grailsを触る その3

前回までに加えてちょっと調べた。

  • 初期データが無いのは不便すぐる。
    • 「conf/BootStrap.groovy」に記述する。def init = { servletContext-> } 内にdomail classを作成→save(),をずらずら書けば毎回同じデータが読み込まれる。
  • Databaseの設定は「conf/DataSource.groovy」に記述されている。defaultでは3種類の実行モード「development」「test」「production」ごとに違うDatabase設定がされている。ここでdevelopmentの設定をmemoryモードではなくfileモードにすれば動作確認中に入力したデータを保持できるはずだ。たぶん、そぅなるはず。
  • かなり愕然とした発見。Groovyではセミコロンがあってもエラーにならない。色んなサンプルをみるとセミコロンが入ったソースが無かったため、てっきりセミコロンはダメなんだと思ってた。つい癖で入力してしまったセミコロンを消す作業をものすごいたくさんやったのに。それこそ、書いたソースコードの行数以上のセミコロンを消したのに。
  • 「$ grails test-app」でtest配下にあるTestを実行する事ができる。
  • 「$ grails install-plugin webtest」とすると、Canoo WebTestを使用することができる。Seleniumではないのね。
  • Canoo WebTestのTestCaseを実行するには「$ grails run-webtest」とする。
これらを見た後、grails-wicketプラグインを試そうと思ったけど、動作させることができなかった。GORMとgrailsのrailsっぽいジェネレータを使いつつWicket、とか素敵だな!と思うけど、あきらめる。grailsのバージョンを下げたらイケるとの情報があったけど、そこまでしてGrails+Wicketをやる気は出なかった。じっくりと、grailsの(といぅかRailsの)何に興味を持ったのか?と考えると、たぶん以下の点。
  • ActiveRecord。まずはコレ。
  • 各種Classの「ジェネレート」機能。
これだけ…かな?Railsを使ったことが無いから、RoRの利点は体感していないからこれくらいしか浮かばない。Test云々はRoRに限ったものではない、Javaでも同じ事だし。 このふたつのうち後者の方はEclipseのPluginを作れば実現できるだろぅ。前者はjPersistかactiveobjectsといぅ事になるか。後ろはこれらでやって、Presentation層にWicketを使う。これが自分の理想だろぅか?たぶん違う。Presentation層がwicketでは不十分。wicketの利点としてよく唄われるPOHPが邪魔だ。自分の理想では、Temaplteがないこと。管理するリソースは少ない方が良いし。 JFrameを作るようにWebPageをサーバ側で構築し、デザインはCSSとして完全に外出しする。CSSとComponentの接続はid値とclass値のみ。これがたぶん理想。だがしかし、それができるPresentation層のFrameworkが見つからん!Wicketが一番近いのは間違い無さそうなんだが…。あぁ、GWTも近いといえば近いのか?

2008年2月9日土曜日

Grailsに触る その2

前回のエントリでGrailsのInstallと動作確認をした。そこで、以下の簡単なアプリを作るとした。
  • メンバ管理
  • メンバにぶら下がるタスク管理
まずはそれぞれのModelを作る必要がある。それぞれ「Member」「Task」というClassにする。
  1. まずはMemberClassを作成する。以下のコマンドを実行する。
    $ grails create-domain-class Member
  2. 以下の2行が含まれたメッセージが表示される。
    Created for Member ... Created Tests for Member
    なんかTestCaseの雛形も一緒に出してくれるっぽい。Railsもこぅなんだろぅな。
  3. 生成された「grails-app/domain/Member.groovy」を編集する。
    class Member {
      Long id
      String name
      String password
    }
    Groovyがわかってないので見よう見まねで作っただけ。
  4. 次にTask…ではなく、まずはWebAppとして動作させたいためControllerを作成することにする。以下のコマンドを実行する。
    $ grails create-controller Member
  5. 以下の2行が含まれたメッセージが表示される。
    Created Controller for Member ... Created ControllerTests for Member
    これまたTestCaseの雛形も一緒に出してくれる。いいですね。
  6. 生成された「grails-app/controllers/MemberController.groovy」を以下のように編集する。
    class MemberController {
       def scaffold = Member
    }
    生成された時には「def index = { }」があったけど、それを「def scaffold = Member」に置き換えただけ。これを書いておくと、viewを勝手に生成してくれるよぅだ。scaffoldだし。
  7. この状態で、$ grails run-app する。
  8. 起動が完了したら、ブラウザから「http://localhost:8080/studyGrails/member」を開く。すると「http://localhost:8080/studyGrails/member/list」にリダイレクトされて、空っぽのMember一覧が表示される。
  9. ここで[New Member]をClickすると「http://localhost:8080/studyGrails/member/create」へリダイレクトされ、Memberの編集画面となる。idフィールドが無いということは自動生成するフィールドとして自動で認識されている、といぅ事か。適当にnameとpasswordを入力して[create]ボタンをClickする。
  10. 「http://localhost:8080/studyGrails/member/show/1」へリダイレクトされる。なんかRESTっぽいURLの指定だ。再び「http://localhost:8080/studyGrails/member」を開いて見ると、listへリダイレクトされて入力したデータが表示されている事が確認できる。
次に、Taskを追加する。基本的にはMemberと同じ事をやるだけなので、端折って書く。
  1. $ grails create-domain-class Task
    $ grails create-controller Task
  2. Modelであるgrails-app/domain/Task.groovyは以下のように編集する。
    class Task {
        Member member
        Long id
        String name
    }
    Memberへの関連をmember_idではなく、MemberClassのオブジェクトとして定義する。ちょっとJavaっぽい。
  3. ただし、関連の設定はMember側にも必要なのでgrails-app/domain/MemberにhasManyの関係を指示するために以下の一行を追加する。
    static hasMany = [tasks:Task]
    あんまりJavaっぽくない。てっきり「List tasks」みたいな書き方を想像したのに。けど、なんかおもしろい指定方法だな。
  4. Controllerであるgrails-app/controllers/TaskController,groovyはさっきと同じようにscaffoldになんとかしてもらう。
    class TaskController {
        def scaffold = Task
    }
  5. この状態で再び$ grails run-appして、「http://localhost:8080/studyGrails/member」を開く。
  6. さっき実行したときに入力したデータが消えている。orz デフォルトで使用されるHSQLDBは毎回作成されるモードが適用されているよぅだ。めげずにまたデータを入力して、Memberを登録した後の一覧画面で確認する。そこから「id」フィールドの値をClickするとMemberの詳細表示画面へ遷移する。
  7. そこで[Edit]をClickすると編集画面へ遷移するが、「Tasks」フィールドに「Add Task」のLinkが存在している。これは想像通り、Taskを追加する画面へ遷移するLinkで、もちろんTaskの追加ができる。
  8. ただし!Taskの登録画面には遷移するものの、元々のMemberのidまでは引き継がれていない。Memberの選択はComboBoxとなっているのは、Model作成時にちゃんと関連を設定しているからだが、ちょっと残念。
色々問題はあるにせよ、Grailsではこんなカンジで作成していくよぅだ。
  • scaffoldを素で使用しているだけでは実用的なアプリは絶対無理。
となると、GSPというJSPのGroovy版を触っていくことになるが、それ以前にGroovyがわかってない自分には敷居が高そうだ。たぶんGrailsは使わないだろぅと思った。だが、ControllerのTestClassとかも生成されていたりするし、ControllerのTest方法が気になる。何かの参考になるかもしれんのでGrailsのTest機能も試しておく必要ありそうだ。忘れないうちに「GrailsのControllerのTestがどーなってんのか試してみる」というTaskを追加しておいた。 でも、コマンドプロンプトでctrl+c押すとgrailsが止まってMemberデータもTaskデータも消えちゃぅんですけどね。

2008年2月8日金曜日

Grailsに触る

そもそもRailsも実際に触ったことが無い、Groovyもほんの少ーし触った程度で何にも覚えてない、そんな自分が簡単なWebアプリをGrailsを作ろうとするとどぅなるんだろぅ?という疑問もあるし、やってみる。1.0がリリースされたし。Grailsは日本語ページもあるので、基本的にはそこのQuickStartのとおりにやればなんかできんじゃねぇの、といぅ楽観的な考えで挑んでみる。でも、ほんっっと触るだけ。深入りしない。
  1. GrailのページにあるInstallationにあるLinkからGrailsを落としてくる。自分の場合はbinaryをzipで落としてきた。
  2. モジュールをどこかに解凍する。自分の場合は、手作業で導入するアプリケーションはすべて「/opt」に展開しているので、同様にして「/opt/grails-1.0」とした。Linux的にこの場所を使うのが正しいかは知らん。そんな事はどーでもいい。
  3. 「GRAILS_HOME」「JAVA_HOME」の設定が必要、との事だったので「/opt/grails-1.0/bin/grails」をTextEditorで開いて以下の2行を追加した。
    export GRAILS_HOME=/opt/grails-1.0
    export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun-1.5.0.13
  4. どこからでもgrailsのコマンドを使えるように、PATHに「/opt/grail-1.0/bin」を追加する。これでInstallは終わり。
  5. まずはgrailsプロジェクトをひとつ作成してみる。コマンドプロンプト(terminal)を開く。project用のフォルダが作成されるので、そのフォルダが作られても構わないフォルダにカレントフォルダを移動して、以下を実行する。
    $ grails create-app
  6. 以下のようなメッセージが表示される。
    Welcome to Grails 1.0 - http://grails.org/
    Licensed under Apache Standard License 2.0
    Grails home is set to: /opt/grails-1.0
    
    Base Directory: /projects
    Environment set to development
    Note: No plugin scripts found
    Running script /opt/grails-1.0/scripts/CreateApp.groovy
    Application name not specified. Please enter:
  7. ここでプロンプトが止まっているはずなので、作成するprojectの名前を入力する。project用のフォルダ名にも使用される。とりあえず「studyGrails」とか入力してみた。
  8. またcreate-appの処理が続行される。
        [mkdir] Created dir: /projects/studyGrails/src
     [mkdir] Created dir: /projects/studyGrails/src/java
    ...
    [propertyfile] Creating new property file: /projects/studyGrails/application.properties
      [copy] Copying 2 files to /projects/studyGrails
      [copy] Copying 2 files to /projects/studyGrails/web-app/WEB-INF
    ...
    [propertyfile] Updating property file: /projects/studyGrails/application.properties
    Created Grails Application at /projects/studyGrails
  9. 結構時間がかかるよぅだが、これでGrailsのWebAppの雛形ができているらしい。確かにstudyGrailsというフォルダが作成されている。まずはこのフォルダへカレントフォルダを移動する。
    cd studyGrails
  10. そこで、以下のコマンドを実行して、作成されたWebAppの動作を確認してみる。
    $ grails run-app
  11. 以下のようなメッセージがつらつらと表示される。これまた起動までに少し時間がかかる。
    Base Directory: /projects/studyGrails
    Environment set to development
    Note: No plugin scripts found
    Running script /opt/grails-1.0/scripts/RunApp.groovy
       [mkdir] Created dir: /projects/studyGrails/web-app/WEB-INF/lib
       [mkdir] Created dir: /home/shin1/.grails/1.0/projects/studyGrails/classes
    ...
    2008-02-08 01:32:03.089:/studyGrails:INFO:  Initializing Spring FrameworkServlet 'grails'
    2008-02-08 01:32:03.562::INFO:  Started SelectChannelConnector@0.0.0.0:8080
    Server running. Browse to http://localhost:8080/studyGrails
    最後に「Server running.」が見えていれば大丈夫なはず。ブラウザから「http://localhost:8080/studyGrails」を表示して、「Welcome to Grails」が見えたらちゃんと動作している、という事。
  12. 動作確認が終わったら、「ctrl+c」でWebAppを停止させる。
mavenでwicketなどのquick-startを使うのと同じカンジの手軽さでWebAppの雛形が作成できるようだ。ただ、ひとつひとつのコマンドの実行が遅い! ちなみに、作成されたフォルダを開くとあまりにもファイルが多くてびっくりする。hibernateやspringの設定も出力されている。これらを触らずに済めば良いなぁと願って、何か簡単なモノを作ってみることにする。
  • メンバ管理
  • メンバにぶら下がるタスク管理
これらをメンテナンスする単純なアプリを作ってみることにする。が、続きは明日のエントリで。

2007年10月22日月曜日

色々リリース

Selenium Remote Control 0.9.2 (September 20, 2007)

New in this release:
  • New PHP driver lets you write Selenium RC tests in PHP
  • Fixed our long broken Firefox 2 browser launcher
  • We can now reliably launch/kill IE7 on Vista in Protected mode with UAC enabled
  • New "captureScreenshot" command lets you capture PNG screenshots and save them to disk
  • New "getXpathCount" command tells you how many elements match a given XPath expression
  • New "addLocationStrategy" command lets you define new ways to locate elements on the page
  • Vastly improved stability in proxy injection mode -- it will probably become the default in a future version of Selenium RC.
  • Totally revamped logging
This release also includes a few small changes to the API:
  • "windowMaximize" and "windowFocus" no longer take an argument; just "selectWindow" to the window you want to maximize/focus before you call them.
  • The "getLogMessages" accessor has been removed; it never really worked properly anyway, and we now support much more sophisticated logging.
  • "setContext" no longer takes a logging level; use "setBrowserLogLevel" instead
スクリーンショット取れるらすぃです。waitForLoad()でしょっちゅう応答ナシになる状況は改善されているのかなぁ?

ZDNet | 「Groovy 1.1-beta-3」リリース:10月にファイナル版リリースを目指す

Groovy全然触ってない。Eclipse の Pluginもあるみたいだから今更ながら触ってみるか…Java7の予習になるかもしれないし。

2007年10月17日水曜日

Groovy1.1-RC1

マイコミ | 性能改善された"Groovy 1.1-RC-1"公開 - G2OneでGroovy/Grails支援を本格化

Windows用のInstallerもあるみたい。
リリースの2日後となる14日(米国時間)にはGroovy 1.1-RC-1バイナリ、APIドキュメント、Wiki PDFスナップショット、ネイティブローンチャー、Gant 0.33、Scriptom 1.2、最新のGraphicsBuilder、SwingXBuilder 0.1.2などを同梱した「Windows-Installer for Groovy 1.1 RC1」が公開された。
Groovyはパフォーマンスアップ、Java5のサポートの不具合修正などのようです。特に後者は興味あり。ついでに最近気づいて読んだ昔の記事、なんと3年前w