1
00:00:01,600 --> 00:00:03,720
このビデオでは
インスペクタと

2
00:00:03,887 --> 00:00:04,750
その使い方を示します。

3
00:00:05,230 --> 00:00:06,280
インスペクタとは何でしょうか？

4
00:00:07,000 --> 00:00:09,840
インスペクタはシステムのオブジェクトと

5
00:00:10,007 --> 00:00:10,920
対話するためのツールです。

6
00:00:11,900 --> 00:00:15,210
Pharo では全てのことが
オブジェクトによって書かれていて

7
00:00:15,377 --> 00:00:18,160
Pharoを構成する全てのオブジェクトを
インスペクタで見ることができます。

8
00:00:18,810 --> 00:00:21,780
インスペクタとは何かを
比喩で説明すると

9
00:00:21,947 --> 00:00:26,630
インスペクタは顕微鏡です。
ただ、その顕微鏡は

10
00:00:26,797 --> 00:00:29,810
観察する対象であるオブジェクトと

11
00:00:30,000 --> 00:00:32,300
対話できる顕微鏡です。
あたかも生物学者が

12
00:00:32,467 --> 00:00:36,820
細胞やバクテリアを研究するように

13
00:00:37,030 --> 00:00:39,080
あなたも針の先で生きたバクテリアと

14
00:00:39,247 --> 00:00:42,780
対話できるようなものです。

15
00:00:42,960 --> 00:00:45,290
ちょっとした表現式を用意してあります。

16
00:00:47,080 --> 00:00:49,040
実際には、日付や時刻や
「Morph」を1つの辞書に入れることは

17
00:00:49,207 --> 00:00:52,040
あまりないでしょう。

18
00:00:52,350 --> 00:00:54,190
しかし、これはあくまで
練習目的ということで。

19
00:00:54,630 --> 00:00:56,620
これを見てください。

20
00:00:56,787 --> 00:01:01,450
表現式を入力して
最初にすることは

21
00:01:01,617 --> 00:01:04,120
インスペクタに乗せることです。
これでインスペクタを使えます。

22
00:01:05,240 --> 00:01:08,650
見ての通り、
インスペクタは多態的なオブジェクトです。

23
00:01:08,817 --> 00:01:10,810
インスペクタは何を表示しているでしょう？

24
00:01:11,080 --> 00:01:15,840
ここには、オブジェクトの集まり(Collection)
の要素がいくつか表示されています。
several elements in my

25
00:01:16,007 --> 00:01:18,260
要素の上でクリックする度に

26
00:01:18,427 --> 00:01:22,390
別のインスペクタが開いて

27
00:01:22,557 --> 00:01:23,800
選択された要素を表示します。

28
00:01:24,230 --> 00:01:28,060
いいですか、GTインスペクタは

29
00:01:28,227 --> 00:01:32,800
Pharo の新型のインスペクタで

30
00:01:33,000 --> 00:01:35,840
ベルン大学の GT チームが
開発しました。

31
00:01:36,007 --> 00:01:36,640
GTインスペクタは

32
00:01:36,807 --> 00:01:40,510
見る対象とする個々の
オブジェクトに応じて


33
00:01:40,677 --> 00:01:43,890
それぞれに適切な表示の仕方をします。

34
00:01:44,057 --> 00:01:46,840
辞書をインスペクタで開いた時には

35
00:01:47,007 --> 00:01:50,440
グラフィカルな要素を操作するのとは
同じ方法で表示されるべきではありません。

36
00:01:51,360 --> 00:01:54,440
興味深い点はこれです。
これらの要素のそれぞれが

37
00:01:54,607 --> 00:01:56,640
別の表示のビューを
ユーザーに提供するのです。

38
00:01:57,880 --> 00:01:59,760
一番基本的なビューは
生(Raw)ビューと呼ばれるものです。

39
00:02:00,850 --> 00:02:03,800
このビューは実装を表示します。

40
00:02:04,020 --> 00:02:07,350
例えば、OrderedDictionary を
インスペクタで開くと

41
00:02:07,517 --> 00:02:12,400
この OrderedDictionary クラスには

42
00:02:12,567 --> 00:02:16,060
2つのインスタンス変数があります。
dictionary と orderedKeys です。

43
00:02:16,227 --> 00:02:19,780
インスペクタは
これらのインスタンス変数の

44
00:02:19,947 --> 00:02:21,770
生の値を表示します。

45
00:02:22,000 --> 00:02:25,640
辞書をクリックすると
それが辞書だとわかります。

46
00:02:25,807 --> 00:02:29,360
この辞書をクリックしたら
ほら、ここにあるように、これは辞書です。

47
00:02:30,550 --> 00:02:34,000
そして開いた先では
同様にこのオブジェクトの生のビューが見えます。

48
00:02:34,760 --> 00:02:37,500
orderedKeysは
見ての通り配列です。

49
00:02:38,760 --> 00:02:41,080
この配列には
時刻、日付、そしてMorphが格納されています。

50
00:02:44,270 --> 00:02:47,170
Items モードにすると

51
00:02:48,860 --> 00:02:53,220
この OrderedDictionaryの要素を

52
00:02:53,387 --> 00:02:56,590
キーと値として見せてくれます。
このほうがわかりやすいです。

53
00:02:56,757 --> 00:02:59,100
これを見れば
そのオブジェクトの中身に入っていって

54
00:02:59,267 --> 00:03:01,950
その感触を得ることができます。

55
00:03:02,117 --> 00:03:03,870
さあどうしましょう。
これは何でしょう。

56
00:03:04,037 --> 00:03:07,040
ああ、これは6番目に格納されていて

57
00:03:07,450 --> 00:03:11,430
時刻と関連つけられていて
キーと値があって、などなど

58
00:03:11,597 --> 00:03:16,080
インスペクタでブラウズしていく
ことができます。

59
00:03:16,410 --> 00:03:17,930
この小さなブラウジング・バーで

60
00:03:18,220 --> 00:03:22,260
小さな○印にカーソルを置いて

61
00:03:22,427 --> 00:03:24,270
プレビューすることができます。
クリックすれば、そこに移動します。

62
00:03:25,130 --> 00:03:28,060
また、ウィンドウのサイズや

63
00:03:28,510 --> 00:03:31,510
フォーカスを変えることができます。

64
00:03:31,720 --> 00:03:35,220
例えば3つ選択して
サイズを大きくすれば

65
00:03:35,387 --> 00:03:36,590
ほら、見易くなります。

66
00:03:37,680 --> 00:03:42,460
Itemsモードでは

67
00:03:42,627 --> 00:03:44,300
対話できるのでこのほうが良いです。

68
00:03:44,467 --> 00:03:47,570
ここで、日付のキーと値がありますね。
たとえば

69
00:03:47,737 --> 00:03:52,330
選択すれば日付が見えます。
この場合、インスタンス変数が見える

70
00:03:52,620 --> 00:03:54,550
生(raw)の表示です。

71
00:03:54,820 --> 00:03:58,260
「self browse」としたらどうなるか
だいたい想像できるでしょう。

72
00:03:58,427 --> 00:04:03,220
Timespan(時間帯)、Date（日付)を
ブラウズできます。

73
00:04:03,690 --> 00:04:05,000
なので
start(開始)とduration(期間)があります。

74
00:04:06,810 --> 00:04:07,710
確かに
startとdurationがありますね。

75
00:04:09,000 --> 00:04:11,730
Details(詳細)タブを見れば

76
00:04:15,040 --> 00:04:19,390
日付には

77
00:04:19,557 --> 00:04:24,280
year(年)、month(月)などがあり

78
00:04:24,447 --> 00:04:25,420
例えばISO形式で見ることができます。

79
00:04:27,150 --> 00:04:28,000
どんな仕組みになっているのでしょう？

80
00:04:28,147 --> 00:04:29,730
それは別のビデオで紹介します。
ただ、それぞれのオブジェクトが

81
00:04:30,370 --> 00:04:33,050
インスペクタでどんな面を見せるのかを

82
00:04:33,760 --> 00:04:35,430
決めています。

83
00:04:36,230 --> 00:04:37,640
例えば、カレンダーがあります。

84
00:04:37,807 --> 00:04:42,330
日付のグラフィカルな表示もできるのです。

85
00:04:44,400 --> 00:04:45,400
戻ります。

86
00:04:48,570 --> 00:04:52,020
同じように、時刻についても
同様のものを見ることができます。

87
00:04:52,560 --> 00:04:56,200
生(raw)タブはもうお見せしました。

88
00:04:57,440 --> 00:04:58,540
Metaタブというものもあります。

89
00:04:59,840 --> 00:05:03,480
これは小さなコードブラウザで
メソッドを表示することができます。

90
00:05:03,647 --> 00:05:06,770
例えばこうやってメソッドを見ることができます。

91
00:05:06,937 --> 00:05:11,410
日付や時刻と対話をしたい場合に

92
00:05:11,840 --> 00:05:15,310
どんなメッセージを送ることができるか
わからないという状況を想像してみましょう。

93
00:05:15,477 --> 00:05:17,000
もしかしたら、「hours」を
送ることができるかもしれません。

94
00:05:17,137 --> 00:05:21,500
18が返ってきました。18時です。

95
00:05:22,350 --> 00:05:25,780
「hour」を探しているのであれば
普通はここにあるかどうかでわかります。

96
00:05:27,540 --> 00:05:30,900
メソッドの定義を見ることができます。

97
00:05:31,067 --> 00:05:32,550
インスペクタのフローについては
まだまだあります。

98
00:05:34,140 --> 00:05:36,000
Morphを見てみましょう。

99
00:05:37,940 --> 00:05:39,130
Morphはもっと複雑なオブジェクトです。

100
00:05:39,297 --> 00:05:42,300
色々な側面があります。

101
00:05:43,000 --> 00:05:44,660
何が良いかというと
例えば

102
00:05:44,827 --> 00:05:46,620
Morphをクリックしたら
その描画を見ることができます。

103
00:05:48,190 --> 00:05:52,640
ここで描画を見せているのは

104
00:05:52,900 --> 00:05:57,330
HSVAColorSelectorMorphというMorphです。

105
00:06:02,720 --> 00:06:04,720
このオブジェクトと対話できるということを

106
00:06:04,887 --> 00:06:06,560
お見せしましょう。

107
00:06:07,100 --> 00:06:11,470
このMorphにopenInWorldで
開くように言うことができます。

108
00:06:11,637 --> 00:06:13,270
また、対話することができます。

109
00:06:16,870 --> 00:06:21,390
その対話は
オブジェクトがどのような機能を

110
00:06:22,000 --> 00:06:26,560
提供するかによります。

111
00:06:26,727 --> 00:06:29,090
selectedColorすることができます。
ちゃんと動きます。

112
00:06:29,890 --> 00:06:30,590
「self selectedColor」すれば

113
00:06:30,757 --> 00:06:35,590
色が返ってきます。

114
00:06:36,000 --> 00:06:39,000
面白いことに

115
00:06:39,700 --> 00:06:42,360
インスペクタの中でprintさせれば

116
00:06:42,527 --> 00:06:44,260
テキスト形式で表示されます。

117
00:06:44,940 --> 00:06:49,080
inspectすれば

118
00:06:49,740 --> 00:06:51,760
インスペクタが開きます。

119
00:06:51,927 --> 00:06:52,690
それが今ここで私がやっている操作です。

120
00:06:52,857 --> 00:06:55,000
この表現式の結果を

121
00:06:55,167 --> 00:07:00,080
インスペクタのフローの中に
入れたいのであれば

122
00:07:00,247 --> 00:07:01,000
どうすればいいでしょう？

123
00:07:01,137 --> 00:07:03,190
「Do it and go」をします。

124
00:07:03,610 --> 00:07:08,360
「Do it and go」をすると
対話のフローの中に

125
00:07:08,790 --> 00:07:11,010
新しいオブジェクトと
そのインスペクタを追加します。


126
00:07:11,530 --> 00:07:15,620
おわかりでしょうか。
ここに色のコードがあります。

127
00:07:16,580 --> 00:07:17,500
別に特別なことではありません。

128
00:07:21,800 --> 00:07:24,250
戻ります。

129
00:07:26,570 --> 00:07:31,110
ここで興味深いのは

130
00:07:31,277 --> 00:07:33,820
オブジェクトのビューがあります。
Submorph(Morphの部品)です。

131
00:07:36,000 --> 00:07:38,500
同じビューが必要で

132
00:07:38,667 --> 00:07:42,180
このグラフィカルなオブジェクトを構成する
部品を探したい時には

133
00:07:42,347 --> 00:07:47,030
Rawモードでは
グラフィカルな部品のツリー構造の

134
00:07:47,200 --> 00:07:52,050
内部を辿っていかなければなりません。

135
00:07:53,130 --> 00:07:54,280
それは本当に面倒なことです。

136
00:07:55,080 --> 00:07:57,760
そこでいい小技をお教えしましょう。

137
00:07:59,190 --> 00:08:03,660
Morphのツリーがあったとして

138
00:08:05,550 --> 00:08:08,640
同じオブジェクトの同じビューが2つ
あったとします。

139
00:08:11,160 --> 00:08:12,820
ここで「Submorph」することができます。

140
00:08:13,530 --> 00:08:16,540
こちらをSubmorphにして
もう一方はMorphにします。

141
00:08:16,830 --> 00:08:20,520
ツリーの要素を選択すると

142
00:08:22,230 --> 00:08:25,610
「あちら側ではこれだけを表示してくれ」

143
00:08:25,777 --> 00:08:30,590
という意味になり

144
00:08:30,757 --> 00:08:35,290
選択されたものと対応する部品が
表示されるようになります。

145
00:08:36,360 --> 00:08:38,900
この小技はけっこう強力で
小さなインジケーターに対応する

146
00:08:39,100 --> 00:08:43,350
部品を探さなければならないことが
よくあります。

147
00:08:43,517 --> 00:08:48,480
この技を使えばけっこう簡単になります。
ほら、これです。

148
00:08:50,440 --> 00:08:54,850
しかし、昔からあるモードでは

149
00:08:55,017 --> 00:08:58,130
そう簡単には見つかりません。

150
00:08:58,297 --> 00:08:59,350
実際、いい方法が見つかりません。

151
00:08:59,517 --> 00:09:02,270
とりあえずツリーの中を探し回って

152
00:09:05,440 --> 00:09:06,960
見つけることになります。

153
00:09:07,470 --> 00:09:12,060
なぜかというと

154
00:09:12,227 --> 00:09:12,860
単純なオブジェクトだからです。

155
00:09:14,500 --> 00:09:16,530
別のビデオでお見せしますが

156
00:09:16,697 --> 00:09:20,680
この種の操作は
システムのどのオブジェクトにも使えます。

157
00:09:21,370 --> 00:09:23,530
そのビデオではこの操作を

158
00:09:23,697 --> 00:09:27,850
ファイルシステムやクラス自体に
行います。

159
00:09:28,160 --> 00:09:30,040
まとめると

160
00:09:30,207 --> 00:09:32,560
インスペクタは

161
00:09:32,727 --> 00:09:37,230
生きたオブジェクトに話しかけ対話し
そして変更するためのオブジェクトです。

162
00:09:37,397 --> 00:09:41,010
それぞれのオブジェクトは

163
00:09:41,177 --> 00:09:45,730
それぞれに異なる側面やビューを持っていて

164
00:09:45,897 --> 00:09:48,260
シナリオに応じて

165
00:09:48,427 --> 00:09:51,640
それぞれの対話をします。

166
00:09:51,807 --> 00:09:53,760
とても強力なオブジェクトです。

167
00:09:54,190 --> 00:09:56,290
実際に、GTインスペクタは
本当に素晴らしいツールなのです。
