<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>Rails Hub情報局</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/" />
    <link rel="self" type="application/atom+xml" href="https://el.jibun.atmarkit.co.jp/rails/atom.xml" />
    <id>tag:el.jibun.atmarkit.co.jp,2019-03-18:/rails//26</id>
    <updated>2016-04-28T00:40:07Z</updated>
    <subtitle>＠IT編集部の西村賢がRuby/Rails関連を中心に書いています。</subtitle>

<entry>
    <title>「20年後も現役プログラマでいたい」、まつもと氏がRuby20周年で語る</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2013/03/20ruby20-ba0f.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2013:/rails//26.2068</id>

    <published>2013-03-21T06:21:18Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　2013年2月23日に東京・品川でRuby20周年記念パーティーが開催されまし...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　2013年2月23日に東京・品川で<a href="http://ruby20th.herokuapp.com/">Ruby20周年記念パーティー</a>が開催されました。Rubyアソシエーションと日本Rubyの会が合同で企画したものです。祝辞（というよりも、むしろ講演）が7本ほど続き、会場はずっと拍手と笑いに包まれ、和やかなムードでした。</p>

<p>　私は、Rubyの生みの親、まつもとゆきひろ氏のインタビュワーを務めさせて頂きましたので動画を公開します。</p>

<p><object width="480" height="270"><param name="movie" value="http://www.youtube.com/v/qnXmlYhNjRE?version=3&amp;hl=en_US" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/qnXmlYhNjRE?version=3&amp;hl=en_US" type="application/x-shockwave-flash" width="480" height="270" allowscriptaccess="always" allowfullscreen="true" /></object></p>

<p>　インタビューは20分の予定でしたが、会場からたくさん質問が出て盛り上がったので延長していたようです。動画は38分ほどあります。</p>

<p>　以下、いくつかまつもと氏の発言を箇条書きでご紹介します。</p>

<ul>
  <li>20年前のRuby登場時、「ふつうのプログラマはオブジェクト指向は知らなかった。縁のないものだったと思う」。C++でCADを作るような人とか、アカデミックな世界以外ではオブジェクト指向は普及していなかった。</li>
  <li>Rubyの仕様について検討する「Rubyコミッティー」を作れという提案に対して。「未来をどうするかという話をコミッティーでやってうまく行ったことなんてないので、ちょっとは学習しろよと思います（笑）」</li>
  <li>2004年に登場したRuby on Railsも、たくさん出てきたWebアプリケーションフレームワークの中の1つで、広く普及するとは正直予想が付かなかった。</li>
  <li>RubyはWeb言語と言われる／見られることもありますが？ 「そんなことを言う人はRubyに関心がないので、いいんですよ。Web言語じゃないと気が付かない人は別にいいんです」。</li>
  <li>CとRubyは9対1の割合でプログラミングしている。Rubyのほうが楽しい。ただ、「プログラマは怠惰なので、手を抜くためには努力を惜しまない。1の部分で気分良く書くために、私はCでゴソゴソ書いている」。</li>
  <li>いまから20年後のご自身の姿は？ 「私の生涯のテーマは、いまと同じ状態をずっと続けること。20年後も現役プログラマでいたいなと思います」。</li>
  <li>いま全力で潰しておかないといけない言語は？ 「Luaとは戦っているかもしれませんけど、私はあまりに言語ラブなので、（言語を）潰すというのは考えづらい」。</li>
  <li>（上記の発言の直後に）「人類のためにJavaScriptは何とかしたほうがいい」</li>
  <li>RubyはWeb分野は制覇した。mrubyで組み込み制覇できる？ 「いや、わかんないですよね、そんなの（笑） ただ、その目的で使いたいときに、そのテクノロジーがあるかどうかは大切。Rubyが使いたいというとき、ふつうの人はRuby作らないですよね。そこに選択肢を提供できればとは思います」</li>
  <li>国産言語、日本発のプログラミング言語と言われることに違和感は？ 「方便で、日本産と言ったほうがウケがいいときには「日本産だ」と、しれっと言うんですけどね。特にスーツを着た人の前だと、日本から来たんですよーみたいなことをいうと嬉しそうな顔をされるので（笑）。ただ、プログラマとしての私のアイデンティティは、Unixプログラマとか言語好き。その辺でアイデンティファイされたい。そういう側面でいうと、私はたまたま日本に生まれてたまたま日本語が得意なだけ。所属はプログラマ、国籍はプログラマという意識のほうが強い」</li>
</ul>]]>
        
    </content>
</entry>

<entry>
    <title>本家の5倍速？ Pythonで実装したRuby処理系の「Topaz」が登場</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2013/02/5-pythonrubytop-0220.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2013:/rails//26.2067</id>

    <published>2013-02-07T05:52:21Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　日本時間だと2013年2月7日未明のことですが、「Topaz」（トパーズ）と名...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　日本時間だと2013年2月7日未明のことですが、「Topaz」（トパーズ）と名付けられたPythonで実装されたRubyのバージョン0.1がリリースされました（<a href="http://docs.topazruby.com/en/latest/blog/announcing-topaz/">リリースに関するブログ</a>、<a href="http://topazruby.com">プロジェクトのページ</a>、<a href="https://github.com/topazproject/topaz">GitHubのリポジトリ</a>）。Ruby処理系はC、Java（JVM）、Ruby、CLI、JavaScript、Smalltalkなどによる実装がありましたが、Pythonというのは、ちょっと驚きです。ただ、Pythonといっても、Python言語で書くのが主眼なのではなく、Pythonエコシステムで高速処理を目指して作られた「PyPy（パイパイ）」の成果物の上に実装したというのがTopazのようです。現在のところ<a href="https://github.com/topazproject/topaz/blob/master/AUTHORS.rst">コード作者リスト</a>に9人の名前が上がっていて、JRuby実装で知られるチャールズ・ナッター氏の名前も入っています。</p>

<p>　Topazは正確にはPythonではなく、RPythonと呼ばれるPythonのサブセットの言語で書かれています。RPythonは2.7.3互換をなるべく保ちつつ、速度向上を目指した仕様・実装のようです。<s><a href="http://pypy.org/compat.html">RPythonとPythonの互換性のページ</a>によれば、Django、Flask、SQLAlchemyなども動くようで、サブセットといっても互換性は高そうです。</s></p>

<p>　【追記1】ライブラリの互換性が高いのはRPythonのほうではなくPyPyのほうでした。訂正してお詫びします。</p>

<p>　【追記2】なぜPyPyが速いのか、ということについては、Ryotaro Ikeda氏の<a href="http://www.longsleeper.com/pypyadvent11">「流行りのJITコンパイラは嫌いですか?」</a>という文書がコンパクトで参考になります。<a href="https://twitter.com/objectxplosive">@objectxplosive</a>さん、情報ありがとうございます！</p>

<p>　RPythonのRはRestricted（制約ありの）の意味で、Pythonを型推論による静的型付け言語のように扱うために作られたようです。RPythonで書かれたコードはCやJVM上のバイトコード、CILなどに変換でき、かつJITが効くので、RPythonは多くの場合、CPythonよりも高速だということです。以下、PyPyのマイクロベンチマークの表を1つ引用します。平均して5.6倍とあります。</p>

<p><img alt="Pypychart" title="Pypychart" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2013/02/07/pypychart.png" border="0"  /></p>

<p>　つまり、RPythonを使って実装したTopazというRuby処理系もCRubyよりも速くなる可能性があるということかと思います。すでにあちこちで「全く科学的とは言いがたい」という前置き付きのベンチマークの結果をブログなどに貼る人が現れています。例えば、<a href="https://gist.github.com/havenwood/4724778">havenwoodさんのGist</a>にある、差が6となる素数ペアをリストアップする（割とRubyっぽい？）コードの例だと、以下のような結果のようです。</p>

<ul>
  <li>Topaz-dev: 9.65秒</li>
  <li>Ruby-1.9.3: 44.81秒</li>
  <li>Ruby-2.0.0: 44.09秒</li>
  <li>JRuby-1.7.2: 42.14秒</li>
  <li>Rubinius-2.0.0: 82秒</li>
  <li>MacRuby-0.1.3: 36.29秒</li>
</ul>

<p>　速度面では、だいぶ期待できそうです。</p>

<p>　ただ、TopazはRuby 1.9.3互換ということですが、今のところ、ライブラリの大部分、標準メソッドの多くが未実装であるほか、スレッドやファイバ、call/ccは未サポート、メソッドの可視性制御も未サポートなど本当に始まったばかりのプロジェクトです（それでもリリース前に10カ月ほど取り組んでいたということですが）。</p>

<p>　RubyとPythonは似たところの多い言語ですが、エコシステムはかなり違っています。特に自然言語処理や統計処理、機械学習など研究者方面ではPythonの利用が多く、ライブラリも充実しています。普及タイミングの問題もあったのかもしれませんが、この違いはかつてのRubyとPythonの処理速度の差から来ていた面もあるのではないでしょうか。RubyはWeb系では活発で大きなエコシステムを持っていますが、こうしたPythonの多様さには一歩及んでいないというのが私の印象です。</p>

<p>　Topazのような「（制約付きながらも）速いRubyを目指す」プロジェクトが出てきたことで、これまでRuby界隈ではあまり見かけなかったようなライブラリや、既存ライブラリの移植が見られるようになるなら、これはRubyistや、「研究でもRubyが使いたいなぁ」と思っているような人にとっては朗報になるのではないかと想像しています。</p>]]>
        
    </content>
</entry>

<entry>
    <title>プログラミング地獄への道は“ベストプラクティス”で敷き詰められている</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2013/01/post-6025.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2013:/rails//26.2066</id>

    <published>2013-01-17T06:16:54Z</published>
    <updated>2017-03-01T21:46:26Z</updated>

    <summary>　Ruby on RailsのメジャーバージョンアップとなるRails4のリリー...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　Ruby on RailsのメジャーバージョンアップとなるRails4のリリースが近づいて来ました。先日、日本人（あるいはアジア人）として初めてRailsコアチームのコミッタとして迎え入れられた<a href="http://twitter.com/a_matsuda">松田明氏</a>によると、Railsの生みの親であるDavid Heinemeier Hansson氏（以下、通称のDHHを使います）は、プロジェクトをリードするという意味で活動が活発になっているそうです。</p>

<p>　そして最近のDHHは、ブログもよく書いています。彼は歯に衣着せぬ発言でも知られています。強い主張を持った（opinionated）なフレームワークの作者らしく、DHH自身もきわめてハッキリと物を言います。攻撃的とまでは言いませんが、IT業界や技術動向などでは割と何かをクソミソにけなしたりということをします。</p>

<p>　DHHが何かをけなすときは、だいたい何らかの鋭い洞察とパンチの効いた皮肉が含まれていて、<a href="http://twitter.com/dhh">Twitter上のつぶやき</a>や、<a href="http://37signals.com/svn/writers/dhh">ブログ</a>は読んでいて非常に面白いです。たとえ話も上手で、印象に残ることが少なくありません。</p>

<p>　そんなDHHのブログを読んでいて最近なるほどなと思ったのが、</p>

<blockquote style="font-size: 1.5em; line-height: 150%; color: black; font-weight: bold; background-color: #eeeeee; padding: 5px;">プログラミング地獄への道は、時期尚早に適用された“ベストプラクティス”で敷き詰められている――DHH
</blockquote>

<p>という言葉です（<a href="http://37signals.com/svn/posts/3384-winning-is-the-worst-thing-that-can-happen-in-vegas">Winning is the worst thing that can happen in Vegas</a>というブログエントリに出てきます）。</p>

<p>　これは「地獄への道は善意で敷き詰められている」という有名な言葉をもじったものです。この言葉、私はマルクスがオリジナルかと思っていましたが、どうも<a href="http://en.wikipedia.org/wiki/The_road_to_hell_is_paved_with_good_intentions">違うようですね</a>。ともあれ、この言葉の意味するところは、善意から出てきた社会運動や政策提言でも、社会や人類に多大な害悪をもたらす結果になることがあるということです。社会主義は、人間が人間を搾取しない平等を目指すとした「善意」から起こった思想でしたが、結果として著しい停滞や貧困、独裁による地獄が現前したことは歴史に見るとおりです。しかし、それは元々は高邁な理想や人々の善意から起こった政治運動であり社会実験だったわけです。「地獄への道は善意で敷き詰められている」という言葉は、「善意ほど恐ろしいものはない、心せよ」という警句として読めます。</p>

<h2 id="section">ラスベガスで起こり得る最悪のこと</h2>

<p>　さて、DHHの言葉ですが、ブログエントリのタイトルは「<a href="http://37signals.com/svn/posts/3384-winning-is-the-worst-thing-that-can-happen-in-vegas">Winning is the worst thing that can happen in Vegas</a>」（ラスベガスで起こり得る最悪のこと）となっています。要点は以下の通りです。</p>

<p>　ラスベガスのカジノでは、割と早い段階で客に勝たせるようにできている。しかし、長い目で見れば、ちゃんとカジノ側がその分も含めて全てを取り戻すようになっている。
</p>

<p>　ちょっとした勝利の高揚感がギャンブルに対して人を盲目にさせるのです。同様に、「すばらしいアーキテクチャで抽象化できた」という小さな勝利の高揚感によって、プログラマは「早すぎる抽象化」の罠に陥ることがあるというのがDHHの主張です。</p>

<p>　未来コーディングはカジノのルーレットで賭けをするのに非常に似ているとDHHは言います。未来コーディングというのはDHHの造語だと思いますが、将来に必要となることを考えながら設計やプログラミングをすることですね。将来こういう機能が必要だろうとか、こういう風に抽象化しておけば、プログラムの柔軟性が高くなって将来に変更が必要になっても対処できるというような「先を見越したプログラミング」です。これをやり過ぎるなというのがDHHの言っていることだと思います。YAGNI（You ain&rsquo;t gonna need it. そんなもん必要にならねぇよ）という言葉もプログラマーの間では良く知られていると思いますが、「将来必要になりそうだから」と思って実装する機能は実際には不要なことが多いので実装のシンプルさを優先させるのが吉、ということですね。</p>

<h2 id="section-1">柔軟性という名の技術的負債</h2>

<p>　技術的負債というのは、整理がつかないまま汚いと知りつつしてしまったコミットや、クイックハックのことばかりではない。もっと潜在的に蓄積してくるのが「柔軟性」という名の負債だ、とDHHは喝破します。</p>

<p>　未来コーディングはルーレットで賭けるのに似て、当たるも八卦当たらぬも八卦。このため、「こういう感じのやつが、もっと増えたときのため」と思って行う、「早すぎる抽象化」「早すぎる抽出」（premature abstraction and extraction）というのは、全て少しずつ蓄積していって、技術的負債となるのだといいます。1970年台に「早すぎる最適化は諸悪の根源だ」と言ったドナルド・クヌース博士の警句に通じる話ですね。</p>

<p>　抽象化や抽出（メソッドやクラスを独立させるようなことでしょうか）、あるいはアーキテクチャー（デザインパターンのようなものでしょうか）といったもので、存在自体がイケてないものというのはほとんどない。「善意」と同じで、「ベストプラクティス」に、それそのものが悪いものというのはない。ただ、必要性がないのに適用されたベストプラクティスは、ほとんどすべて悪である――。これがDHHの指摘です。何の問題もないコードなのに、いきなり「ナントカファクトリー」という名前のクラスを足すとか、基底クラスを継承しているクラスが1個しかないという話でしょうか。DHHは、使わない引数を実装したメソッドや、どこからも呼ばれないパブリックメソッドに対しても「ノー」と言います。</p>

<p>　「設計の世界において最も難しく、そして最も重要なことは、“ノー”と言える信念だ」（DHH）</p>

<p>と、ブログを締めくくっています。</p>

<p>　先を見越した設計、行き当たりばったりでない設計の大切さは言うまでもないのでしょうけど、それがアダとなり得るというDHHの言葉は含蓄があるように思いました。</p>]]>
        
    </content>
</entry>

<entry>
    <title>HerokuがJRubyを公式サポート言語に追加</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/12/herokujruby-8f3d.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2065</id>

    <published>2012-12-14T07:31:58Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　2012年12月13日、HerokuがJRubyを公式サポート言語に加えたと発...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　2012年12月13日、HerokuがJRubyを公式サポート言語に加えたと<a href="http://blog.heroku.com/archives/2012/12/13/run_jruby_on_heroku_right_now/">発表しました</a>。公式サポート言語、フレームワークは、</p>

<ul>
  <li>Ruby</li>
  <li>JRuby</li>
  <li>Node.js</li>
  <li>Clojure</li>
  <li>Python</li>
  <li>Java</li>
  <li>Gradle</li>
  <li>Grails</li>
  <li>Scala</li>
  <li>Play</li>
</ul>

<p>ということになりました。すでにScalaやClojureといったJVM言語をサポートしていたので、意外に対応が遅かったような印象もあります。RubyコミュニティがC実装のRubyとUnixのプロセス並列によるスケーリングを好む傾向にあって、JRubyがRuby側からはさほど普及していないことが理由として挙げられるかもしれません。</p>

<p>　Herokuは2011年8月にJava対応を開始していて、すでにJRubyを動かすこと自体はできました。今回は公式サポート開始ということで、特別な設定をすることなく利用可能となったということです。</p>

<p>　既存のCRubyをターゲットとしたRailsアプリをJRubyでHerokuにデプロイする方法は、「<a href="https://devcenter.heroku.com/articles/moving-an-existing-rails-app-to-run-on-jruby">Moving an Existing Rails App to run on JRuby</a>」というドキュメントに書かれていますが、</p>

<ul>
  <li>ローカルにJRubyをインストールしてRailsアプリの動作を確認</li>
  <li>JRuby非対応のgemがあったら何とかする</li>
  <li>Gemfileにjrubyを使うむね、宣言を書く</li>
  <li>pumaなどJRuby対応のWebサーバを使うよう変更する</li>
  <li>Procfileの起動コマンドを書き換える</li>
  <li>PostgreSQLのドライバを pg から JDBC対応の activerecord-jdbcpostgresql-adapterに変える</li>
</ul>

<p>というような流れのようです。</p>

<p>　ちなみに、サードパーティー製のHeroku向け言語サポートが「ビルドパック」という仕組みで存在しています（<a href="https://devcenter.heroku.com/articles/third-party-buildpacks">リンク</a>）。言語によらず、gitでコードをpushするとHeroku側でslugというバイナリにコンパイルされますが、ビルドパックというのは、このコンパイル手順を書いたスクリプトです。標準サポートのRubyやNode.jsも同様の仕組みを利用しているそうです。サードパーティ製のビルドパックには、DartやGo、Erlang、Perl、Lua、Meteorといった比較的メジャーなものから、EmacsLispやPhantomJS、R、Elixirといったエキゾチック（？）なものまであります。EmacsLispでWebアプリが作れるんですね……。EmacsLispで書かれたNode.jsのような非同期Webサーバ「<a href="https://github.com/nicferrier/elnode">Enlode</a>」を使うそうです。</p>

<p>　ともあれ、JRubyを使うメリットは、Javaのライブラリが使えることと、CRubyのようにGIL（Global Interpreter Lock）が存在せず、スレッドを使った並列化で高速化がやりやすいことでしょうか。公式サポートとなったことで、JRubyの利用が増えるかもしれませんね。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Rails4に間に合うか、REPL付きエラー画面「Better Errors」がイイ感じ</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/12/rails.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2064</id>

    <published>2012-12-10T08:54:18Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>2日ほど前にGitHubに登場して話題となっているRackアプリケーション向けエ...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>2日ほど前にGitHubに登場して話題となっているRackアプリケーション向けエラー画面表示ツールの「<a href="https://github.com/charliesome/better_errors">better_errors</a>」というgemがヨサゲなので、ちょっと試してみました。Rack対応なので、Sinatraでも使えるようですが、もちろん、Ruby on Rails対応です。間に合えば、Ruby on Rails4に採用されることもあるかもしれません。というぐらい、こういうのを待っていましたという声が出ているようです。</p>

<p>スタックトレースとエラー発生箇所が表示されるのは、Rails標準のエラー画面と同じですが、コードがハイライトされているほか、スタックフレームの任意の場所をクリックすると、該当するコードが表示されるなど、簡易なWebアプリっぽくなっています。インスタンス変数や、パーシャルに渡っているローカル変数も表示します。</p>

<p>以下はRails標準のエラー画面です。</p>

<p><img alt="Normal_error" title="Normal_error" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/12/10/normal_error.png" border="0"  /></p>

<p>Better Errorsを入れると、以下のようにカラフルに。左のスタックフレームをクリックすると、右側は該当箇所のコード、関連情報の表示に切り替わります。</p>

<p><img alt="Better_error" title="Better_error" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/12/10/better_error.png" border="0"  /></p>

<p>極めつけは、<strong>ブラウザ上でREPLを起動してくれて、その場でコンソールが使える機能です</strong>。Common Lispのような動的な環境でコードを書く人だと当然なのかもしれませんが、動いているコードに入っていける感じはいいです。Pryを使ったデバッグ環境で似たようなことはできますが、こういうのって標準で入っていてほしい機能ではないかと思います。最近は<a href="https://github.com/burke/zeus">zeus</a>のようにrailsコマンドの起動を高速化するようなツールがあったりしますが、エラー画面を見て、そこから rails c などとしてコンソールを起動するのってめんどくさいですよね。</p>

<p><img alt="Repl" title="Repl" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/12/10/repl.png" border="0"  /></p>

<p><a href="http://news.ycombinator.com/item?id=4894278">Hacker Newsで話題</a>となっていますが、PHPのSymphonyやPythonのFlaskには似たような仕組みがあるようですね。逆に、Railsでは意外にエラー画面が素朴なまま放置されていたということでしょうか。</p>

<p>ちなみに気になって調べてみたのですが、Better Errors作者のCharlie Somervilleさんは、オーストラリア出身の18歳の開発者のようです。これまでに開発した<a href="http://charlie.bz/code">オープンソースのプロジェクトのリスト</a>を見てみると、ブラウザで各種言語が実行できる <a href="http://eval.in">eval.in</a> や、大半をJavaScriptとCoffeeScriptで実装したOS、「<a href="https://github.com/charliesome/jsos">JSOS</a>」、Rubyで実装したJavaScript処理系の「<a href="https://github.com/charliesome/twostroke">twostroke</a>」、イベント駆動I/Oの抽象化ライブラリの libuv と Node.js のHTTPパーサを流用したRuby向けのWebサーバ「<a href="https://github.com/charliesome/racer">Racer</a>」など、とても18歳と思えない多産さです。広く受け入れられるプロジェクトという意味では、今回のBetter Errorsが出世作になるのかもしれませんが、すごい若者が出てくるものですね。</p>]]>
        
    </content>
</entry>

<entry>
    <title>開発環境と本番環境の違いを埋めるHeroku、Engine Yardの新機能</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/11/paas-a6ea.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2063</id>

    <published>2012-11-21T08:49:45Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　「でも、ステージング環境ではちゃんと動いています！」 　こう言われてブチ切れた...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　「でも、ステージング環境ではちゃんと動いています！」</p>

<p>　こう言われてブチ切れた経験があります。業務アプリのバギーな動作を社内のエンジニアに指摘したところ、テスト用の環境では動いているというのです。「いや、ぼくら本番環境のアプリを使っていて現に困っているので、それを直してほしいだけなんですけど」というと、「でも、ちゃんとステージング環境では動いています。お使いになっているのがChromeのようですが、Chromeでの動作検証はしていません（キリッ」というようなやり取りに絶望しました。原因はブラウザではなく、バージョンアップしたアプリ自体にあったのですが、ステージング環境では問題が発現しなかったんですね。</p>

<p>　というように、開発環境、ステージング環境、プロダクション環境（本番環境）の3つは、大小いろいろな違いがあって、完全に一致させることは難しいものです。手元の環境で動いているアプリが、プロダクション環境にデプロイしたらなぜか動かない、というような経験はアプリ開発者ならお持ちだったりするのではないでしょうか。</p>

<p>　「手元と本番でDBのバージョンが違ってて、マイナーバージョンの違いだから大丈夫だろうと思ったら挙動がビミョーに違ったし！ うぎゃー」とか、「本番のデータだと負荷が高まったときに、このパッチでタイムアウトの例外が多発するようになっていた！ ウキーッ」とか、「Rubyを最新のパッチレベルにしたら、実はマーシャリングのフォーマットが変更になっていて、DBをダンプしてリモート環境にロードするgemが動かなくなっていたよ！ むぎゅぅ」とか、「サードパーティ製のJavaScriptがなぜかHTMLの最後にスペースを勝手に入れてくれていて、おかげでフッターのレイアウト崩れてたし！ そんな忍びの術みたいなもん気付かんし！」とか、「手元では昔設定した環境変数を参照してたまたま言語設定がうまく動いているだけだった…… 本番は文字が化け化け！ ていうか、DBのマイグレーション失敗だし、オレもう終電逃し確定だし！」とか、「動かねぇ……。うごご、本番環境はLinuxなのに、MacのUnixコマンドの出力前提に初期化スクリプト書いたの誰だよ！ リバート、プリーズ！」とか、「ローカルのWebサーバはオッケーでも、サーバ上のNginxではリバースプロキシがRailsのBasic認証と相性が悪かった！ サノバビッチ、スパシーバ！」</p>

<p>とか、そういうことです。</p>

<h2 id="section">●12ファクターアップとは？</h2>

<p>　こうした悲しい事態を避けるために必要となるのが、「開発・本番等価」という考え方です。できる限り、両者の環境を一致させろということです。</p>

<p>　「<a href="http://www.12factor.net/dev-prod-parity">開発、ステージング、プロダクションをできる限り近づける</a>」というのは、“<a href="http://www.12factor.net/">12ファクター・アップ</a>”が掲げるマントラの1つです。12ファクターアップというのは、ネット経由で配布・提供される現代のモダンなアプリ（ソフトウェア）が満たしているべき12個の原則を書きだした一種の宣言文のことです。12ファクターアップは、ちょうどアジャイル宣言のように、原則を並べた宣言文書なので、特定のプラットフォームや開発言語などを想定はしていません。ただ、この文書をまとめたのはHeroku創業者メンバーの1人、アダム・ウィギンズ氏で、Herokuプラットフォームの開発や、Herokuがホストする数多くのアプリケーションを観察していて到達した原則集ということですから、意地悪な見方をするとHerokuの宣伝文書、もしくは目標宣言のように読めなくもありません。例えば、アーキテクチャやツール、開発スタイルに大幅な変更を加えることなくスケールが可能なことというのは、HerokuのDynoを想起させます。スライダーバーをググっと上げれば、ハイ終わりという。実際、＠ITが提供・運営しているQ＆Aサイトの<a href="http://qa.atmarkit.co.jp/">QA＠IT</a>はHerokuで動かしていますが、.初期に想定以上のトラフィックが来たために慌ててDynoの数を2つから5つに上げた、ということがあります。</p>

<p>　ともあれ、やや宣伝めいたところのある12ファクターアップの文書ですが、これをまとめた背景に明記されているように、12ファクターアップという文書は、モダンなアプリ開発に関わる課題を論じるための「共通語彙」、もしくは「方法論」を定義するものでもあります。そういう意味では議論のスタートとしても良いものではないかと思います。</p>

<h2 id="section-1">●「開発・本番等価」というルール</h2>

<p>　どうやって開発・プロダクション環境の等価性を高めるのでしょうか？</p>

<p>　例えば、Web系開発者の間で、開発用端末としてMacが人気なのは、デプロイ先がLinuxサーバであることが多く、同じPOSIXならミドルウェアや言語処理系、ツール類で、ほぼ同じ環境が再現できることが挙げられると思います。iOS開発がプラットフォームを選ぶ（Macのみ）一方、Androidは何でも良いということも影響しているかもしれません。また、Linuxサーバで作業することが増えた結果、viやcurl、tailなどのコマンドラインツールの価値が見直されているというトレンドもあるように個人的には感じています。だったらなぜRuby on Rails開発者はあまりUbuntuを使っていないんだというツッコミもあるかもしれませんが、それは「設定がしたいんじゃなくて開発がしたいから」というのが1つの答えだと思います。</p>

<p>　さて、このブログに本論に移る前に、<a href="http://www.12factor.net/">12ファクターアップ</a>の12の原則を和訳しておきます。</p>

<ol>
  <li><strong><a href="http://www.12factor.net/codebase">コードベース</a></strong>：バージョン管理された単一のコードベース、多数のデプロイ</li>
  <li><strong><a href="http://www.12factor.net/dependencies">依存管理</a></strong>：依存は明示的に宣言して分離する</li>
  <li><strong><a href="http://www.12factor.net/config">設定</a></strong>：設定は環境に保存する</li>
  <li><strong><a href="http://www.12factor.net/backing-services">補助サービス</a></strong>：補助サービスはリソースとしてアプリに付随させる</li>
  <li><strong><a href="http://www.12factor.net/build-release-run">ビルド、リリース、実行</a></strong>：ビルドと実行は完全に別ステップとして分離する</li>
  <li><strong><a href="http://www.12factor.net/processes">プロセス</a></strong>：アプリは１つ、もしくは複数のステートレスなプロセスとして実行する</li>
  <li><strong><a href="http://www.12factor.net/port-binding">ポートバインディング</a></strong>：ポートバインディングを通してサービスを露出する</li>
  <li><strong><a href="http://www.12factor.net/concurrency">並行性</a></strong>：プロセスモデルを使ってスケールアウトする</li>
  <li><strong><a href="http://www.12factor.net/disposability">廃棄できること</a></strong>：速いスタートアップタイムと優雅なシャットダウンによって堅牢性を最大化</li>
  <li><strong><a href="http://www.12factor.net/dev-prod-parity">開発・本番等価性</a></strong>：開発、ステージング、本番をできる限り近づける</li>
  <li><strong><a href="http://www.12factor.net/logs">ログ</a></strong>：ログはイベントストリームとして扱う</li>
  <li><strong><a href="http://www.12factor.net/admin-processes">管理プロセス</a></strong>：管理者・管理のタスクは、（起動して実行したら終了する）1回きりのプロセスとして走らせる</li>
</ol>

<p>　Rails開発者なら、ああ、1はGitのmasterのことだな、2はGemfileだななどと思うかもしれませんが、ほかのフレームワークでも似たような仕組みがありますよね。6～8番あたりはUnicornを思わせますが、いやいやプロセスじゃなくてスレッドが答えだという人たちもいることでしょう。そういえば、大量のUnicornが走っている某社のRailsアプリでは、個々のUnicornの寿命が数分という話を聞いたことがあります。メモリリークがひどくて、少し動かすと反応しなくなるので、ガンガン殺してまたリスタートさせるという話です。これは6番の極端な例かもしれません。外部からそのアプリにアクセスして見ている分には、別に問題なく動いているように見えるということです（現場の人には当然それが良いという認識はなく、何とかしないと、という話でした）。</p>

<h2 id="heroku">●Herokuが「データベースのフォーク」を実現</h2>

<p>　さて、12ファクターアップという文書は洞察に富んでいるので、一読の価値はあると思うのですが、ここでは開発・本番等価性の話をしたいと思います。</p>

<p>　というのも、HerokuとEngine Yardが、前後して開発・本番等価性を高める新機能をリリースしたからです。それぞれに見ると、「へぇ、便利」という程度のことかもしれませんが、ともに12ファクターアップがうたうモダンな開発スタイルを前進させる「PaaS進化の最前線」だと思うからです。</p>

<p>　1つは、2012年11月8日にHerokuがリリースしたデータベースのフォーク機能です（<a href="https://postgres.heroku.com/blog/past/2012/11/8/fork_your_data/">Herokuの関連ブログ</a>）。Herokuが指摘するとおり、GitとGitHubは「フォーク」（分岐）という、時としてネガティブなニュアンスさえあったアクションを、この上なくカジュアルに手軽にしてしまいました。Gitでブランチを切るのはSHA-1の生成と、その40バイトのデータのファイルへの書き込みだけなので動作としても一瞬です。分散レポジトリなので名前の衝突問題も小さく、ガンガン好きなだけブランチが作れます。GitHub以前は“フォーク”といえばコードの所有権やコミットの場（リポジトリ）、その主体がある日を境に分岐するという話でした。意見や目的意識の違いや、開発者間の仲違いによってフォークは起こりました。しかし、GitHubでは、フォークはもっと気軽なもので、別の意味も帯びています。とりあえず、自分のところへコードベースを持ってきて、そこで何か作業をして、その結果を元へ戻すというようなときにフォークしてしまいます。こうすることで、いきなり本家のレポジトリでブランチを切ったりすることなく自由に実験的な開発とコミットができるのです。これはGitがもともと持っているDVCの性質ですが、GitHubはボタン一発でフォークできる手軽さを実現したところがスゴイと思います。</p>

<p>　Herokuがリリースしたデータベースのフォーク機能も、GitHubのフォークに近いニュアンスです。HerokuはPostgreSQLをサービスとして提供していますが、本番環境のデータベースをボタンのワンクリックでフォークできるようになりました。例えば、本番環境のデータを、ステージングへとクローンすれば、「ステージング環境ではマイグレーションが通ったのに本番環境で失敗した」ということが減るはずです。負荷テストをするにしても、本番環境のデータをフォークして流用すれば精度が高いでしょう。ステージングのほうのデータベースは、検証が終われば破棄すればよく、使った分以上に課金されることもありません。クラウドっぽいですね。</p>

<p>　データベースのフォーク機能は、また一歩、12ファクターアップを体現した機能と言えると思います。GitHubのフォーク機能と同じで、「それ、これまでにもダンプしてロードすればできたやん」という議論があるかもしれません。でも、ちょっと違うと思うのですよね。ボタン一発（あるいはCUIのコマンド一発）でできる手軽さがいいのだと思います。</p>

<h2 id="engine-yard">●Engine Yardは仮想環境向けの開発環境を提供</h2>

<p>　さて、もう1つ。</p>

<p>　Herokuの競合であるEngine Yardは「<a href="http://www.engineyard.co.jp/blog/2012/introducing-engine-yard-local/">Engine Yard Local</a>」を2012年11月16日に無償でリリースしました。Engine YardはRailsやNode.jsの開発環境として、ミドルウェア、フレームワークを全て含む<a href="https://support.cloud.engineyard.com/entries/21009842-engine-yard-technology-stack">独自のスタック</a>を提供していますが、これをローカルの仮想環境で動かすことができるそうです。仮想環境に開発環境をセットアップする「<a href="http://vagrantup.com/">Vagrant</a>」と、OSSの仮想化ソフトウェアの「<a href="https://www.virtualbox.org/">VirtualBox</a>」を組み合わせてEngine Yard Localは実現されています。Engine Yard Localを使うと、同社のクラウドインフラと同様のOS、Webサーバ、アプリケーションサーバ、ロードバランサなどが手元に再現されます。</p>

<p>　Vagrant（ベイグラント：意味は「放浪者、浮浪者」）の公式サイトに行くと、ズバリ「開発・本番等価」という言葉が書いてあり、12ファクターアップのサイトへのリンクが貼られています。いまや本番環境では、DBサーバだけでなく、0mqのようなメッセージングサービスが動いていたり、Redisのようなインメモリのキャッシュクラスタが動いていたりするわけですが、いくらMac OS Xが「POSIXだから、まあ動きますよ」と言っても、こうした個別のアプリ依存のソフトウェアをMacPortsやHomebrew、あるいは手動で手元のマシンにインストールして設定・管理するのがだんだんつらくなってきているように思います。特に複数アプリに関わっていて設定の切り替えが必要だと絶望的になるのではないでしょうか。</p>

<p>　最近のマシンは高速なので、開発環境は、それ専用の仮想環境に入れてしまえばいい、というのがVagrantの発想です。確かにスッキリ！ サーバ側と全く同じ環境を実現！ すばらしい！ もうMacPortsじゃなくて、apt-getでいいんや！ とも思えますが、もちろんマイナス面もあります。</p>

<p>　例えば、現実の開発者というのは、熱風を吹き出しうなり続けるMacBook Airをなだめすかしたり、ぐるぐる回る虹色バルーンを呆然と見つめながらメモリ2GBのマシンで開発していたりするわけです。そういう環境で「仮想環境にOSとミドルウェア一式をぶち込めば万事解決！」と言われても、そんな重たそうなもの……、何のために軽快な動的言語やviを使ってるのかワカランぞということになりかねません。なんだかんだ言ってPC上ではゲストOSは二級市民です。ゲストOSが動いていると、なぜかホストOSのレジュームが失敗して、延々と黒い画面を見つめて祈った経験があるという嫌な思い出がある人もいるかもしれません（私ですが）。</p>

<p>　Vagrantでは、IaaSにおけるChefのように、ローカルの仮想環境に対してChefやPuppetが使えるそうです。「ちょっと手元にHadoopクラスタを作って実験してみたい」というような用途でも使われているといいます。あるいは、チーム開発の場合でも新メンバーに対してMacBook Proを買い与えて「さあ、以下の手順に従ってRuby、Rails、Postgres、Redisあたりを入れてください。おっと、PostgreSQLは以下のエクステンションのビルドも忘れずに」とやるよりも、仮想環境にポコンとその開発環境を再現できるようにVagrantを使うほうが良いかもしれません。</p>

<p>　Engine Yard Localは、Virtual Boxを前提としたVagrantの設定レシピ＋CLIツールということですが、無償で利用できるので、これまで「Engine Yardのスタックって試してみたいけど、Herokuと違って無償で手軽にというのがないしなぁ」と思っていたRails開発者にとっては、試用してみるいい機会かもしれません。気に入らなくても、スッキリと跡形なく消せるのも仮想環境を使うメリットですよね。もしかすると、これからRuby on Railsの開発をやってみたいという開発者にとっても、「とりあえず全部入りのRails開発環境を作ってくれる選択肢」として、Engine Yard Localは使えるかもしれません。RubyもRailsも、バージョン管理ツール、ライブラリ管理ツールなどの周辺ツールの知識が結構必要で、とりあえずやってみたい人にとってそれがハードルになっているようなことがあると思うのですよね。</p>

<h2 id="paas">●継続的デリバリー実現のためにPaaSは進化中</h2>

<p>　ずいぶん長々と書いてきましたが、HerokuもEngine Yardも、ともに「開発・本番等価」という課題に取り組んでいて、これは偶然の一致ではなくPaaS市場のトレンドと言えそうです。次のステップは開発環境がクラウドに移る（元々のHerokuの事業はそうでしたが）ということかもしれませんが、ネットワークのコネクティビティの問題が解決しない限りはそれはなさそうです。</p>

<p>　言うまでもないかもしれませんが、「何のために開発・本番等価を目指すのか？」ということですが、それは<a href="http://agilemanifesto.org/iso/ja/principles.html">アジャイル宣言の背後にある原則</a>の先頭に書いてあるとおり、「価値のあるソフトウェアを早く継続的に提供します」という“継続的デリバリー”の実現のためかと思います。</p>]]>
        
    </content>
</entry>

<entry>
    <title>SalesforceがOracleを捨ててPostgreSQLに移行を計画中!?</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/11/salesforceoracl-7547.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2062</id>

    <published>2012-11-16T05:51:28Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　噂レベルですが、ちょっと気になる動きがあったので紹介したいと思います。 　20...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="業界動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　噂レベルですが、ちょっと気になる動きがあったので紹介したいと思います。</p>

<p>　2012年10月12日にPostgreSQL関連のメーリングリストに投稿された<a href="http://archives.postgresql.org/pgsql-jobs/2012-10/msg00003.php">エンジニア募集のメール</a>が波紋を広げています。メールの差出人はSalesforce.comで採用担当責任者のMarcy Davis氏で、メールのタイトルには「今年5人のデータベース技術者を、来年には40～50人をSalesforce.comの大規模PostgreSQLプロジェクトのために募集中」とあったのです。求められる役割として「（同社の）コアとなるデータベースインフラの重要な部分を設計、実装できること」と書かれています。</p>

<p>　このメールがキッカケとなって、SalesforceはバックエンドのデータベースインフラとしてOracleDBを捨てて、オープンソースのPostgreSQLに移行する計画ではないかという予測が各方面から出てきています。</p>

<p>　あくまでも推測の範囲を出ないものばかりですが、あり得なくない話です。いきなり1年後に総取り換えをすることが可能とは思えませんし、顧客もそんな無茶は望まないでしょう。ただ、オプションとしてPostgreSQLの提供を開始して移行を促すというのはあり得るシナリオです。</p>

<h2 id="section">●悪化する師弟関係が発端か</h2>

<p style="font-size: samll; font-weight: bold;">※以下、基調講演の話において、2011年のイベントと2012年のイベントを混同して書いてしまいました。ここ数年、2人の間で舌戦が繰り広げられているのは間違いありませんが、時系列的に無関係な話を連続して起こった出来事のように書いてしまいました。申し訳ありません。お詫びして訂正いたします。</p>

<p>　<s>PostgreSQL技術者募集のメールが飛んだのは10月12日の金曜日ですが、実は、その前日にSalesforce.comとオラクルの間で前代未聞のハプニングが起こっていました。</s></p>

<p><img alt="Photo" title="Photo" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/11/16/photo.jpg" border="0"  /></p>

<p>　<s>Oracle OpenWorld 2012で予定されていたSalesforce.com創業者でCEOのマーク・ベニオフ氏の基調講演が、前日になってオラクル側からドタキャンされたのです。健康問題などが理由で基調講演が1週間前になって急遽キャンセルになるというようなことはときどきありますが、前日に一方的にキャンセルというのは聞いたことがありません。当のベニオフ氏も驚いたようで、理由は分からないが残念だと<a href="https://twitter.com/Benioff/status/121391199809581057">Twitterでつぶやいています</a>。</s></p>

<p>　Salesforce.comのベニオフCEOは13年間オラクルに勤めた後に独立してSalesforce.comを創業しています。ベニオフ氏とオラクルのラリー・エリソンCEOは長らく師弟関係にありましたが、近年その関係はビミョーに悪化しているように見えます。少なくとも2人の間の舌戦は過熱気味でした。例えば、昨年に「クラウドと称して箱を売りつける、偽のクラウドに気をつけろ！」とベニオフ氏がオラクルに噛み付いたのに対して、今年はエリソン氏が「独自言語で囲い込んで、仮想化の分離もしておらず、キャパシティに制限もある、そっちがの方が偽のクラウドだろ！」とやり合ったと<a href="http://www.publickey1.jp/blog/12/post_216.html">Publickeyが報じています</a>。</p>

<p>　<a href="http://www.theregister.co.uk/2012/10/03/ellison_oracle_cloud_dogfood/">The Registerが伝えるところ</a>によれば、オラクルのラリー・エリソン氏は、Salesfore.comは子会社のHerokuを通してPaaSではPostgreSQLを顧客に使わせておきながら、自分たちのSalesforce.comのクラウドの基盤にはOracleDBを使っている、これは「私には興味深いことに思える」と揶揄したといいます。客にPostgreSQLを使わせているのに自分たちは使ってないじゃないか、ということですね。後から買収した会社のことで揶揄するのもどうかと思いますが、「ドッグフーディングしていないじゃないか」というのは正論でもあります。</p>

<p>　<s>こうしたやり合いがあったにせよ、競合であるSalesforce.comのベニオフCEOに対して、オラクルは今年も基調講演という晴れ舞台を用意していました。では、なぜ土壇場でキャンセルしたのでしょうか？ 実はラリー・エリソン氏が激怒したのではないかと思わせるレポートがあります。OpenWorldの展示ブースで、Salesforce.comは製品やソリューションの展示を一切せずに、チャリティ活動をしていたというのです。<a href="http://www.crmsearch.com/benioff-dissed.php">CRMSearch.comのデニス・ポンブリアント氏が伝えるところ</a>によると、その光景は異様で、まるでベニオフ氏がエリソン氏に対して「ほら、オレたちにはあんたが金儲けのためにやってるX-boxesなんて要らないんだよ。オレたちはもっと崇高な仕事をしてるんだ」と言わんばかりに思えたといいます（X-boxesと言ってるのはExadataのことでしょうね）。もしこれが本当なら、エリソンCEOが怒るのも無理はありません。つばぜり合いが一線を越えたのかもしれません。</s></p>

<p>　<s>もともと競合する面が強くなりつつあったSalesfore.comとオラクルという2社の“顔”が、とうとう正面衝突したと見ることもできそうです。もちろん衝突そのものはわれわれからは見えませんが、「基調講演のドタキャン」「OracleDBからPostgreSQLへの移行を匂わせる動き」は、2人の関係に衝突があったことを想像させます。</s></p>

<h2 id="section-1">●ライセンス料よりもビジネスモデルの説得力として重要</h2>

<p>　<s>ドタキャンされたことに逆切れ（？）したベニオフ氏が、「だったらオレたちはもうPostgreSQLで行こう」と考えて翌日さっそく行動に移したのかもしれません。直情径行型の思い付きは経営には良くないですが、もともとSalesforce.comがPostgreSQLを担ぐべき理由はあるように思えます。</s></p>

<p>　Salesforce.comがPostgreSQLに移行すべき理由があるとしたら何でしょうか？</p>

<p>　Salesforce.comほどの規模となれば、オラクルにとっても得意客でしょう。特別なライセンス料に基づく個別契約となっているでしょうが、それでもSalesfore.comはオラクルに相応のライセンス料を支払っているでしょう。OracleDBからPostgreSQLへ移行すれば、このライセンス料がなくなります。これは言うまでもなく利用料金の引き下げや、収益率向上、競争力の強化につながりますからSalesforce.comには好ましいことです。オープンソース界の2大RDBMSといえばMySQLとPostgreSQLですが、エンタープライズ方面では、PostgreSQLのほうが好まれる傾向にあります。そして、MySQLは今やオラクルに買収されていますから、Salesforce.comとしては選択肢はPostgreSQLしかありません。</p>

<p>　OracleDBからPostgreSQLへの移行というシナリオは、ライセンス料というよりも、ソフトウェアテクノロジーによる革新を進める企業にとってのレーゾン・デートルに関わる話なのではないかと思います。ソフトウェアスタックのコア部分がブラックボックスとなったまま他社に握られているというのは、トヨタがエンジンを他社製品に頼るような話だからです。この点ではオラクルのエリソン氏の言い分に説得力を感じる顧客が多いことでしょう。「結局、オラクルのDBが基盤に必要なのだ。だったら、上から下までウチに任せない」ということです。これではSalesforce.comがマーケティング上、劣勢に立たされる可能性もあります。</p>

<p>　上から下まで全てのソフトウェアを自社開発でまかなえる企業はマイクロソフトやグーグルぐらいしかないかもしれません。それでも近年のソフトウェア企業、とくにWeb系の企業の間では、OSやミドルウェアとしてオープンソース製品を採用して、基盤部分は協業しながら改善していくというモデルがうまく回り始めています。一連のNoSQL関連のプロダクトはその典型です。このオープンソースの流れが、やや遅れてエンタープライズで使えるRDBMSの世界にもやって来る、と見ることもできるのではないかと思います。</p>

<p>　プロプライエタリなソフトウェアは中身が見えないブラックボックスであると同時に、その利用者が自ら手を入れることができないという制限があります。開発の方向性や優先順位付けの意思決定に関われるという意味でのオーナーシップもありません。成長したSalesforce.comが、自らのビジネスのコアとなるソフトウェアでプロプライエタリなソフトウェアを取り除きたいと考える理由は十分にありそうです。</p>

<p>　Salesforce.comがPostgreSQLにガッツリと肩入れをして“エンタープライズグレード”となるのであれば、これはオープンソースコミュニティにとっては、非常に意義のあることだと思います。最近はNoSQLが注目を集めていてRDBMSはホットなトピックではないかもしれませんが、まだまだRDBMSを使うのが正解というプロジェクトのほうが圧倒的多数派でしょう。業務アプリならなおさらです。利便性の面でも、もともとPostgreSQLは扱えるデータ型が豊富で厳格ですし、最近のPostgreSQLはKVSの拡張やJSON型の採用など柔軟性も増していて、わざわざほかのミドルウェアを入れることはないのではないかと思えたりします（ちなみにこの辺は、<a href="http://qa.atmarkit.co.jp/">QA@ITというサービス</a>を担当していて感じたことです。QA@ITはHeroku上で稼働しているのですが、機能追加の実装方法を見るたびにPostgreSQLは素晴らしいなと思ったりしています。というような話は、<a href="http://qa.atmarkit.co.jp/q/2395">PostgreSQLとMySQLはどちらかに明確な優位性がありますか、というの質問・回答</a>にもまとまっています）。</p>

<p>　Salesforce.comはOracleDBからPostgreSQLに移行する可能性があるでしょうか？ 皆さんは、どう思われますか？</p>]]>
        
    </content>
</entry>

<entry>
    <title>Ruby 2.0初のプレビュー版がリリース！ 注目機能は!?</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/11/ruby-20-8256.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2061</id>

    <published>2012-11-02T07:29:29Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　2012年11月2日、Ruby 2.0.0-preview1のリリースがアナウ...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　2012年11月2日、Ruby 2.0.0-preview1のリリースが<a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/46348">アナウンスされました</a>。Ruby 2.0はRuby生誕20周年となる2013年の2月24日にリリースが予定されています。現在の安定版であるバージョン1.9系の次のメジャーバージョンアップとなります。ちなみに、1.9の正式版が初めてリリースされたのは2007年12月25日でした。</p>

<p>　Ruby 2.0のリリースマネージャ、<a href="http://jp.rubyist.net/magazine/?0038-Hotlinks">遠藤侑介さん</a>がメーリングリストに流したアナウンスによれば、2.0.0の主な新機能は以下の通り。</p>

<ul>
  <li>Refinements</li>
  <li>キーワード引数</li>
  <li>Enumerator#lazy</li>
  <li>Module#prepend</li>
  <li>Hash への変換メソッド #to_h</li>
  <li>%i: シンボルの配列のリテラル</li>
  <li>正規表現エンジンを Onigmo に変更</li>
  <li>DTrace サポート</li>
</ul>

<p>　それぞれの機能について特に説明がなかったので、西村が分かる範囲で少し各機能について触れておきます。間違っていたらご指摘頂けると嬉しいです。</p>

<p>　<strong>Refinements</strong>は既存クラスの挙動を変更したり、拡張するときの影響範囲を名前空間で限定する機能。Rubyはオープンクラスなので定義済みのクラスは、いつでも再オープンしてメソッドを追加・削除することができます。言語のコアライブラリの機能でも変更できて、Ruby on Railsのユーリティティライブラリ、ActiveSupportは割とやりたい放題というか、良い感じの拡張が入っています。例えば、ハッシュのmergeを逆方向にするとか、ディープにマージするというようなことはRuby言語の標準には入っていなくて、ActiveSupportに含まれます。こうした拡張機能は、Rubyコミュニティでゆるやかに共有されていて、小さなライブラリでもActiveSupportの一部を取ってきていたり、類似の拡張をすることがあります（多くの場合はlib/core_extとかlib/extといった辺りに入っていて、たいていはarray.rbとかhash.rbといったように標準クラスの挙動に手を入れています）。そうやって拡張したとき問題となるのが、名前の衝突です。名前が衝突するだけならまだしも、似たような挙動だったら嫌ですね。Refinementsは、オープンクラスの柔軟性と強力さを維持したまま、いわゆる“モンキーパッチ”の影響範囲を限定するために採用された機構です。</p>

<p>　<strong>キーワード引数</strong>は文字通り、メソッドの個々の引数に内容を示すキーワードを付与できる機能です。GitHubにミラーされているRubyのソースコードリポジトリの<a href="https://github.com/ruby/ruby/blob/trunk/test/ruby/test_keyword.rb">ここにテストコード</a>があります。ちょっと抜き出すと：</p>

<pre><code>
def f1(str: "foo", num: 424242)
  [str, num]
end
 
f1                           # =&gt; "foo", 424242
f1(str: "bar")               # =&gt; "bar", 424242
f1(str: "bar", num: 111111)  # =&gt; "bar", 111111
</code></pre>

<p>という感じです。これまでRuby界隈ではハッシュのリテラルを引数の最後に渡すことで似たようなことはできていました。Rubyではメソッドの引数の最後では、ハッシュリテラルのブレースを省略でき、なおかつRuby 1.9からはハッシュはJSONぽく書けるので、以下のような記法が可能で、割と標準的な書き方でした。</p>

<pre><code>
def f1(value, options = {})
  if options.has_key?(:foo)
    foo = options[:foo]
  end
  # do something
end
 
f1(123, foo: "bar", bar: 111111)
</code></pre>

<p>　呼び出し側はいいですが、これだと呼ばれる側はoptionsのデフォルト値とマージしたり、個別に変数を取り出したりと面倒でした。キーワード引数が広まれば、こうした手間がなくなり、ずいぶん使いやすくなりそうです。</p>

<p>　<strong>Enumerator#lazy</strong>は遅延評価のための<a href="http://ruby-doc.org/core-2.0/Enumerator/Lazy.html">新しいAPI</a>です。<a href="https://speakerdeck.com/nagachika/rubyist-enumeratorlazy">nagachikaさんのスライド</a>を見ると分かりますが、mapやselect、zipなどコレクション全体を評価するようなメソッドの前に、(0..5).lazy.map などとして lazy を挟むことで遅延評価が可能になります。無限の要素を扱ったり、停止条件がいつ来るか個別にループしてみないと分からない（事前に調べるのが面倒）ようなケースでスッキリと書け、処理に必要なメモリ量も少なくて済みます。Rubyは1.8から1.9へのバージョンアップで、ずいぶん関数型の特徴を取り入れましたが、遅延評価が入ったことで、またそうした性質を強めているように感じられます。</p>

<p>　<strong>Module#prepend</strong>は、既存クラスの挙動を変えるときに使えるようです。Railsの世界では長らく method_alias_chain を使って既存メソッドを呼ぶ前段階でゴニョゴニョっとやってからオリジナルのメソッドを呼ぶというようなことが行われていました。既存のライブラリに手を入れずに、ちょっとだけ動作を変更するということができます。Module#prependは、これをスッキリした形でRuby言語としてできるようにするもので、クラス（モジュール）の継承ツリーにモジュールを入れ込む仕組みです。Railsのソースコードの黒魔術感が減りそうな気がします。Module#include（ミックスイン）と似ていますが、この2つは継承ツリーの中でモジュールを差し込む場所が違っていますし、ミックスインは、どちらかと言えば多数のクラスに共通する挙動を引っ張り出してまとめておく仕組みとして使われています。</p>

<p>　シンボルの配列がリテラルに書けるようになりました（<a href="https://github.com/ruby/ruby/commit/91bd6e711db3418baa287e936d4b0fac99927711">パッチ</a>）。以下のような感じです。%w(apple banana) のような表記のシンボル版ですね。</p>

<pre><code>
%i[foo bar]  # =&gt; [:foo, :bar]
</code></pre>

<p>　ということで、Ruby 2.0の新機能のうち、いくつか紹介してみました。</p>

<p><strong>【追記】</strong>アナウンスには含まれていませんが、Ruby 2.0ではVMの改善やFlonum採用によってパフォーマンスアップも図られているそうです（<a href="https://twitter.com/unak/status/264274138896666624">@unakさん、情報ありがとうございます！</a>）。Flonumというのは、<a href="http://www.ruby-forum.com/topic/4404164">ここに議論がありますが</a>、浮動小数点の埋め込み即値です。Rubyでは、これまでにも一定範囲に収まる整数（Fixnum）ではオブジェクトを生成せずに、ポインタにフラグを付けて値として扱う実装になっていましたが、64ビット環境では整数に加えて浮動小数点でも同じことを実現するようです。並の演算ならガッツリ速くなりそうですね！</p>]]>
        
    </content>
</entry>

<entry>
    <title>「なんでRubyなんか作った!? 迷惑だ！」に対するMatzの答え</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/10/ruby-matz-7080.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2060</id>

    <published>2012-10-11T09:54:20Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　2012年9月に行われた札幌Ruby会議2012の基調講演の1つで、Rubyの...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　2012年9月に行われた札幌Ruby会議2012の基調講演の1つで、Rubyの生みの親のまつもとゆきひろさんが、最近あった面白いエピソードを混じえて“イノベーション”の本質について語っていました（<a href="http://vimeo.com/50174800">44分の動画</a>）。ポイントとなる部分をまとめてみました。まつもとさんの話はもちろん、統計的裏付けだとか学問的裏付けがある議論というものではありませんし、ご本人も楽しそうに話し、聴衆も楽しんでトークを聞くというゆるい感じのものでした。ただ、「イノベーションの本質は捉えがたい」というメッセージや、「だからあれこれ考えずにコードを書こう、われわれはコードを書くことにアイデンティティを感じているのだから、それこそがハッピーになる道だ」というメッセージは、参加していたRubyistたちの胸に響くものがあったのではないかと思います。</p>

<p>　以下、口語文体のまま、ポイントとなる前半のトークをまとめてみました。トーク後半では、多様性は善であるという話を引き継いで、JRubyやRubinius、MagLevを選ぶべき理由の話や、組み込み向けにmrubyを作っている理由などを話しています。そちらに興味がある人は是非<a href="http://vimeo.com/50174800">オリジナルのトーク</a>をご覧ください。</p>

<p><img alt="Matz01" title="Matz01" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/11/matz01.png" border="0"  /></p>

<h2 id="twitterperl">●TwitterでPerl好きに絡まれた</h2>

<p>　Rubyの開発を始めたのは1993年の2月です。Unixのスクリプト言語を目指しました。Unixのスクリプト言語が作りたかったというより、それが自分がいちばん使いそうなところだったからです。</p>

<p>　Perlの代替品というのを目指したのですが、ちょっとやり過ぎだったかな、と。（Perl由来の）ヘンな変数とか残ってますが、あれは失敗だった。でも、Perlの代替というのはRubyを作った本当の理由ではなくて、自分で作ったものが自分で使えるドッグ・フーディングが出来て楽しいというところで、実は代替しようとまでは思ってなかった。</p>

<p>　そう思って20年、（Rubyを）作ってきたんですね。</p>

<p>　で、最近Twitterで私に絡んできた人がいました。「Perlがあるのに、なんでRubyを作ったんだ」と言うんですね（笑）。PerlがあるのにRubyを作るなんて、重複だし、車輪の再発明だし、何より有限の労力の無駄遣いだというんですよ。だからRubyなんか存在しなかったほうが良かったのに、お前はなんてことをしてくれたんだ、と。多くのIT系の人たちはRubyのことをネガティブに思ってるよ、と胸を張って言われてですね……。</p>

<p>　……って、どう思いますか？ まあRubyカンファレンスでこれを言うって卑怯なんですけどね（笑） でも、かんべんしてよ、と思いましたね。</p>

<h2 id="section">●リソースを集約できればコスト減、しかし失うモノは大きい</h2>

<p>　確かに人類は70億人しかいないし、プログラマははるかに少ないんですね。プログラマの中で開発コミュニティに参加する、ライブラリを作る、CPANのモジュール登録者とか、となると、そういう人はさらに少ないんですね、確かに。で、当時、そうした人たちがみんなで協力して当時のPerlに対して努力する、集約ということを考えたら、“もしそれが可能だったら”、確かにそれはリソースを有効に活用したという話になりますよね。</p>

<p><img alt="Matz03_2" title="Matz03_2" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/11/matz03_2.jpg" border="0" style="float: right; margin: 0px 0px 5px 5px;" /></p>

<p>　でもですよ、考えてみたら、われわれにとって最も大切なリソースはマンパワーではなくて、モチベーションだと思うんですね。</p>

<p>　モチベーションは誰かに制御されるようなものじゃない。世の中に新しいプログラミング言語を作ってみたいという人がいたとして、そういう人に「お前は新しいプログラミング言語を作るより、Rubyに貢献したほうが労力の無駄にならないよ」といって、プログラミング言語を作り出す夢を諦めさせたら、どうでしょう。それでリソースの無駄遣いは防げたかもしれないけど、われわれは大切なものを失っているのではないか、と思うわけですよ。</p>

<p>　われわれは機械ではないので、やりたいと思うときに、何かを達成できるんです。何かを達成するには、突き動かす内なる力が必要です。それはモチベーションによって現れるんですね。</p>

<p>　ある人はプログラミング言語に対して情熱を感じるかもしれないし、ある人はアプリに情熱を感じるかもしれない。ある人はスポーツかもしれません。何らかの情熱があって、それに突き動かされているときに偉大なことができるんじゃないかなという風に思うんですね。私の場合はプログラミング言語に対する愛です。世の中に存在するすべての言語を愛してるといっていいんですね。PHPも。</p>

<p>　モチベーションを笑ってはいけない。</p>

<p>　私は誰が何に情熱を持っても笑いません。まあ、「ちょっとそれは……」と言うことはあるかもしれないけど（笑） たとえそれが車輪の再発明であっても構わない。何でもやったほうがいいと思うんですね。それによって多様性が生まれます。私は多様性は良いものであると思っています。</p>

<h2 id="section-1">●多様性はイノベーションに必要なコスト</h2>

<p>　多様性にはコストがかかります。もしPerlしかなかったとしたら、Perlはより充実した言語になっていたかもしれません。そうやって理想の言語が作れるとしたら、そのときかかったコストは、Rubyのある世界より安かっただろうとは思います。でも、住みやすかったのか？ というと、そうではないのではないか、と思うんですね。</p>

<p>　何百、何千とあったはずの世に出なかったプログラミング言語、そうしたものは無駄だったのか？ それはイノベーションのコストではないか。</p>

<p>　この地上で、誰一人としてイノベーションのことを理解してないんですね。イノベーションを起こした人ですら、実は理解してない。</p>

<p>　よく私のところに来て、「なぜRubyは世界中で使われるようになったのですか」と聞く人がいるのですけど、内心は「分かりません」と答えたいんです。だけど、インタビュワーに嫌な顔をされるので、もっともらしいことを答えるんです（笑） 「コミュニティが～」とか適当なことをいろいろ言って。でも、分かりませんっていうのが正直な気持ち。分かりませんよ。</p>

<p>　再現性がないんですよ。イノベーションは再現できないんです。</p>

<p>　分かんないんだから、心配するのはやめて、コードを書いて幸せになろうと思うんですね。（日々コードを書くという）ミクロの世界で、“いま”充実して前に進んで行けばいい。中には成功するものもあるし、失敗するものもあるかもしれない。でも失敗しても「ぼくは幸せだったからいいや」と思えるんじゃないかと思うんですよ。楽しく野球をしている野球少年のところにいって、「きみはプロにはなれないよ」っていうのって、すごく暗い話じゃないですか。そういうことはしたくないですよね。日々楽しく野球すればいいじゃないですか。みんなにもハッピーになってほしいと思うんですね。</p>

<p>　（札幌Ruby会議2012のテーマである「We Code.」というメッセージにあるように）もし皆さんも、コードを書くということにアイデンティティを感じているなら、コードを書いているときが幸せですよね。アイデンティティのあるところに幸せがあるのですから。だから、つまんない議論とか、考察とか、調整とか、そういうめんどくさいことをやめて自由にコードを書きましょうよ。強制されずに、幸せに書きましょう。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ネイティブでもHTML5でもない「ハイブリッドアプリ」の価値</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/10/html5-d1ba.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2059</id>

    <published>2012-10-10T03:11:25Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　少し前の話ですが、Facebook CEOのマーク・ザッカーバーグ氏の発言が話...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　少し前の話ですが、Facebook CEOのマーク・ザッカーバーグ氏の発言が話題となりました。2012年9月11日に行われた米TechCrunchのイベントで同氏は、モバイル端末向けアプリを提供するプラットフォームとしてHTML5に賭けたのは同社始まって以来の戦略上最大の失敗だった、と発言したのです。</p>

<p><img alt="Zuck" title="Zuck" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/09/zuck.jpg" border="0"  /><br />
<p style="font-size: small; font-weight: bold">TechCrunch Disrupt SF 2012で話すマーク・ザッカーバーグ氏</p></p>

<h2 id="html5">ネイティブかHTML5かという対立軸</h2>

<p>　モバイルアプリの世界では現在、「ネイティブアプリか、HTML5か」という構図で技術が語られることが少なくありません。実際、両者には一長一短があり、ケース・バイ・ケースで使い分けられています。機能面や応答性ではネイティブアプリが有利ですが、HTMLを取り巻く開発環境は急速に進化していて、中長期的にはHTML5の普及が進むと見るのが一般的です。それだけに、ザッカーバーグ氏の発言は一種の「揺り戻し」という風に捉えられたようです。</p>

<p>　ところが、実際に成功しているモバイルアプリの中には「第3のアプローチ」ともいうべきハイブリッド型も多数存在しています。</p>

<h2 id="dl3">500万DL超のクックパッドアプリは第3のアプローチ</h2>

<div  style="float: left; margin: 0px 5px 5px 0px;">
<img alt="Photo01_3" title="Photo01_3" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/09/photo01_3.jpg" border="0" />
</div>

<p>　レシピ共有サイトのクックパッドが提供するAndroid向けのモバイルアプリは、そうした第3のアプローチを採るアプリの1つです。配布パッケージとしてはネイティブアプリとして実装されていますが、アプリ本体ともいえるUIは、ほぼHTMLとCSS、JavaScriptでできています。</p>

<p>　クックパッドでは、JavaScriptから利用できるAndroidネイティブ機能のバインディングをAPIとして独自実装することで、HTMLでありながらネイティブアプリと遜色のない機能性を実現しています。重要なことは、そのことによってネイティブアプリでは得られない価値をユーザーに提供している、ということです。</p>

<p>　すでに500万ダウンロードを突破したクックパッドのモバイルアプリの実装と運用について、同社エンジニアでAndroid用の社内向けAPIを開発した濱崎健吾さんに話を聞く機会がありましたので、以下にまとめたいと思います（濱崎さんは10月5日にクックパッドを退職しています）。</p>

<h2 id="webview2">WebViewを2つ使ってメニューとアプリ本体を実装</h2>

<p>　クックパッドのAndroid向けアプリは、多くのユーザーにはネイティブアプリに感じられることでしょう。メニュー部分をネイティブ側でキャッシュするなどネイティブアプリに近いUIを実現しているからです。クックパッド社内ですら、それが本質的にHTMLアプリであると気付かなかった人もいたぐらいだと言います。AndroidアプリはGoogle Playで配布していますし、アプリとして起動し、終了ができる、ふつうのAndroidアプリです。</p>

<p>　ただ、その実装は少し変わっています。</p>

<p>　クックパッドのAndroidアプリは、左右2枚のWebViewから成り立っています。WebViewとは、プログラマがWebKitブラウザのレンダリング領域をアプリ内で利用するためのモジュール。カンタンに言えば、アプリにブラウザを埋め込むための仕組みです。AndroidではWebViewと呼び、iOSではUIWebViewと呼びますが、ほぼ同じ仕組みです。</p>

<p><img alt="App01_2" title="App01_2" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/09/app01_2.jpg" border="0"  /><br />
<p style="font-size: small; font-weight: bold">クックパッドのAndroid向けアプリ。横位置で見ると、メニューと本体部分が表示されるが、この2つは別々のWebViewを埋め込んで実現している。HTMLアプリであるからこそ、新機能はリリースした瞬間にユーザーが使っている画面のメニューにすぐに現れるという</p></p>

<p><img alt="App02" title="App02" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/09/app02.jpg" border="0"  /><br />
<p style="font-size: small; font-weight: bold">右上の音声検索など一部分だけがネイティブアプリとして実装されていて、コンテンツを表示している部分やボタン類の多くはHTMLアプリ</p></p>

<p>　ネイティブアプリ内でWebViewを使えば、そこにWebサイトを表示できます。ポコンとWebサイトをはめ込むようなイメージですね。例えば、Twitterアプリでツイートに含まれるリンクをクリックしたときに、URLをWebViewに渡すことで、そのTwitterアプリ内でWebページを表示させることができます。</p>

<p>　WebViewの本来の使い方は、アプリ内からWebページを参照のために開くというものです。しかし、一部のモバイルアプリは、この仕組みを推し進めて、アプリのいちばん外側の部分だけをネイティブアプリとして実装し、中身をHTML5アプリとして実装するというアプローチを取っています。</p>

<p>　つまり、モバイル端末向けのHTML5アプリと言った場合、</p>

<ul>
  <li>端末標準のブラウザでURLを入力して使うサービスとしてのHTML5アプリ</li>
  <li>WebViewを経由して配布されるHTML5アプリ</li>
</ul>

<p>の2種類があるということです。後者のWebView利用によるHTML5アプリは、どこまでをネイティブで実装するのかという点と、ネイティブ機能のJavaScriptバインディングを利用するかどうかという点で、中間形態といえる“ハイブリッド型”が存在しています。</p>

<p>　単純にHTMLアプリとしたのでは実現できない機能があります。例えば画像を編集した上でアップロードする仕組みや、カメラ機能の利用などです。Androidの音声検索APIもそうですが、ネイティブアプリとして実装しないと呼び出せないAPIがあります。</p>

<p>　そこで、一部分だけをネイティブとして実装して、大部分をWebView上のHTMLアプリとするアプローチを取ればいいというわけです。クックパッドが提供しているAndroidアプリは、まさにこうしたアプローチを採用したハイブリッド型です。</p>

<p>　現在、HTML5ではデバイス系のAPIが次々と実装されていますが、それらの標準化や実装は、まだ開発現場で使えるほどこなれていません。そのためネイティブの機能やAPIを間接的に利用する方式が出てくるわけですが、このアプローチは、実はAndroid OSでは公式ドキュメントに実装方法まで書いてあるサポートされたアプローチだったりします。あまり気付かないだけで、かなり多くのAndroidアプリがハイブリッド型で提供されているそうです。</p>

<p>　ここには、あまり語られることのない、iOSとAndroidのプラットホームとしての思想の違いがクッキリ現れているように思います。</p>

<h2 id="webview">WebViewでアプリを作る方法に「抜け道」を用意</h2>

<p>　Android OSでは、WebViewのドキュメントの<a href="http://developer.android.com/guide/webapps/webview.html">Building Web Apps in WebView</a>にあるように、addJavascriptInterfaceというAPIを使って、任意のJavaオブジェクトをWebKit上のJavaScriptから呼ぶことができます。基本的にAndroidのネイティブコードでできることは何でもできるので、ここは注意して利用しないとセキュリティ上の問題になります。クックパッドアプリでは、ドメインなどの制限によって正式アプリ以外からのアクセスを排除しているという話です。</p>

<p>　クックパッドでは、AndroidアプリのためにAPI群を用意したそうです。例えば、OSネイティブのダイアログを開く、画像編集機能を呼び出す、OSネイティブのノーティフィケーション領域にメッセージを送るといったことが、サーバサイドのプログラミング（Ruby on Rails）だけで完結します。</p>

<p><img alt="Api01_2" title="Api01_2" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/09/api01_2.jpg" border="0"  /><br />
<p style="font-size: small; font-weight: bold">APIの例。上はログインボタンを表示させるAPIをRailsのビューから呼び出す例</p></p>

<p><img alt="Api02" title="Api02" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/09/api02.jpg" border="0"  /><br />
<p style="font-size: small; font-weight: bold">ネイティブ機能で実装した「つくれぽ」をRailsアプリのフォームのボタンから呼び出した例</p></p>

<p>　濱崎さんの設計・実装したAPIでは、例えばbuttonのclass属性にapp_login_form_buttonと書いておけば、ログインフォームが表示されるボタンを表示することができます。app_の接頭辞のあるclass属性名は、実行時にアプリ内でJavaScriptによって展開されて、Javaオブジェクトへのブリッジを呼び出すコードとなります。クックパッドはサービス開発にRuby on Railsを使っているので、このAPIはRailsのヘルパーから簡単に呼び出せます。例えば、「link_to &ldquo;ログイン&rdquo;, class: &ldquo;app_login_form_button&rdquo;」などと書けいておけば、ネイティブのログインダイアログを呼び出すボタンを設置できる、というわけです。</p>

<p>　以下、少し騒がしい環境ですが、濱崎さん自身によるデモの映像です（札幌Ruby会議2012の懇親会で撮影しました）。どういうAPIがあって、何ができるか分かると思います。</p>

<p><object width="480" height="270"><param name="movie" value="http://www.youtube.com/v/366Va4IgZGk?version=3&amp;hl=ja_JP" /><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><embed src="http://www.youtube.com/v/366Va4IgZGk?version=3&amp;hl=ja_JP" type="application/x-shockwave-flash" width="480" height="270" allowscriptaccess="always" allowfullscreen="true" /></object></p>

<h2 id="iosandroid">iOSよりもAndroidのほうが開発速度がはるかに速い</h2>

<p>　クックパッドがAndroidアプリを最初にリリースしたのは2011年1月で、翌2012年4月にはハイブリッド版をリリースしています。ちなみに、Titanium Mobileを試験的に使ってみたこともあるそうですが、「Titaniumでは標準でパッケージに含まれるオブジェクトが大きすぎて効率が悪い」（濱崎さん）という問題があったそうです。Titaniumを使おうとしたのは、開発言語がJavaに制限されることでRailsエンジニアが手出しできなくなるのを防ぐためだったといいます。</p>

<p>　JavaによるネイティブアプリからWebViewへの切り替えに対しては、当初クックパッドの利用者からはネガティブな反応が少なからずあったそうです。やはり応答性ではネイティブアプリにかなわないわけですから、当然といえば当然でしょう。しかし、その後、HTML5アプリへのスイッチは想像以上の効果をもたらし、クックパッドのAndroidアプリは500万ダウンロードを超えるほどになりました。</p>

<p>　特定モバイルプラットフォームのための開発者を必要とせず、開発言語も1本化されるというのは、HTML5の分かりやすいメリットですが、濱崎さんによれば、この選択には、それ以上の意味があったようです。</p>

<p>　ネイティブ機能が含まれているとはいえ、クックパッドのAndroidアプリの本体は、事実上Webアプリです。この結果、「今はクックパッドのモバイル向けアプリは、iOSよりもAndroidのほうがはるかに開発速度が速い」（濱崎さん）という現象が起こっているそうです。ネイティブのモバイルアプリでは「ビルド→リリース→利用者側でのアップデート」という段階がありますし、iOSの場合、さらに審査のプロセスも入ります。この結果、新機能がユーザーの手に届くまでに時間がかかります。</p>

<p>　一方、Railsアプリのようにサーバで開発が完結するWebアプリなら、新機能をリリースしたら、それはその瞬間に利用者に届きます。新機能は、まずWebアプリとして実装されユーザーに届くわけです。そして、もしそれが良いものであれば、ネイティブのモバイルアプリのほうでも実装されるわけですが、Android版アプリは、もはやWebアプリに近い速さでアップデートが行える開発体制になっているということです。</p>

<h2 id="section">細かなイテレーションこそがユーザーの利益になるという信念</h2>

<p>　リリースサイクルを短くすることのメリットについて、クックパッドでディレクターを勤める五十嵐啓人氏は「第28回HTML5とか勉強会」で次のように説明しています（<a href="http://www.youtube.com/watch?v=KbyXyJMXzO0">プレゼンテーション動画</a>）。</p>

<p>　クックパッドでは、各機能ごとに、どの範囲の利用者にリリースするのかを管理する「<a href="https://github.com/cookpad/chanko">Chanko</a>」という内製ツールを利用しています。Chankoを使うと、自社開発者だけに限定して新機能をリリースするのか、利用者100人だけに限定して機能を試すのかといったことを機能ごとに制御できるそうです。特定の条件に当てはまるユーザーを数人（ときにはたった1人！）だけに絞り込み、その人たちだけに向けて新機能をリリースし、A/Bテストを繰り返し、最適なUI/UXを模索して改善するということをしているそうです。</p>

<p>　「ユーザーの反応や行動を見ながら、機能の追加や修正を速いサイクルで回すことができる」というのが、デスクトップアプリを含むネイティブアプリとWebアプリの大きな違いです。アプリが実際にどう使われているかが開発者に分かるというのは極めて大きな違いです。リーンスタートアップのような手法が確立して、普及してきていますが、その背景には、こうしたWebアプリの特徴があるのです。</p>

<p>　このサイクルがモバイルアプリでもそのまま成り立つのは、Webアプリとして実装した部分だけです。ネイティブアプリとしてリリースした場合、実際にユーザーがどの機能をどの程度使っているのかは分かりません。Webアプリの開発・運用で常識となった「仮説→計測→修正」というサイクルを素早く回すことができないのです。</p>

<p>　メリット・デメリットがあるネイティブ実装、Webアプリ実装ですが、クックパッドの場合、ハイブリッド型にしようと決断した背後にあるのは「細かなイテレーションこそがユーザーの利益になるという信念だった」（五十嵐氏）といいます。ネイティブ実装からハイブリッドへ移行したとき、できるだけ従来のUIを踏襲したものの、「重たい、使いづらくなったという言葉もあり、会社に行きたくなくなるぐらいお叱りの言葉も受けた」（五十嵐氏）といいます。そうした意見が来ることはあらかじめ予想できたそうですが、それでもなおハイブリッド移行を決断したのは、それが最終的にユーザーの利益になると信じたからだと言います。</p>

<p>　モバイル端末上のネイティブアプリというのは、ユーザーから見た使い勝手が良い反面、これまでWeb業界が培ってきた方法論が一気に通用しなくなるという点で、クックパッドのような企業にとって、失うものが小さくないわけです。ハイブリッド型とすることで「アクセス解析が可能で、ビジネス判断が早くできるようになった」（五十嵐氏）といい、ハイブリッド型に切り替えてUI改善を進めたことで、回遊率向上（関連するレシピを見たり、ほかのコンテンツをついでに見たりすること）や、課金コンバージョン率の向上につながったそうです。</p>

<h2 id="section-1">ハイブリッド型移行によるメリット</h2>

<p>　リリースサイクルの高速化以外にも、ハイブリッド型のメリットはあるようです。</p>

<p>　例えば、ネイティブアプリでは、新機能のリリース可否の判断がシビアで保守的になりがち、という違いがあるといいます。Chankoを使えば、特定の機能をオフにすることはサービス提供側で簡単にできますから、新機能提供に関してよりアグレッシブになれるというわけです。実際にユーザーが利用するサービスそのもの、いわゆるプロダクション環境で実験的なことができるというのは、ユーザー側の明示的バージョンアップが必要なネイティブアプリでは考えられない特徴です。</p>

<p>　また、ネイティブ実装に比べ、アプリのクラッシュが減って安定したという点も見逃せません。もっともこれは、アクティビティの数が単純に減ったためだそうですが。</p>

<p>　逆にWebアプリでは実現が不可能で、ハイブリッド型なら実装できることとして、五十嵐氏は、ちょっと意外なポイントを挙げています。</p>

<p>　例えば、ユーザーが料理のレシピを見ているときに、端末が省電力モードに入って画面が暗くなると困ります。クックパッドのユーザーは両手が小麦粉でいっぱいになっていて端末の画面に触りたくないようなことがあるからだそうです。これは純粋なWebアプリで制御できることではありませんが、ハイブリッド型なら可能です。アプリの右上にある音声検索ボタンの部分も、ネイティブ実装となっているそうです。</p>

<h2 id="webviewos">WebViewの扱いに見る、OSの思想の違い</h2>

<p>　クックパッドではWebView利用のハイブリッド型への移行は成功だったということですし、良い妥協点に思えます。しかし、WebViewに対する見方は、プラットフォームや立場の異なる開発者の間で温度差があるようです。</p>

<p>　すでに書いたようにiOSとAndroidではWebViewを使ったアプリの扱いが違います。iOSではJavaScriptでネイティブ機能をブリッジする開発者向けの仕組み自体は用意されているものの、審査に通る見込みが低いことからクックパッドでは同様のアプローチによるiOS向けアプリのリリースには至ってないそうです。Windows 8では、アプリの大部分をWebViewを使って実現したものについてはストアの審査で落とされることになるようです。</p>

<p>　守る立場にしろ、追いかける立場にしろ、プラットフォームそのものがビジネスとなっているiOSやWindows 8では、ベストなUXを実現できるネイティブアプリをできるだけ多く作ってもらうのがマーケティング上重要なのでしょう。ここには開発者やアプリを囲い込む古いタイプのプラットフォーマーの発想があるように、私には思えます。「ネイティブアプリがほしい」という利用者の声を最大限に聞くのが「ネイティブアプリ以外は落とす」という論理になるので、表向きはユーザー体験を第一に考える正論です。しかし、ソフトウェアの開発プロセスや提供形態に疎い利用者の声を聞くことが、良いソフトウェアやサービスの提供につながると限りません。それはクックパッドの例からも明らかです。ここには「一見正論でユーザーのことを大切にしているように思われるプラットフォーマーたちの我田引水」というダブルスタンダードがあるのではないでしょうか。常にHTMLアプリが良いとは思いませんが、開発者に対して選択肢としてWebView活用の道を閉ざすのはやり過ぎだ、と思うのです。</p>

<p>　ソフトウェア開発のリソースは有限ですから、全てのプラットフォームでネイティブアプリを提供するというのは現実的ではありません。だからこそMacでもWindowsでもiPhoneでも使えるWebアプリが主流になってきたのですから、これと同じことがモバイル市場でも起こると考えるべきでしょう。今さら誰もデスクトップアプリ（Windowsネイティブ）の天気予報アプリやカレンダーアプリなんてインストールしませんよね？ </p>

<p>　……、と思わず、私見を述べてしまいましたが、この辺は大いに議論の余地があるところでしょうし、開発者によって相当な温度差があります。濱崎さんも、Android開発者には、いわゆるWebサービス開発者とは違う畑の人が多いように感じてらっしゃるそうです。</p>

<p>　そうそう、AndroidのWebViewといえば、端末やバージョンごとの互換性に難があるわけですが、Android 4.1以降ではChromeが搭載されます。キャリアやメーカーがあれこれ手を入れた結果、プラットフォームとしては分裂気味になったWebKit[s]との格闘も、いずれ終わるかもしれませんね。濱崎さんによれば、例えば画像保存しようとAPIを叩くと、Androidでは端末によって違うフォルダが開いたりするということがあったそうです。Android 4.1時点では、WebViewとMobile Chromeは別実装として動いているといいますが、今後、レンダリングエンジンの違いによる互換性の違いは小さくなっていくのではないでしょうか。</p>

<p>　さて、西村の私見も交えながら、濱崎さんのAndroid向けブリッジAPIと、その実装であるクックパッドのAndroidアプリについて紹介しましたが、実は濱崎さんはクックパッドを<a href="http://hmsk.hatenablog.com/entry/2012/10/06/040206">10月5日に退職した</a>そうです。濱崎さんの退職後もクックパッドでは引き続きAndroidアプリサービスの改善が続けられるそうですが、濱崎さんは今後、これまでに得た経験を生かして、OSSやWebサービスとしてWebアプリ専門の開発者に向けた還元を何か出来ないか、その上でそれがビジネスにならないかと考えている、とのことです。</p>]]>
        
    </content>
</entry>

<entry>
    <title>RubyでiOSアプリ開発！ MobiRubyの増井さんに話を聞いた</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/10/rubyios-mobirub-9547.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2058</id>

    <published>2012-10-09T09:55:58Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　こんにちは、＠IT編集部の西村賢です。先日、札幌Ruby会議2012で、Rub...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　こんにちは、＠IT編集部の西村賢です。先日、札幌Ruby会議2012で、Ruby言語を使ってiPhone（iOS）アプリが開発できる「<a href="http://mobiruby.org/">MobiRuby</a>」を開発している増井雄一郎 (<a href="http://twitter.com/masuidrive">@masuidrive</a>) さんにお話を聞くことができました。立ち話ですが、4分ほどの即席インタビュー動画をお届けします。</p>

<p><img alt="Photo01_4" title="Photo01_4" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/09/photo01_4.jpg" border="0"  /><br />
<p style="font-size: small; font-weight: bold;">MobiRuby開発者の増井雄一郎さん</p></p>

<p><img alt="Game" title="Game" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/09/game.jpg" border="0"  /><br />
<p style="font-size: small; font-weight: bold;">MobiRubyを使って開発したゲームの例</p></p>

<p><object width="480" height="360"><param name="movie" value="http://www.youtube.com/v/tpjCN6j4YDU?version=3&amp;hl=ja_JP"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/tpjCN6j4YDU?version=3&amp;hl=ja_JP" type="application/x-shockwave-flash" width="480" height="360" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>

<p>　動画の内容を簡単にまとめると、以下のとおり。</p>

<ul>
  <li>MobiRubyはmruby環境でiPhone(iOS)アプリを開発できるSDK</li>
  <li>つまり、Rubyだけでアプリが書ける</li>
  <li>ネイティブ環境（Cocoa）のAPIが全て叩ける</li>
  <li>mrubyのVMをバンドルした形でアプリが配布される</li>
  <li>コンパイルしたアプリはAppStoreにも登録できる（すでに審査を通過したアプリもある）</li>
  <li>現在はα版。来年のQ1にはプロダクションレベルに持って行きたい</li>
  <li>MITライセンスでオープンソースで進める</li>
  <li>マネタイズは全く考えていない</li>
  <li>RubyMotionとの違い
    <ul>
      <li>RubyMotionは有償の開発ツール</li>
      <li>RubyMotionは完全にネイティブコードにコンパイルするので動作が速い</li>
      <li>RubyMotionはRubyの動的な機能で使えないものがある</li>
      <li>mrubyのほうはCRubyでできることは大体できる</li>
      <li>mrubyはコアクラスについては含まれていないものもあるし、メソッドも少ないケースもある</li>
    </ul>
  </li>
  <li>mrubyとCocoa環境のメモリ管理の整合性を取るのが現在の課題</li>
</ul>

<p><a href="http://ja.scribd.com/doc/105622019/MobiRuby-introduction"><br />
<img alt="Fig01" title="Fig01" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/10/09/fig01.png" border="0"  /><br />
<p style="font-size: small; font-weight: bold;">MobiRubyアプリの概要</p><br />
</a></p>

<p>　<a href="https://github.com/mruby/mruby">mruby</a>というのは、Rubyの生みの親である まつもとゆきひろさんが開発中のRuby処理系の1実装です。フットプリントが小さく、処理系をアプリにリンクした形で利用することも想定されています。そういう意味ではMobiRubyはmrubyの正統な応用という感じです。mrubyの応用としては、<a href="http://blog.matsumoto-r.jp/?p=2503">ApacheのモジュールをRubyで書きたい</a>、<a href="http://www.csk.com/fukuoka/seminar/esec2012.html">自動販売機の集計プログラムのようなものをRubyで書きたい</a>、といったものがあるそうです。</p>]]>
        
    </content>
</entry>

<entry>
    <title>Twitterは意外なほどRuby on Railsでできている!?</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/10/twitterruby-on--0ce5.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2057</id>

    <published>2012-10-05T10:28:08Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　こんにちは、＠IT編集部の西村賢です。先日、弊社アイティメディアが主催するオン...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　こんにちは、＠IT編集部の西村賢です。先日、弊社アイティメディアが主催するオンラインの総合ITイベントが開催されました。その1つのコンテンツとして、Twitter Japan ソフトウェアエンジニアの蓑輪太郎さんにインタビューする機会がありました。イベントの会期が終了しましたので、ここに、その時のインタビュー動画を公開します。</p>

<p><object width="480" height="270"><param name="movie" value="http://www.youtube.com/v/RXKCczyE4d0?version=3&amp;hl=ja_JP"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/RXKCczyE4d0?version=3&amp;hl=ja_JP" type="application/x-shockwave-flash" width="480" height="270" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>

<p>　箕輪さんといえば、id:higepon で知られるハッカーです。趣味でOSや言語処理系を実装したり、IPAの未踏ソフトウェア創造事業で天才プログラマーと認定される一方、はてなやサイボウズといった著名Web企業に勤めるなど転職歴も華やかです。そんな蓑輪さんは今、2012年初頭に転職したTwitter Japanで、本社エンジニアらと、グローバルなWeb企業でサービス開発の最前線に立っています。</p>

<p>　Twitterエンジニアの日常とはどんなものか？ 開発スタイルやツール、その開発プロセスとは？ また、どうやってエンジニアとしての腕磨きをしてスキルアップしていくのか？ オススメの勉強方法は？ そんなことをお聞きしました。何より私が驚いたのは、ツイートを蓄積してルーティングするようなバックエンドの部分は別として、フロントエンドが、意外なほど「ふつうのRailsアプリ」として実装されているというお話でした。</p>

<p>　以下が主な内容です。全部で1時間とちょっと長めなので、ぜひビールでも片手にご覧くださいませ！</p>

<ul>
  <li>蓑輪太郎さんの現在の仕事	00:00:00</li>
  <li>コードレビューにはReview Boardを利用	00:03:53</li>
  <li>何億人に使われる機能変更の初仕事	00:04:58</li>
  <li>自分のコードに対して残る不安	00:06:19</li>
  <li>Twitterエンジニアのローカル開発環境	00:09:41</li>
  <li>意外に普通!? Ruby on Railsによる開発	00:11:58</li>
  <li>蓑輪さんの典型的な1日	00:13:08</li>
  <li>ビッグデータもカジュアルに扱う	00:17:01</li>
  <li>Twitterが求めるのは「歌って踊れるエンジニア」	00:17:43</li>
  <li>システムをブラックボックスと見ないこと	00:20:24</li>
  <li>「まだ自分ではハッカーだと思っていません」	00:24</li>
  <li>C言語のポインタで挫折した経験も	00:24:52</li>
  <li>大学の研究室でJavaに熱中	00:27:36</li>
  <li>Twitterではテスト駆動開発してる!?	00:30:03</li>
  <li>設計、実装ともエンジニアの裁量が大きい	00:31:41</li>
  <li>知識ゼロからOS開発に挑戦！	00:33:03</li>
  <li>OS開発を始めたのは危機感から	00:35:09</li>
  <li>はてなに転職したワケ	00:37:49</li>
  <li>はてなでプロダクトを企画してリリース	00:39:29</li>
  <li>弱点克服のため言語処理系の開発にも挑戦	00:42:26</li>
  <li>IPAの未踏に採択：Schemeでシェルを作る	00:45:06</li>
  <li>言語処理系的なシェルは普及しない？	00:46:38</li>
  <li>技術書を読む上で大切なこと	00:48:43</li>
  <li>自分の時間を「天引き」して勉強しよう	00:53:10</li>
</ul>]]>
        
    </content>
</entry>

<entry>
    <title>【書籍紹介】たのしい開発 スタートアップRuby</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/08/ruby-2650.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2056</id>

    <published>2012-08-02T07:34:00Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary> 　技術評論社から『たのしい開発 スタートアップRuby』（大場寧子監修／大場光...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="コミュニティ活動" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p><a href="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/08/02/tanoshiruby.png" onclick="window.open(this.href, '_blank', 'width=300,height=300,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img alt="Tanoshiruby" title="Tanoshiruby" src="http://el.jibun.atmarkit.co.jp/rails/images/2012/08/02/tanoshiruby.png" width="300" height="300" border="0" style="float: right; margin: 0px 0px 5px 5px;" /></a></p>

<p>　技術評論社から『<a href="http://www.amazon.co.jp/dp/4774151661">たのしい開発 スタートアップRuby</a>』（大場寧子監修／大場光一郎／五十嵐邦明／櫻井達生）を献本いただいたので、ご紹介します。</p>

<p>　まず、まるまる技術評論社の<a href="https://gihyo.jp/dp/ebook/2012/978-4-7741-5286-8">書籍紹介ページ</a>にある概要から引用します。</p>

<blockquote>
  <p>　本書はRubyでたのしい開発を続ける4人の筆者による，新しいRubyの入門書です。Rubyは，コミュニティとコミュニティの根底にある文化の中で常に成長を続ける言語です。Rubyのポテンシャルを最大限に引き出すには，Rubyの文化を理解し積極的に関わっていく姿勢が不可欠です。本書はRubyの言語としての基本に加え，Rubyの世界にもっと深く踏み込んでいくための方法を紹介します。
　本書でたのしい開発への入り口を見つけてください。</p>
</blockquote>

<p>　章立ては、以下の通りです。</p>

<pre style="font-size: 1.2em; font-weight: bold; margin-left: 3em; line-height: 1.4em; ">
Chapter1　「たのしい開発」を求めて
Chapter2　Rubyの基礎知識
Chapter3　Rubyを使ってみよう
Chapter4　Ruby on Railsとは
Chapter5　Railsを触ってみよう
Chapter6　Rubyの文化
Chapter7　自動化されたテスト
Chapter8　アジャイル開発とRuby
Chapter9　Rubyのコミュニティ
Chapter10 とある企業のRuby導入事例
Chapter11 「たのしい開発」の答え
Appendix　RubyとRailsをもっと知りたい方へ
</pre>

<p>　1、2章ずつを割いて取り上げているRuby/Rails/自動テスト/アジャイルといったトピックは、それぞれが1冊の入門書として取り上げて良いようなテーマでしょう。本書は、そうした個別の入門書数冊分の、それぞれ第1章と第2章をうまく抜き出してまとめ上げたような雰囲気があります。「Rubyで（たのしく）開発」とRubyistが言うとき、それは言語処理系のRubyのことだけを指しているのではなく、文化や習慣、開発ツールに込められた主義や思想、コミュニティの性質まで指しているのだ、という認識が、この一風変わった入門書の根底にあるのでしょう。</p>

<p>　オブジェクト指向もMVCもDRYもCoCもアジャイルも自動テストも、個別に見れば、どれもRubyやRailsの専売特許というわけではありません。ですから、こうしたことが当然という開発現場にいる人には、「なぜRubyの人たちは、やたらと“たのしい”という言葉を使うのだろうか？」という答えは分からないかもしれません。本書には、その答えがさまざまなアングルから個人的な体験談を交えてまとめられています。</p>

<p>　例えば、Chapter1の「「たのしい開発」を求めて」は、駆け出しだったプログラマの著者（執筆担当は櫻井氏でしょうか）が感じた矛盾の吐露から始まります。著者は、いわゆる上流工程、下流工程の分業から生じる多くの矛盾から、「納得出来ない非効率」を、もどかしく感じていたといいます。開発現場の士気が下がる中で不安を抱えた著者は現状改善に動きますが、うまくいきません。そうした頃に出会った「アジャイル開発」「ペアプロ」といった言葉が頭の片隅に残り、やがて著者はそうした「どこか遠い外国の話」のように感じられたことを実践している会社に転職します。そこで発見したのは、ペアプロの楽しさや、フラットでオープンなRubyのコミュニティだった、といいます。また、Chapter11では「「たのしい開発」の答え」として、道具、人、環境の3つの柱によって支えられる「文化」として、Rubyを取り巻く環境のキーワードを解説しています。例えば、Ruby界隈では「名前重要」ということが繰り返し言われます。クラス名、変数名、メソッド名について、「正しい名前」を付けるために延々と議論をするという文化が、Ruby界にはあります。それが何故なのか、具体例とともに書かれています。Chapter10の「とある企業のRuby導入事例」は、あるとき「Rubyは素晴らしい」と思った外資系コンサルティングファームの会社員が、いかに障壁を乗り越えてRubyを会社的に採用していったかという体験談が、失敗した取り組みも含めて生々しく語られています。</p>

<p>　コテコテの技術書でもスピリチュアルな信仰告白の書でもない絶妙なバランスのRuby/Railsの入門書として、これまでRubyを遠巻きに眺めていた人が手にとると、いろいろと刺激や発見があるかもしれません。</p>]]>
        
    </content>
</entry>

<entry>
    <title>ブラウザで開発・運用も。ニフティがRuby/PHP/Python対応のPaaSを発表</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/07/rubyphppythonpa-36ca.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2055</id>

    <published>2012-07-31T07:56:30Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　IaaSのクラウドサービスで国内で先行したニフティが、今度はPaaSのクラウド...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　IaaSのクラウドサービスで国内で先行したニフティが、今度はPaaSのクラウドサービス「<a href="http://c4sa.nifty.com/">ニフティクラウド C4SA</a>」（シーフォーエスエー）の正式サービス開始を発表しました。開始当初はRuby/PHP/Python/Perlなどをサポートしています。サイト自体はしばらく前から公開されていましたが、本日2012年7月31日に正式発表され、クローズドβから正式サービスとなりました。IIJの<a href="http://mogok.jp">Mogok</a>、paperboy&amp;co.の<a href="http://sqale.jp/">Sqale</a>と国内で使えるRuby on Rails環境に、またひとつ選択肢が増えましたね。国内で正式サービスをうたって一般ユーザーに公開するのは、C4SAが一番乗りです。</p>

<p>※記事初出時、サービス名をC4SAとご紹介しましたが、正式には「ニフティクラウド C4SA」です。訂正してお詫びいたします。</p>

<p><a href="http://c4sa.nifty.com/"><img alt="01" title="01" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/01.png" border="0"  /></a></p>

<h2 id="section">キャンバスはアプリの開発・運用環境</h2>

<p>　端的に言うと、C4SAはニフティクラウドというIaaS上に構築されたPaaS環境です。ただ、一般的なPaaSと異なるのは「開発」「運用」、そして開発チームの「コラボレーション」も、全てブラウザ上で完結しかねない勢いの新しい世代の「アプリ開発環境」を目指している、というところで、とても意欲的なサービスです。</p>

<p>　アプリの構築・運用環境は「キャンバス」という単位で管理されます。標準でメモリ512MB、ローカルディスクが1GB使えます。月額945円で、日割りで計算されます（現在キャンペーン中で9月末までは無料）。DBは共有のMySQLが用意されていて、今後は専用DBやPostgreSQL対応も検討中とか。ユーザーは好きなだけキャンバスを立ち上げられ、キャンバスごとに、言語処理系やフレームワークが選択できます。ちょうどAmazon EC2のAMIのように、プリセットされた「開発・運用環境」が用意されています。現在は言語として、Ruby/PHP/Python/Perlをサポート。フレームワークとしてはRuby on Rails、CakePHP、Djangoが使えます。サーバアプリがインストール済みの環境としてWordPress、PukiWiki、concrete5（CMS）、CandyCane（プロジェクト管理）などといったキャンバスもあり、手軽にアプリを立ち上げたいというニーズに対応します。</p>

<p><a href="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/02.png" onclick="window.open(this.href, '_blank', 'width=800,height=613,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img alt="02" title="02" src="http://el.jibun.atmarkit.co.jp/rails/images/2012/07/31/02.png" width="480" height="367" border="0"  /></a></p>

<p><img alt="Plan" title="Plan" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/plan.png" border="0"  /></p>

<p><img alt="03_2" title="03_2" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/03_2.png" border="0"  /></p>

<p>　キャンバスの環境は随時追加予定で、C4SAユーザーが作成した環境をサービスとして有償でほかのユーザーに提供するマーケットのようなものも考えているといいます。Node.jsやJava対応もリクエストに上がっているそうです。</p>

<p>　ニフティクラウドですからインフラはVMwareです。その上にかなり独自に手を入れたLinuxを載せて、個別環境をLinuxのユーザー名によるプロセス分離でキャンバスを実現しているそうです。アプローチが、ややAndroidっぽいですね。C4SAでは、これまた仕組みは良く分かりませんが、アプリや環境をリスタートすることなく、メモリやディスクが随時増やせるそうです。スケールアップですね。アプリを横に並べて展開するスケールアウトについても、８月中には対応予定だそうです。</p>

<h2 id="section-1">開発もサーバ側の各種設定もCLIもブラウザで</h2>

<p>　C4SAがユニークなのはブラウザ上に開発・運用に関わる全てを載せようとしていることです。ファイルブラウザで任意のファイルを編集できますし、nginxの設定ファイル編集も言語処理系のバージョン変更も、ブラウザで完結します。各種ログも見れますし、デーモンの再起動もブラウザ上のボタン一発です。</p>

<p><a href="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/panel_2.png" onclick="window.open(this.href, '_blank', 'width=800,height=579,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img alt="Panel_2" title="Panel_2" src="http://el.jibun.atmarkit.co.jp/rails/images/2012/07/31/panel_2.png" width="480" height="347" border="0"  /></a></p>

<p><br />
<img alt="Filebrowser_2" title="Filebrowser_2" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/filebrowser_2.png" border="0"  /></p>

<p><img alt="Gemfile_2" title="Gemfile_2" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/gemfile_2.png" border="0"  /></p>

<p><img alt="Nginx_2" title="Nginx_2" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/nginx_2.png" border="0"  /></p>

<p><img alt="Rubyversion_2" title="Rubyversion_2" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/rubyversion_2.png" border="0"  /></p>

<p><img alt="Bundle_2" title="Bundle_2" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/bundle_2.png" border="0"  /></p>

<p>　Ruby on Railsでいえば、git、rake、bundleなどのコマンドは、ブラウザ上に専用のGUIが用意されているか、もしくはブラウザ上のターミナルエミュレータのようなCLIで利用可能です。このCLIはsshではなく、ホワイトリスト方式のコマンド仲介ターミナルといった風です。ちょっと使ってみた感じ、「git init」ができても、「git commit」などとすると、エディタが起動できずにターミナルの設定がおかしいと怒られたりしました。公言はしていないそうですが、「タブレットで開発できるようになるのが目標」（クラウド事業部クラウドビジネス部 五月女雄一氏）ということですから、今後に期待ですね。</p>

<p><img alt="Cli" title="Cli" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/31/cli.png" border="0"  /></p>

<p>　デプロイはGitなどのリポジトリからのチェックアウト、もしくはWebDAV経由で行えます。WebDAVはデザイナ向けの機能で、チーム開発を意識したものですね。キャンバスは複数ユーザーで共有できますが、コラボレーション機能として、今後はチャット機能やSkypeアドオンなどを検討しているそうです。GitのチェックアウトやWebDAVは手軽でいいですが、Capistranoのような自動化ツールが使えないのは、プロの開発者にはちょっと不便かもしれませんね。ただ、「ニフティのC4SA専用の知識がないと使えないという風にしたくない」（五月女氏）という話で、専用コマンドを用意するようなことは考えていないそうです。</p>

<p>　C4SAのターゲットとしては、</p>

<ul>
  <li>アプリを勉強したいけれども環境構築の障壁を越えられない初心者プログラマやデザイナ</li>
  <li>アプリ開発に没頭したいサンデープログラマ</li>
  <li>技術はあるが時間がないエンジニア。PHPエンジニアがRailsを使う、あるいはその逆で環境構築までやっていられない</li>
  <li>インフラや環境を意識することなくビジネスレイヤですぐに利用したいスタートアップ</li>
</ul>

<p>というような層を狙っているということです。</p>

<p>　今後は、ニフティらしく顧客管理機能、課金・決済機能の提供も検討したいということでニフティクラウド同様に、国内でもビジネスでのPaaS活用が本格化するかもしれませんね。「IaaSほどは安くないですが、ビジネスユースでは使われている、本気で使えるPaaS、お金稼ぎしても大丈夫ですよ、ということを感じてもらえるようなサービスにしたい」（五月女氏）とのことです。</p>]]>
        
    </content>
</entry>

<entry>
    <title>英辞郎によるSRS単語学習アプリ「Reijiro」を公開しました</title>
    <link rel="alternate" type="text/html" href="https://el.jibun.atmarkit.co.jp/rails/2012/07/srsreijiro-50bc.html" />
    <id>tag:el.jibun.atmarkit.co.jp,2012:/rails//26.2054</id>

    <published>2012-07-26T09:49:29Z</published>
    <updated>2016-04-28T00:40:07Z</updated>

    <summary>　SRS（Spaced Repetition System）と呼ばれる学習方法が...</summary>
    <author>
        <name>西村賢</name>
        
    </author>
    
        <category term="技術動向" />
    
    
    <content type="html" xml:lang="ja" xml:base="https://el.jibun.atmarkit.co.jp/rails/">
        <![CDATA[<p>　SRS（Spaced Repetition System）と呼ばれる学習方法があります。復習する間隔を1日、2日、4日、1週間、2週間、1カ月と徐々に伸ばしていき、忘れたころに復習することで記憶の定着効率を高める方法です。</p>

<p>　SRSは外国語学習者の語彙習得などに威力を発揮します。実際、SRSを取り入れたソフトウェアやサービスは多くあります。ただ、自分が欲しいものがなかったので、「<a href="http://knsmr.github.com/reijiro/">Reijiro</a>」というWebアプリをRuby on Railsで作りました（<a href="https://github.com/knsmr/reijiro/">GitHubのリポジトリ</a>）。機能追加をしながら4カ月ほど使っています。個人的に作ったアプリですが、もしかすると英語など語学を勉強している他の人の役に立つかもしれないと思って公開してみることにしました。</p>

<p><a href="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/26/reijiro01.png" onclick="window.open(this.href, '_blank', 'width=800,height=693,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img alt="Reijiro01" title="Reijiro01" src="http://el.jibun.atmarkit.co.jp/rails/images/2012/07/26/reijiro01.png" width="480" height="415" border="0"  /></a></p>

<p><a href="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/26/chart.png" onclick="window.open(this.href, '_blank', 'width=533,height=417,scrollbars=no,resizable=no,toolbar=no,directories=no,location=no,menubar=no,status=no,left=0,top=0'); return false"><img alt="Chart" title="Chart" src="http://el.jibun.atmarkit.co.jp/rails/images/2012/07/26/chart.png" width="480" height="375" border="0"  /></a></p>

<p>　Reijiroでは辞書として主に「英辞郎」を使います。特徴は以下のとおりです。</p>

<ul>
  <li>182万エントリと、膨大な実例を収録する英辞郎を利用（CD-ROM、もしくはオンラインコンテンツの購入が必要です。英辞郎の辞書データの著作権は<a href="http://www.eijiro.jp/">EDP</a>に帰属します）</li>
  <li>各単語・用例の復習間隔を自動管理。1日、2日、4日、1週間、2週間、1カ月……、と徐々に復習間隔を伸ばすことで、最小の学習時間で記憶を定着させるSRS（Spaced Repetition System）を採用</li>
  <li>アルクが独自に選定した基礎語彙1万2000語を、全12段階のレベル別に単語帳に順次登録可能（レベル別データはインストール時に英辞郎CD-ROMから抽出します）</li>
  <li>サーバにデプロイして空き時間にスマフォやタブレットで利用可能（CD-ROMを購入した本人以外に閲覧可能な状態とするのは著作権侵害になります。念のため）</li>
</ul>

<h2 id="section">なぜ作ったのか？</h2>

<p>　英辞郎は大変に良い用例集ですが、株式会社アルクが提供するオンラインの「英辞郎 on the WEB」は使いづらいところがあります。有償のPro版も少し使ってみましたが、やっぱり私のニーズには合いません。私は、単語の意味を素早く知りたいとかメールを書くにあたって用例を調べたいのではなく、調べた用例を丸ごと覚えたいのですね。</p>

<p>　一度引いただけでは覚えられないので復習が必要です。英辞郎 on the WEB Proでも単語帳機能があるので、復習自体は可能です。でも、最小の労力（時間）で効率的に覚えたいんですね。そこでSRSです。</p>

<p>　当初はローカルのMac上でだけ動かすつもりで作り始めたのですが、VPSに置いてみると想像以上に便利でした。英語を聞いたり読んだりしているときには、Chromeの検索エンジンとして登録してあるReijiroで辞書を引くようになりました。Reijiroで引いておけば、その単語・熟語は自動でクリップされます。クリップされた単語は、1日後、2日後……、と提示されるので、通勤や移動の空き時間にスマフォで復習できるので、とても良い感じです。いま、スマフォ用にjQuery Mobileのビューを足そうかと考えています。</p>

<p><img alt="Smartphone" title="Smartphone" src="http://el.jibun.atmarkit.co.jp/photos/uncategorized/2012/07/26/smartphone.jpeg" border="0"  /></p>

<p>　英辞郎が良いのは用例が豊富なことです。単語を調べた時、関連する用例や文例を眺めて、声に出して読むことが重要だと思っています。多くの単語帳アプリは「英単語：訳語」というフラッシュカード形式で、訳語だけを提示します。しかし、これではその語が作るイメージが分かりませんし、他の語と形作るネットワークが見えてきません。用例や文例で覚えないと自分で使える語彙になるように思えません。</p>

<p>　ちなみに現在、私の英語の推定語彙数は1万2000～3000語程度だと思います。「読む・聞く」では、あまり困りません。でも、書いたり話したりすると、結構残念な英語になります。語彙力を増やしてどうにかなるものではないかもしれませんが、ともかく向こう3、4年ぐらいで8000〜1万語ぐらい上積みしたいと思っています。自分で言うのもなんですが、無理せず効率的に語彙学習を継続できるという意味で、Reijiroは、すごくいいですよ。</p>

<p>　詳しい説明は、「<a href="http://knsmr.github.com/reijiro/">Reijiro</a>」をどうぞ。</p>]]>
        
    </content>
</entry>

</feed>
