Date:  Wed, 04 Nov 2009 17:51:22 +0900
Subject:  【オブジェクト倶楽部: 2009-37号】
X-Mail-Count: 00312

       ┏━━━━━━━━━━━━━━━━━━━━━━━━━━■
       ┃                         ■┃
      ●┃● ● オ ブ ジ ェ ク ト 倶 楽 部   ■ ┃
       ┃                       ■  ┃
       ┗━━━━━━━━━━━━━━━━━━━━━━■━━━┛
                          No.302 2009/11/04

■ I N D E X
┃
┣【特集】アレグザンダー祭りへの道 [1]
┣【プログラミング】SproutCoreでカッコイイ
┃                  Webアプリケーションを作りたい [10]
┗【アンケート】気になるシステム業界 ホントのところ

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┗【特集】アレグザンダー祭りへの道 [1]

著者:懸田剛(オブジェクト倶楽部)

● はじめに
今週から3週にわたって、2010年1月15日に開催予定のオブジェクト倶楽部主催
「アレグザンダー祭り(仮称)」の紹介記事を連載します。そもそもなぜ、この
ようなイベントを開催しようと考えたのか、そのきっかけを伝えて、イベント
への興味を持って頂くことが目的となります。イベント自体についての情報は
本連載中ではなく、別途イベントのアンケートサイト[*1]や申し込みサイト(予
定)にて公開しますのでご期待ください。

● デザインパターンやeXtreme Programmingをご存知ですか?
デザインパターンとは、ソフトウェア設計における問題領域に対して先人達が
解決してきた、典型的な設計の定石集です。オブジェクト倶楽部メルマガ読者
の皆さんなら、殆どの方がご存知でしょうか。1995年の「デザインパターン」
の出版以来、デザインパターンは、世界のエンジニアに広く利用されてきてい
ます。デザインパターンという名前を知らなくても、「〜Factory」「〜Adaptor」
「〜Visitor」「〜Proxy」というクラス名を見たことのあるプログラマの方は
多いと思います。現在皆さんが日々利用しているフレームワークやライブラリ
は、多かれ少なかれ、デザインパターンの恩恵を受けているといっても過言で
はありません。

eXtreme Programming(XP)は、ケント・ベック氏がまとめた、開発者とユーザー
が協調して、価値のあるソフトウェアを作りあげるための方法論です。今では
アジャイルプロセスという分野のひとつとして数えられるXPですが、1999年の
「XP Explained」の出版当時は、プラクティスと呼ばれるスタートラインとし
ての実践集と、その背景にある価値観、そして実践に際して守るべき原則とい
う構成は、多くのソフトウェアエンジニアに影響を与えました。

一見、まったく別の領域のムーブメントのように見える両者が、元を辿ってい
くと、実は同じ源泉に行きつきます。それが建築家クリストファー・アレグザ
ンダーという人物です。

● アレグザンダーとその影響
クリストファー・アレグザンダー氏は、1980年代までに2冊の著作を出版しまし
た。ひとつは『A Pattern Language』、もうひとつは『The Timeless Way of 
Building』。この2冊の著作が、後にソフトウェアという新しい分野の一側面を
担うことになったのです。

『A Pattern Language(邦題:パターンラゲージ)』
都市から町、そして細部に至っては住居内のレイアウトに至る広範囲に渡って、
長年様々な文化で培われてきた「よい設計」という定石を、パターンという形
式に編纂し253個のパターンにまとめました。そしてこれらのパターンは単に一
覧でまとまっているというだけでなく、それぞれ別々のスケールのパターンを
組合せることによって「心地良いデザイン」を生み出すという、単語を組合せ
ることによって言葉を紡ぎだすのと同じように、パターンの組合せによってデ
ザインを生成するというランゲージという視点を踏まえた野心的な試みです。
この「パターンランゲージ」というアプローチに大きく影響を受けた結果、生
まれたものが「デザインパターン」なのです。

『The Timeless Way of Building(邦題:時を超えた建設の道)』
パターンランゲージ」の背景にあるアレグザンダーの理論を記した書で、大き
く分けると、施主が建築プロセスに参加するという住人つまりエンドユーザー
参加の視点、そして少数の建築家が作成した設計図に従って作っていくのでは
なく、漸進的に小さなプロジェクトを進めることで全体を作りあげていくとい
う漸進的成長のプロセスを提唱しました。ケント・ベック氏がオレゴン大学在
学中に生協で本書を読んだ経験が、XPに強い影響を与えたと本人も認めていま
す。[*2]

アレグザンダー氏とソフトウェアの歴史的経緯と関係性は、江渡浩一郎氏の
『パターン、Wiki、XP〜時を超えた創造の原則』に詳しく述べられていますの
で、ぜひ御一読ください。

● アレグザンダーから学ぶもの?
ここまでの説明の通り、アレグザンダーの思想、方法論は、ソフトウェア開発
においてはソフトウェアパターンやXPを始めとするアジャイルプロセスという
形で成果を挙げてきましたし、今後も成果を挙げ続けるでしょう。しかし、も
う我々ソフトウェア開発のコンテキストにおいては、アレグザンダーに学ぶも
のはなく、未来に向けて前を向いていればよいのでしょうか?アレグザンダー
の思想は、自分達の技として身に付けたものとしてコモディティ化し、歴史の
1ページとしての民俗学的資料価値しかないのでしょうか?

筆者が昨年から氏の著作を読み返して今一度気づいた結論は「否、まだ我々は
アレグザンダーから学びとらなければならないのではないか」です。そうして
いろいろ調べている中で見つけた資料の中に次の2つがありました。
ジム・コプリエン氏の「On the Nature of The Nature of Order ネイチャーオ
ブオーダーを考える」[*3]、そして「East Meets West」[*4]でした。

連載その2へ続く・・・。(懸田)

[*1] http://tinyurl.com/ybdqd4x
[*2] http://twitter.com/KentBeck/status/3405661648
[*3] http://users.rcn.com/jcoplien/Nippon/NatureOfOrder/NoNoO_jpn.html
[*4] http://users.rcn.com/jcoplien/Nippon/EastMeetsWest/index.html
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
/community/object_ml/estimate?vol=H005-28&choice=0
普通:
/community/object_ml/estimate?vol=H005-28&choice=1
イマイチ:
/community/object_ml/estimate?vol=H005-28&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ■━
■
┣【プログラミング】SproutCoreでカッコイイ
┗                  Webアプリケーションを作りたい [10]

こんにちは、ursmです。

前回SproutCore 1.0 Betaのインストール方法をご紹介しましたが、さっそく
パッケージ名が変更になりました。以下の手順で最新版がインストールされま
す。

$ gem uninstall sproutit-sproutcore
$ gem install sproutcore
$ gem list sproutcore

*** LOCAL GEMS ***

sproutcore (1.0.1009)

● SproutCoreのデータ永続化
Ristのデータはブラウザ上にしかありません。いくらバックログを作成しても
ブラウザを終了すれば消えてしまいます。今回はデータの永続化に取り組みま
しょう。

SproutCoreのデータ永続化機構については以下のページに紹介されています。
http://wiki.sproutcore.com/DataStore-About
とても単純化して言うと、モデルレイヤであるSC.Recordのバックエンドに位置
するDataStoreを永続化を担うサーバに繋げてやればOKです。

サーバはいくつかのREST APIを実装しなくてはいけません。

1. GET /backlogs
   バックログの一覧を返す
2. GET /backlogs/1
   指定されたバックログの情報を返す
3. POST /backlogs
   バックログを新しく作成する
4. PUT /backlogs/1
   指定されたバックログの情報を更新する
5. DELETE /backlogs/1
   指定されたバックログを削除する

サーバは何で作ってもいいのですが、今回はRubyで実装します。DSLで簡単に
Webアプリケーションを作れるSinatra[*1]というライブラリを使います。

-- backlogs_store.rb (前半) --
#!/usr/bin/env ruby
# coding: utf-8

require 'rubygems'
require 'sinatra'
require 'json'

class Backlog
  attr_accessor :title

  def initialize(title)
    self.title = title
  end

  # (1)
  def id
    object_id.to_s
  end

  # (2)
  def to_json(*a)
    {:title => title, :guid => id}.to_json(*a)
  end
end
----

1つのバックログを表現するBacklogクラスの定義です。

(1) 特定のバックログを指定して更新や削除を行うためには、バックログを識
    別する一意のIDが必要になります。今回は単純にObject#object_idを使う
    ことにしました。
(2) サーバとSproutCoreアプリケーション間でデータを受け渡すにはJSONを使
    うと便利です。JSONのRuby実装[*2]を使ってtitleとidのハッシュをJSONに
    変換するメソッドを定義しました。

-- backlogs_store.rb (後半) --
# (3)
backlogs = {}

# GET /backlogs (4)
get '/backlogs' do
 content_type 'application/json'
 {:content => backlogs.values}.to_json
end

# GET /backlogs/1 (5)
get '/backlogs/:id' do |id|
  not_found unless b = backlogs[id]

  content_type 'application/json'
  b.to_json
end

# POST /backlogs (6)
post '/backlogs' do
  b = Backlog.new(params[:title])
  backlogs[b.id] = b

  status 201
  response['Location'] = "/backlogs/#{b.id}"
end

# PUT /backlogs/1 (7)
put '/backlogs/:id' do |id|
  not_found unless b = backlogs[id]

  b.title = params[:title]

  content_type 'application/json'
  b.to_json
end

# DELETE /backlogs/1 (8)
delete '/backlogs/:id' do |id|
 not_found unless backlogs.delete(id)
end
----

(3) 生成したBacklogインスタンスはIDをキーとしたハッシュに格納します。
    永続化と言いつつ実は変数に入れているだけなんですね。

残りはSinatraによる各APIの定義です。

(4) バックログの一覧をJSONで返します。
(5) 指定されたバックログをJSONで返します。
(6) バックログを生成し、そのURIをLocationヘッダに入れて返します。HTTPス
    テータスコード201は「リソースが作成された」を意味します。
(7) 指定されたバックログを更新し、JSONで返します。
(8) 指定されたバックログを削除します。

では、このサーバの動作を確認してみましょう。まず依存ライブラリを導入し
ます。

$ gem install sinatra json_pure

サーバを起動します。デフォルトではポート4567になります。

$ ruby backlogs_store.rb
== Sinatra/0.9.4 has taken the stage on 4567 for development with
backup from Thin
>> Thin web server (v1.2.4 codename Flaming Astroboy)
>> Maximum connections set to 1024
>> Listening on 0.0.0.0:4567, CTRL+C to stop

curlコマンドを使ってリクエストを投げます。まずはPOSTでバックログを作成
してみましょう。

$ curl -d title=hoge localhost:4567/backlogs
/backlogs/7012180021666

作成されたバックログのURIが返ってきました(IDの部分は環境によって異なり
ます)。バックログをGETで取得してみます。

$ curl localhost:4567/backlogs/70121800216660
{"title":"hoge","guid":"70121800216660"}

ちゃんとtitleが設定されていますね。一覧も見てみます。

$ curl localhost:4567/backlogs
{"content":[{"title":"hoge","guid":"70121800216660"}]}

最後はDELETEです。

$ curl -d _method=delete localhost:4567/backlogs/70121800216660
$ curl localhost:4567/backlogs
{"content":[]}

消えていますね。

● まとめ
データを保持するREST APIサーバを作成しました。
次回はいよいよアプリケーションとの連携です。(id:ursm)

[*1] http://www.sinatrarb.com/
[*2] http://flori.github.com/json/
_______________________________________________________________________
この記事への評価にご協力をお願いします。
URLをクリックして、「ご協力ありがとうございました」のメッセージがご使用
のブラウザに表示されれば投票完了です。
良かった:
/community/object_ml/estimate?vol=E0015-09&choice=0
普通:
/community/object_ml/estimate?vol=E0015-09&choice=1
イマイチ:
/community/object_ml/estimate?vol=E0015-09&choice=2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■ 
■
┗【アンケート】気になるシステム業界 ホントのところ

今週は「オブラブメルマガ、どこから読みますか?」のホントのところ。
先日記念すべき300号を発刊したオブラブメルマガ。いつもご愛読いただき本当
にありがとうございます!基本的には、Topics・記事・アンケート・編集後記
から成っているのですが、みなさまはどこから読まれていますか?

  先頭にあるのでTopicsから読みます。
     /special/kininaru/vote?vol=267&choice=0
  記事から読みます。
     /special/kininaru/vote?vol=267&choice=1
  アンケートから読みます。
     /special/kininaru/vote?vol=267&choice=2
  編集後記から読みます。
     /special/kininaru/vote?vol=267&choice=3
  INDEXを見て気になる部分から読みます。
     /special/kininaru/vote?vol=267&choice=4
  それは秘密です。
     /special/kininaru/vote?vol=267&choice=5
  ちょっと語らせて!
     詳細をこのメールに返信ください!!

アンケート結果はオブジェクト倶楽部サイト上にて公開します。お楽しみに。
なお、前号「カメラ持ってますか?」の結果は公開中。ぜひご覧下さい。
⇒/special/kininaru/vol266/PlonePopoll_results2

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
■
┗編集後記

こんにちは、編集人のナガタユウコです。東京では先週末から突然寒くなりま
したが、みなさま風邪などひかれていないでしょうか?新型インフルエンザも
心配ですし、体調には十分にお気をつけくださいね。
さて、今回のひとつめの記事はイベントに関するものでしたが、いかがでした
でしょうか?正式発表は後日になりますが、今回も冬イベントを開催します!
早くお申込みいただくといいことがあるかも?!今後のメルマガにご注目くだ
さい☆

今週の強引な一言
*** たしかな叔父よりずぼらな我(ことわざ) ***
自分でするのがなんといっても一番確実であるということ。
あいまいに指示を出して、結局自分でやり直すことに・・・なんて経験ありま
せんか?周囲を信頼することは大切ですが、プラス、依頼内容を明確にして、
自分もお願いした相手もスッキリ仕事ができるように心がけましょう。
出典参考:故事ことわざ辞典 東京堂出版
(ナガタユウコ)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━--■--●--■
● ご意見、ご感想は         ⇒このメールに返信ください
〇 配信中止、アドレス変更は ⇒/community/object_ml/help/
〇 免責事項、過去の記事は   ⇒/community/object_ml/
■ 発行:オブジェクト倶楽部 ⇒http://ObjectClub.jp/
Copyright (c)2003-2009 オブジェクト倶楽部. All Rights Reserved.
powered by Eiwa System Management, Inc.