﻿1
00:00:00,480 --> 00:00:03,080
こんにちは、Pharo コースの

2
00:00:03,240 --> 00:00:05,600
今回の講義では、もう 2 つのトピックを

3
00:00:05,760 --> 00:00:07,360
掘り下げていきます。

4
00:00:07,520 --> 00:00:11,280
TinyBlog 演習では
今回やる内容を使うことになるでしょう。

5
00:00:11,520 --> 00:00:16,160
1つ目は、データを記述することで
どんなウェブ開発が可能になるか。

6
00:00:16,320 --> 00:00:18,360
2つ目は、Seaside が REST を
どう扱うかについてです。

7
00:00:18,520 --> 00:00:22,080
Seaside は Pharo での REST 向けの
フレームワークの1つです。

8
00:00:22,280 --> 00:00:24,520
では 1 つめの題材から始めましょう。

9
00:00:24,680 --> 00:00:27,640
Magritte はデータを一旦記述したら

10
00:00:27,800 --> 00:00:30,320
そのデータから数個のオブジェクトを生成できる

11
00:00:30,480 --> 00:00:33,680
という仮説に基いたフレームワークです。

12
00:00:33,880 --> 00:00:36,760
例えば、ウェブフォームやグラフィカルな
インターフェイスです。

13
00:00:36,920 --> 00:00:39,360
このコースでは特に

14
00:00:39,520 --> 00:00:42,800
Seaside コンポーネントを生成する方法をお見せます。

15
00:00:43,000 --> 00:00:46,160
より速くウェブアプリケーションを開発できるでしょう。

16
00:00:46,360 --> 00:00:49,160
例として Address（住所）クラスを使います。

17
00:00:49,320 --> 00:00:51,480
スイス式の住所では

18
00:00:51,920 --> 00:00:55,000
住所は、通り(street)と地域(place)と

19
00:00:56,680 --> 00:00:58,960
郵便番号(plz)と
州(canton)で定義されます。

20
00:00:59,320 --> 00:01:03,560
ここにある通りを示すインスタンスがあります。

21
00:01:04,040 --> 00:01:07,000
ここまでは、標準的なプログラミングです。

22
00:01:07,400 --> 00:01:09,000
さて、Magritte では

23
00:01:09,200 --> 00:01:11,720
クラスのフィールドを記述します。

24
00:01:11,880 --> 00:01:16,240
文字列を、通りの名前として定義します。

25
00:01:16,560 --> 00:01:19,640
郵便番号の記述はより興味深いです。

26
00:01:19,800 --> 00:01:21,920
まず、郵便番号なしでは

27
00:01:22,080 --> 00:01:25,240
住所は無効だと定義しています。

28
00:01:25,400 --> 00:01:28,080
郵便番号のない住所は無効なのです。

29
00:01:28,480 --> 00:01:33,800
そしてスイスの郵便番号は
1000から9999までの数字です。

30
00:01:33,960 --> 00:01:37,160
このことが NumberDescription で
規定されています。

31
00:01:37,400 --> 00:01:39,960
この情報を

32
00:01:40,120 --> 00:01:41,840
フォームの自動バリデーションに使います。

33
00:01:42,000 --> 00:01:46,840
地域(Place)も必須項目です。

34
00:01:47,000 --> 00:01:50,640
さらに、スイスには
26の州があります。

35
00:01:50,880 --> 00:01:54,800
州はリストされるものなので
SingleOptionDescription を使います。

36
00:01:55,080 --> 00:01:58,960
これも必須項目です。
選択肢は順序付けられて並べられます。

37
00:01:59,120 --> 00:02:03,120
なので、選択肢のリストは26項目になります。

38
00:02:03,800 --> 00:02:04,920
以上のことをしたら

39
00:02:05,240 --> 00:02:07,200
Magritte で何ができるのでしょう？

40
00:02:07,400 --> 00:02:10,880
ここに Pharo での住所の記述があります。

41
00:02:11,240 --> 00:02:16,320
descriptionStreet を StringDescription
として定義します。

42
00:02:17,800 --> 00:02:20,200
これこれのラベルや優先順位で。

43
00:02:20,360 --> 00:02:23,880
番地については
NumberDescription で定義します。

44
00:02:24,960 --> 00:02:27,640
別の優先順位を付けて
ラベルも付けます。

45
00:02:27,800 --> 00:02:32,200
required（必須）として
最小値と最大値を与えます。

46
00:02:32,520 --> 00:02:36,080
この記述を使って最初にできることは

47
00:02:36,240 --> 00:02:39,640
住所を読み取る簡単なプログラムを書いて

48
00:02:39,920 --> 00:02:41,200
その結果を生成することです。

49
00:02:41,560 --> 00:02:44,480
住所を受け取って

50
00:02:44,800 --> 00:02:47,080
それをこのプログラムに渡します。

51
00:02:47,480 --> 00:02:49,480
プログラムが簡単なレポートを生成します。

52
00:02:50,160 --> 00:02:52,520
通りの名前

53
00:02:55,400 --> 00:02:58,040
地域は Bern
州は Bern

54
00:02:58,200 --> 00:02:59,440
郵便番号は 3012。

55
00:02:59,640 --> 00:03:03,800
これでデータが記述されて

56
00:03:04,440 --> 00:03:06,440
レポートを生成できました。

57
00:03:06,920 --> 00:03:09,080
これは最も単純なものです。

58
00:03:09,240 --> 00:03:12,480
Seaside を使ってもっと
例えばコンポーネントを作るなど

59
00:03:12,880 --> 00:03:15,160
もっと複雑なことをやってみましょう。

60
00:03:15,400 --> 00:03:16,640
ここで言っていることは

61
00:03:17,240 --> 00:03:20,400
Address オブジェクトを

62
00:03:20,560 --> 00:03:22,600
この部分を生成するコンポーネントします。

63
00:03:24,760 --> 00:03:29,600
「Save」と「Cancel」が付いた
バリデーションフォームを追加します。


64
00:03:30,200 --> 00:03:33,160
そしてそれを表示する「call」コマンドを書きます。

65
00:03:33,320 --> 00:03:37,960
見ての通り、これをするのに
Seaside の DSL すら使っていません。

66
00:03:38,320 --> 00:03:41,880
記述することで、ウェブコンポーネントが
自動的に生成されます。

67
00:03:42,200 --> 00:03:43,600
これは強力です！

68
00:03:43,880 --> 00:03:46,560
ここに Quuve のスクリーンショットがあります。

69
00:03:46,840 --> 00:03:50,400
Quuve は
ポートフォリオ管理プラットフォームです。

70
00:03:50,600 --> 00:03:54,080
表示全体が
Seaside と Magritte でできています。

71
00:03:54,400 --> 00:03:57,160
レポートは全て自動的に生成されています。

72
00:03:58,280 --> 00:04:01,320
これによって生産性が著しく向上しています。

73
00:04:01,560 --> 00:04:05,800
このコースでは

74
00:04:05,960 --> 00:04:08,960
データを記述することで何ができるか
の直感を示しています。

75
00:04:09,960 --> 00:04:13,280
特にウェブコンポーネントの
自動生成について。

76
00:04:13,840 --> 00:04:15,560
TinyBlog でそれをすることになります。

77
00:04:15,760 --> 00:04:20,680
では、 Seaside の REST レイヤーで
何ができるかをお見せしましょう。

78
00:04:21,080 --> 00:04:25,920
視覚的なコンポーネントなしでの
クライアント・サーバー通信を可能にします。

79
00:04:26,280 --> 00:04:29,760
REST は Seaside に
綺麗に統合されています。

80
00:04:30,080 --> 00:04:32,440
ドメインオブジェクトをアノテーションします。

81
00:04:32,600 --> 00:04:36,040
URL のパラメータと
Smalltalk (Pharo) メソッドの

82
00:04:36,280 --> 00:04:38,720
自然な変換をします。

83
00:04:39,800 --> 00:04:43,760
複雑性に対しては

84
00:04:44,040 --> 00:04:47,880
フィルター (filter) を定義します。

85
00:04:48,120 --> 00:04:51,240
TinyBlog Restful Filter は

86
00:04:51,400 --> 00:04:54,800
WARestful のサブクラスですが
まあそれは本質ではありません。

87
00:04:55,160 --> 00:05:00,040
重要なのは、アプリケーションを作る時に
ここに追加するフィルターです。

88
00:05:00,480 --> 00:05:02,360
演習で見ることになります。

89
00:05:02,960 --> 00:05:06,560
さて、TinyBlog サーバー上の
全てのブログを得ることを

90
00:05:06,880 --> 00:05:09,840
考えてみましょう。

91
00:05:11,120 --> 00:05:11,960
これがそのやり方です。

92
00:05:12,160 --> 00:05:15,680
まず、RestfulFilterクラスに
メソッドを定義します。

93
00:05:17,040 --> 00:05:20,320
listAllというメソッドです。

94
00:05:21,520 --> 00:05:25,280
そのメソッドはアンカーに対応します。

95
00:05:26,280 --> 00:05:30,720
REST プロトコルから GET することで

96
00:05:31,160 --> 00:05:33,200
JSON 形式の文字列を生成します。

97
00:05:33,360 --> 00:05:37,760
Pharo の文字列ストリームを作って

98
00:05:38,080 --> 00:05:41,600
ストリームにそこにある全てのブログを格納します。

99
00:05:42,000 --> 00:05:45,280
それぞれのブログについて
イテレーターを使って

100
00:05:45,640 --> 00:05:48,400
それぞれのブログを
JavaScript に変換して

101
00:05:48,800 --> 00:05:50,400
コンマで区切ります。

102
00:05:51,360 --> 00:05:53,040
これで欲しかったものが手に入ります。

103
00:05:53,200 --> 00:05:57,200
では、もう少し高度なことを
してみたいと思います。

104
00:05:58,000 --> 00:06:03,280
タイトルでブログを検索したいとします。

105
00:06:04,440 --> 00:06:06,760
ここで、例えば post を使うことができます。

106
00:06:07,080 --> 00:06:11,560
このブログが欲しいといって
タイトルを与えます。

107
00:06:11,760 --> 00:06:16,160
タイトルを引数とする post メソッドを定義します。

108
00:06:16,720 --> 00:06:18,640
path も併せて使います。

109
00:06:18,880 --> 00:06:24,360
URL が http…post/

110
00:06:25,200 --> 00:06:28,880
ときて、さらに何かがくると
それがタイトルです。

111
00:06:29,200 --> 00:06:33,280
この中括弧の内側の部分です。

112
00:06:35,520 --> 00:06:39,720
JSON形式のテキストを生成します。

113
00:06:40,080 --> 00:06:44,080
そして TinyBlog の機能を呼び出します。

114
00:06:44,240 --> 00:06:48,520
この引数で示されたタイトルのポストはありますか？
と問い合わせます。

115
00:06:49,200 --> 00:06:51,640
もしなければ、エラーを返します。

116
00:06:51,800 --> 00:06:55,200
あるならば、それをストリームに入れて
JSONにします。

117
00:06:55,640 --> 00:06:57,800
できることは沢山あります。

118
00:06:58,120 --> 00:07:01,120
検索をするのなら
同じやり方でできます。

119
00:07:05,000 --> 00:07:06,640
URLのところに

120
00:07:06,920 --> 00:07:10,760
search?title= と入力すると
自動的にマッチします。

121
00:07:10,920 --> 00:07:13,880
タイトルがここにあります。

122
00:07:16,520 --> 00:07:20,160
こうやって Seaside で REST を
することができます。

123
00:07:20,560 --> 00:07:24,560
Seaside でグラフィカルなコンポーネントと

124
00:07:24,720 --> 00:07:27,680
ドメインの機能を

125
00:07:27,840 --> 00:07:28,880
REST API で提供することができます。

126
00:07:29,560 --> 00:07:32,440
GET のみをお見せしましたが

127
00:07:32,760 --> 00:07:36,840
他の REST の機能も利用可能です。

128
00:07:37,240 --> 00:07:39,160
Delete、Post、Get、など。

129
00:07:40,440 --> 00:07:43,720
また、Seaside と Magritte を
組み合わせる方法も見せました。

130
00:07:43,880 --> 00:07:46,600
Magritte は強力なフォームを
自動的に生成します。

131
00:07:47,040 --> 00:07:48,840
そして、REST も良く統合されています。

132
00:07:49,080 --> 00:07:53,000
REST をするために Teapot を
使う人もよくいます。

133
00:07:53,160 --> 00:07:56,440
Teapot は Zinc の上位レイヤーで
REST のプロトタイプをすることができます。

134
00:07:56,960 --> 00:08:01,200
REST API を動作させる方法を見つけるのに
手っ取り早い方法です。

135
00:08:01,680 --> 00:08:02,760
楽しんでみてください。

136
00:08:02,920 --> 00:08:06,640
Web Enterprise 本に
ドキュメントがあります。
