Rails使うよ!
これの続き。
株価Yahooから取得するやつを作ってみるよ!
Contents
Ruby on Railsとは
Ruby のフレームワーク!
cakephpはこれに近いとかなんとかだったような記憶。
きっと理解しやすいんじゃないかな(‘ω’)
準備
さてはじめよう!
RubyGems
RubyGemsというので入れるようである。
Ruby のバージョン 1.9 以降 RubyGems は標準添付となっていますが、
それ以前のバージョンの Ruby の場合は自分でインストールする必要があります。
ふむ。前回用意したrubyは2.4.1!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | $ gem RubyGems is a sophisticated package manager for Ruby. This is a basic help message containing pointers to more information. Usage: gem -h/--help gem -v/--version gem command [arguments...] [options...] Examples: gem install rake gem list --local gem build package.gemspec gem help install Further help: gem help commands list all 'gem' commands gem help examples show some examples of usage gem help gem_dependencies gem dependencies file guide gem help platforms gem platforms guide gem help <COMMAND> show help on COMMAND (e.g. 'gem help install') gem server present a web page at http://localhost:8808/ with info about installed gems Further information: http://guides.rubygems.org |
うん、使えそうだ。
Railsのインストール
1 | gem install rails |
できた。
バージョン確認(´▽`*)
1 2 | $ rails -v Rails 5.1.4 |
アプリケーションの作成
作成します!
株価とるアプリケーションなので今回は「stock」という名前にしておきます。
1 | $ rails new stock |
sqlite
sqlite-develいれる。
1 | yum install sqlite-devel |
mysqlしか環境に用意してないので後で…
Bundler
んー??
comoposer的な感じ?
必要なやつ入れたりバージョン管理とかだよね
モデルとデータベース
Railsよくわかってないままだけど、
まずモデルから使いながら覚えます。
SQLite
SQLite扱ったことないけど、
データがファイルひとつなのね
DefaultがSQLiteだったけど、MySQLにするほうがよいのか後に調べてみよう
DBの作成
DB作成します(‘ω’)
1 2 3 | $ rake db:create rake aborted! Bundler::GemRequireError: There was an error while trying to load the gem 'uglifier'. |
uglifier ね…
1 | $ gem install uglifier |
1 | Gem Load Error is: Could not find a JavaScript runtime. |
む
Gemfileに下記を追加して
1 | gem 'therubyracer' |
bundel install
再度DB作成!
1 2 3 | rake db:create Created database 'db/development.sqlite3' Created database 'db/test.sqlite3' |
できた!
テーブル
- 銘柄
- 市場
- 業種
- 株価
まずこんな感じで。
他にも情報あるけど毎日更新されるメインのものでつくります。
モデルを作成
あれ、命名規則どうなってるんだ、
テーブルは複数形でモデルは単数形?
はい、モデル名は単数で入れればいいのね
1 2 3 4 | $ rails generate model Industry $ rails generate model Market $ rails generate model TickerSymbol $ rails generate model StockPrice |
ファイルできたようだ。
- モデルファイル
- マイグレーションのファイル
- モデルのテストファイル
- テストのFixture
Migrationファイルにカラムを追加
カラムを書き足していく!
1 2 3 4 5 6 7 8 9 10 11 | # 20170911171200_create_industries.rb class CreateIndustries < ActiveRecord::Migration[5.1] def change create_table :industries do |t| t.integer :code, :null => false t.string :name, :null => false t.timestamps t.datetime :deleted_at end end end |
1 2 3 4 5 6 7 8 9 10 | # 20170911171234_create_markets.rb class CreateMarkets < ActiveRecord::Migration[5.1] def change create_table :markets do |t| t.string :name, :null => false t.timestamps t.datetime :deleted_at end end end |
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 20170911171351_create_ticker_symbols.rb class CreateTickerSymbols < ActiveRecord::Migration[5.1] def change create_table :ticker_symbols do |t| t.integer :code, :null => false t.string :name, :null => false t.timestamps t.datetime :deleted_at t.integer :industry_id t.integer :market_id end end end |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 20170911171424_create_stock_prices.rb class CreateStockPrices < ActiveRecord::Migration[5.1] def change create_table :stock_prices do |t| t.float :opening_price t.float :closing_price t.float :high_proce t.float :low_price t.float :volume t.float :trading_value t.float :daily_limit_low t.float :daily_limit_hight t.float :previous_close t.timestamps t.datetime :deleted_at t.integer :ticker_symbol_id end end end |
Migrate!!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ rails db:migrate == 20170911171200 CreateIndustries: migrating ================================= -- create_table(:industries) -> 0.0012s == 20170911171200 CreateIndustries: migrated (0.0013s) ======================== == 20170911171234 CreateMarkets: migrating ==================================== -- create_table(:markets) -> 0.0018s == 20170911171234 CreateMarkets: migrated (0.0018s) =========================== == 20170911171351 CreateTickerSymbols: migrating ============================== -- create_table(:ticker_symbols) -> 0.0011s == 20170911171351 CreateTickerSymbols: migrated (0.0012s) ===================== == 20170911171424 CreateStockPrices: migrating ================================ -- create_table(:stock_prices) -> 0.0012s == 20170911171424 CreateStockPrices: migrated (0.0012s) ======================= |
テーブルできたようだ。
rake db:seed
初期データを入れる!
今回は市場を先に入れておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | # db/seeds.rb # This file should contain all the record creation needed to seed the database with its default values. # The data can then be loaded with the rails db:seed command (or created alongside the database with db:setup). # # Examples: # # movies = Movie.create([{ name: 'Star Wars' }, { name: 'Lord of the Rings' }]) # Character.create(name: 'Luke', movie: movies.first) Market.create(:name => '東証') Market.create(:name => '東証1部') Market.create(:name => '東証2部') Market.create(:name => '東証JQS') Market.create(:name => '東証JQG') Market.create(:name => '東証外国') Market.create(:name => 'マザーズ') Market.create(:name => '名証1部') Market.create(:name => '名証2部') Market.create(:name => '名古屋セ') Market.create(:name => '大証') Market.create(:name => '札証') Market.create(:name => '札幌ア') Market.create(:name => '福証') Market.create(:name => '福岡Q') |
Yahooから表示されているの持ってきた。
1 | $ rake db:seed |
データ入れる!
バッチ作成
スクレイピングで各データを取得してくるバッチをつくります。
COntrollerとかViewは後で…
バッチをまず試してみる
/config/application.rb に1行まず追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | # /config/application.rb require_relative 'boot' require 'rails/all' # Require the gems listed in Gemfile, including any gems # you've limited to :test, :development, or :production. Bundler.require(*Rails.groups) module Stock class Application < Rails::Application # Initialize configuration defaults for originally generated Rails version. config.load_defaults 5.1 config.autoload_paths += Dir["#{config.root}/lib"] # Settings in config/environments/* take precedence over those specified here. # Application configuration should go into files in config/initializers # -- all .rb files in that directory are automatically loaded. end end |
お試しテストバッチ
/lib/tasks/test.rbを作成
1 2 3 4 5 6 7 | # lib/tasks/test.rb class Tasks::Test def self.execute puts 'Torii World !' end end |
実行してみる。
1 2 | $ rails runner Tasks::Test.execute Torii World ! |
業種取得バッチ
知識不足過ぎて、形的に動くだけのものしかつくれなそうw
後に綺麗に書き直していくか。。。
データ取得
この部分から取る。
前は全部並んでた記憶だけど、
いつのまにかセレクトボックスになった?