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インスペクタは 本当に素晴らしいツールなのです。