2013-02-06
■ [ruby] Rubyのpデバッグは「p x: x」のようにすると良い
Rubyプログラムのデバッグ中はpメソッドで変数の値を表示したりしますが、普通に「p x」とか書くと、画面に
3
とだけ表示されたりして、何が3なのか分からなくなってデバッグが進まない…みたいなことありますよね。
そこで、Ruby 1.9から導入されたハッシュの記法を使って
p x: x
みたいに書くと、これは
p({:x => x})
と同じ意味なので、デバッグ出力が
{:x => 3}
みたいになって、ああ変数xに3が入ってるんだなと分かりやすくなります(かつタイプ数もそれほど増えない)。*1
変数が複数のときは
p x: x, y: y
みたいにします。
*1 ちなみに空白を削って「p x:x」でも動作します。エディタによってはシンタックスハイライトが混乱したりしますが。
2013-02-18
■ [ruby][prog] なぜRubyMotionは「半分オープンソース・半分プロプライエタリ」なのか
というところが特に面白かった。
RubyMotionはRubyでiOSアプリを書けるシステムだが、このように需要とチャレンジのしがいがあるが、フルタイムに近い作業量が必要となるプロジェクトを遂行するにはどうすれば良いか。仕事の片手間にOSSとして開発するのでは、何年もかかってしまうだろう。一方でスポンサーを募って開発を行う方法だと、スポンサーがいなくなったタイミングでまた新しいスポンサーを探す必要が突如として発生する恐れがある。
そこで、RubyMotionはコンパイラとランタイムの部分はクローズドソースで、2万円弱/年という値段で販売している。 (年額といっても1年で使えなくなるわけではなく、新しいアップデートがダウンロードできないということのようだ) コンパイラとランタイムをクローズドソースとしたのは、RubyMotionのユーザは主にRubyプログラマなので、CコンパイラやVMに関わる言語処理系の部分にはあまり協力が見込めないからだそうだ。 で、システムのうち、Rubyで書かれている部分はgithubで公開されていて、pull requestも送ることができる。なるほど…。
Q:この仕組みでやりたいことを自分のペースでやれてる、と A:YES。というか、自分にはこれが唯一のやり方だった
2013-02-20
■ [ruby] MOGOKでSinatraを動かす方法
弊社も実装に関わっているRuby用PaaSのMOGOKは、現段階(オープンβ)では公式にサポートしているのはRailsのみですが、 実はSinatraアプリを動かすこともできます。
Sinatra使いたいという記事を見たので方法を書いてみます。以下の記事を参考にしました。
といっても、要するにGemfileに
source :rubygemsgem "rails", ">= 3.0.0"gem "sinatra", "1.3.4"
って書いて、あとはconfig.ruをいつものように
require './app.rb'run Sinatra::Application
のように書いて、app.rbに
require 'sinatra'get '/' do "Hello world!"end
みたいにアプリを書けば、こんな感じに普通に動きます。ちょっと裏技っぽいですけどね。
で、先ほどの記事にも書かれてますが、中の人によると、そのうちにgem "rails"を書かなくても任意のRackアプリが動くようになるそうです。 Sinatraだとこれでいけるんだけど、PadrinoはRailsと干渉したりするんだとか。
中の人がKanazawa.rbでMOGOKの内部アーキテクチャの話をされたそうなので、スライドを貼っておきます。
2013-02-24
■ [ruby] UXを重視したプログラミング言語
Rubyが生まれたのは今から20年前のことだ。Rubyの肩書きは「オブジェクト指向スクリプト言語」であるが、実のところRubyにしかない特徴的な機能というものは特になく、いろんな言語から良いところを寄せ集めてきたというのはまつもとさんも各所で書かれている通りだ。
その代わり、Rubyはプログラムの書きやすさを常に念頭に置いてデザインされてきた。 それはプログラミング時の脳の負担を最小にする、と表現されることもあるし、楽しくプログラミングできる、のように表現されることもある。
人によっては、プログラミング言語にとって構文は本質的ではない、という向きもあるだろう。それに対して、 構文やメソッド名を工夫することはプログラミング言語の使用感に結構な影響を与えるし、「触りごこちの良さ」は重要なことである、というのがRubyの思想である。 最近、UI(User Interface)からUX(User Experience)へ…みたいな話をネットでよく見かけるが、RubyはUXを重視したプログラミング言語と言えるのではないかと思う。
そんな定性的なものをどうやってデザインすればいいの?と言われそうだが、2種類の記法のうちどちらを選択するかによって、プログラムを読み書きする際の感覚というか、脳の動きというか、そういうものが変わってくるのだなぁというのが最近RumCokeをいじっていて実感として分かってきた。
ということで、昨日まつもとさんにそのへんのことを尋ねてみた。で、ちょっと面白い話を聞けたんだけど、Rubyが生まれた頃はプログラミング言語というものは企業か研究室のいずれかで作られていたため、 既存のものに対して新しい機能がないプログラミング言語というものが生まれる余地はなかったというのだ。 確かに、企業がプログラミング言語を作る場合は何らかの解決したい新しい問題のための機能が盛り込まれるはずで、そうでないと予算が付かない。 一方で研究室で生まれるプログラミング言語は論文の種にならなければいけないから、新規性のない言語というのはあり得ない。
既存のものと機能は同じだが、それ以外の点を改良するというアプローチは、ライバルと違う道を行くための良い方法だったのかも知れない。