もしも彼女がPerlやりたいと言ってきたらぼくどんな顔するだろう

あるとき彼女がきみの肩をトントンと叩いて、プログラミングに興味があるんだけど教えてくれないなんて言ってきたら、きみはどう答えるだろうか。

ぼくが初めに考えることは「環境構築」である。

このとき環境構築とは、

1. プログラミング言語をマシンに入れる
2. 使うエディタを決める
3. ファイルを保存する場所を決める
4. ファイルを保存する
5. "Hello, World!"を出す

の5ステップである。

1. プログラミング言語をマシンに入れる

ぼくに限って言えば、Perlについてしか教えようがないから、まずは彼女のマシンにPerlを入れてもらわなければならない。

と言ってもきっと、Perl入学式の資料を紹介してその通りにやっておいて、と言うことぐらいしかできないだろうけど。

1)OSの設定
https://github.com/perl-entrance-org/workshop-2014-01/blob/master/slide1.md
2)Perlの設定
https://github.com/perl-entrance-org/workshop-2014-01/blob/master/slide2.md#perl%E7%92%B0%E5%A2%83%E3%81%AE%E6%A7%8B%E7%AF%89

ただ、この資料でやってみたけどうまくいかなかった、ときみは言われてしまうかもしれない。
その場合は、前年の資料を見てもらってもいい。というのも、ぼく自身が少し前に試しに今年のをやってみたらダメだったことがあって、そのときに念のため、という感じで去年のをやってみたらうまくいったのだ。

1)OSの設定(2013年度版)
https://github.com/perl-entrance-org/workshop-2013-01/blob/master/01.vmware+ubuntu/slide.md
2)Perlの設定(2013年度版)
https://github.com/perl-entrance-org/workshop-2013-01/blob/master/02.introduction/slide.md#plenv

上記はぼくの守備範囲であるMacにかぎらず、というかWindowsの人の環境構築についても丁寧に書かれているから、もしきみたちがそれに該当するなら参考にしてもらいたい。

それでも駄目だった、ハマった、無理だ、諦めたよなんて言われても、もし彼女がMacを使っているならすでにPerlは入っているから大丈夫だ。それを使ってもらえばいい。(Windowsについては知らない)

なにしろ上記で紹介しているのは「システムPerl(元々マシンに入っているやつ)ではないPerl」を入れる方法だけど、それを入れるメリットはもっと後、モジュールと言われるものなどをPerlにインストールするときだとも言えるから、それまではべつにシステムPerlでもいいのだ。

2. 使うエディタを決める

一見どうでも良さそうなことだが、エディタの準備は軽視できない。
少し前にPerl入学式のサポーターをしていたら、Macのテキストエディット(デフォルトのメモ帳)で書いたコードがうまく動かない、なんてことがあったのだ。

サポーターは普段テキストエディットを使っていないから、そのハマりを解消するのに少なからず時間がかかった。
Perl入学式にかぎらず、先輩や先生といった「教えてくれる人」の環境になるべく近づけておくことで、不明点に遭遇したときにその聞いた相手が検証しやすくて、お互いの時間や労力が節約できる。
だからエディタもある程度周りに(というか少なくとも教えてくれる人に)許容されているやつを使ったほうが結局いい。

ということで、ここで紹介するのは唐突だがCotEditorである。(Mac用)
http://coteditor.github.io/

無料でカッコ良くて普通に使えて、少し前までは開発の動きが静かだったけど最近また活発に動き出している様子だ。

もちろん、彼女が他にすでに気に入ったエディタを使っているならそれでもいい。(それがテキストエディットだったら再考を促すが)

ちなみに、ぼくはMacVimを使っていてまじ最高です。
https://code.google.com/p/macvim-kaoriya/

もしも彼女のマシンがWindowsだったら、どんなエディタがいいのかはわからないけれど、そんなときには検索してみるといい、とぼくなら言うだろう。
世間にはググレカスなんてちょっと感性を疑う言葉あるが、それが言っていること自体は必ずしも間違っていない(言い方は間違っているが)。
経験的に、プログラミングに限らないことだが、自分が遭遇した問題をまず「問題である」と認識できたなら、その問題はすでに半分解決している。そしてその対処法を検討・検索し始めたときにその問題は9割解消されている。いやこれほんとだよ。

3. ファイルを保存する場所を決める

不思議なことに、多くのプログラミング入門書には「hello.plというファイルを作って実行してみましょう」なんて説明はあっても、そのファイルを具体的にどこに保存するのか、ということまでは解説されていない。

自分の経験を振り返っても、それについて説明を受けた記憶はなくて、手元であれこれ試しながらだんだん「ああ・・そういうこと・・か?」みたいな感じでだんだんわかってきたものだ。
ということは、結局「そんな説明なくても大丈夫」ということをぼくの経験が証明しているということなのかもしれないが、やはりちょっと腑に落ちない。

手元のプログラミング入門書を数冊ひっくり返して、その点についてどう説明しているかあらためて探してみたが、ほとんど唯一見つかったのが『たのしいRuby(第3版)』の以下の記述(p7)で、

ファイルを保存したディレクトリに移動して次のように入力します

と書かれている。
この「ファイルを保存したディレクトリに移動して」とあるのが一番詳しい説明だ。

実際にはもちろん、もっと丁寧に説明している入門書だってあるだろうし、それ以前の問題として、結局のところ読者(入門者)によってあまりに環境がバラバラで、何か特定的なことを書いてしまったら同時にそれ以外の合致しない人たちを生み出してしまうことになるから、という理由で初めからそんなことは書かれていないのかもしれないが、その辺のリスクを考慮した上でなお、ぼくだったらどう言うかと考えている。

でもその前に、ターミナルの紹介をしなければならないことに気がついた。
ターミナルとは何か? どう使うのか? 今後どう関わってくるのか?

上記のPerl入学式の資料でもそのあたりについてはけっこう詳しく書かれているが、

ぼくとしてはとりあえず以下の説明を紹介したい。(Mac用)

大変丁寧である。

それらを見ながらターミナルを起動したら、とりあえず「cd」を押してもらおう。ほれこのように。

$ cd

このとき、ぼくが書いた「$」は彼女が打ちこむところではなく、それは「これ、ターミナルの話ですから」ということを示している。
だから打つのは「cd」だけだ。そして、その後にエンターを押す。(エンターはわかるよな?)

「cd」を押すとホーム画面という、そのマシンの大元みたいな場所に行くから、そこにそのままファイルを置いていってもいいのだけど、せっかくだから(何が「せっかく」なのかはわからないが)「perl_lessons」とかいうフォルダ(またの名を「ディレクトリ」。さっき『たのしいRuby』にもあったよな?)を作ってそこにファイルを置いていくことにしよう。
以下のようにする。

$ mkdir perl_lessons
$ cd perl_lessons

2行あるが、1行終わるごとにエンターを押さなければならない。
これが終わる頃には、彼女はすでに「perl_lessons」ディレクトリ(またの名を「フォルダ」)に入っている。

「cd」などの初歩的なシェルコマンドについてもPerl入学式の資料にある。素晴らしいな。
https://github.com/perl-entrance-org/workshop-2014-01/blob/master/slide1.md#%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E9%9B%86

ちなみに、いま唐突かつ狡猾な様子で素で出てきた「シェルコマンド」とは何のことだろうか。コマンドとは「命令」の意味で、上に書いた「$」の後の文字列だ。(たぶん)
そして上記では「ターミナル」と「シェル」の意味合いがごっちゃになっているが、さらにごっちゃにしてやると、これにまた超似た存在として「コンソール」という言い方も入ってくる。

「ターミナル」と「シェル」と「コンソール」の違いは何か? 違いはあるのか?
正直に言うと、ぼくにもよくわからない。
しかし違いはある。さらにしかし、違いはあるが、気にしなくていい。大体同じものを別の呼び方で呼んでいる、と思って差し支えない。(たぶん)
きみは「警察」と「お巡りさん」と「刑事」の違いを説明できるか? 違いはあるが気にしなくていい。そう言いたくなるはずだ。それと同じだ。(たぶん)

4. ファイルを保存する

いま彼女は「perl_lessons」フォルダの中にいる。
今度はそこに新規ファイルを作成し、それを保存しなければいけない。

こういう方法についても、ぼくの手元の本にはとくに説明がない。
それでもぼくが今それをできているということは、やっぱりその説明は不要だったということだろう。
そう思うが、腑に落ちないので書いておく。

彼女はたしかに今「perl_lessons」の中にいるけれど、それはターミナルを見ながらそう想像しているだけだ。
だからもう少し明確に、それを知ってもらった方がいい。
具体的には、可視化だ。見える化しよう。(見える化?)
そのために、シェルで(または「ターミナル」または「コンソール」で)このように打ってもらう。

$ open .

「open」の後に半角スペースで、その後に「.(「ピリオド」または「ドット」)」。
こうするとどうなるのか、というのもまたPerl入学式の資料に書いてある。

Ubuntuの人は「nautilus .」とするらしいです。

Perl入学式資料、すごいな。何でも書いてある。この記事いらないのじゃないか。

まあいい。かくして彼女の目の前には「perl_lessons」がFinder上の現象として現れている。(現象?)
今後作っていくファイルはそこに保存してもらおう。

5. "Hello, World!"を出す

エディタも決まった。
ファイルの保存先もわかった。
ということで、ついに「Hello, world!」の世界へようこそ、だ。言うなれば「Hello! Hello, world!」だ。

さっき決めたばかりのエディタ(CotEditorまたは「周りからOK扱いされそうなそれ」)で新規ファイルを立ち上げ、何も書かずにとりあえずさっき決めたフォルダに「hello.pl」という名前で保存しよう。

もし保存時に、ファイル名の入力欄に「.txt」というのが入っていたら、それは消してファイル名全体を「hello.pl」にしなければいけない。
このとき、「.txt」とか「.pl」とかのことを「拡張子(かくちょうし)」と言う。
Macではこの拡張子を表示しないように設定できるようにもなっていて(Windowsではどうなのか、知らない)その機能、いったい誰がどうトクするのかと思うが、もしも彼女がそれに設定していたらやめてもらった方が後々ラクな気もする。

hello.pl に以下のように書く。

print "Hello, world!\n";

「Hello, world!」と出したいだけなのに「print」とか「"」とか「\n」とか「;」とか初めて見るものが多く、しかもここまでにそれについては説明していないから、不親切だとなじられるかもしれないが、そういうのは「環境構築」の範疇(はんちゅう)ではないと言い返そう。
そんなことは、もしも彼女が今後もプログラミングを続けていくならば、いやでも必ずわかることなのだ。

ただ、それはそれとして今知らせておいた方がいいかもしれないのは「\」の出し方で、Windowsなら「¥」になるかもしれないが、ともかくこれはMacでalt/optionキーを押しながら「¥」を押したときに出てくる「バックスラッシュ」というやつだ。

さて上記を保存したら、ターミナルに戻って以下を打つ。

$ perl hello.pl

くり返しになるが、最初に「$」があるからこれは「ターミナルに打ち込む内容」だとすぐわかる。ついでに言うと、「perl」の後には半角スペースが入っている。

で、エンター。

すると、打った先から同じターミナルにこんなのが出てくる。

Hello, world!
(マシン名):~ (マシン内のユーザー名)$

現状、ターミナルの一番下にそれが出ているはずだ。

もしも彼女が上記の「\n」に納得していない様子だったら、それをトッて同じことをしたときにターミナルがどう反応を変えるか見てもらったらいい。その時点で彼女はすでに「\n」の機能を知っている。

そのときにはまた「"」を「'」に交換してターミナルがどう反応を変えるか見てもらってもいい。その時点で彼女は(略)

最初に教えることがあるとしたらこんな感じかなあ、と思った。