SSブログ

一週間に一回Rubyプログラミングねた2ー人工無脳 [プログラミング]

早くも二回目でRubyの何をしようか迷う俺。そうだ、昔やりかけていた人工無脳をネタにするのでいいかな。恐らく1.8系の時のソースだから動くかどうか分からないけど、本を読みながらやってみますわ。そんなわけで今回はRuby1.8系のソースをRuby2.0あたりで動かす事にします。多分それで終わりそう。

 
参考にした本はこの本。

恋するプログラム―Rubyでつくる人工無脳

恋するプログラム―Rubyでつくる人工無脳

  • 作者: 秋山 智俊
  • 出版社/メーカー: 毎日コミュニケーションズ
  • 発売日: 2005/04
  • メディア: 単行本(ソフトカバー)


参考と言うか、ソースをまんま動かすだけの回になりそうだけれど。
をぉもう10年弱経ってるのか。暇なくて斜め読みしかしとらんよ。

再度、読んでみると挿絵が思いだされた。挿絵だけかよw。CD-ROMが付いていて再開するのは簡単にできそう。最近、サイトで落とせ系のものが多くて困るんだが。その会社がいつまであっていつまで維持してくれるか分からないものね。まぁあったとしても新しい環境では動かないソースだったりするわけだが、それはそれで無いよりかはだいぶ良い。にしても、Windows環境で動くソースってのも問題がありそうですな。改行文字とか文字コードとか。

とりあえず、付属のCDを使って動かしてみる。Macで動かすの前提で。Macで動かせるんだからLinuxとかでも動かせるはずさ〜。読込めない、なんてことはなかろうな。

index.htmlがreadmeなのだが、やっぱりWindowsで動く事自体に問題がありそうな予感。まず、ActiveRubyは要らないとして、WinCha 茶筌(ChaSen) version 2.1 for Windows、茶筌 version 2.3.3 for WindowsとかはWindows用なので、UNIX系で動くものを探しにいかなくてはいけない。for Windowsってことだから、元々違う環境から移植されたんじゃなかったっけ? マニュアルはただWindows用のヘルプにしただけのものなので意味はないね。基本的にいるものは、ソースと茶筌だけって事になるね。まぁ他に必要になったら揃えるだけです。


とりあえずプロトタイプの所のソースを見てみる。あ〜やっぱりShift-JIS & CRLFの状態ですね〜。変換するの面倒いなぁ。いちいちエディタでも良いんだけど、ワンライナーでサクッとやれれば良いなぁ。一応、HDDにソースコードなどをコピー。

焼き払え!
どうした!それでも世界で最も邪悪なUNIXの末裔か!

とか言いつつ、変換してみる。そういや中学の時、やたらラピュタのムスカのセリフを延々言ってるヤツがいたなぁ。中二病だなぁ。まずiconvかnkfかどっちかを使えば、shift-jisからUTF-8の変換ぐらいは簡単にできるだろう。

nkf -w --overwrite hogehoge.rb


で変換はできた。あとはパイプでfindからファイルパスを渡すだけ。

find . -name *.rb | xargs nkf -w --overwrite


xargsを使わないと動かないっぽい。ファイルが多すぎたのかな。まぁUTF-8にはなっているので良しとしましょうか。あとはCRLFの改行をLFのみにする作業。似たような感じで渡せば良いんでしょうね。

find . -name "*.rb" | xargs nkf -Lu --overwrite


trでもできるんだけど、そもそもnkf -Lu -w 一発で良いんじゃ? まぁmiとかでシコシコ1ファイルずつ変えるよりかずっと効率的であった。




変換は終わったので、とりあえず実行ができるかどうかを見てみる。
初めから、一行目のshebangの描き方が昔っぽくてヤバそうだ。一応、そのままで実行してみますかね。
invalid multibyte char (Windows-31J)

というエラーが出た。まぁ予定調和的ではある。

結局、一番初めの
#! ruby -Ks

というところが、Shift-JISのものになっているからダメなわけで、一番簡単に直そうとすると、-Ksを-KuにしてUTF-8対応のスクリプトにする事でいいみたい。Ruby1.9でも2.0でもそうすれば対応できそうなので、先ほどのように.rbファイルを見つけて、今度はファイルの中身を置換する。まぁ大してnkfで変換した時と同じようなものだと思う。
# -*- encoding: UTF-8 -*-

を入れるというやり方でもできたけど、何か面倒なのでShebangの引数を直すだけにしたい。

ハイフンを先頭に変換しようとすると、問題が起きたり、エスケープ文字を入れたら、シングルクオーテーションが受け付けなくなったり、その他も弊害がある。
find . -name "*.rb" | xargs sed -i "" -e s/"\-Ks"/"\-Ku"/g

結局、これで出来るんだけど、-iの後ろに必ずスペースを入れないと、.rbという拡張子が.rb-eとかなったり、本当に意味の分からない挙動をするので気をつけてください。

なんかBSD由来のsedらしく変な仕様になっているみたいですね。とはいえ、他の環境のsedをまともに使った事ないから何とも言えないですが。とはいえ、わざわざHomeBrewでgsed入れるまでしたいと思いませんしね。あとエスケープ文字とかも面倒なので、ダブルクォーテションとかじゃないといけないのかも(シングルクォートじゃダメだったっけ?)。

http://tkuchiki.hatenablog.com/entry/2013/02/27/130114

ちなみに-iってのは、バックアップを取ってくれるパラメータなのだが、確かに-i ".bk" とかした方が安全だしセオリーでしょう。確認後に、
rm -R *.bk

とかするのが筋かもしれませんが、いちいちファイル作るのも何だしな、という状況もあるはずです。そしてハイフンの後のパラメータの中身をスペース開けないといけない設定とか、あんまりまともじゃない気もします。結構、普通にスペースを打たなくても大丈夫なコマンドはありますしね。そういうマイナーなハマりはしたくないものです。

そんなわけで、文字列と改行文字とShebang(#!のところ)は変更できました。
今回は全然Rubyと違うけど、結構Shebangの設定が、1.8以降の2.0ぐらいまで効いてくるのが分かって勉強にはなったかな。あんまり必要じゃないかもしれないけどね。少なくともRubyの資格試験の参考書には#!の用法とかは書いてなくて、rubyコマンドで実行しろや、という流れになっているようです。

とりあえず簡単なものについては使えるようになったみたいで、次は茶筌を絡めた辞書関係の物を動かすことになりそうですね。なにか今回はnkfとsedの使い方で終わってしまった。UNIX使いとしては、何も見ないでsedとか使えたらカッコいいよね。まぁそれほど頻繁に使うわけじゃないけどさ、画一な処理する時に便利なのは確かなわけで。よく考えたら、UTF-8にしなくてもShift-JISのままで実行した方がいいんじゃないか、と思ったり。実際に問題にしたいRubyプログラミングはまだまだ遠い…。

今回はShift-JISとWindows(MS)の改行から、UTF-8とUNIXの改行に変更してみました。今回はくだらないギャグとか言わないで済んだw

タグ:Ruby
コメント(0) 
共通テーマ:資格・学び

コメント 0