テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

s3cmdはローカルのスラッシュを反映しない. しかし私はs3cmdを使い続ける

s3cmdを使ってファイル(/Users/akira/my-s3-storage/target/scala-2.11/test-classes/test.txt)をputする. この時, S3内でのパスは, s3://myb/Users/...../test.txtを期待するが, そうはならない. なんと, basenameだけを使ってキーとする. 絶対パスでなくて, "a/b"のような相対パスでも同じくbがキーとなったから, basenameだけを拾ってるという考察はたぶん正しい.

File '/Users/akira/my-s3-storage/target/scala-2.11/test-classes/test.txt' stored as 's3://myb/test.txt' (14 bytes in 0.0 seconds, 346.20 B/s) [1 of 1]

破滅的なソフトウェアだ. なるほどs4cmdを作りたくなる気持ちも分かる. しかし私はs4cmdを使わないだろう. なぜならば,

  • 私はツールには保守的だ. (実は言語にも保守的だ)
  • どの道スクリプト言語で書かれたソフトウェアがシステムに副作用を与えることを許容したくない. だったら, 理屈上良いものよりも広く使われているものの方を好むべきである. (大体, s4cmdのREADMEに書かれていることに大変懐疑的だ)
  • もしs4cmdがHaskellOCamlで書かれていたら, 信頼したかも知れない.

私がスクリプト言語を嫌う理由は, それがOSSに使う言語として適していないからだ. 与えられたプルリクエストに対して, 何かしらのテストを網羅的に実行しないと, それが単純なミスを犯しているかどうかの判定すら出来ないことはOSSとして致命的な欠陥だと思う.

これは私が過去に開発したradikorecでの経験から導き出した結論である. このプロジェクトでは熱心なユーザからプルリクエストを送られたが, 怪しくてマージ出来なかった. プルリクエストへの敷居が上がることは, やる気のある駆け出しのプログラマの芽を摘んでいることになる. そんなOSSは, 人を育てられないから間違っている.

マーチン・ファウラーかケント・ベックのどちらかによると, 数値や文字列などのプリミティブはクラスでラップすべきということだ(値クラスという). これはHaskellでいうとnewtypeのようなものだ. 実際にそうすることで, HaskellScalaなどではAPIの誤った使い方を制限出来る. しかしスクリプト言語ではどうか?そういうラッピングを省いて使ったことで実行時の型間違いが起こるくらいなら最初からラッピングなんかしませんというバカげた方針がまかり通ってしまい, 結局, 生の数値や文字列が引き回されることになる. リストもディクショナリも, 全部生で使われる. だから, すぐに破綻する. マーチン・ファウラーかケント・ベックのどちらかの野望は打ち砕かれる. ErlangやElixirはダイアライザがあるからまだマシかも知れないが, それを書かないと容易に破綻するので, やっぱり同じだと思う.

Scalaは最高だ. 学生時代から最高であることは分かっていたが, 実際に仕事で使い始めてみて, 最高であることを確信した. みんな, RubyやらPythonやらPerlなんか使ってないで, Scalaを使ったらいいんだ. Goもいい. ScalaかGoを使ってください.