だけどこんなところで待っているよりは

書き忘れ防止用。タイトルは飽きたら変える予定です。

スクーでRailsの入門を実演します & 前回の授業での質問へのお返事

もはや今日になってしまいましたが、前回に続いてスクーでRailsの実演をします。

Ruby入門 - Webアプリケーションの制作プロセス【前半】 高橋 征義 先生 - 無料動画学習|schoo(スクー)

Ruby入門 - Webアプリケーションの制作プロセス【後半】 高橋 征義 先生 - 無料動画学習|schoo(スクー)

というか前回の授業ではだいぶハードルが高かったようで、難しすぎた人には大変申し訳なかったです…が、質問がたくさんいただけたので、それに答えられたところは良かったかもです。

ちなみに今回はNitrous.IOを使う予定です(が、どうもRailsを動かすとまめにkillされる場合があるので、もしかしたら違う環境にするかも)。 オンラインの授業でハンズオン形式だと辛いらしいので、一人でちゃかちゃか進めるスタイルになる予定ですが、興味のあるひとは触っておくと良いかもです。

Nitrous

さて、前回の授業の質問について、答えられなかったものも含めて回答をこちらに書いておきます。

槇村 浩司さん: 「メタプログラミングはどんな時に使うのですか?」

桐山 洋平さん: 「「メタプログラミング」についてもっと詳しく聞きたいです!メタプログラミングができるとどんな良いことがあるのでしょうか?」

や、入門者向けにメタプログラミングについて説明したのは失敗だったかなあ…と思わなくもないのですが。 Railsでは「Don't Repeat Yourself」(DRY)という原則があって、 が、これを実現するには「あらかじめ書かれてないメソッドをプログラムの実行中に定義してそれを実行する」、といったことを行うのですね。

池田 順一さん: 「Webを作るといえばHTMLやjavascriptを思い浮かべますが、それらを使わずにRubyだけでサイトを作れるということですか?」

そうではなくて、HTMLだけでは JavaScriptだけではクライアントサイド(要するにブラウザ上)で動く部分しか 書けません。

そこで、決められたHTMLではなく都度都度HTMLやJavaScriptを生成したり、 JavaScriptと通信して結果を返したりする、といった機能をRubyで記述するのでした。

菅沼 慎平さん: 「RubyでどんなWebアプリケーションができるのか?具体的に知りたいです(SNS承認等)」

SNSとかであればRubyでいろいろ書けますね。

いわゆる最近のリアルタイムウェブみたいなものはちょっと辛いところがあるかもですが、 そういったもののサーバサイドをRubyで書く場合もあるそうですし、 クライアントサイドもRubyで書く(それをJSに変換する)という場合もあるそうです。すごい。

豊田 昌代さん: 「最初の最初の一歩、って何をすればいいんでしょう?プログラミング未経験ですが。」

とりあえずコマンドラインの画面(いわゆる「黒い画面」というやつですね)から、Rubyが動くかどうかを試してみます。

例えば、OS Xならターミナルを開いて、

ruby -v

と入力して、

$ ruby -v
ruby 2.1.2p95 (2014-05-08 revision 45877) [x86_64-darwin13.0]

みたいな出力が返ってくることを確認します。返ってくるなら、

ruby -e 'p "hello, world"'

と入力すると、

"hello, world"

と出力されれば、Rubyのpメソッドの実行に成功したことになります。

この辺は次回の授業でも実演してみます。

Hisashi Takagiさん: 「海外では日本に比べてRubyがとても人気があるようですが今後、日本でRubyが流行っていくでしょうか?」

日本でもまあ流行ってはいるような気がしますが、それなりに温度差はあるのかもしれません。

そもそも新しい言語やフレームワークを積極的に取り入れていくかどうか、というところで、日本では消極的になる企業が多いのかもしれません。どうなんでしょうね。

Yoshi Sakuさん: 「Rubyで何を開発するのが一番よいですか?」

Rubyそのものは「汎用プログラミング言語」とも言われる、何か特定の目的のための言語ではなく、 いろんな目的のために

というわけで何を開発してもいいのですが、いわゆるWeb2.0以降のWebサーバサイド開発では Railsが流行ってるので、 Webアプリを開発するために使われることが多いです。

槇村 浩司さん: 「Rubyのどんなところが楽しいのですか?」

伊藤 茂さん: 「Rubyを書いていて、一番楽しい瞬間はどこですか? 教えてください!」

Ruby界隈では「オレってばスゲー感」という謎の表現が広まったことがありました。これは、自分の実力以上に、書きたいことがさくっと書ける、といったようなときに使われていました。 これも「たのしい瞬間」の一つですよね。

Fukui Mionaさん: 「Ruby on Rails には link_to などのHTMLタグを生成するヘルパーがありますが、HTMLタグとどう使い分ければいいでしょうか。」

プログラム側で生成する場合は、特に問題ない場合はHTMLタグヘルパーを使った方がいいかもしれません。が、タグヘルパーでは難しそうな場合はタグを生成してもいいでしょう。

ただし、一般に公開されるWebサイトでHTMLを生成する場合は、XSSなどのセキュリティに気をつけてください。

名坂 さおりさん: 「どのWEBサービスがどの言語で開発されているかというのはどうやったらわかるのですか?(どこをみればわかりますか?)」

授業でも答えましたが、これは「分からない場合も多い」というのが答えですね……。WebサーバならHTTPのレスポンスでサーバアプリケーション名を答えてくれる場合もありますが(もちろん情報がなかったり、偽の情報を返すこともできますが)、Webアプリケーションフレームワークにはそういうことはありません。中の人に答えてもらうしかありません。

福間 正人さん: 「Rubyが導入済みのレンタルサーバーってあるのですか?」

最近のLinuxディストリビューションではRubyが標準で用意されている場合が多いので、シェルが使える環境であれば導入済みの場合も多いでしょうね。

とはいえ、Railsを動かそうとなると、単にCGIApacheモジュール的な物を動かすのとはわけが違うので、Railsに対応したいわゆるPaaS的なサービスを利用した方がいいかもしれません。こちらはHerokuやEngine Yard、MOGOK、C4SAやSqaleなどがあります。 それぞれ検索で探してみてください。

菅沼 慎平さん: 「RailsPHPでいうCakePHPみたいな人気?のフレームワークなんですか?」

授業でも答えましたが、CakePHPRailsよりは後発のフレームワークであり、開発初期にRailsの影響を受けています。ただ、CakeもRailsもそれぞれ独自に進化しているので、最近のバージョンだと違いも大きいかも。とはいえ、まあどちらも似たフレームワークですし、どちらも人気があります。

ただ、PHPの場合はCakePHP以外にも人気のあるフレームワークがありますが、Rubyの場合は圧倒的にRailsの人気が高い、という点はちょっと違います。

摩文仁 和博さん: 「Azureとかでも、できるのかな?」

Azureでももちろんできます。Windows環境ならartonさんのNougakuDo(http://msdn.microsoft.com/ja-jp/windowsazure/hh531535 )を使うという技もありましたが、今ならAzure環境でのLinuxを使った方が早いかもしれません。

赤星 亮太さん: 「クックパッドがRubyでできているということですが、htmlなどの他の言語でできないことをRubyで行っているということでしょうか?」

さっきの池田さんの質問と同じような回答になりますが、「HTMLを動的に生成にするためにRubyを使っている」と考えるといいかもしれません。

というか、cookpad.comくらいの規模になると、ふつうにユーザに見える部分以外にも様々なプログラムが必要になってきます(推測ですが)。そういったもろもろの中心部分がRubyで作られている、という感じです。

福間 正人さん: 「WEB構築で、PHPJAVARubyをそれぞれ使い分ける理由ってなんですか?」

細かいことを言うといろいろな違いがあるのですが、開発する人やチームの慣れや、開発・運用する環境の制約による場合もあります。選べる状況なら何を選んでも(多くの場合は)あまり大差ないかもです。

一方で、規模が大きくなったり、速度が重要になってきたりすると、Ruby以外の言語を使った方がいいこともあります。

豊田 昌代さん: 「ひとつのWebサイトを複数の言語をつかって開発することもあるんですか??」

授業でも答えた通り、いろいろあります。もちろんひとつの言語でできた方がよいこともありますが、むしろ(ライブラリ群やコミュニティも含めた)言語には向き不向きがあるので、それに応じて部分々々を異なる言語で書き分けた方がよい、という考え方です。

もちろん、そうであっても同一言語に揃えた方がよい、という考え方もあって、 その場合は向き不向きがあっても技術や根性やお金で何とかします。

Kodama Hitoshi: 「Rubyってまだまだ需要はあると思われますか?」

こちらは授業でも答えましたが、それはさておき、「誰の」「どういった」需要があるのか、ということはありますね。Ruby以外の新しい言語も生まれたりしていますが、Rubyで新しいプログラムが作られなくなることは当分ないでしょうし、何かしら便利なものをRubyで書きたいという人がいる限り、Rubyが求められなくなることはありません。

とりあえずRubyのお仕事は国内外にいろいろあるかと思います。

花岡 龍さん: 「Rubyのコミッタになるにはどんなスキルが必要ですか?」

お、頼もしい質問ですね。 CRuby(MRI)のコミッタになるならCの、JRubyのコミッタになるならJavaのスキルが必要です。むしろRubyのスキルはそれほど高くなくてもいいかもしれません。また、CRubyであれば、Rubyの標準ライブラリをメンテナンスするコミッタになる場合もあるので、その場合ならRubyのスキルだけでも十分です。

要はRuby処理系に新しい機能を付け加えることができればいいわけで、その「新しい機能」に関して詳しいことが大切です。

あと、コミッタに求められるものは「継続性」です。一瞬超頑張ってコミッタになっても続かないとあまり意味がありません(別にコミッタにならずともRubyの開発に参加することはできます)。それも大事な「スキル」だと思います。

田端 亮さん: 「何が出来るようになったらRubyが使えるようになった、と言っていいでしょうか?」

これは分野にもよりますね。例えばまつもと ゆきひろさんに、「Rubyでスクーみたいなサイトを作れますか?」と聞いたら、たぶん「今の私には作れません」と言われるような気がします(まつもとさんが本気出してしばらく勉強すれば作れるようになるとは思いますが、そういう状況になることはちょっと想像つきません)。

何か作りたいと思うことがあった時に、Rubyで簡単に作れそうかどうか、そして簡単に作れそうなら実際に自分で作れるかどうか、といったことが判断できるようになったら、 その人にとって「Rubyが(そこそこ)使えるようになった」と言ってもいいのかもしれません。

槇村 浩司さん: 「どんな準備をしたらいいですか?」

や、ほんとに直前になってすみませんが、 とりあえずNitrous.IOを使う予定なので、Nitrous.IOのアカウントを作って、使い方を調べておくとよいかもです。

あと、Rubyの基本については、 「プログラミング入門 - Rubyを使って -」(http://www.ie.u-ryukyu.ac.jp/~kono/software/s04/tutorial/) が世界的に有名な入門ガイドですね。

Ruby以外の言語を使ったことのあるひとは、 「Ruby基礎文法最速マスター」(http://route477.net/d/?date=20100125) がよいかも。

が、今回は雰囲気優先なんで、あんまり前提知識がなくてもそれなりに伝わると……いいなあ。