小さな、作品

よみもの+手を動かす時間:およそ40分

課題ではなく、作品

これが、この庭の最後のレッスンです。今日は、新しい文法をほとんど習いません。かわりに、作品を作ります。

課題と作品は、似ているようでちがいます。課題には正解があって、合っているかどうかを誰かが判定します。作品には正解がなく、「これでいい」と言えるのはあなただけです。

ここまでの9つのレッスンは、課題の側にいました。今日は誰の指示でもなく、自分のために書きます。題材は、世界でいちばんあなたに近いことば——あなたの名前です。

名前を、ほどく

まず JavaScript で、名前という文字列をほどきます。最後の新しい道具をふたつだけ渡します。.length[ ] です。

JavaScript
const namae = "ここね";

console.log(namae.length);
console.log(namae[0]);
console.log(namae[1]);
console.log(namae[2]);

Ctrl+Enter でも実行できます

namae.length は、文字列の文字数です。namae[0]0番目の文字——コンピュータは0番から数えはじめるので、最初の文字が namae[0] になります。

文字列は、ひとかたまりに見えて、実は番号のついた文字の列でした。ほどけるなら、編みなおせます。"ここね" をあなたの名前に書きかえてから、先へ進んでください。

名前の滝

くりかえしの i は、実行のたびに 0、1、2 と進む数でした。この i を、文字の番号字下げの深さの、ふたつの役に同時に使います。

JavaScript
const namae = "ここね";

for (let i = 0; i < namae.length; i++) {
  console.log(" ".repeat(i) + namae[i]);
}

Ctrl+Enter でも実行できます

i 行目には、全角スペースが i 個と、i 番目の文字がひとつ。名前が一文字ずつ、階段を降りていきます。これを「名前の滝」と呼ぶことにします。

スペースを "・" にしたら、.repeat(i).repeat(i * 2) にしたら、滝はどう変わるでしょう。予想して、ためして、ずれを面白がる——いつもの動作です。

名前の方陣

同じ道具の、別の編みかたです。今度は i 番目の文字を、文字数ぶん横に並べます。

JavaScript
const namae = "ここね";

for (let i = 0; i < namae.length; i++) {
  console.log(namae[i].repeat(namae.length));
}

Ctrl+Enter でも実行できます

3文字の名前なら3×3、5文字なら5×5。名前の長さが、そのまま方陣の大きさを決めています。プログラムは1行も変えていないのに、名前がちがえば、出てくるものがちがう——これが「生成する」ということです。

名前を、かたちにする

つぎは、にわ語でかたちの作品を作ります。にわ語は文字列の中身までは覗けませんが、数なら渡せます。あなたの名前の、文字数です。

レッスン3の種明かしを思い出してください。回数×角度が360になると、模様はちょうど一周してつながるのでした。だから文字数で360を割れば、文字数がそのまま紋様の対称性になります。

にわ語
3 を もじすう とよぶ
いろ を あお にする
もじすう かい くりかえす {
  さんかく を かく
  みぎ へ 360 / もじすう まわる
}

ここに絵があらわれます

Ctrl+Enter でも実行できます

3文字の名前なら、120度ずつ3回——三角の系譜。もじすう を自分の名前の文字数に変えて、実行してください。4文字の人と5文字の人では、生まれる紋様の骨格がちがいます。

回数を増やしたければ、文字数の倍数にすれば閉じたまま育ちます。おおきさ を中で育てると、紋様は渦を巻きはじめます。

にわ語
3 を もじすう とよぶ
いろ を むらさき にする
おおきさ を 30 にする
もじすう * 6 かい くりかえす {
  ほし を かく
  20 すすむ
  みぎ へ 360 / (もじすう * 6) まわる
  おおきさ を おおきさ + 2 にする
}

ここに絵があらわれます

Ctrl+Enter でも実行できます

よりみち:生成する芸術

1960年代、ゲオルク・ネースやヴェラ・モルナールといった人たちが、プロッタ——ペンを機械の腕で動かす装置——にプログラムで絵を描かせました。人間は規則を書き、結果は機械が生む。当時は「これは芸術なのか」と論争になりましたが、いまでは「ジェネラティブアート」というひとつの分野です。名前から紋様を生成しているあなたは、今日からその60年の系譜の上にいます。

あなたの番

ここからは、道具の説明をしません。あなたの作品の時間です。

作品:名前から、何かを生成する

ことばの作品(JavaScript)でも、かたちの作品(にわ語)でも、両方でもかまいません。完成の条件はひとつだけ——名前を入れかえると、出てくるものが変わること。それがあなたの作品の「生成する」部分です。

JavaScript
const namae = "ここね";

// ここから先は、あなたの作品です
for (let i = 0; i < namae.length; i++) {
  console.log(namae[i]);
}

Ctrl+Enter でも実行できます

にわ語
3 を もじすう とよぶ
もじすう かい くりかえす {
  まる を かく
  もじすう * 10 すすむ
  みぎ へ 360 / もじすう まわる
}

ここに絵があらわれます

Ctrl+Enter でも実行できます

手が止まったら、下のギャラリーを開いてください。人の作品を見るのは、写すためではなく、自分が次に作りたくなるためです。

ギャラリー1(ことば):山びこ

くりかえしを逆から回すと、名前が遠くから一文字ずつ返ってきます。for (let i = namae.length - 1; i >= 0; i--) として、中身を console.log(" ".repeat(i) + namae[i] + "…") に。滝を下から読む、と言ってもいい。

ギャラリー2(ことば):名前の鏡

新しい文字を「前に」つなぐと、名前が裏返ります。let kagami = ""; のあと、くりかえしの中で kagami = namae[i] + kagami; として、最後に console.log(namae + "|" + kagami);。「ことは」なら ことは|はとこ ——逆さに読むと別のことばになる名前の発見です。

ギャラリー3(かたち):文字数の二乗

回数を もじすう * もじすう かい にして、角度を 360 / (もじすう * もじすう) に。4文字なら、16枚のしかくが一周します。さらに中で おおきさ を おおきさ + 3 にする と育てると、紋様が貝殻のようにふくらみます。どれもあなたの作品の出発点であって、終点ではありません。

世界で、あなたしか書かなかったもの

完成した作品の前で、ひとつ伝えたいことがあります。このプログラムは、世界であなたしか書かなかったものです。

あなたの名前から出発して、あなたの選んだ数と色と形でできています。同じレッスンを読んだ人が一万人いても、この滝とこの紋様にたどり着いたのは、あなただけです。動く・動かないという判定の向こう側に、署名の入った一枚があります。

「まる を かく」からの、距離

最初のレッスンで、あなたは まる を かく と書きました。3語です。意味も知らずにボタンを押して、円がひとつ描かれました。

今日あなたが書いたものを見てください。名前をほどき、くりかえしの中でふたつの役を i に演じさせ、文字数で360を割って紋様の対称性を決めた。しかも、にわ語と JavaScript というふたつの言語で。

いちばん変わったのは、行数ではないはずです。あの日エラーは、こわいものでした。いまのあなたにとって、エラーは返事です——読み手がどこで困ったかを教えてくれる、会話の続きです。

この庭で身につけたこと

最後なので、レッスンひとつぶんではなく、庭ぜんぶを振り返ります。

  • プログラムは、察しない誠実な読み手に宛てて書く、曖昧さのない文
  • エラーは失敗ではなく、どこで困ったかを知らせる返事
  • 名前(変数)は箱ではなく値へのあだ名。名前を使えば、変更は1か所で済む
  • よい名前を選ぶことは、未来の読み手への手紙
  • くりかえしは、日本語にもとからある省略の形式化。「またこれか」は短くできる印
  • 小さなまとまりは入れ子にできる。フレーズが重なって曲になるように
  • 「もし」があれば、プログラムは場合に応じて道を選べる
  • 「とは」で定義すれば、自分のことばを言語に足せる
  • 値には種類がある。数、文字列、色、形——種類がちがえば、できることもちがう
  • 言語が変わっても(にわ語から JavaScript へ)、考え方はそのまま持ち運べる

そして今日、もうひとつ。正解のない問いに、自分の答えを作れるようになりました。

次の庭へ

ところで——最後に、ひとつ妙な問いを置いていきます。にわ語は、誰が作ったのでしょう。

「まる を かく」という語順も、「を」のあとに置けることばの一覧も、エラーの文面のやさしさも、自然に生えてきたものではありません。ぜんぶ、誰かがひとつずつ決めたことです。あなたがこの10レッスンで快適に歩けたのだとしたら、それは誰かがそう設計したからです。

言語は、与えられるものではなく、設計するものでした。次のコース「じぶんの言語をつくる」では、あなたが決める側にまわります。庭の門は、開いたままにしておきます。