SSブログ

MacでRails(3.2系)アプリケーションを開発する前にやっておくべきこと [rails]

ちょっと間が開いてしまいましたが、前回(MacにRails3.2.13を入れてみた。)の続きです。

Railsの環境が出来ると、とりあえず何か作ってみよう!となりますが、開発をスムーズに行うためにも先に以下の事をやっておくと後で昔の自分GJ!となります。

1. DB(MySQL)のGUIクライアントツールの導入
2. ソースコードのGit管理
3. debug環境の設定

1.はともかく、2.、3.については、技術系入門書でも触れられていない事が多く、割と知らない人が多い気がします。
ただ仕事でやる人に取っては必須となっていて、個人で開発・勉強する上でも役立つので面倒くさがらずやっておいたほうがいいです。

1. DB(MySQL)のGUIクライアントツールの導入
Railsに限らず何らかのアプリを開発する上でDBアクセスは避けては通れないので、DBの中身を簡単にチェック出来るGUIツールを用意したほうがいいです。

MySQLのGUIクライアントツールはブラウザベースのMySQL Adminが有名で、実際に自分も仕事ではこっちを使っていますが、"Sequel Pro"というオープンソースのMySQL GUIクライアントツールの評判がいいので今回はこっちを使ってみます。

Sequel Pro

"Download"ボタンをクリックしてアプリケーションをダウンロードしてインストールします。
# 2013/04/13時点の最新 1.0.1

sequelpro_dl.jpg

インストールしたアプリケーションを起動し、MySQLの接続情報を入力して接続できる事を確認します。

sequelpro_setting.jpg

なお、テーブルはまだ作られていないので、細かい使い方や確認などはいずれまた。


2. ソースコードのGit管理
Gitとはバージョン管理ソフトの1つです。
Macにはdefaultで入っているので特に設定することなく利用することが出来ます。

オレオレ開発でもバージョン管理してこまめにコミットしておけばいつか助かったと思える日が来ます。
なので未来の自分のために入れておくといいと思います。

Gitレポジトリを作る前に以下の設定を入れておきます。
% git config --global user.name "[自分のUserName]"
% git config --global user.email "[自分のMailAddress]"

この設定は誰がコミットしたかを表す設定なのでソロ開発では必要ないといえば必要ないのですが、今後githubや最近流行りのソーシャルコーディングなどをやった際設定漏れしてると全力で履歴に残り若干恥ずかしいので、後々忘れる前に設定しておくといいです。

あとはカラーリングしておくと見やすくなって便利です。
% git config --global color.ui auto

初期設定が終わったらGitレポジトリを作成します。
Git管理したいアプリケーションをカレントにしinitコマンドを叩きます。

今回はRailsテスト用に作った"my_app"をレポジトリ管理します。
% cd ~/developments/rails/my_app
% git init
Initialized empty Git repository in /Users/*******/developments/rails/my_app/.git/

レポジトリ作成はこれで完了。
"my_app"フォルダにはnewしたrailsアプリケーションがあるのでとりあえず初期コミットします。

ただし、ログとかgit管理したくないファイルもあるので、除外するファイルを設定します。
% vim .gitignore
======================================
## 変更
# Ignore all logfiles and tempfiles.
#/log/*.log
/log

##追加
/vendor 
======================================

.gitignoreには最初からいくつか設定されていますが、とりあえず自分が追加設定したのは上記2点。
/log配下には(たぶん)ログファイルしか置かないので全部除外にして、/vendorもGemfile管理で大丈夫なので対象外としました。
あとは必要に応じて追加したりします。

ここまで終わったら初期コミットします。
まずは全部なので、"add ." => "commit"を実行します。
% git add .
% git commit -m "初期コミット"
 37 files changed, 1227 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 Gemfile
 create mode 100644 Gemfile.lock
  (中略)
 create mode 100644 test/test_helper.rb
 create mode 100644 test/unit/.gitkeep

Gitに慣れてない人はとりあえず add / commit / status / diff の4つだけ覚えておけば当面は大丈夫、なハズ。
1歩進んだ事をしたくなったらそこはもうGoogle先生に・・・

余談だけど個人的に初心者にオススメGit本。



Git本はのべ3冊読んだけど、これが一番わかりやすい。
自分は仕事でGitを使い始めたのも最近で、それまでずっとSVNを使っていました。
そのせいなのか、最初はGitの扱いにだいぶ苦戦して前のバージョンに戻すのも一苦労してました。

Git本で有名なの書籍として秀和システムやオーム社の書籍がありますが、Gitをあまり理解していない人が入門書として読むと心が折れる気がする。

上記の本はあまりに逆に入門的な空気が出すぎていて買う時に別の勇気が必要となりますが、この本に書かれている内容をひと通りこなすと最低限Gitを使えるようになるので、本当の入門書を求めている場合はオススメです。


3. debug環境の設定
自宅で趣味や勉強がてらに触る人にはあまり必要ないかと思われがちですが、いざハマった時にちゃんとしたdebugを行えるかどうかで効率は大きく変わるので導入しておいて損はないと思います。

debug環境の設定についてですが、具体的には以下の2つ(関連含めると3つ)のGemをインストールします。

・debugger
・better_errors(+ binding_of_caller)

まずは、debuggerから。
こちらはdefaultで作られるGemfileの中に記述が既にあり、コメントで寝かされている状態なのでそれを取っ払ってbundle installします。
% vim Gemfile
======================================
# To use debugger
## コメントを外し有効にする
gem 'debugger'
======================================

% bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies...
  (中略)
Installing columnize (0.3.6)
Installing debugger-linecache (1.2.0)
Installing debugger-ruby_core_source (1.2.0)
Installing debugger (1.5.0)

インストールはこれで完了。
以下、簡単な使い方について。

とりあえずテスト用に適当なコントローラーを作ります。
% bundle exec rails generate controller Hoge index
      create  app/controllers/hoge_controller.rb
       route  get "hoge/index"
      (以下略)

ViewとActionも実装し、Actionのdebugしたい場所にブレイクポイントを設置します。
% vim app/controllers/hoge_controller.rb
======================================
# coding: utf-8
class HogeController < ApplicationController
  def index
    @hoge1 = 1
debugger    # ブレイクポイント
    @hoge += 1
    @hoge += 2
    @hoge += 3
  end
end
======================================

% vim app/controllers/hoge/index.html.erb
======================================

テスト:<%= @hoge %>

======================================

ブレイクポイントを仕込んだらWEBrickを"--debugger"オプションをつけて起動します。
% bundle exec rails server --debugger
=> Booting WEBrick
=> Rails 3.2.13 application starting in development on http://0.0.0.0:3000
=> Call with -d to detach
=> Ctrl-C to shutdown server
=> Debugger enabled
[2013-04-07 21:17:24] INFO  WEBrick 1.3.1
[2013-04-07 21:17:24] INFO  ruby 1.9.3 (2013-01-15) [x86_64-darwin12.2.1]
[2013-04-07 21:17:24] INFO  WEBrick::HTTPServer#start: pid=21002 port=3000

ブラウザでアクセスしてみる。
http://0.0.0.0:3000/top/index

そうすると画面の読み込み途中で止まってしまいます。
コンソールをチェックすると以下の様な表示が出ています。
Users/*******/developments/rails/my_app/app/controllers/hoge_controller.rb:7
@hoge += 1
(rdb:2)

これは"debugger"文(ブレイクポイント)を差し込んだ行で処理が停止している状態になっています。
"p"コマンドでこの時点での変数の値を確認できるので"@hoge"に設定されている値を確認します。
(rdb:2) p @hoge
1

ループ前にブレイクポイントを入れているので、初期値の"1"が表示されます。
"list"コマンドを叩くことで周辺のソースコードを確認することが出来ます。
(rdb:2) list
[2, 11] in /Users/*******/developments/rails/my_app/app/controllers/hoge_controller.rb
   2 
   3  class TopController < ApplicationController
   4    def index
   5      @hoge = 1
   6      debugger
=> 7      @hoge += 1
   8      @hoge += 2
   9      @hoge += 3
   10    end
   11  end

次に処理を1行進めてみます。処理を進めるのは"next"コマンドです。
(rdb:2) next
Users/*******/developments/rails/my_app/app/controllers/hoge_controller.rb:8
@hoge += 2
(rdb:2) p @hoge
2

1行進めることで次の処理である"@hoge += 1"が実行され、@hogeには"2"が設定されます。
なお"next"コマンドは、"n"でも実行出来ますので、それを打ってもう1行進めます。
(rdb:2) n
Users/*******/developments/rails/my_app/app/controllers/hoge_controller.rb:9
@hoge += 3
(rdb:2) p @hoge
4

こうやって"next"コマンドを叩くことで1行ずつ処理が実施されるので、処理がどのように行われているかを追うことが出来ます。
確認が終わったら"continue"コマンドを叩けば残りの処理が実行され、次のブレイクポイントまで処理が進みます。他にブレイクポイントが無ければそのまま処理が完了します。
(rdb:2) continue

Started GET "/hoge/index" for 127.0.0.1 at 2013-04-07 21:31:51 +0900
Processing by HogeController#index as HTML
  Rendered hoge/index.html.erb within layouts/application (19.9ms)
Completed 200 OK in 457560ms (Views: 57.6ms | ActiveRecord: 0.0ms)

一見面倒に思えますが、このようにどこでどのような処理/エラーが起きているかが明確にわかるので、当たりをつけて何度もdebug用コードを差し込むより、早く原因を特定する事が出来ます。
これはアプリケーションがより巨大に、複雑になればなるほど効果を発揮します。

なお、今回利用したコマンド以外のコマンドについては"h(help)"コマンドで確認できます(英語)。
短縮コマンドもこれで確認することが出来ます。
(rdb:2) help
ruby-debug help v1.5.0
Type 'help ' for help on a specific command

Available commands:
backtrace  delete   enable  help  list    ps       save    start   undisplay
break      disable  eval    info  method  putl     set     step    up      
catch      display  exit    irb   next    quit     show    thread  var     
condition  down     finish  jump  p       reload   skip    tmate   where   
continue   edit     frame   kill  pp      restart  source  trace

(rdb:3) help next
n[ext][+-]?[ nnn]     step over once or nnn times,
          '+' forces to move to another line.
          '-' is the opposite of '+' and disables the force_stepping setting.

debuggerの設定が終わったら次は"better_errors"Gemを入れます。
こちらはRailsのエラー画面を強化するGemで、Railsに標準で入れて欲しいとの声もあるほど有名なGemです。

GitHub: better_errors

GitHubのREADMEにも書いてあるように、"binding_of_caller"プラグインもセットで入れます。
これによりエラー画面上でirbが使えるようになるのでよりdebug作業が楽になります。

GemをインストールするためにGemfileに追記し、bundle installを実施します。
% vim Gemfile
======================================
# better_errors 
gem 'better_errors'
gem 'binding_of_caller'
======================================

% bundle install --path vendor/bundle
Fetching gem metadata from https://rubygems.org/...........
Fetching gem metadata from https://rubygems.org/..
Resolving dependencies…
  (中略)
Installing coderay (1.0.9)
Installing better_errors (0.8.0)
Installing debug_inspector (0.0.2)
Installing binding_of_caller (0.7.1)

インストールが終わったら、試しにエラーを発生させてみます。
% vim app/controllers/hoge_controller.rb
======================================
# coding: utf-8
class HogeController < ApplicationController
  def index
    @hoge1 = 1
    @hoge += 1
# 人為的にエラーを発生させる 
raise
    @hoge += 2
    @hoge += 3
  end
end
======================================

エラーページを確認すると、標準のエラー画面に比べ情報が整理され見やすくなっています。
[Before]
error_default.jpg

[After]
error_better_errors.jpg

画面右上のソースコード表示部にはirbが起動しているので、そこからエラー発生時の変数の値などを確認することができます。

error_better_errors_irb.jpg

debuggerとbetter_errorsによりRailsアプリのdebugはだいぶ楽になると思います。
nice!(1)  コメント(0) 
共通テーマ:パソコン・インターネット

nice! 1

コメント 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。