今すぐここではじめ るruby on rails - qcontokyo.com · るruby on rails 吉田裕美 ....
TRANSCRIPT
今日のお話の対象者Ruby on Railsという言葉は知っているが、実際に使った事はない
Ruby on RailsをダウンロードしScaffoldを使ってみたが、その後どうしたら良いか解らない
開発者の方も、マネージャーの方も
2
会社人間はやめました2000年より独立しEY-Officeを設立。Java /Perl / Ruby 等でWebシステムを多数構築
10
•アジアリークアイスホケー•http://www.alhocky.jp•チーム・選手の成績集計
•アロハパーク (アロハストリート)•http://park.aloha-street.com/•SNS
教育事業を始める問題解決型の教育EY-Officeの教育は知識の取得を目的とした学校的な教育ではなく、 実務で必要とされる技術を、 お客様のニーズや開発メンバーのスキルに応じ柔軟な教育プランを組み立てご提案させて頂く 「問題解決型の教育」です。
11
お客様の要望、悩み、問題をインタビュー
教育プランのご提案、お見積もり
教育の実施
参加コミニュティー日本Rubyの会 / Rails勉強会@東京Seasar Project (Java)Shibuya.pm (Perl)Shibuya.lisp (Lisp)Gauche (Scheme)日本XPユーザー会
12
Ruby言語日本人開発者 まつもとゆきひろ 氏によって開発されたプログラム言語。世界中で使われている。1995年よりオープンソースとして公開。Lisp, Smalltalk, Perlなど過去の言語の良い部分をバランス良く取り入れている。
15
写真はwikipediaより
主要な言語の歴史と関連
16
1960 1970 1980 1990 2000
FORTRAN
COBOL
C
Lisp
ALOGOL
C++
Perl
Ruby
Java
Python
PHP
Simula
Smalltalk
ML
Scheme
Haskell
C#
直系
影響を受けている
Pascal
Ruby言語のキーワード
低レベルの事は言語に任せてプログラミングの本質的な部分に集中できるオブジェクト指向により既存のプログラムを再利用できる変更がすぐ反映されて手軽に快適にプログラミングできるスクリプト言語としてよく使われる機能は最初から組み込みになっていて準備や宣言なしにいきなり使える。
17
プログラミングを楽しくする言語
まつもとゆきひろ著 「オブジェクト指向スクリプト言語 Ruby 」より
Ruby言語のキーワード
18
プログラミングを楽しくする言語
まつもとゆきひろ著 「オブジェクト指向スクリプト言語 Ruby 」 より
ちょっと大げさに表現すると、Rubyの究極の目的は、有限の人生においてプログラミングの楽しい部分にできるだけ集中できるように助けることです。
Ruby on Rails とはオランダの David Heinemeier Hansson (DHH)氏によって作られたフレームワーク。彼が共同経営する会社 37signals の サービス開発用に作ったものをオープンソースとして2004年に公開。Javaの10倍の生産性というセンセイショナルなキーワードで話題になる。
19
写真はwikipediaより
20
「JJUG Cross Community Conference 2008 Fallの『JavaからRubyへ』・アンド・ナウ 」より、 一部加筆
Patterns of Enterprise Application Architecture
Extreme Programming Explained -- Embrace Change
達人プログラマー (システム開発の職人から名匠への道)
Ruby on Railsの背景
Ruby on Railsのキーワード
情報の重複は変更の困難さを増大し透明性を減少させ、不一致を生じる可能性につながるため、重複するべきでない。
21
DRY (Don't repeat yourself)
Ruby on Railsのキーワード
設定よりも規約ルールに則る事で、煩雑な設定を書かなくてもよい。Railsという名前には「DHHの敷いたレールに乗って行けば高速にアプリが構築出来る」という意味が込められている。
22
CoC (Convention over Configuration)
本当にJavaの10倍の生産性?作成するアプリケーションの種類や規模にもよりますが、2~5倍くらいと言われています。
また、Java(第一世代フレームワーク) と Ruby on Rails (第二世代フレームワーク) では開発のスタイルも違います。
24
Java(第一世代フレームワーク)の開発スタイル
アーキテクチャーの決定高い技術スキル実務経験設計センス
25
細分化された仕様の実装低い技術スキル単純作業的
アーキテクト
プログラマープログラマープログラマープログラマープログラマープログラマープログラマープログラマー
プログラマープログラマープログラマープログラマープログラマープログラマープログラマープログラマー
プログラマープログラマープログラマープログラマー
仕様書
壁
Ruby on Railsを使った標準的な開発スタイル
26
プログラマープログラマー
プログラマー
プログラマー
仕様書
大きくないチーム中級以上の技術スキル 全員でアーキテクチャーを決定全員で実装少人数なら初級者の参加もOK
使われているの?Yes
27
ユーザー企業 システム名 規模サービス業 サービス状況管理システム 4人X3ヶ月
サービス業 メールコンテンツ管理システム 6ヶ月
地球の歩き方T&E 旅行者向けコミニュティサイト 264画面を6ヶ月
製造業 社内向け情報共有システム 5人X3ヶ月
伊藤忠エレクトロニクス 海外為替証拠金取引利用者向けコミニュティサイト
6人X4ヶ月
日経コンピュター2008年2月1日号より
島根県庁、福岡県庁、三鷹市・・・
問題はないの?
Microsoft ASP から Ruby on Railsへの移行トラブルは?
28
食べログ.com (日本最大級の口コミグルメサイト) の例
あったSQLserver からMySQLへの移行で性能が出なかった。原因はMySQLのチューニング知識不足
初心者でも開発者できるの?
ほぼ NORuby も Ruby on Railsも使いこなすには中級者以上のスキルが必要です。Railsはオブジェクト指向やメタプログラミングが多用されており、良いシステムを作るのは初心者では難しい。
29
JavaからRubyへ昨年「JavaからRubyへ」が 翻訳された。新しい技術の生み出されるプラットフォームがJavaからRubyへと移りつつある。AjaxマッシュアップRESTBDD
30
「JavaからRubyへ」オライリー・ジャパン
既存の仕事への応用DBを共有する事で、既存のシステムの一部にRuby on Railsアプリを構築する。メンテナンスツール、データ解析ツールなどでは既に使われている。
34
既存のシステム
新しいWebアプリ
Ruby on RailsDatabase
JRubyJavaVMの上で動く RubySunが全面的にバックアップJava ↔ Ruby 相互に呼び出しが出来る。
35
既存のJavaで作られたシステム JRuby
新しいWebアプリ
JavaVM
Ruby on Rails
既存の仕事への応用
テーブルの関連
44
一対多の関係
class Comment < ActiveRecord::Base belongs_to :blogend
class Blog < ActiveRecord::Base has_many :commentend
app/models/comment.rb
app/models/blog.rb
EY-Office
開発スタイルターミナル + エディタ軽い原理を知るのには良い 極めれば生産性は高くなるIDE (NetBeans, 3rdRail, Eclipse...)Eclipse等の利用者には良いかも重いプログラミング向けGUIエディター(TextMate, Komodo Editor)上2つの中間
46
EY-Office
開発プラットフォームWindowsポピュラーだが、コマンドでの開発に向かない、またコマンドが遅いUnix (Linuxなど)コマンドでの開発には最適MacUnix と同等の開発ができるWindows + coLinux / VMWareWindowsPCでUnix開発環境が使える
49
EY-Office
開発環境の構築i) Ruby のインストール (Railsを使うのなら 1.8.6か1.8.7)
ii) パッケージ管理ソフト gem のインストールiii)ビルドツール rake のインストールiv)Ruby on Railsのインストールv) RDBドライバーのインストール
50
EY-Office
Windows開発環境の構築例i) ii) Ruby, gem のインストール (One-Click Ruby Installer for Windowsを使用) http://rubyforge.org/frs/download.php/47082/ruby186-27_rc2.exe をダウンロードしインストーラーを実行
iii) gem install rakeiv) gem install railsv) gem install sqlite3-rubyvi) 必要ならsqlite(RDB)のインストール
51
EY-Office
Ruby on Rails入門書まずは一冊 Ruby on Rails の本を読むのが早道です。
自分にとって読みやすそうな本を選ぶのが重要です。
以下の本は私のお薦ですが、実際に本屋さんで眺めて決めて下さい。
52
「RailsによるアジャイルWebアプリケーション開発」 第2版Dave Thomas, David Heinemeier Hansson著、前田修吾訳オーム社、ISBN978-4-274-06696-2、 定価 4410円
EY-Office
Ruby 入門書Perl, Python等に慣れ親しんでいる人以外は絶対に Ruby の入門書を読んで下さい。
Railsと同じで 実際に本屋さんで眺めて決めて下さい。
本を読むだけでなく、説明に出てくるコードを試したり、演習問題のコードを書いて下さい。
53
EY-Office
Rubyドキュメント日本語!やや読みにくいところもありますが何度も読み仲良くなりましょう。新しいドキュメントも鋭意作成中
54
http://www.ruby-lang.org/ja/man/
EY-Office
Railsドキュメント英語ですが、examplesが豊富にあるので、まずはexamplesをみればプログラマーなら理解できます。
55
http://api.rubyonrails.org
EY-Office58
NoMethodError in Todos#showShowing todos/show.html.erb where line #18 raised:
undefined method `gsu' for "":String
Extracted source (around line #18):
15:
16: <p>
17: <b>Memo:</b><br/>
18: <%=new_line(h(@todo.memo)) %>
19: </p>
20:
21: <%= link_to 'Edit', edit_todo_path(@todo) %> |
RAILS_ROOT: /Users/yy/RailsWorks/todo
Application Trace | Framework Trace | Full Trace
app/helpers/todos_helper.rb:4:in `new_line'app/views/todos/show.html.erb:18:in `_run_erb_47app47views47todos47show46html46erb'app/controllers/todos_controller.rb:18:in `show'
エラーメッセージの見方← エラーメッセージ
← エラーの起きた場所 ★ ★ ★← エラーの詳細 ★ ★ ★
← Viewでエラーが検出された場合は、 エラー近辺のテンプレートのソースが表示される
← スタックトレース エラーカ所に至るまでの 呼出経過 ★ ★
← スタックトレースの表示範囲を変えられる
EY-Office59
Request
Parameters:
{"id"=>"3"}
Show session dump
Response
Headers:
{"cookie"=>[], "Content-Type"=>"text/html", "Cache-Control"=>"no-cache"}
エラーメッセージの見方
--- flash: !map:ActionController::Flash::FlashHash {}
:csrf_id: 7273dc2e7aa6d271667bbc82e8b65997
← ブラウザーからのパラメター ★
← ブラウザーに送ったHTMLのヘッダー情報
← クリックすると、その時の セッション内容が表示される ー→ ★
EY-Office
ログファイルの見かた
60
Processing ArticleController#list (for 192.168.1.40 at 2007-10-07 17:18:03) [GET] Session ID: 5803516dedd63237597d4fc4c507fff9 Parameters: {"action"=>"list", "controller"=>"article", "page"=>"2"}User Load (0.000303) SELECT * FROM users WHERE (users.`cookie_id` = 't1u84mma0ytq7u23') LIMIT 1Cookie set: cookie_id=t1u84mma0ytq7u23; path=/; expires=Sat, 05 Jan 2008 08:18:03 GMTSQL (0.000891) SELECT count(*) AS count_all FROM articles LEFT OUTER JOIN translations ON translations.article_id = articles.id WHERE (true) Rendering within layouts/articleRendering article/listCompleted in 0.01970 (50 reqs/sec) | Rendering: 0.00664 (33%) | DB: 0.00599 (30%) | 200 OK
← 入力パラメター
↑ 実行されたSQL
← 使われたView
log/development.log の内容
ログに表示制御コード(^[[4;36;1m のようなもの)が入っている場合は、config/environment.rb ファイルの最後に以下の文を追加してサーバーを再起動して下さい。ActiveRecord::Base.colorize_logging = false
EY-Office
ログの出し方
61
logger.debug("id = #{id}")配列やオブジェクトは inspect メソッドを使うと分かり易い形で書かれる。
a = [1,2,3]puts "#{a}" # => 123puts "#{a.inspect}" # => [1,2,3]
EY-Office
ユニットテストRailsではテスト用のコードのひな形も自動生成されます。unit: モデルのテストコードfunction: コントロラーのテストコードintegration: コントロラーをまたがるテストコードfixtures: テスト用データmocks: テスト用のダミークラス
62
EY-Office
ユニットテストテストを書く事は、開発者にいくつものメリットをもたらします。リファクタリングが出来る。開発時間を短縮できる。安心感・自信・勇気。ユニットテストは開発者の為のテストです。最初から完璧を目指さず、出来るところからやりましょう。
63
EY-Office
Webアプリの脆弱性Railsは脆弱性を突く攻撃に対処する方法を提供しています。主な脆弱性を突く攻撃と対処。Cross Site Scripting ー ERBの h() メソッドSQL injection ー プレイスホルダーCross Site Request Forgery ー protect_from_forgery
しかし、正しく使わないと脆弱性が残るので注意しましょう。
64
EY-Office
実行環境 apache + Passenger(mod_rails)インストールや運用が簡単1つのサーバーで複数のアプリを運用できる
65
Apache 2.2.X
Internetmod_passenger
HTML,画像...
RDB
Railsアプリ
EY-Office
実行環境 (高負荷向き)apache(mod_proxy_balancer) + MongrelMogrel サーバーを追加する事でスケール可能
66
Apache 2.2.X
Internet mod_proxy
_balancer
HTML,画像...
RDB
Mongrel
Railsアプリ
Mongrel
Railsアプリ
Mongrel
Railsアプリ
2008年6月時点で 7000万PV/日の「食べログ.com」は4台のMongrel用サーバーで運用しているそうです
EY-Office
プラグインRailsの機能を拡張する、プラグインが多数公開されているので、上手く使うと生産性が飛躍的に向上します。Restful Authentication :ログイン認証一式jpmobile:携帯サイト構築ActiveScaffold:Ajaxを使った高機能 CRUDプラグイン一覧サイト: http://agilewebdevelopment.com/plugins
67
EY-Office
Redmine/Gitプログラムのバージョン管理リリース版、開発版の管理開発項目、バグ情報の管理Wiki開発情報のポータルサイト
68
プログラムや情報の管理にはツールを使うべきです。Redmine は Ruby on Railsで作られています。