WEBVTT

00:00:01.250 --> 00:00:03.460 align:middle
このビデオでは
Nautilus が提供する

00:00:03.870 --> 00:00:06.710 align:middle
リファクタリングをお見せします。
リファクタリングとは何でしょう？

00:00:07.050 --> 00:00:11.560 align:middle
リファクタリングはソースコードに対して
その振る舞いを保ちながら

00:00:11.727 --> 00:00:13.000 align:middle
変形する操作です。

00:00:13.320 --> 00:00:15.850 align:middle
リファクタリングは歴史的には

00:00:16.017 --> 00:00:18.700 align:middle
Pharo の先祖で最初に実装された
ということを覚えておいてください。

00:00:18.867 --> 00:00:21.840 align:middle
そしてその後になって Java のような
言語でも実装されるようになりました。

00:00:22.170 --> 00:00:26.470 align:middle
95年には既に Smalltalk には
リファクタリングツールがあり

00:00:26.637 --> 00:00:27.890 align:middle
Pharo のリファクタリングツールは
そこからインスパイアされたものです。

00:00:28.540 --> 00:00:31.070 align:middle
では、Nautilus を開いて

00:00:31.237 --> 00:00:32.020 align:middle
どんな種類のリファクタリングが
提供されているかを見てみましょう。

00:00:33.320 --> 00:00:36.440 align:middle
このクラスで試してみます。

00:00:38.000 --> 00:00:39.800 align:middle
Refactoring には幾つかのレベルがあります。

00:00:39.967 --> 00:00:41.790 align:middle
クラスレベルのリファクタリングがあり

00:00:41.957 --> 00:00:45.330 align:middle
メソッドレベルやコードレベルがあり

00:00:48.710 --> 00:00:49.343 align:middle
色々なレベルのリファクタリングがあります。

00:00:51.270 --> 00:00:53.120 align:middle
インスタンス変数レベルの
リファクタリングがあり

00:00:53.287 --> 00:00:56.020 align:middle
クラス変数レベルのものもあります。

00:00:57.550 --> 00:01:00.580 align:middle
リファクタリングを適用できる時には

00:01:01.490 --> 00:01:05.320 align:middle
メニューの一番上のレベルに現れて

00:01:05.487 --> 00:01:07.490 align:middle
素早く行うことができます。
クラスを選んで

00:01:07.960 --> 00:01:09.210 align:middle
refactoring、rename、ここにあります。

00:01:10.140 --> 00:01:14.690 align:middle
同じように、メソッドの

00:01:14.857 --> 00:01:17.310 align:middle
リファクタリングでは
ここのメソッドに対して

00:01:19.850 --> 00:01:22.470 align:middle
Renameがあります。このレベルでは

00:01:22.637 --> 00:01:25.310 align:middle
重要なリファクタリングです。
さて、ここでコードを選択すると

00:01:25.477 --> 00:01:28.750 align:middle
このクラスではさほど複雑ではありませんが

00:01:28.917 --> 00:01:33.820 align:middle
以下のようなリファクタリングが

00:01:35.350 --> 00:01:38.040 align:middle
メソッドコードレベルで実行できます。

00:01:41.300 --> 00:01:45.450 align:middle
rename をすると、Counter クラスの
名前を変えます。

00:01:45.617 --> 00:01:50.020 align:middle
Counter2 クラスとします。
システムは OK と言います。

00:01:50.187 --> 00:01:51.300 align:middle
これで Rename できます。はい。

00:01:55.130 --> 00:01:56.710 align:middle
フィードバックが得られます。
意味がよくわかりませんが

00:01:56.877 --> 00:01:57.960 align:middle
いずれにせよ無視します。

00:01:58.870 --> 00:02:00.750 align:middle
そしてここで、Counter クラスが

00:02:04.510 --> 00:02:08.710 align:middle
参照されていた箇所で
今は Counter2 となっています。

00:02:10.000 --> 00:02:14.780 align:middle
これが典型的な

00:02:14.947 --> 00:02:15.580 align:middle
クラス名の rename のリファクタリングです。

00:02:16.490 --> 00:02:18.830 align:middle
さて、それでは、名前を付け替えたい

00:02:19.000 --> 00:02:23.480 align:middle
例として、increment メソッドの
名前を変えたいとします。

00:02:24.450 --> 00:02:27.230 align:middle
Rename をします。
あまりインスピレーションが湧いてこないので

00:02:27.397 --> 00:02:28.520 align:middle
とりあえず increment2 としましょう。

00:02:31.480 --> 00:02:33.670 align:middle
ここでシステムが警告してきます。
「気を付けてください」

00:02:33.837 --> 00:02:35.550 align:middle
気を付けます。

00:02:36.350 --> 00:02:40.520 align:middle
「気を付けてください。
あなたは今、沢山の名前を変えようとしています。

00:02:41.740 --> 00:02:44.630 align:middle
（システム中に increment の実装が
10個ぐらいあります）

00:02:44.797 --> 00:02:48.750 align:middle
それらの名前を変えようとしているわけですが
本当にそれでいいですか？」

00:02:48.917 --> 00:02:50.600 align:middle
まず第一に、そんなことはしたくありません。
第二に、対象を選択したり

00:02:50.767 --> 00:02:52.730 align:middle
選択解除したりしたくもありません。

00:02:53.470 --> 00:02:56.580 align:middle
そうすることもできます。

00:02:56.747 --> 00:02:58.700 align:middle
最終的にはプログラマが選択する
責任者です。

00:02:58.867 --> 00:03:00.490 align:middle
私はそれをしたくはありません。

00:03:01.000 --> 00:03:03.700 align:middle
そうではなくて、私が言いたいのは

00:03:03.867 --> 00:03:06.630 align:middle
「私が作業しているのは
MyCounter パッケージであって

00:03:06.797 --> 00:03:09.450 align:middle
システム中のそれ以外の部分を

00:03:09.617 --> 00:03:11.020 align:middle
自動的に変更して欲しくはない。」
ということです。

00:03:11.310 --> 00:03:13.680 align:middle
なので、Nautilus に

00:03:13.847 --> 00:03:17.280 align:middle
「ブラウザで私のパッケージだけを開いて

00:03:17.447 --> 00:03:20.380 align:middle
全ての操作はその部分だけにするように」
と言います。

00:03:20.890 --> 00:03:23.770 align:middle
そこで Browse scoped を使います。

00:03:26.530 --> 00:03:28.710 align:middle
同じことが

00:03:28.877 --> 00:03:30.180 align:middle
Scoped ボタンでもできます。

00:03:30.570 --> 00:03:32.940 align:middle
とても有用な機能なのでボタンになっています。

00:03:33.107 --> 00:03:36.240 align:middle
これら 2 つの世界の違いは

00:03:36.407 --> 00:03:40.780 align:middle
見た目では、こちらでは全てのパッケージがあり

00:03:40.947 --> 00:03:41.890 align:middle
こちらではパッケージが 1 つだけです。

00:03:42.057 --> 00:03:45.310 align:middle
複数個を選ぶこともできますが
ここでは 1 つだけ選んでいます。

00:03:45.477 --> 00:03:47.120 align:middle
さあここで increment を変更します。

00:03:47.287 --> 00:03:52.200 align:middle
Rename で

00:03:52.460 --> 00:03:57.180 align:middle
increment2 に変更すると
そのパッケージの中だけ、つまり

00:03:57.500 --> 00:04:01.510 align:middle
スコープ付きブラウザで選ばれたパッケージ内のみで
変更されます。

00:04:03.380 --> 00:04:05.590 align:middle
OK をクリックして、ここでテストを見てみます。

00:04:05.757 --> 00:04:08.150 align:middle
テストはまだ動いています。
全てグリーンです。

00:04:08.480 --> 00:04:11.890 align:middle
そして、increment とあったものが

00:04:12.057 --> 00:04:13.790 align:middle
increment2 に変えられています。

00:04:16.800 --> 00:04:18.890 align:middle
このビデオでは

00:04:19.057 --> 00:04:21.610 align:middle
Pharo が色々な種類の操作を提供すること

00:04:21.777 --> 00:04:25.080 align:middle
選択やコードの操作や

00:04:25.247 --> 00:04:27.960 align:middle
パッケージにスコープを制限して

00:04:28.200 --> 00:04:30.630 align:middle
変更が適用される範囲を
コントロールできることです。

00:04:31.110 --> 00:04:32.870 align:middle
Pharo では

00:04:33.037 --> 00:04:35.240 align:middle
コードを自動的に書き換えるツールがありますが

00:04:35.407 --> 00:04:38.060 align:middle
それを掘り下げることはしません。
本当にそれが必要であれば

00:04:38.227 --> 00:04:40.650 align:middle
探してみてください。その種の操作専用の

00:04:40.817 --> 00:04:42.310 align:middle
ツールがあります。

00:04:43.160 --> 00:04:45.480 align:middle
最後にお見せしたいのは

00:04:45.647 --> 00:04:50.410 align:middle
操作を提案されることがよくあります。

00:04:50.577 --> 00:04:51.210 align:middle
それの提案は生成されたものです。

00:04:51.470 --> 00:04:54.900 align:middle
システムは提案する操作は
それが正しい操作だということではありませんが

00:04:55.067 --> 00:04:57.330 align:middle
その提案は状況に適応されたものです。

00:04:57.890 --> 00:05:00.810 align:middle
Pharo が提案すること
Nautilus が提案することは

00:05:01.000 --> 00:05:03.460 align:middle
スマートサジェスチョンと呼ばれるものです。

00:05:03.627 --> 00:05:08.090 align:middle
スマートサジェスチョンは
現在の選択に応じて

00:05:08.520 --> 00:05:12.530 align:middle
操作を提案するツールです。

00:05:14.120 --> 00:05:18.590 align:middle
例えば、ここではメソッドの抽出を
提案してきます。

00:05:18.757 --> 00:05:22.510 align:middle
この場合ではメソッドの抽出や
インラインメソッドは

00:05:22.677 --> 00:05:25.900 align:middle
さほど有効ではありません。
しかしブラウザ上の選択を

00:05:26.067 --> 00:05:29.230 align:middle
例えば allocation にすると

00:05:29.397 --> 00:05:32.490 align:middle
同じ操作は提案されません。

00:05:33.400 --> 00:05:36.110 align:middle
クラスを選択していると

00:05:36.277 --> 00:05:37.710 align:middle
参照の一覧やクラスの名前変更を提案します。

00:05:37.877 --> 00:05:41.000 align:middle
そして選択した場所が違えば

00:05:41.710 --> 00:05:43.000 align:middle
同じ操作は提案されません。

