自分語り with Programming Language

この記事は筆者が見た夢を一人称視点で叙述した内容です。事実ではなく、実際の人物等とは一切関係ありません。

大したものを書いていないし、文字通り触って遊んでいるだけなんだけど、興味本位でさわってきた言語について。

PHP

CMSを導入していなかったころ、自分のサイトを管理する上でサイドバーとかヘッダーとかをまとめて変更する用途のためにPHPを使いはじめた。2005年くらいの話。普及具合などからみても、PHPは「超べんりでなんでもできる動的ページ生成ツール」として使うのが一番幸せなんじゃないかなあ、と今になっておもう。

mod_phpで動くphpスクリプトは速いし、一般的なサイトにあるようなフォームからデータを送信してほげほげするだとかができて楽しかった。

はっきりいって「プログラミング」というものを知らないうちに (今でも理解しているとは言い難い) はじめたので、後々に知る不便さ (組み込み関数の命名規則のアレっぷりなど) はわからなかった。ifとかelseとか書いて、すごいすごい、と喜んでいた。

「プログラミング」をPHPでやってみよう、とおもってOOP (Object-oriented Programming) なコードを書こうとしてつまづいた。OOPがわからない。クラスを書いて、その手続としてメソッドというのを書くのはわかった。でも、「クラスを書いて、その手続としてメソッドを書く」ことの意義がまったくわからなかった。関数があるんだから、それに書いちゃえばいいんじゃないの? コードのまとまりはファイルじゃだめなの? といった疑問が浮かんできた。でも、OOPについての解説を読めども読めども、答えは見つからなかった。

ifやelseは知っているし、PHPのマニュアルは (ライブラリリファレンス以外は) 読んだ、プログラミングに必要なのはこれだけじゃないの? ほかに何がいるの? 誰が教えてくれるの? どこで手に入るの? と半ば絶望の叫びのような疑問を抱えているうちに、プログラミングへの興味が削がれてフェードアウトしていく。

(Perl)

CMS, ブログ・エンジンとしてMovable Typeを使いはじめて、プラグインを書いてみよう、とPerlを勉強する気になりコードを読むが、仮引数が見当らず、サブルーチンのコードの最初に shift; とだけ書かれていて、これが怪しいけどわかんない、ということで諦めた。意味のわからなさに絶望して、ドキュメントや解説を読む気をなくした。

Python

一時期流行った、いわゆるストリクター、W3C信者だった自分はXSLTに限りない夢を抱いていて、XSLTの時代がくる、ブログを書くならテンプレートエンジンがXSLTがいい! とおもって、XSLTをテンプレートエンジンに採用したブログ・エンジンを探すも、常用できるものはなかった。2007年の話。
そんな折、id:orzcccさんのIchoの存在を知って、「これはすごい! まさしく求めていたものだ!」とおもって使ってみたかったが、Javaの実装しかなかった (それも動作には遠かったとおもう)。PHPでの実装の様子もあったけど、進展する気配がなかった。
その後、id:cho45さんがTaglibroというブログ・エンジンを書いて使用していることを知り、再び興奮した。しかし、プライベートに使っているものでドキュメントも整備されておらず、自分で使うことは諦めた。

そこで、自分でブログ・エンジンを書いてみよう、とおもいたった。Pythonという言語がなにやらおもしろそう、ということで使ってみることにした。
リファレンスを読みまくって、いろいろごちゃごちゃとしたコードをたくさん書いた。しかし、OOPはわからないし、「こんなかんじなのかな?」という漠然としたなにかがあるだけで、進展はなかった。
XSLTでソースXML文書を変換する、というコードを書こうとおもい、XML関連のライブラリを入れないといけないことがわかったが、コンパイルしなければいけないかんじで、XREAというホスティング・サービスでスクリプトを動かすつもりだったおれは、XREAでコンパイルができない (っぽい) ということに絶望して、Pythonで書くことをやめた。

Ruby

XSLT熱が冷めても、「XSLTをテンプレートにつかったブログ・システムを作る」ということへの熱意は冷めず、高校を卒業するにあたって、なにか新しいことをはじめよう、とおもい、やはりこれを作ろう、とおもいたった。2008年。
影響を受けたid:cho45さんのTaglibroはRubyで書かれていて、参考にするためにコードを読む意味でも、同じRubyで書くことに決めた。実はPythonを選ぶ段階で、RubyPythonのどちらを選ぼうか迷ったが、世は既にRailsRubyに熱狂しており、日本でまだまだ主流とはいえなかったPythonのほうが楽しそう、とおもってPythonを選んだ。結果として回り道をしてRubyに辿り着いたかんじ。
おれが触りはじめたころ (2008年後半) は日本語のドキュメントがおよそ整備されていて、日本語の情報も多く、Pythonより情報が充実している、ということを実感した。
リファレンスを読み進めながら、並行してTaglibroのソースを読んでいるうちに (クラスベースの) OOPを理解した。かつて誰からも教えられなかったものを、神託のように、ふと回答が頭に降りてきた。ここらへんのことをきちんと記録に残しておけばよかったとおもう。ともあれ、この瞬間からRuby、はてはプログラミング言語の見方が変わる。
2009年6月あたりに動くようになった。このときの嬉しさといったら、いままでに感じたことがないくらいのものだった。
そのあとはこまごまとバグ潰しをしたり、アップデートを重ねていった。

Railsなどが動かせる環境になく、また、「XSLTをテンプレートにつかったブログ・システム」は完成した (バグ潰しや機能追加はあるけど) ので、コードを書く目的を失なった。Rubyの味をしめたので、もっともっと楽しい気持ちになりたいとおもったが、「日常的に触れる成果」という目的はなかなか見つからず、CSSRubyのオブジェクトで表現しようとしてみたけど、正規表現のことしか考えていないことに気がついて、「おれはRubyを書いていない」とおもってやめた。

Scala

ここ最近、iPhoneが広がりを見せて、さらに対立項としてandroidが引き合いに出されるようになってきた。Javaでアプリケーションを書くことができるらしく、Scalaも動くらしい。Scalaも最近、盛り上がりつつある言語で、RubyPythonなどのLLから一歩、静的型付けへ歩みよるチャンスではないか、とおもって俄然、興味が湧いてきた。
androidで動くアプリケーションというのは、まさしく「日常的に触れられる成果」だし、動機も強くていけそう、とおもっている。

Io-Language

Io (IoLanguage) )という言語をRuby経由で知った。プロトタイプベースで比較的新しい言語。とてもコンパクトで組み込み向け? なのかな。強いメッセージ指向 (レシーバーという主体に、メソッド呼んでくれというメッセージを投げて、そのメソッドの結果を利用する、というかんじ?) で、メタプログラミングするのに楽しそう。
まだまだ土壌がないので、WAFなんかを書いてみたりして、楽しい気持ちになりたい。

総括

趣味でコードをちまちま書く、という日曜プログラマ以下の存在だけど、目的意識さえあればなんとかなるもんだとおもった。Rubyの根底に流れている他の言語の存在や思想を知って、ますますコードを書くことに興味がでてきた。書いてないけどxyzzyを使っていたことからCommon Lispにも触れた。

目的がないとまったくコードを書く気にならないから、十分な目的意識を持てる対象を探して、たくさんコードを書きたい。