正規表現病にかかり気味な人へ

久しぶりにプログラムを触ってたので、思ったことをチラホラと。

これは、PHPのお話です。(他の言語でも似たようなものだと思います)

正規表現というのの説明は今更要らないと思いますので省きます。正規表現は確かに強力なツールなのですが、強力すぎて他の手法に目が行かなくなるという危険性を持っています。

例えば、文字列の始まりが特定の文字列であるというのを検証する場合、正規表現のようなオーバースペックの物を使わずとも、strposで0というインデックスが戻って来るかどうかだけで判断できます。実際にパフォーマンスを計ったのは1年以上昔のことなので具体的な数字は忘れちゃいましたが、正規表現による検証の方が1桁遅いという結果だったと覚えています。

複雑な文字列検証を行う場合の正規表現のパフォーマンスには脱帽しますが、単純な利用用途では、正規表現を使わないという選択肢があることをプログラマも知っておくと良いと思います。

ただ、可読性で言えばstrposのインデックスが0かどうかよりも正規表現の書き方の方が分かり易いケースもあるんですよね。というか、正規表現で書く方が一般的なのかな。そのあたりが悩ましいところですね。

結論としては、パフォーマンスに悩んだ場合に、正規表現を捨てるという感じでどうでしょうか?(超弱気)

JugemKeyで認証しつつコメントする機能を作ってみた

久しぶりにJUGEM絡みのプログラミングをしてみました。JugemKey認証をしつつコメントする機能です。

別にJUGEM自体をいじったわけじゃなくPOSTを受け付けちゃうので、本当の意味での認証付にはなりませんし、画像認証つけてるとコメントできません(しょぼすぎ)。

その2つの部分を解消するために今考えてるのは、2chのトリップみたいなのをJugemKeyIDの後ろに引っ付けてコメントをするように変更するということです。トリップ部分を特殊な作り方にして、JugemKeyIDとトリップを合わせて成りすましされてないかを確認できる検証用のツールとセットにすれば、上手いこと解決できるんじゃないでしょうか。

画像認証に関しては、JugemKey認証を通過した後のサイトから直接POSTしちゃうしかないと思うのですが、そのあたりがとても胡散臭くなりそうな予感もします。

とりあえず、満足。

■2006.09.28 2:00ぐらい
結局、最後まで作ってしまいました。画像認証付でもいけるし、トリップつけてチェックツールまで作りました。最低限のところまでは揃ったかな。

ファイルアップロード時のエラーの取り方

仕事上、久しぶりにPHPを触りました。

その中でファイルのアップロードをする部分を作成したのですが、ファイルアップロード時のエラーって

$_FILE['任意の名前']['error']

で取得できるんですね!超マメ知識でした。

そろそろPHPのフレームワークをまじめに検討してみる

昨今、色んなフレームワークがPHPで出てきている。省力化するために必要だと言われており、そのために出てきた概念だが、本当に省力化できているのか。そのために必要なことは何なのか。導入するだけで良いのかなどを検討していきたいと考える。

えらそうなこと書いてるが、実際PHPのフレームワークなど触ったこともほとんど無い状態なので、これから徐々に勉強していこうという決意表明みたいなものだ。

まず、フレームワークとは何かという点から考えてみる。

私は、長年Windowsのアプリケーションを作成していたプログラマであり、Windowsの世界にはMFCという巨大なフレームワークがあって、私は傍流のボーランド系のVCL上で開発を続けてきた経緯も関係して、統合環境のないフレームワークというものに懐疑的である。フレームワークはフレームワークを利用する環境全てを整えた上で、初めて「フレームワーク」になるのではないだろうか?

Windowsの世界で言えばVCLにしてもMFCにしても、はっきり言ってどちらにも利点があれば欠点もある。でも、二つともにはっきりと言えることは、Windowsのアプリケーションを作成するのであれば、これらを利用した方が圧倒的に短い時間で作成することができる。

「作成できる」と言い放ってしまうと問題があるかもしれない。「使い方次第で圧倒的に短い時間で作成することができる。」と言った方が適切だろう。それは、フレームワークを使うことによる利点と欠点の両方があるからだ。但し、VCLにはDelphiやBorlandC++Builder、MFCにはVisualStudioといった素晴らしい統合環境(RADツール)が存在するため、現在のPHP界隈のフレームワークとは全く違う世界を醸し出している。

そして、私がVCLを長年使ってきて一番恐れ入ったのは、そのクラス設計の素晴らしさによるところが大きい。(PHP自体クラス設計をまともに行える仕様じゃないので、これはちとキツイか話か)

というわけで、クラス図すら用意されてないフレームワークを利用する気にもならないので、次回以降、色んなフレームワークのクラス図を作成するところから初めて見たいと思う。
1