Comments
Description
Transcript
講演資料(5.1MB,PDF)
今すぐここではじめ るRuby on Rails 吉田裕美 今日のお話の対象者 Ruby on Railsという言葉は知って いるが、実際に使った事はない Ruby on Railsをダウンロードし Scaffoldを使ってみたが、その後ど うしたら良いか解らない 開発者の方も、マネージャーの方も 2 今日のお話 自己紹介と私の立ち位置 Ruby と Ruby on Railsの紹介 (なぜ私は、Ruby,Ruby on Railsを 使っているのか) デモ Ruby on Railsの始め方 3 自己紹介と 私の立ち位置 卒業研究 λ 偶然にも、Lispの処理系を作りました。 関数言語 言語処理系 コンピュターサイエンス いま思い返すとLispを学んだ事は、私の 技術者人生に大きな影響を与えました。 5 就職しました 工場で使われる装置等を作る会社に入 社、機械を制御するソフトを開発。 よく確認せずプログラムを動かしバグ でメカを壊し、先輩におこられる。 6 就職しました 工場で使われる装置等を作る会社に入 社、機械を制御するソフトを開発。 よく確認せずプログラムを動かしバグ でメカを壊し、先輩におこられる。 バグがあるとメカは壊れる! 6 転職しました ベンチャーのCADベンダーへ転 職、画期的な製品の開発に参加 。 画期的なアイデアの実現化 ハードワーク そして、成功 7 怖いもの知らずの開発者 2次元CADのベースソフトの開発 難しいソフトの設計 もの凄く考える コンピュターサイエンスの知識 8 敗北のマネージャー 図面管理システムで、SE/リーダー を経験 お客様の望むソフトが出来ない バックログは溜まるばかり 十二指腸潰瘍になりかける ヒューマンスキルの低さでボロボロ 9 会社人間はやめました 2000年より独立しEY-Officeを設立。 Java /Perl / Ruby 等でWebシステムを多数構築 •アジアリークアイスホケー •http://www.alhocky.jp •チーム・選手の成績集計 •アロハパーク (アロハストリート) •http://park.aloha-street.com/ •SNS 10 教育事業を始める 問題解決型の教育 EY-Officeの教育は知識の取得を目的とした学校的 な教育ではなく、 実務で必要とされる技術を、 お 客様のニーズや開発メンバーのスキルに応じ柔軟な 教育プランを組み立てご提案させて頂く 「問題解 決型の教育」です。 お客様の要望、悩 み、問題をインタ ビュー 教育プランのご 提案、お見積も り 11 教育の実施 参加コミニュティー 日本Rubyの会 / Rails勉強会@東京 Seasar Project (Java) Shibuya.pm (Perl) Shibuya.lisp (Lisp) Gauche (Scheme) 日本XPユーザー会 12 WebメディアにGauche の記事を書いてます。 @IT ThinkIT 13 Ruby と Ruby on Rails の紹介 (なぜ私は、Ruby,Ruby on Railsを 使っているのか) Ruby言語 日本人開発者 まつもとゆきひろ 氏に よって開発されたプログラム言語。 世界中で使われている。 1995年よりオープンソースとして公 開。 Lisp, Smalltalk, Perlなど過去の言語 の良い部分をバランス良く取り入れ ている。 15 写真はwikipediaより 主要な言語の歴史と関連 1960 1970 1980 C 1990 C++ 2000 Java C# ALOGOL Pascal PHP FORTRAN Perl Simula Ruby COBOL Smalltalk 直系 Python Lisp 影響を受けている Scheme Haskell ML 16 Ruby言語のキーワード プログラミングを楽しくする言語 低レベルの事は言語に任せてプログラミングの本質的な部 分に集中できる オブジェクト指向により既存のプログラムを再利用できる 変更がすぐ反映されて手軽に快適にプログラミングできる スクリプト言語としてよく使われる機能は最初から組み込 みになっていて準備や宣言なしにいきなり使える。 まつもとゆきひろ著 「オブジェクト指向スクリプト言語 Ruby 」より 17 Ruby言語のキーワード プログラミングを楽しくする言語 ちょっと大げさに表現すると、Rubyの究極 の目的は、有限の人生においてプログラミ ングの楽しい部分にできるだけ集中できる ように助けることです。 まつもとゆきひろ著 「オブジェクト指向スクリプト言語 Ruby 」 より 18 Ruby on Rails とは オランダの David Heinemeier Hansson (DHH)氏によって作られた フレームワーク。 彼が共同経営する会社 37signals の サービス開発用に作ったものをオープ ンソースとして2004年に公開。 Javaの10倍の生産性というセンセイ ショナルなキーワードで話題になる。 19 写真はwikipediaより Ruby on Railsの背景 Patterns of Enterprise Application Architecture Extreme Programming Explained -- Embrace Change 達人プログラマー (システム開発の職人から名匠への道) 「JJUG Cross Community Conference 2008 Fallの『JavaからRubyへ』・アンド・ナ ウ 」より、 一部加筆 20 Ruby on Railsのキーワード DRY (Don't repeat yourself) 情報の重複は変更の困難さを増大し透明 性を減少させ、不一致を生じる可能性に つながるため、重複するべきでない。 21 Ruby on Railsのキーワード CoC (Convention over Configuration) 設定よりも規約 ルールに則る事で、煩雑な設定を書かな くてもよい。 Railsという名前には「DHHの敷いたレー ルに乗って行けば高速にアプリが構築出 来る」という意味が込められている。 22 Ruby on Railsの実像 23 本当にJavaの10倍の生産性? 作成するアプリケーションの種類や 規模にもよりますが、2∼5倍くら いと言われています。 また、Java(第一世代フレームワーク) と Ruby on Rails (第二世代フレームワーク) では開発のスタイルも違います。 24 Java(第一世代フレームワーク)の 開発スタイル アーキテクチャーの決定 高い技術スキル 実務経験 設計センス 仕様書 アーキテクト 壁 プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー 25 細分化された仕様 の実装 低い技術スキル 単純作業的 Ruby on Railsを使った標準 的な開発スタイル プログラマー 仕様書 プログラマー プログラマー プログラマー 26 大きくないチーム 中級以上の技術スキル 全員でアーキテクチャー を決定 全員で実装 少人数なら初級者の参加 もOK 使われているの? Yes ユーザー企業 サービス業 システム名 サービス状況管理システム 規模 4人X3ヶ月 サービス業 メールコンテンツ管理システム 6ヶ月 地球の歩き方T&E 旅行者向けコミニュティサイト 264画面を6ヶ月 製造業 社内向け情報共有システム 5人X3ヶ月 伊藤忠エレクトロニクス 海外為替証拠金取引利用者向けコミ ニュティサイト 6人X4ヶ月 日経コンピュター2008年2月1日号より 島根県庁、福岡県庁、三鷹市・・・ 27 問題はないの? 食べログ.com (日本最大級の口コミグルメサイト) の例 Microsoft ASP から Ruby on Railsへの移行 トラブルは? 28 問題はないの? 食べログ.com (日本最大級の口コミグルメサイト) の例 Microsoft ASP から Ruby on Railsへの移行 トラブルは? あった SQLserver からMySQLへの移行で性能が出 なかった。 原因はMySQLのチューニング知識不足 28 初心者でも開発者できるの? ほぼ NO Ruby も Ruby on Railsも使いこなす には中級者以上のスキルが必要です。 Railsはオブジェクト指向やメタプログ ラミングが多用されており、良いシス テムを作るのは初心者では難しい。 29 JavaからRubyへ 昨年「JavaからRubyへ」が 翻訳された。 新しい技術の生み出されるプ ラットフォームがJavaから Rubyへと移りつつある。 「JavaからRubyへ」 オライリー・ジャパン Ajax マッシュアップ REST BDD 30 Javaは廃れて全てRubyに なってしまうのか? Java Ruby かたい、安定が求められる 柔軟、素早い変化が求められる 31 Javaは廃れて全てRubyに なってしまうのか? Java Ruby もちろん NO Ruby Java かたい、安定が求められる 柔軟、素早い変化が求められる 31 既存の仕事への応用 既存の仕事への応用 Ruby on Railsでプロトタイプを作成。 ユーザーからの活発なフィードバックが得られ、 要件定義・仕様が明確になる 納入後の仕様違によるトラブルが減る。 33 既存の仕事への応用 DBを共有する事で、既存のシステムの一 部にRuby on Railsアプリを構築する。 メンテナンスツール、データ解析ツールな どでは既に使われている。 新しいWebアプリ 既存のシステム Database 34 Ruby on Rails 既存の仕事への応用 JRuby JavaVMの上で動く Ruby Sunが全面的にバックアップ Java Ruby 相互に呼び出しが出来る。 新しいWebアプリ Ruby on Rails 既存のJavaで作られたシ ステム JRuby JavaVM 35 私が思う、Ruby on Rails の良いところ 簡潔な記述 Rubyプログラムは記述が簡潔 高位関数(ブロック)が手軽に使える DSLによるメタプログラミング 動的、eval 37 オブジェクト指向言語で ある オブジェクト思考は、対象のアプリ ケーションやコードのモジュール化 に役立つ。 Java等で発展してきたオブジェクト 指向設計・実装が利用できる。 38 Webプログラマーの常識 に合致する 平凡なコントロラー 平凡なテンプレート MVCモデル O/Rマッピング 39 規約が決まっている 名前付け、ディレクトリー構造などを あまり考えなくてもRailsのルールに 合わせて行けば良い。 他人の書いたコードも理解しやすい。 40 UnitTest等が充実している UnitTest等が内蔵されている テスト支援機能も内蔵されている RSpecなど進んだツールも用意され ている 41 おもしろ 新しい技術が次々と取り込む REST Ajax RSpec (BDD) Named Scope フレームワーク自体の改善 42 デモ テーブルの関連 app/models/blog.rb class Blog < ActiveRecord::Base has_many :comment end 一対多の関係 app/models/comment.rb class Comment < ActiveRecord::Base belongs_to :blog end 44 Ruby on Railsの 始め方 開発スタイル ターミナル + エディタ 軽い 原理を知るのには良い 極めれば生産性は高くなる IDE (NetBeans, 3rdRail, Eclipse...) Eclipse等の利用者には良いかも 重い プログラミング向けGUIエディター(TextMate, Komodo Editor) 上2つの中間 46 EY-Office IDE Sun Microsystems社の NetBeans IDE 6.5 47 EY-Office 有償開発ツール CodeGear(Borland) 社の 3rdRail 48 EY-Office 開発プラットフォーム Windows ポピュラーだが、コマンドでの開発に向かな い、またコマンドが遅い Unix (Linuxなど) コマンドでの開発には最適 Mac Unix と同等の開発ができる Windows + coLinux / VMWare WindowsPCで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 rake iv) gem install rails v) gem install sqlite3-ruby vi) 必要ならsqlite(RDB)のインストール 51 EY-Office Ruby on Rails入門書 まずは一冊 Ruby on Rails の本を読むのが早道です。 自分にとって読みやすそうな本を選ぶのが重要です。 以下の本は私のお薦ですが、実際に本屋さんで眺めて 決めて下さい。 「RailsによるアジャイルWebアプリケーション 開発」 第2版 Dave Thomas, David Heinemeier Hansson著、前田修吾訳 オーム社、ISBN978-4-274-06696-2、 定価 4410円 52 EY-Office Ruby 入門書 Perl, Python等に慣れ親しんでいる人以外は 絶対に Ruby の入門書を読んで下さい。 Railsと同じで 実際に本屋さんで眺めて決めて 下さい。 本を読むだけでなく、説明に出てくるコード を試したり、演習問題のコードを書いて下さ い。 53 EY-Office Rubyドキュメント 日本語! やや読みにくいところも ありますが何度も読み仲 良くなりましょう。 新しいドキュメントも鋭 意作成中 http://www.ruby-lang.org/ja/man/ 54 EY-Office Railsドキュメント 英語ですが、examplesが 豊富にあるので、まずは examplesをみればプログ ラマーなら理解できま す。 http://api.rubyonrails.org 55 EY-Office レシピ本 入門書とマニュア ルの間を埋める本 実際に開発する際 には便利 ISBN: 4797336625 ISBN: 4839928266 56 比較的最近のバー ジョン用に書かれ ている EY-Office デバック手法 エラーメッセージをしっかり読む。 ログファイルを読む。 ログファイルにデバック用情報を書き 出す。 irb, script/consoleで試す。 デバッカ 57 EY-Office エラーメッセージの見方 NoMethodError in Todos#show ← エラーメッセージ Showing 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/> ← Viewでエラーが検出された場合は、 エラー近辺のテンプレートのソースが表示される 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' 58 ← スタックトレース エラーカ所に至るまでの 呼出経過 ★ ★ EY-Office エラーメッセージの見方 Request Parameters: ← ブラウザーからのパラメター ★ {"id"=>"3"} --flash: ! map:ActionController::Flash::FlashHash {} Show session dump ← クリックすると、その時の Response セッション内容が表示される ー→ ★ Headers: {"cookie"=>[], "Content-Type"=>"text/html", "Cache-Control"=>"no-cache"} :csrf_id: 7273dc2e7aa6d271667bbc82e8b65997 ← ブラウザーに送ったHTMLのヘッダー情報 59 EY-Office ログファイルの見かた log/development.log の内容 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') ↑ 実行されたSQL LIMIT 1 Cookie set: cookie_id=t1u84mma0ytq7u23; path=/; expires=Sat, 05 Jan 2008 08:18:03 GMT SQL (0.000891) SELECT count(*) AS count_all FROM articles LEFT OUTER JOIN translations ON translations.article_id = articles.id WHERE (true) Rendering within layouts/article ← 使われたView Rendering article/list Completed in 0.01970 (50 reqs/sec) ¦ Rendering: 0.00664 (33%) ¦ DB: 0.00599 (30%) ¦ 200 OK ログに表示制御コード(^[[4;36;1m のようなもの)が入っている場合は、config/ environment.rb ファイルの最後に以下の文を追加してサーバーを再起動して下さい。 ActiveRecord::Base.colorize_logging = false 60 EY-Office ログの出し方 logger.debug("id = #{id}") 配列やオブジェクトは inspect メソッドを使うと分 かり易い形で書かれる。 a = [1,2,3] puts "#{a}" # => 123 puts "#{a.inspect}" # => [1,2,3] 61 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つのサーバーで複数のアプリを運用できる Railsアプリ Apache 2.2.X Internet mod_passenger RDB HTML,画像... 65 EY-Office 実行環境 (高負荷向き) apache(mod_proxy_balancer) + Mongrel Mogrel サーバーを追加する事でスケール可能 Railsアプリ Apache 2.2.X Internet Mongrel mod_proxy _balancer Railsアプリ RDB Mongrel Railsアプリ HTML,画像... Mongrel 2008年6月時点で 7000万PV/日の「食べログ.com」は4台のMongrel用 サーバーで運用しているそうです 66 EY-Office プラグイン Railsの機能を拡張する、プラグインが多 数公開されているので、上手く使うと生産 性が飛躍的に向上します。 Restful Authentication :ログイン認証一式 jpmobile:携帯サイト構築 ActiveScaffold:Ajaxを使った高機能 CRUD プラグイン一覧サイト: http://agilewebdevelopment.com/plugins 67 EY-Office Redmine/Git プログラムのバージョン管理 リリース版、開発版の管理 開発項目、バグ情報の管理 Wiki 開発情報のポータルサイト プログラムや情報の管理にはツールを使うべきです。 Redmine は Ruby on Railsで作られています。 68 EY-Office さらに先に進むには ソースコードを読む Rails 自身のコード Railsで作られたアプリケーション 何か作ってみる コミニュティー・勉強会への参加 Blog を書く 69 EY-Office お題:夢、メッセージ 本物のプログラマだけが、高い生産性 のツールや言語を使いソフトウェアが 開発されている。 風評ではなく、自分で評価してツール や言語を決めて下さい。 70 EY-Office ありがとうございます。 質問等などありましたら yy@ey-office.com クリエイティブ・コモンズ 表示 2.1 ライセンス 71 EY-Office