1
00:00:01,150 --> 00:00:03,440
このビデオでは Pharo  での

2
00:00:03,607 --> 00:00:06,480
独特なパッケージングを
お見せしたいと思います。

3
00:00:06,647 --> 00:00:08,640
失われた技術にしないために。

4
00:00:09,000 --> 00:00:11,400
Pharo をインストールするには
通常は表示されたリンクをクリックします。

5
00:00:11,950 --> 00:00:14,370
現時点での Pharo のリリースは
バージョン 4 ですが

6
00:00:14,537 --> 00:00:17,280
（訳注：2018年現在の最新リリースは
　バージョン 6.1 です）

7
00:00:17,447 --> 00:00:21,060
バージョン 5 でも全く同じです。

8
00:00:21,410 --> 00:00:24,370
Mac OSX 版をダウンロードすると
この ZIP ファイルが得られます。

9
00:00:24,750 --> 00:00:29,090
これを unzip すると
Pharo4.app が得られます。

10
00:00:29,480 --> 00:00:32,460
Pharo4.app を立ち上げると
Pharo を使うことができます。

11
00:00:32,627 --> 00:00:36,410
「Hello」と書いたとして

12
00:00:42,690 --> 00:00:47,380
セーブすると
環境が保存されます。

13
00:00:48,730 --> 00:00:50,430
Save をクリックします。

14
00:00:51,490 --> 00:00:55,920
Quit now をクリックして
また立ち上げると

15
00:00:56,360 --> 00:01:00,100
さきほどと全く同じ「Hello」があります。
Pharo のイメージを保存するということは

16
00:01:00,267 --> 00:01:03,810
バイトコードやコンパイル済みメソッドを
含む全てのオブジェクトを

17
00:01:04,000 --> 00:01:07,780
メモリーごとコピーするということ
なのです。

18
00:01:07,947 --> 00:01:11,920
このアプリケーションには

19
00:01:13,340 --> 00:01:14,400
何が入っているのでしょう？

20
00:01:14,567 --> 00:01:16,750
Mac では、中身を見ることができます。

21
00:01:16,930 --> 00:01:20,620
Show Content（パッケージの中身を表示）
をクリックすると

22
00:01:20,930 --> 00:01:24,380
Pharo の仮想機械やリソースが
見つかります。

23
00:01:24,810 --> 00:01:27,530
そしてここに、チェンジファイルと

24
00:01:31,280 --> 00:01:31,913
イメージファイルがあります。

25
00:01:32,400 --> 00:01:35,880
イメージファイルは

26
00:01:36,047 --> 00:01:39,840
メモリ上のオブジェクト全てを
格納したもので

27
00:01:40,070 --> 00:01:42,760
チェンジファイルは、実行された
インクリメンタルな変更を持っています。

28
00:01:42,927 --> 00:01:46,680
イメージファイルを

29
00:01:48,580 --> 00:01:49,800
ダブルクリックすると

30
00:01:55,800 --> 00:02:00,000
OS にもよりますが通常は
インストール済みの Pharo の仮想機械が

31
00:02:00,470 --> 00:02:03,960
起動して

32
00:02:04,127 --> 00:02:05,900
そのイメージファイルを立ち上げます。

33
00:02:07,020 --> 00:02:08,450
イメージファイルは何をするのでしょうか？

34
00:02:08,617 --> 00:02:10,000
クラスを定義する時について
考えてみましょう。

35
00:02:10,157 --> 00:02:12,050
パッケージを定義します。

36
00:02:18,100 --> 00:02:18,733
ATest パッケージを追加します。

37
00:02:18,900 --> 00:02:20,060
このパッケージに

38
00:02:23,470 --> 00:02:24,300
MyStrangeClass を定義します。

39
00:02:28,600 --> 00:02:33,170
そして foooo を

40
00:02:33,430 --> 00:02:34,063
42 を返すよう定義します。

41
00:02:38,650 --> 00:02:42,750
このイメージを別の名前で保存します。

42
00:02:42,917 --> 00:02:44,270
名前を

43
00:02:44,437 --> 00:02:45,070
Pharo40Stef とします。

44
00:02:52,060 --> 00:02:53,930
さて、どうなったでしょう？

45
00:02:54,097 --> 00:02:58,580
一旦終了します。
イメージとチェンジのペアが

46
00:02:58,747 --> 00:03:01,570
新しくできました。
このチェンジファイルは

47
00:03:01,737 --> 00:03:04,620
人間が読めるようなものではないので
開かないでおきます。

48
00:03:04,787 --> 00:03:07,110
中には先ほどのメソッドのコードなどが
入っています。

49
00:03:07,277 --> 00:03:11,840
Pharo4 をもう一度立ち上げると

50
00:03:12,007 --> 00:03:16,300
仮想機械が起動して

51
00:03:17,940 --> 00:03:22,110
また同じスナップショットが立ち上がります。
昔行われた

52
00:03:22,277 --> 00:03:27,200
システムコピーで作られた

53
00:03:27,440 --> 00:03:28,073
スナップショットです。

54
00:03:28,240 --> 00:03:32,790
さて、PharoStef イメージを実行すると

55
00:03:32,957 --> 00:03:33,590
どうなるでしょう？

56
00:03:33,757 --> 00:03:37,180
システムには
先ほど定義したクラスがあります。

57
00:03:39,740 --> 00:03:42,920
Pharo 4 アプリケーションは
いわゆる Mac bundle で

58
00:03:43,087 --> 00:03:47,460
Pharo の仮想機械やイメージやチェンジを
抱えています。

59
00:03:47,627 --> 00:03:50,500
その上でダブルクリックすると
選択の余地なく

60
00:03:50,667 --> 00:03:52,950
常に Pharo イメージが選ばれます。
スクリプトで

61
00:03:53,330 --> 00:03:55,660
そのように定義されています。

62
00:03:55,827 --> 00:03:59,430
Pharo の使い始めでは便利なのですが

63
00:03:59,597 --> 00:04:02,600
一般にはこういう使い方はしません。

64
00:04:02,767 --> 00:04:05,840
一般に、コマンドラインで実行するか

65
00:04:06,007 --> 00:04:09,200
例えば

66
00:04:10,290 --> 00:04:14,470
pharo-ui MyPharoImage.image

67
00:04:14,637 --> 00:04:19,250
のようにすると

68
00:04:19,417 --> 00:04:21,710
立ち上がります。あるいは
コマンドラインから立ち上げる時に

69
00:04:21,877 --> 00:04:24,010
UI が必要なければ
UI なしで立ち上げることもできます。

70
00:04:24,520 --> 00:04:26,450
つまり Pharo は
システムのどこかにインストールされた

71
00:04:26,617 --> 00:04:30,130
UNIX アプリケーションともいえます。

72
00:04:31,070 --> 00:04:34,400
さて、このページには

73
00:04:36,150 --> 00:04:38,930
Pharo のイメージとチェンジのペアと

74
00:04:39,097 --> 00:04:40,940
仮想機械のダウンロードがあります。

75
00:04:41,110 --> 00:04:43,560
仮想機械をダウンロードして

76
00:04:43,727 --> 00:04:48,220
それからイメージとチェンジのペアと
さらにソースもダウンロードしてみます。

77
00:04:48,690 --> 00:04:50,830
これから、それら 3 つが何か

78
00:04:51,000 --> 00:04:54,460
どうやって 3 つを組み合わせて
使うのかを説明します。

79
00:05:02,630 --> 00:05:05,760
Pharo のイメージとチェンジのペアを
unzip すると

80
00:05:06,570 --> 00:05:09,240
これが得られます。

81
00:05:09,710 --> 00:05:12,260
unzip すると

82
00:05:12,427 --> 00:05:13,680
イメージが得られます。

83
00:05:13,870 --> 00:05:15,950
モードを

84
00:05:19,140 --> 00:05:20,070
見やすいように切り替えて

85
00:05:21,290 --> 00:05:24,010
さて、このイメージファイルは

86
00:05:24,177 --> 00:05:27,660
仮想化されたシステムである Pharo の

87
00:05:27,827 --> 00:05:32,630
特定の状態のスナップショットですが

88
00:05:32,797 --> 00:05:36,280
こうして実行することができます。

89
00:05:38,140 --> 00:05:42,120
何かメッセージが表示されましたが

90
00:05:44,700 --> 00:05:49,270
システムはちゃんと動いています。

91
00:05:49,890 --> 00:05:50,770
実行することができています。

92
00:05:50,937 --> 00:05:53,330
これで今まで通りのことが
なんでも実行できます。

93
00:05:53,497 --> 00:05:58,360
MyPackage を作って

94
00:05:58,770 --> 00:05:59,900
MyStrangeClass を定義できます。

95
00:06:00,740 --> 00:06:02,220
いつも通りです。

96
00:06:04,180 --> 00:06:07,580
メソッドを定義します。

97
00:06:09,010 --> 00:06:12,520
fooo ^ 42、と。
私の名前を訊いてきます。

98
00:06:14,460 --> 00:06:17,510
いつもと同じく

99
00:06:19,370 --> 00:06:23,050
MyStrangeClass new fooo
とすると、42 が得られます。

100
00:06:23,420 --> 00:06:24,600
バッチリです。保存できます。

101
00:06:25,620 --> 00:06:27,360
別名で保存します。

102
00:06:27,527 --> 00:06:32,240
PharoStrange という名前にします。

103
00:06:32,407 --> 00:06:33,040
OK。

104
00:06:39,410 --> 00:06:40,200
このメッセージは

105
00:06:40,367 --> 00:06:44,530
ソースファイルが見つからない
と言っています。

106
00:06:45,310 --> 00:06:49,200
どういうことでしょう？

107
00:06:50,240 --> 00:06:53,730
ブラウザを開いて
例えば

108
00:06:53,897 --> 00:06:58,670
AST のコードを見てみましょう。
上のほうにあります。

109
00:06:58,837 --> 00:07:03,000
システムはコメントを

110
00:07:03,167 --> 00:07:04,000
見つけられないでいます。

111
00:07:08,120 --> 00:07:09,180
逆コンパイルしているのです。

112
00:07:09,750 --> 00:07:11,730
このあたりでは見分けがつきません。

113
00:07:11,897 --> 00:07:13,420
メソッドが単純すぎるからです。
しかしこれらは逆コンパイルされています。

114
00:07:13,587 --> 00:07:15,000
もう少し具体的に見ていきます。

115
00:07:15,147 --> 00:07:19,820
これはバイトコードから
逆コンパイルされたコードで

116
00:07:20,000 --> 00:07:21,620
引数であることは
ちゃんとわかっているのですが

117
00:07:22,040 --> 00:07:23,440
ソースコードは失われています。

118
00:07:24,050 --> 00:07:28,870
一般に、Pharo 4 を実装している
システムソースは

119
00:07:29,037 --> 00:07:33,530
PharoV40.sources というファイルに
格納されています。

120
00:07:33,697 --> 00:07:36,290
ここにあります。

121
00:07:36,457 --> 00:07:38,920
一般に、Pharo 4 のソースは

122
00:07:39,087 --> 00:07:41,420
システム中に 1 回だけ
インストールされます。

123
00:07:41,587 --> 00:07:44,040
このファイルはリードオンリーで
Pharo のアプリケーションはみな

124
00:07:44,860 --> 00:07:46,030
同じファイルを使うことができます。

125
00:07:46,210 --> 00:07:47,180
ここにあります。unzip すると

126
00:07:47,347 --> 00:07:50,670
PharoV40.sources が得られます。

127
00:07:51,270 --> 00:07:52,840
保存しないで終了して

128
00:07:56,690 --> 00:07:59,060
アプリケーションを再起動すると

129
00:07:59,227 --> 00:08:02,280
前と全く同じになります。

130
00:08:02,470 --> 00:08:05,190
スナップショットに

131
00:08:05,357 --> 00:08:10,160
別名をつけて保存した

132
00:08:10,420 --> 00:08:11,620
イメージとチェンジがあります。

133
00:08:12,520 --> 00:08:16,650
ここで古いイメージを立ち上げると

134
00:08:17,670 --> 00:08:20,780
エラーが出ません。

135
00:08:20,947 --> 00:08:24,710
システムが最初のイメージで起動した時の
状態と対応付けて

136
00:08:24,880 --> 00:08:27,130
コードを見つけるからです。

137
00:08:27,297 --> 00:08:28,640
ここで 2 番目のイメージを使うと

138
00:08:34,500 --> 00:08:38,960
AST-Core のクラスには

139
00:08:39,127 --> 00:08:41,830
コメントがついています。

140
00:08:47,100 --> 00:08:51,000
これらの引数は
ちゃんと人が付けた名前になっています。

141
00:08:51,830 --> 00:08:53,870
このアーキテクチャでは

142
00:08:54,950 --> 00:08:57,230
システムソースを格納した
ソースファイルと

143
00:08:57,397 --> 00:09:02,000
仮想機械と
イメージとチェンジのペアがあります。

144
00:09:02,167 --> 00:09:04,610
通常のコンパイラでは
一旦システムをコンパイルしたら

145
00:09:04,777 --> 00:09:08,330
もうソースは必要ないのですが。

146
00:09:09,390 --> 00:09:12,180
イメージはユーザー定義およびシステムの

147
00:09:12,347 --> 00:09:14,790
全てのオブジェクトを格納しています。

148
00:09:14,957 --> 00:09:18,520
チェンジファイルは実行したことの
差分を格納しています。

149
00:09:18,690 --> 00:09:22,430
システムを保存するたびに

150
00:09:22,597 --> 00:09:25,260
OS の仮想イメージを保存するのと
同じことです。

151
00:09:25,427 --> 00:09:26,730
全く同じ原理です。

152
00:09:27,480 --> 00:09:31,910
Pharo 4 アプリケーションの中には

153
00:09:33,200 --> 00:09:35,200
これらのリソースが格納されています。

154
00:09:36,430 --> 00:09:40,730
Pharo 4 のソース
イメージファイル

155
00:09:40,897 --> 00:09:43,130
チェンジファイル
そしてどこか、ここに

156
00:09:43,297 --> 00:09:44,540
仮想機械とプラグインがあります。
