この記事は aoitaku Advent Calendar 2016 の 1 日目の記事です。「日付またいでても朝が来るまでは当日」と供述しており。
ひとりアドベントカレンダーは毎年やろうと思うんですが完走できないことをおそれてけっきょくやらずじまいになっていたんですがヴぃさんがやっているのを見て勇気づけられたのでやることにしました。完走目指してがんばります。
一日目なのでぼくの最初のプログラミング体験についての話をします。
最初のプログラミング未満
ぼくの最初の個人ウェブサイトは 2003 年の 4 月に開設されました。
当時はみんなわりと個人ウェブサイトを作ったりするのがふつうの時代で、メモ帳に HTML タグを直打ちして FTP でアップするというのがよく行われていました。
ぼくも HTML タグリファレンスを読みながらタグ打ちでウェブページを作ってドット絵とか小説とかを公開していました。
ぼくにとってコンピュータ言語を使って何かをするという体験は、主にこれが最初です。*1
このサイトは 10 ヶ月くらいで閉鎖して、2004 年の 3 月頃に二つ目の個人ウェブサイトを開設します。このときに CGI を設置できる有料レンタルサーバーを借りて、掲示板などを設置したりしました。ぼくのプログラミングはここから始まりました。
Perl との出会い
CGI のソースコードの拡張子が cgi だったせいで当時 CGI をプログラミング言語の一種だと思っていたぼくですが、このときぼくが触れたプログラミング言語は Perl です。
ぼくが最初にプログラミングを行った言語は、 Perl でした。
Perl はいわゆるスクリプト言語で、動的型付け、コンパイルが不要という特徴があります。といってもこれが最初なのでそのあたりのことはよくわかっていません。
最初に戸惑ったのはパーミッションというやつでした。わかる人はわかると思うのですが、パーミッションというやつを正しく設定しないと CGI はちゃんと動作しません。このへんの理屈はいまではよく理解できるのですが、当時はよくわかってなかったので何回やっても覚えられませんでした。パーミッションってなんやねん、と。
まあでも当たり前なんですよね。なんでもかんでも自由にプログラム実行できるほうがおかしい。スクリプトはプログラムなのだから、パーミッションを適切に付与する必要がある。それだけのことです。
それだけのことがわかっていない当時のぼくは、まず既存のスクリプトを改変するところからはじめました。
掲示板のスクリプトが配布されていたのでこれをダウンロードしてきて、設定項目をいじって FTP でアップしてパーミッションを設定する。
動いて感動して、でも自分のホームページと背景色が違う *2 のでどうも借り物感が強い、ここは自分のサイトなんだからやっぱり自分のサイトのカラーにしたいよねと思って、背景色を変えたり文字色を変えたりということをはじめます。
そしてぼくはこう思うわけです。
「なんでこの掲示板スクリプト bgcolor とかいうレガシーなものいまだに使ってるんだ?」
そう、ぼくは当時 HTML 原理主義者だったのでした。
見た目は CSS で指定し、HTML は文書構造を表現するものであるという考えを持っていたぼくは、font 要素*3排除、center 要素排除、bgcolor 属性排除……と非推奨の要素や属性をスクリプトから消し去ることに躍起になっていました。
ところがだいたいのスクリプトはここまでのことをする想定になっていないので、スクリプトの大改造が必要になります。
HTML/CSS の仕様を読んだりして Web 標準とかいうものを理解したつもりになって調子に乗っていたぼくは、Perl も調べたら簡単にわかるんじゃね?という甘い気持ちで Perl についてググりまくるようになります。
500 Internal Server Error
「ぜんぜんわからん」
Perl は「とても読みにくいプログラミング言語」として知られています。何がわからなかったかというと、書いてあるプログラムの意図がぜんぜんわからなかった。Perl の解説サイトとかは当時たくさんあったんですが*4、解説サイトを見てもスクリプト組んだ人の気持ちまではわからないわけです。そもそも個人が独学で書いた Perl スクリプトのコードの品質は非常に低く、Perl という言語がとても自由な記述を許容する言語だったこともあって、既存のスクリプトの改変は非常に難航します。
500 Internal Server Error を何度も目にしました。
ぼくは気付きます。
「もっとシンプルなスクリプト使えばいいんだ」
片っ端からスクリプトをダウンロードしてきて、機能が少ないものを探しました。機能が少ないものはコード量が少ないので理解しやすいと思ったのです。そしてそれはだいたい当たっていて、小さなものから少しずつ Perl への理解が深まっていきます。
「スカラーと配列と連想配列? この連想配列とかいうやつめっちゃ便利では」 「リファレンスとデリファレンス……値渡しはメモリコピーが発生して遅いからリファレンスを使う、なるほど」 「モジュール使いたい……レンタルサーバにモジュールない……」
で、いろいろあってサーバを移転したりサイトをリニューアルしたりとかして、Alias under the Azure が開設されます。モジュールもサーバ管理者に申請したらインストールしてもらえたりしました。
「この bloxsom とかいうやつめっちゃいいな」
bloxsom と出会います。
自前のブログシステムの構築
レンタルブログの管理画面の使いにくさに辟易していたぼくは、自分用のブログシステムがほしいと思うようになりました。簡易記法を使ってルビを簡単に振れるようになったらいいのにとか、リンクとか引用文とか簡単に書けたらいいのにとか。当時のブログは基本的に HTML タグ直書きで、しかも使えるタグと使えないタグがあったりしたものです。
bloxsom に自前のプラグインを組み込んで、自前の簡易記法パーサでテキスト変換して HTML 出力するようにすればいいのでは?みたいなことを考えてしまったぼくは、簡易テキストフォーマット沼に足を踏み入れることになります。
まあ今から考えると Markdown でよかったですよね。bloxsom の作者は Markdown の作者でもありまして、もちろん当時から Markdown は存在しているし、ぼくも Markdown の存在は知ってたんですが、なんで Markdown ではいけなかったんだろう。ルビがないからかな。自分で作りたかったからかもしれない。
もちろんこれは頓挫しました。
頓挫しましたが、それはそれで、それなりにぼくにとって経験になりました。Perl と出会っていなければ、ぼくはプログラマになることはできなかったろうと思っています。
挫折の先
Perl の後、ぼくは Ruby と PHP に出会います。そして結果的には PHP ではなく Ruby を使うのがメインになっていくのですが、これは PHP ではゲームプログラミングができなかったからというだけのことで、ぼくの指向が Web 方面のままだったならば、PHP の道を進んでいったかもしれません。
さて、Perl と Ruby、PHP の間にもう一つ言語があります。 ぼくは Perl に触れた経験のおかげでその言語とうまく付き合っていくことができたわけなんですが、2日目はその言語の話をします。お楽しみに。