2008年11月19日水曜日

第13.8回Grailsコードリーディング(その1) Grails本気の入門~2時間でいけるところまでライブコーディング!?をまとめてみました

はぁ〜、終わりました。ってかもう三日たっちゃった。。。
書き出したら長くなってしまったのです。

Javaとか、Webアプリケーション開発の根本的な知識がない、よく分かってない人のために、よく分かってない人がライブコーディングをするというおかしなGCRをやって参りました。

Grails初心者でも簡単なWebアプリケーションをその場で本当に作れるのか、ということで、よく分かっている人がやっても意味がないとので、よく分かってない?私目がやらさせていただくことに。。。おいおい。。。

題材
商品管理っぽいものでやってみました。
商品には、製造メーカーが関連付いているイメージです。

僕なりのポリシー
お客さんのところで開発できるぐらいのレベルで考えているので、細かいところは抜きにして、ある程度形として目に見える、動かせるものを目指します。
なので、scaffoldオンリーでコントローラーには手をいれない方針でいきます。

Pluginを使う
せっかくなので、Grailsで公式リリースされているPluginを入れてみようということで、お客さんのイメージを視覚的に盛り上げるi18n-templates-plugin(表記を日本語にしてみるだけですが)と、管理者と一般権限でユーザに機能制限を与える等のユーザ認証機能を持たせてくれるAcegi-pluginを入れてみました。

TagLibを使う
日付表記がいっつも違和感があるので、社内で使ってるのを使ってみます。別にたいしたことはしてないそうです。日本人向けに表記順番を変えただけだそうです。

実際のGCRのときのPDFはほとんど「僕はプログラマではなくて、どっちか言うと営業っぽい感じですよ、何もできませんよ、でも1年ぐらいはやってますよ」っていう内容ですので、みてもしょうがないかもです。
ただ、ライブコーディングなので、これはやっぱりコミュニケーション、お互いの理解が必要だと思って前段で、まずたっぷり言い訳しておきました。

実際は、簡単なWebアプリケーションを作ってみただけなのですが、そのまま書いても普通のQuickStartと一緒になっちゃうので、ちょっと僕なりの脚色を加えてまとめてみました。

Grailsを使った簡単Webアプリケーション構築のターゲットのお客さんを想定してみる。
男性 40台前半 商品を卸している会社の課長ぐらい?
この男性は東京在住20年目だが、実は名古屋出身で、たまに名古屋弁が出てしまう、ちょっと乱暴な物言いだけど根はいい人で、付き合って2年ぐらい、という感じ。実在しません、あしからず。。。


エクセルでうちの商品の管理してんだけどさあ。A君がVBマクロっての?なんかよーわからんことしとって、そのままやめちゃったんだよねえ。

この前去年の探そうと思ったら一苦労したよ。どこにあるかわからねえから、電話しちゃったよ、A君に。ああ、教えてくれたよ。面倒くさそうに「あそこにあるんじゃないですかぁ」だってよ。今までどんだけ世話してやったかっての。虚しいねえ。。。

そんでもってパスワードかかってるのもあるし、開かねえときたもんだ。。。
ついでに「あくせす」だっけ?なんかデータベースっぽいのにしたらって、事務のねえちゃんが言うんだよ。前の会社はそうしてましたって。知るかってんだ、なあ。

でも、これがねえとさ、困ることもあるんだよねえ。いや、たまにだけどね。もともとちゃんと使ってねえしさ、だって何か触ってエラいことになったら、困るし。なんか良い方法ないかねえ。

あ、お金ならかけらんねえよ。だって、おまえこの不況だぞ。おお、そうだ、上司に愚痴ったらよ、なんとかシステムって会社のわけわかんねえ兄ちゃんを連れてきてさ、要件を教えてくださいってさ。なんだよ、こっちが聞きてえよ、何しに来たんだよってなあ。んでオレも真面目だからさ、一生懸命話した訳よ。したらおめえ、見積もりが来て腰抜けちゃったよ、1000万だと。最初に言えっつんだよなあ。まあせめて100万ぐらいとかさ、だいたい10人もいねえ会社で1000万円ったら1月分売上だぞ。社長に言ったら飛び降りちまうぞ。だからA君クビにしちゃダメだって言ったのに。それみたことか、だよなあ。

んなことしてばっかりだから、いつまでたっても忙しいばっかでさ、先がねえよ。
ホント、オレもケツまくるかなあ。。。

でもさ、いい商品もってんだよね。また新商品考えてみたんだよ、これこれ見て、すげーだろ、コレがなんと9,800円!ほら、欲しいでしょ、キタ?お友達価格で今ならなんと…


売られそうになるので一旦停止して、診断内容をまとめると、
・エクセルで商品を管理していた
・VBマクロを使って計算する部分を作った人がいなくなった
・ファイル管理ができてない
・パスワードを使って、触れる人を制限して安全に扱うべきデータもある
・操作に若干の拒絶反応あり
・システム屋に、やりたいことを全部いったら、見積もりが高すぎて無理
・全社員10人ぐらい、多分使う人は限られている。

こういうタイプのお客さんには、難しいことや金額的な話をしても意味がないので、
「イメージに合うかどうか分かんないけど、ちょっと今から作ってみますわ」と、ライブコーディングを始めてみる、という流れでいきませんか。いや、いきましょう。
多分この課長さんも1時間ぐらいは時間とれるだろうし、相談に乗って想像で話しするより、何か作った方が早くないですか、的なノリです。
でもって、このお客さんが「もしかしたら自分でもできるかも?」と思ってくれたら素晴らしいですね。

※アプリケーション名は、当日「Gcr One」と上原さんが命名してくれました。

1.gcroneというGrailsプロジェクトを作成します。

$ grails create-app gcrone

その後、cd gcroneで移動します。ちなみによく移動を忘れます。今回も。。。
※インストール、QuickStartとかはこっちをみてください。

2.商品データとして、Itemというドメインクラスを作成します。

$ grails create-domain-class item

実行すると、/gcrone/grails-app/domainにItem.groovyが作成されます。



で、お客さんに聞いてみる。「商品って、名前とその詳細と価格と、あと何が必要です?」
「ああ、発売日がないといかんね、商品名だけでわからんから」

3.商品データのドメインクラスにフィールドを定義します
エディタでItem.groovy開いて、商品名、スペック、価格、発売日のフィールドをそれぞれの型で作成します。

class Item {

String name
String spec
Long price
Date release

}

※priceはIntegerでもいいと思いますが、あえて失敗したいので。

4.とりあえずScaffoldしたいので
データ登録、編集、削除、リスト表示を確認してみます。
なので、まずその機能を与えるためのコントローラを作成します。

$ grails create-controller item

実行すると、/grails/grails-app/contollersにItemController.groovyが作成されます。

5.Itemコントローラーにscaffoldを定義します。
今作ったコントローラーItemController.groovyを開いて、
def index...のところを下記に置き換えます。

class ItemController {
def scaffold = true
}

※trueのところはItemでもいいですが、どうも挙動がそれぞれで異なるようです。詳細はまだ調べてなかったです。はい。

6.一回ブラウザでみてみます。
まずは何も考えずにgrails run-appでWebアプリケーションを動作させてみます。
立ち上がったら、http://localhost:8080/gcroneをブラウザで開きます。

$ grails run-app

正常に起動すれば、ターミナルにだらりと起動メッセージが出た後、最後に下記が出てきます。

Server running. Browse to http://localhost:8080/gcrone

成功すると、多分下記のような画面が表示されます。


その2へ続く。。。

1 件のコメント:

nobusue さんのコメント...

ライブコーディング、お疲れ様でした。日ごろお客さんと接してらっしゃるだけあって、エンドユーザーの心に響くポイント(i18nとか)を的確に押さえられていたのは「さすが」と思いました。
ところで、突っ込み役として自分が登場してるのはなぜ!?