Love PG , Liquor & Music

プログラマー備忘録やお酒や音楽

Heroku+Ruby on Railsで開発する! その2(Ruby、Rails、Gitとは)

WEBアプリを作成することになってまず初めに読んだサイトがこれです。

  Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

  • 著者: Michael Hartl, 安川 要平(翻訳), 八田 昌三(翻訳), 他

電子書籍のWEB版のWEB版は無料で読むことができます。

Railsの入門書で、最新のRails4.0に対応しています。

 

まず開発環境として必須なものは下の3つになります。

 

① Rubyについて

Rubyは説明不要ですが、いかんせん見たことも触ったこともない言語でしたので

基本的な文法はオブジェクト指向スクリプト言語 Ruby リファレンスマニュアル

で覚えることに。

Javaと違いスクリプト言語であるが、考え方は同じオブジェクト指向なので比較的とっつきやすい感はあったのですが、作りがJavaよりもっと簡素化しておりなかなかとっつきにくい・・・

ソースを見てまず1番初めに感じたのがダブルクオーテーションとかエクスクラメーションとかクエッションマークの多さ。知識ゼロから始めるとソースを眺めるたびに頭の中が「!?」だらけになることこの上なし。記号に意味を持たせ簡略化しているのですがその意味を理解するのがまあ大変。

たとえば、「!」エクスクラメーションマーク。このマークをメソッド名の後ろにつけると「破壊的なメソッドになる。文言だけ見てもいまいち解らないので、調べてみるとどうやらそのメソッドを持つオブジェクトを直接変更するとのこと。

Javaで書き換えると以下のような感じ。

class Test {

    private int count;

   // エクスクラメーション無し
    private int getNextCount1(){

        return count+1;

    }

   // エクスクラメーション有り
    private int getNextCount2(){

        this.count ++;

        return count;

    }

}

Javaでは普通にしてることだが、Rubyでは破壊的というらしい。ただ、Rubyの場合は上記Javaソースのように2つメソッドを用意する必要はなく!を付けるかつけないかの呼び分けで実装できるので覚えてしまえばかなり便利な機能なのかなーと思ってます。その他の記号は作っているうちに詰まったりわからなかったら残しておこうと思います。

 

② Gitについて

Gitは分散型バージョン管理システム。まずバージョン管理システムについて僕の中で一番なじみ深いのがSVN。根本的にはバージョン管理システムなんてどれも同じだろーくらいの気持ちで下調べなくGitを使い始めSVNライクにメインリポジトリのMasterへPUSH!!したところ、一番の御法度らしくものすごく怒られたのできちんと習得することに。

Rails開発でなぜGitが必要かというと、Rails環境の多くの部分はGitに依存します。また、Herokuで公開する際にもGitを利用したソースのアップを行わないといけないので入れないと開発できないレベルのツールです。

GitとSVNの違いですが、

SVNリポジトリが1つあり、そのリポジトリに対してコミットやチェックアウトを行います。

Gitはメインリポジトリが1つあり、そのリポジトリから開発者ごとにリポジトリ複製した自分専用のリポジトリを作り、開発者は自分専用のリポジトリに対してコミットチェックアウトを行いメインリポジトリに登録できる状態になった段階で自分専用のリポジトリからメインリポジトリにPushを行います。

文章にすると長ったらしいですが、なにが決定的に違うかというとメインリポジトリにコミット前のソースを開発者同士で共有できるってとこです。もともとLinuxとかの大規模システムのソース管理を想定して作られてきたので1機能を複数の人で共有して作って完成したらメインにコミットできるって感じなので便利ですよね。SVNだと機能完成を見越してせーのでコミットしたり個人間でファイルのやりとりが発生したりと煩雑になるのでそこが見事に解決されています。

もちろん自分専用のリポジトリをメインリポジトリにすることでSVNライクに使うこともできますが、Gitのいいところが完全に死んじゃってるのでそういう使い方はする必要がないんじゃないかなと思います。

 

現在のプロジェクトではGitHubを利用して以下の Pull Requestベースの手順でメインリポジトリへ反映するようにしてます。

 ① メインリポジトリをFork(自分専用のリポジトリ作成)

 ② Forkしたリポジトリをローカルにclone(SVNで言うチェックアウト)

 ③ ローカルにcloneしたファイルを修正

 ④ 修正内容のBranch切って自分のリポジトリにコミット

 ⑤ Pull Requestを送信

  ーーここまでが自分のオペレーションーー

  ーーここからはメインリポジトリ管理者のオペレーションーー

 ⑥ Marge Pull Requestでメインリポジトリへソースをマージ

 ⑦ 完了

って感じです。ちなみにGitHubとはGitをWeb上で使いやすく提供しつつ、FacebookみたいなSNS機能も提供しているサービスです。2012年ネスケの創業者のベンチャーキャピタルAndreessen Horowitzから100億円とわけわからない額の投資を受けてるので今後の成長に期待です。それにしても、IT業界金があるとこにはあるんですねー。同じIT業界でも月単金いくら~の世界で生きてきたのでなんか別の業界に感じます。やっぱり才能と儲け方が違うんでしょうね。話それましたが、次行きます。

 

Railsについて

 RailsRubyのWebアプリケーションフレームワークです。

 MVCに基づいて構築されており、JavaでいうとStruts+iBatis(Terasoluna)みたいな感じです。RailsにはGemというライブラリが多く存在し(Javaでいうとjar)、このGemのアップデートがいろんな企業、コミュニティにより頻繁にアップデートされたりRails本体のアップデートで大幅に仕様が変わる(改善)されていくことから、「人間が記事を書くスピードじゃ追いつけない世界」といわれるゆえんかと思います。

 

Railsの構成を一般的なJavaアプリケーション(Struts+iBatis)と対比すると以下のような感じです。

M(Model:モデル)

   JavaiBatisが提供するO/Rマッピングなどを使いBlogicを実装

   RailsActiveRecord提供するO/Rマッピングを使い実装

 

V(View:ビュー)

   JavaJSPなどを利用して実装

   Rails:~.html.erbなどを利用して実装

 

C(Controller:コントローラー)

   Java:Actionをstruts.configに定義して実装

   Rails:コントロールロジック内に実装

 

あと、Rails 自体にいろいろなコマンドがいろいろあります。

どういうコマンドがあって何ができるのかを把握するのがRails習得の第一歩と思います。詳しくはRailsドキュメントサイトに載ってます。(http://railsdoc.com/rails

MVC作成し、1テーブルに対するCRUDだけのWEBアプリなんかだとコマンド数行で実装できてしまうほど強力なものもあります。DBの作成もコマンド1つでできてしまいます。Javaだとibator使ってDB作成するような感じです。

ただ、コマンドで自動生成されるのが多くありなにがどの役割を果たしているのかと理解するのにだいぶ時間がかかりそうです。これから頑張って習得しようと思います。

 

長なったのでインストール手順はまた書きまーす。