クラウドxスマフォ時代 のRuby on Rails入門 2014-07-22 今日のお話 (1/2) 自己紹介 Ruby言語の紹介 Ruby on Railsの紹介 Ruby on Rails で簡単なWebアプ リを作る Webアプリをクラウドにデプロイ 2 今日のお話 (2/2) アプリをスマフォ用ブラウザーに対 応する Webアプリをスマフォアプリと連 携する RailsとTDD (時間があれば) 3 自己紹介 吉田 裕美 吉田 裕美 (Yoshida Yuumi) 有限会社 EY-Office http://www.ey-office.com/ Blog : http://d.hatena.ne.jp/yuum3/ Twitter: @yuumi3 5 過去 大学の工学部卒業 組込系の会社に就職 CADのベンチャー企業に転職 CADコア部分の開発 図面管理システム等でSE・マネージメントを 経験 シリコンバレーを訪問したり、米国人と仕事を 経験 6 EY-Office 2000年に独立 開発 Web (Ruby on Rails) iPhone 教育 お客様の問題を解決するIT教育 Ruby on Rails iPhone 7 EY-Office 開発 (Web) • アジアリーグアイスホッケー •http://www.alhocky.jp •チーム・選手の成績集計 • Perl 独自フレームワーク •ネットショップ •http://www.boro.co.jp •Rails4.1 / jQuery •RSpec / Cucumber 8 •アロハパーク •サービス終了 •SNS •Java / Seasar2 •萌えトーク (声優とSkype でお話) •サービス終了 •声優との会話予約予約 •Rails3.0 / jQuery •RSpec EY-Office 開発 (iPhone) Tweetなう (無料) 絵本アプリ (iPhone/iPad) 教え子が作ったアプリ 9 EY-Office教育 Ruby on Rails コース名 Ruby on Rails入 日数 1日 門コース Ruby on Rails標 準コース 3日 Ruby on Rails徹 底コース 5日 内容 効果 費用 • Ruby言語入門 • Ruby/Ruby on Railsの概要が理解できる 2万円/人 • Ruby on Rails入門 • Ruby on Rails実習 • 経験豊な開発者であれば、書籍等を参考に Ruby on Railsの開発が始められる (5名以上で受 講ください) • Ruby言語入門 、Ruby実践プログラミング • Ruby言語実習 • Ruby on Rails入門、Ruby on Rails 実践開発 • Ruby on Rails実習 • Ruby/Ruby on Railsが理解できる 6万円/人 • Ruby言語入門 、Ruby実践プログラミング • Ruby言語実習 • Ruby on Rails入門、Ruby on Rails 実践開発 • Ruby on Rails実習 • 実用アプリの開発演習 • Ruby/Ruby on Railsが理解できる 10 • Ruby on Rails開発プロジェクトにプログラ マーとして参加できる • Ruby on Railsを使ったプロジェクトの設 計・開発が始められる 10万円/人 EY-Officeの教育 11 執筆 12 RubyKaigi2008でスピーチ 成功するRuby教育のプラクティス」 13 RubyWorld Conference 2013 『Ruby開発者を増やすための教育につい て−8年間のRuby教育で得た知見』 14 Webメディアへの執筆 15 Ruby言語の紹介 Ruby言語 日本人開発者 まつもとゆきひろ 氏に よって開発されたプログラム言語。 世界中で使われている。 1995年よりオープンソースとして公 開。 Lisp, Smalltalk, Perlなど過去の言語 の良い部分をバランス良く取り入れて いる。 17 写真はwikipediaより 主要な言語の歴史と関連 18 Ruby言語のキーワード プログラミングを楽しくする言語 ちょっと大げさに表現すると、Rubyの究極 の目的は、有限の人生においてプログラミ ングの楽しい部分にできるだけ集中できる ように助けることです。 まつもとゆきひろ著 「オブジェクト指向スクリプト言語 Ruby 」 より 19 Ruby処理系 MRI(CRuby) : まつもと氏がつくった元祖 JRuby :Javaで作られ JVM上で動作する Rubinius :Ruby+LLVMで作られた処理系 IronRuby: .NET環境で動作する MacRuby :Mac OS X に特化した処理系 mRuby : 組み込み用Ruby (サブセット) RubyMotion : iOS開発用Rubyコンパイラー 20 Rubyのバージョン 1.8.X :昔々 1.9.X :過去 笹田浩一氏の作ったVMをコアに 採用し高速化 多言語(M17N)化 RubySpec(Ruby標準仕様) 2.1.X : 現在 21 Ruby on Rails開発環境の選択 Rails Hosting 2012 (http://rails-hosting.com)より Ruby、Ruby on Rails共にUnix文化に根ざし ており、一部のライブラリーはWindowsでは 動かない Windowsでも基本の学習程度には使える 22 Rubyのインストール Mac, Linux ./configure, make, make install rbenv : 複数バージョンの切り換え Windows http://rubyinstaller.org VMを使いLinuxをインストール 23 Ruby(Rails)インストール情報 http://redmine.ey-office.net/ projects/rails/wiki (時々更新) http://qiita.com (古い記事は注意) http://stackoverflow.com トラブ ル対策にはお勧め 24 Ruby言語超入門 動的プログラミング言語 コンパイル等は無く、直ぐに実行で きる irb : プログラムを書かなくても Rubyを試せるコマンド % irb! > 2 + 3! => 5 26 動的型付け データに型があるが、変数には型がない 変数の宣言は不要 a = 1! pus a! a = “ABC”! puts a! a = [1,2,3]! puts a 27 データ 他の言語と同じく 整数、実数、文字列 … 配列、ハッシュ … シンボル :name 名前自身を表すデータ ハッシュのキーとして良く使われる 28 式 他の言語とほぼ同じ a = 2 + (3 * 4)! s = “abc” + “def”! b = a > 20! x += 3! n++ ++、-- は無い 29 制御文 文法は違うが考え方は同じ 簡潔な文法 if a > 0! b = 1! else! b = 0! a = -a! end s = 0! while n > 0! s = s + n! n = n - 1! end 30 関数(メソッド) 簡潔な文法 def fact(n)! if n == 0! 1! else! fact(n - 1) * n! end! end 31 n = fact(5)! m = fact 4 オブジェクト指向 文法は異なるが、基本はJava等とほぼ同じ class TwoNumber! def initialize(a, b)! @a = a; @b = b! end! def add! @a + @b! end! end tw = TwoNumber.new(3, 4)! a = tw.add() 32 オブジェクト指向 ただし、Javaと違うところもある 全てがオブジェクト オープンクラス mixin (module) 33 全てがオブジェクト 整数もオブジェクト i = 123! s = i.to_s()! s = String.valueOf(i); 34 オープンクラス 既存のクラスにメソッドを追加・変 更できる class String! def double! self * 2! end! end 35 mixin 実装を共有出来る class String! include Double! end! class Number! include Double! end module Double! def double! self * 2! end! end 3.double “ab”.double # => 6! # => “abab” 36 オブジェクト指向 自由度が高い メタプログラミング (DSL) モンキーパッチ オープンクラスはやや危険なので refinementsで対応 37 関数型言語からの影響 イテレータ ブロック 全ての式、文が値を持つ 遅延評価 38 イテレーター (Enumerable) a = [1,2,3,4]! b = []! for n in a! if n > 2! b << n ! end! end a = [1,2,3,4]! b = a.select {|n| n > 2} 39 ブロック def times(n)! for i in 1..n! yield(n)! end! end > times(3) {|n| puts n }! 1! 2! 3 40 ドキュメント 暗記する必要はあり ませんが、一度全て 目を通しておくと良 いと思います。 41 ライブラリー 組み込みライブラリー 添付ライブラリー Ruby Gems 42 Ruby on Railsの紹介 Ruby on Rails とは オランダの David Heinemeier Hansson (DHH)氏によって作られた フレームワーク。 彼が共同経営する会社 Basecamp (37signals) のサービス開発用に作った ものをオープンソースとして2004年に 公開。 Javaの10倍の生産性というセンセイショ ナルなキーワードで話題になる。 44 写真はwikipediaより Ruby on Railsの背景 Extreme Programming Explained -- Embrace Change Programming Ruby: The Pragmatic Programmer's Guide Patterns of Enterprise Application Architecture 達人プログラマー (システム開発の職人から名匠への道) 「JJUG Cross Community Conference 2008 Fallの『JavaからRubyへ』・アンド・ナウ 」 より、 一部加筆 45 どうしてRubyは世界で使われる ようになったのか? 英語の news group や web Dave Thomas 46 EY-Office Ruby on Railsのキーワード DRY (Don't repeat yourself) 情報の重複は変更の困難さを増大し透明 性を減少させ、不一致を生じる可能性に つながるため、重複するべきでない。 47 Ruby on Railsのキーワード CoC (Convention over Configuration) 設定よりも規約 ルールに則る事で、煩雑な設定を書かな くてもよい。 Railsという名前には「DHHの敷いたレー ルに乗って行けば高速にアプリが構築出 来る」という意味が込められている。 48 Ruby on Railsの実像 49 本当にJavaの10倍の生産性? 作成するアプリケーションの種類や 規模にもよりますが、2∼5倍くら いと言われています。 また、Java(第一世代フレームワーク) と Ruby on Rails (第二世代フレームワーク) では開発のスタイルも違います。 50 Java(第一世代フレームワーク)の 開発スタイル アーキテクチャーの決定 高い技術スキル 実務経験 設計センス 仕様書 アーキテクト 壁 プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー プログラマー 51 細分化された仕様 の実装 低い技術スキル 単純作業的 Ruby on Railsを使った標準 的な開発スタイル プログラマー 仕様書 プログラマー プログラマー プログラマー 52 大きくないチーム 中級以上の技術スキル 全員でアーキテクチャー を決定 全員で実装 少人数なら初級者の参加 もOK 初心者でも使いこなせるの? ほぼ NO Ruby も Ruby on Railsも使いこなす には中級者以上のスキルが必要です。 Railsはオブジェクト指向やメタプログ ラミングが多用されており、良いシス テムを作るのは初心者では難しい。 53 JavaからRubyへ 「JavaからRubyへ」という 本が翻訳された。 新しい技術の生み出されるプ ラットフォームがJavaから Rubyへと移りつつある。 「JavaからRubyへ」 オライリー・ジャパン Ajax マッシュアップ REST BDD 54 Javaは廃れて全てRubyになっ てしまうのか? Java Ruby もちろん NO Ruby Java かたい、安定が求められる 柔軟、素早い変化が求められる 55 Ruby on Railsのバージョンアップ 1∼2年に一度のメジャーバージョン アップ その間、数回のマイナーアップデート 良くなるのであれば、多少の互換性は 無視 56 Ruby on Rails入門 今回つくるアプリ 画像SNSのよう なもの 58 コマンド コマンド(とエディター)を使い開発 --help を指定すればヘルプが表示される 主なコマンド rails : コード雛形作成、実行 rake : 開発時の雑用(?) bundle : gemライブラリーの管理 59 開発の流れ 1. rails new でプロジェクトを作成 2. rails g でコードの雛形を作成 3. rake db:migrate でテーブルを作成 4. rails s でサーバーを起動 5. コードの変更・追加 6. 2へ戻る 60 railsコマンド rails new プロジェクト! 新規プロジェクトの作成 rails g テーブル カラム:型 …! テーブルとそれを扱うコードの作成 rails s! サーバーの起動 rails c! 開発コンソール 61 アプリのディレクトリー構造 app: プログラム、詳細は次ページ bin: 開発ツール lib: ライブラリー config: 設定 db: データベース関係 public: スタティックなHTMLなど spec, test: テストコード vendor: いろいろ(歴史的な理由) log: ログファイル tmp: 一時的なファイルなど Gemfile: gemライブラリーの管理 62 appのディレクトリー構造 assets: CSS, JavaScript, 画像, controllers: コントローラ helpers: ヘルパー、表示の補助 models: モデル mails: メールコントローラ views: 表示テンプレート layouts: 表示の枠組み コントローラ単位のテンプレート 63 MVC Model : 業務ロジック、計算など、処理の本質 View : 表示 Control : 処理の流の制御 64 マイグレーション migration Railsではテーブルの作成・変更もコードと して管理している rakeコマンドでマイグレーションの取消や 再実行が出来る class CreatePosts < ActiveRecord::Migration! def change! create_table :posts do |t|! t.string :name! t.string :photo! t.text :caption! ! t.timestamps! end! end! end 65 RESTfulなコントロラー URLはリソースを現す 操作はメソッド(GET, POST, PATCH, DELETE)を使う rake routes コマンドで表示 操作 メソッド 一覧 GET http://server/todos 取得 GET http://server/todos/1 更新 登録 削除 URL PATCH http://server/todos/1 POST http://server/todos DELETE http://server/todos/1 66 処理 index() show() update() create() destroy() ドキュメント 英語ですが慣れて下 さい examplesのコード を最初に読むと良い と思います 67 Railsアプリのデバック エラーメッセージをしっかり読む ログファイルを読む ログファイルにデバック用情報を書 き出す logger.debug(a) rails consoleで試す。 68 Railsの便利な機能 入力データのチェック validation 関連するテーブルの参照 ヘルパー callback before action 69 テーブルの関連 Railsのモデルは関連を扱う事が出来ます ここでは users : posts = 1:多 の関係を記述 class User < ActiveRecord::Base! has_many :posts! end class Post < ActiveRecord::Base! belongs_to :user! end 70 国際語化 i18n internationalization = i18n Railsは最初から国際語化されている エラーメッセージ等は最初は英語しか 入っていない 多国語を扱うサイトも作りやすい 71 Gemライブラリー Gemライブラリー 一般的な機能はすでにGemとして公開さ れている事が多い Gemを探すには ruby-toolbox が役立つ たいてい GitHubに置いてある ちゃんとメンテされているか、良いコー ドかをチェックした方が良い 73 Gemライブラリーの利用 1. Gemfile にライブラリーを指定 2. bundle でインストール 3. (rails g で設定など) 4. サーバーの再起動 5. コードの追加・変更 74 よく使うGem Gem 機能 Kaminari 一覧のページング CarrierWave 画像などのアップロード Paperclip 画像などのアップロード OminiAuth Twitter,Facebookなどのを使うログイン認証 Devise 自前DBを使うログイン認証、多機能 RailsAdmin RDBデータの管理画面 75 UI Twitter Bootstap デザイン力の無い開発者 でも今風なWebが作れ る CSS (JS) Twitterのデザイナーが 作成した Railsで直ぐに使えるGem がある 77 Cloud クラウド is 何? 79 クラウドの 分類 SaaS Software as a Service PaaS Platform as a Service IaaS(HaaS) Infrastructure as a Service 図はWikipediaより 80 クラウドの分類 アプリケーション CRM, ERP, Mail, Office プラットフォーム OS, RDB, Middleware インフラ CPU, Disk, Network 図はWikipediaより 81 クラウドの分類 SaaS PaaS IaaS(HaaS) 図はWikipediaより 82 Herokuとは 元々 Ruby on Rails に特化した PaaS だった 簡単にアプリを配置できる 簡単にスケールできる 無料トライアル AWSを使っている Salesforceの子会社 Ruby開発者を雇っている (Matz、笹田、中田) 83 Herokuデプロイ手順 1. herokuツールのダウンロード・インストール 2. Gemfileの修正 3. bundle install! 4. heroku create! 5. git commit! 6. git push heroku master! 7. heroku run rake db:migrate 84 AWS等へのデプロイ手順 1. AWSにサーバーを作成 2. サーバーにRuby, RDB…のインストール。 ここが大変! 最近はChef等で自動化する 3. capistranoのインスール 4. capistranoの設定ファイル作成・変更 git commit! 6. git push origin master! 7. cap deploy! 8. 上手く行かなければ 2, 4へ戻る 5. 85 IasS vs PasS HerkuのようなPasSを使えばイン フラ系エンジニアを雇わなくても安 心してサービスを立ち上げられる。 ただし、PasSはIasSよりコストが かかる 86 Mobile First Mobile First http://www.slideshare.net/ bge20/2013-05-bea より スマフォやタブレットの数はPCを 超えた大きな市場なった 88 スマフォへの対応方法 Webアプリにスマフォ用の CSS (+ JavaScript) を追加 ネイティブアプリを作りAPI(JSON) で通信する 89 今回つくるアプリ Safari (web) ネイティブアプリ 90 Twitter Bootstap レスポンシブ Web デザイン 91 Ruby on Railsとスマフォ JSON/ XML サーバー Ruby on Rails JSON/ XML Railsはバージョン2.0(2007年)当時から WebAPI、リッチクライアント向けのJSON/ XMLでのデータやり取りが出来ていた 92 JSONの出力 レスポンスはHTML以外にJSON等を出力で きる show.html.erb <p>! <strong>Name:</strong>! <%= @post.user.name %>! </p>! <p>! <strong>Caption:</strong>! <%= @post.caption %>! </p> show.json.jbuilder json.extract! @post, :id, :name, :caption 93 Rails ⇄ iOSライブラリー ObjectiveResource 死亡 他にもいろいろ … 94 画像は http://meta.ohloh.net/2012/10/going-tdd/ より TDD TDD: テスト駆動開発 TDDの開発スタイル 従来の開発スタイル 設計 設計 テストコードの作成 コードの作成 デバック 基本的には 一方向の流れ コードの作成 テスティング テストコードの実行 NO NO OK? 必要ならテストコー ドの作成 OK? YES YES 96 ここを繰り返すこ とで開発を進める TDDのメリット 短期目標がありモチベーションが上 がる、進捗が分かり易い リファクタリングしやすくなる フレームワーク等のバージョンアッ プが容易になる トータルでは開発時間を短く出来る 97 TDDのデメリット 最初はテストを書くのが難しい プログラミング初心者にはテストが 書けない テストを書く事が目的になりがち 98 テストの書き方 テストコードは 1. テストデータなどテストの準備 2. テスト対象の実行 3. 結果を確認 まずは、正常系を1つ書く 先人の書いたテストコードを学ぶ 99 リファクタリング コードの改善 メンテナンス性の高いコードにする 基本的には仕様は変えない テストがあると容易に出来る 画像は http://meta.ohloh.net/2012/10/going-tdd/ より 100 RSpec Ruby (Rails)でよく使われるツール コンパクトで判り易いテストが書ける rspec-railsを使うと model, helper, controller, view, mailer, routes, featuresのテストが書ける 101 rspec-rails使い方のお勧め model にロジックのテストを書く features でアプリ全体の簡単なテスト を書く 102 つづき… Ruby言語 入門書 Perl, Python等に慣れ親しんでいる人以外は絶対に Ruby の入門書を読んで下さい。 実際に本屋さんで眺めて決めて下さい。 本を読むだけでなく、説明に出てくるコードを試し たり、演習問題のコードを書いて下さい。 ISBN 4797371277 ISBN 4797372273 104 ISBN 4873113679 EY-Office Ruby on Rails入門書 まずは一冊 Ruby on Rails の本を読むのが早道です 自分にとって読みやすそうな本を選ぶのが重要です 紙の書籍は最新版に対応してないですが価値はあります http://tatsu-zine.com/ books/railstutorial ISBN 4274068668 105 http://pragprog.com/book/ rails4/agile-web-developmentwith-rails-4 EY-Office ネット上の情報 1年以上前の情報は古いので注意! 信頼出来る情報 https://www.ruby-lang.org/ja http://rubyonrails.org http://guides.rubyonrails.org 有用 http://stackoverflow.com http://qiita.com 106 ←お勧め ネット上の情報 日本語のブログ等には役に立たない ものが ままあります 検索上位にある情報でも良くないも のもあります (具体例は口頭で) 107 今日の結論 英語重要 新しい技術は英語でやって来る 英会話は後回し、読めればOK 慣れる事が重要 108 おつかれさまでした http://www.ey-office.com/
© Copyright 2024 ExpyDoc