Rubyことはじめ4
今日も今日とてパーフェクトRubyをやる
今日は第3章。覚えること多めなのですぐ入ってこないのは飛ばしてやった。
第3章
演算子
::
の優先順位が一番高い
同値
a = [1,2,3] b = [1,2,3] p a == b # => true p a.equal?(b) # => false
unlessはifと同じ動きをする
n = 1 unless n.zero? p "nは0じゃない" else p "0や" end => "nは0じゃない"
後置if/unless
- ifやenlessは最後に評価された値を返す
- この戻り値を代入やメソッド呼び出しの引数として利用できる。
p '先に書くのか' if n == 1 # => '先に書くのか' p '先に書くのか2' unless n.zero? # => '先に書くのか2'
パーセント記法
%
はダブルクォートと同等%q
はシングルクォートと同等%w
は配列 式の展開はされない%W
は配列 式の展開がされる%i
要素がシンボルの配列を作る
繰り返し
languages = %w(Perl Python Ruby) i = 0 while i < languages.length p "Hello #{languages[i]}" i+=1 end => "Hello Perl" => "Hello Python" => "Hello Ruby"
例外処理
- Exceptionを継承したクラスはたくさんあるのです・
Safe navigation operator (v.2.3以降)
- ある値がnilでなければメソッドを呼び出したい的な
&.
を用いる
people = %w(hoge hage huge) person_0 = people[0] person_9 = people[9] p person_0&.capitalize # => hoge p person_9&.capitalize # => nil
仮引数は省略可能
def hoge(text = 'Hi') p text end hoge hoge('Yo')
ブロック
微妙な理解度
def block_sample p 'stand up' yield if block_given? p 'sit down' end # ブロックを渡さない場合 block_sample # => "stand up" # => "sid down" # ブロックを渡す block_sample do p 'work' end # => "stand up" # => "work" # => "sid down"
感想
文化多すぎ、書き方多すぎ。 代表的な書き方を実戦で描いていかないと覚えらんないなあ。
Rubyことはじめ3
前回ProgateでRubyを学んで大まかに理解できたのは良かったけど、実務でのコードでは「???」となることが多かったのでこれは基礎を叩き込むしかないとおもい、パーフェクトRubyを購入してしまった。
- 作者: Rubyサポーターズ
- 出版社/メーカー: 技術評論社
- 発売日: 2017/05/17
- メディア: 大型本
- この商品を含むブログ (1件) を見る
2章の感想
わかったこと
ダブルクォートを用いた文字列の中には、#{...}を埋め込むことができる
name = 'foo' p 'Hello #{name}' # => "Hello \#{name}" p "Hello #{name}" # => "Hello foo"
グローバル変数は$
からはじまる
定数は大文字からはじまる
インスタンス変数は@
からはじまる
クラス変数は@@
からはじまる
$hoge # グローバル変数 Hoge # 定数 @hoge # インスタンス変数 @@hoge # クラス変数
モジュールについては要復習(namespaceなイメージしかわからなかった)
module Hoge class Fuga def poo p 'hoge huga' end end end module Hage class Fuga def poo p 'hage huga' end end end p1 = Hoge::Fuga.new p2 = Hage::Fuga.new p1.poo # "Hoge Fuga" p2.poo # "Hage Fuga"
Setterメソッドは末尾にイコールをつける
def length=(val) @length = val end
というか、attr_accessor
をつければgetter, setterを一気に実装できる
attr_accessor :length
要復習のもの
- Proc
- symbol
GithubにSSH接続
sshフォルダに行く
$ cc ~/ssh
鍵を作成する
$ ssh-keygen -t rsa Generating public/private rsa key pair. Enter file in which to save the key (/Users/home/.ssh/id_rsa): hoge Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in hoge. Your public key has been saved in hoge.pub.
鍵をクリップボードにコピー
pbcopy < ~/.ssh/hoge.pub
configファイルに以下の情報を追記
Host host-name User git Port 22 HostName github.com IdentityFile ~/.ssh/hoge TCPKeepAlive yes IdentitiesOnly yes
接続テスト
$ ssh -T host-name
リポジトリにアクセスするときは…
git@host-name:username/git-test.git
RailsとVue.jsを合わせて使ってみる2
やったこと
サンプルアプリを作ったので自分でアプリを作ってみたい。 (今回完結しない)
開発手順
Rubyをインスコ
* `rbenv local 2.4.2`
Railsプロジェクト作成
$ rails new scalping_tester --webpack=vue
--webpack=vue
を書いておくとそれごとインストールされる
画面を作る
$ rails g controller home index
devサーバーの設定
foremanのインスコ
ForemanはProcfileから複数のプロセスを管理する Gemfileにイカを記載
gem 'foreman'
変更されたらbin/webpack
の実行を行う
以下を作成
#!/bin/bash -i bundle install bundle exec foreman start -f Procfile.dev
web: bundle exec rails s # watcher: ./bin/webpack-watcher webpacker: ./bin/webpack-dev-server
bin/server
のパーミッションを変更
$ chmod 777 bin/server
これでbin/server
するとlocalhost:5000
にサーバーが立ち上がる。
HTMLを作る
index.html.erb
にとりあえずhtmlを作る
コンポーネント化する
<div id="app"> <div class="container"> <navbar></navbar> <!-- 設定 --> <div class="row"> <setting></setting> <div class="viewer col-md-9"> <!-- 最終結果 --> <result></result> <!-- 表 --> <chart></chart> <!-- 履歴 --> <history></history> </div> </div> </div> </div> <%= javascript_pack_tag 'scalping' %>
ここではscalping.jsを読みに行くように設定する(一番下の行)
import Vue from 'vue/dist/vue.esm.js' import Header from './components/header.vue' import Setting from './components/setting.vue' import Result from './components/result.vue' import Chart from './components/chart.vue' import History from './components/history.vue' var app = new Vue({ el: '#app', components: { 'navbar': Header, 'result': Result, 'chart': Chart, 'history': History, 'setting': Setting } });
それぞれの.vue
ファイルに内容を書く
<template> <div class="result"> <h2 class="text-primary">シミュレーション結果</h2> <table class="table table-striped"> <thead> <tr> <th>取引期間</th> <th>取引回数</th> <th>開始資産</th> <th>終了資産</th> <th>総利益</th> </tr> </thead> <tbody> <tr> <td>2017/11/11 ~ 2017/12/12</td> <td>10000回</td> <td>12345円</td> <td>876543円</td> <td>3000円</td> </tr> </tbody> </table> </div> </template>
できたこと
- webpackを使ってWebコンテンツを構成するファイルをひとまとめにする
- htmlのガワを作成
次にやること
railsにchart.js入れて動かす
やりたいこと
rails + vue.jsでchart.jsを動かしたい。
作ったもの
vue-chartjsを入れる
GitHub - apertureless/vue-chartjs: 📊 Vue.js wrapper for Chart.js
$ yarn add vue-chartjs chart.js
Gemfileに以下を追加してbundle install
gem 'chart-js-rails'
jsの読み込み
app/asset/javascripts/application.js
に以下を追加
//= require popper //= require Chart.min
描画
- js側
// 前略 import VueCharts from 'vue-chartjs' Vue.component('chartjs-line', { extends: VueCharts.Bar, mounted () { this.renderChart({ maintainAspectRatio: true, repsonsive: true, labels: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'], datasets: [ { type: 'line', label: 'GitHub Commits', backgroundColor: '#f87979', data: [40, 20, 12, 39, 10, 40, 39, 80, 40, 20, 12, 11] } ] }) } }); // 後略
- html側
<div id="app"> <chartjs-line :width="5" :height="2"></chartjs-line> </div>
RailsとVue.jsを合わせて使ってみる
やったこと
以下の記事のTODOアプリを作った * Vue.jsとRailsでTODOアプリのチュートリアルみたいなものを作ってみた - Qiita
学習したこと
→ Rails + Vue.jsでSPAっぽいものを作れそう。
webpacker
読んだ
Webコンテンツを構成するファイルをひとまとめにするツール
- 複数のファイルを1つにまとめることでファイル転送の時間削減ができる
- webpackはjsだけでなくcssや画像までもバンドルできる
Vue-Router
Vue-Routerを使用することで、登録されたパスとコンポーネントで画面内を差し替える(SPAっぽい)
Vue.use()
でプラグインの使用(今回はVue-Router)
またVue-Routerの使い方を見ないといけない…
npm install vue-router --save
してなくてハマった…w
- VueRouterを使用すると、
<router-link>
と<router-view>
というタグを使用できる<router-link>
は<a>
タグとして変換するが、画面遷移でなく、VueRouterに登録されたパスからコンポーネントを探す- そして
<router-view>
の部分に表示する
その他メモ
- インストールでハマった。webpackerのインスコとvueのインスコもれでした
rails webpacker:install
rails webpacker:install:vue
- Node.jsの界隈では、機能ごとに分割されたJavaScriptファイルのことを一般的に「モジュール」と呼ぶ
- webpack関連のファイルは変更したらコンパイルする必要がある
foreman は、Procfile を読み込み、複数のプロセスを管理できるツール。
RailsのAPI作成はだいぶ楽そうだけど手順がよくわかっていない。
- これは別でやればいいと思うから飛ばす
classList
: class属性のトークンリストを返す#finished-tasks
を引っ張ってきて、.display_none
の追加削除を交互に行うことで表示非表示を行う
Vue.jsことはじめ2
今日やったこと
学んだこと
結構番所に近いけどただ読むだけだと本当に覚えないなという印象
Viewインスタンスの作成
- VueのデザインはMVVMパターンから部分的に影響を受けているので慣例としてインスタンス名が
vm
になっている - Vueアプリケーションは
new Vue
で作成されたRoot Vue Instanceで構成される - Vueインスタンスが作成されると自身の
data
オブジェクトのすべてのプロパティをリアクティブシステムにつかえる data
のプロパティはインスタンスが作成された時に存在していた場合にのみリアクティブ
インスタンスライフサイクルフック
- Vueインスタンスは生成時に一連の初期化を行う
- データの監視のセットアップ テンプレートのコンパおる DOMへのインスタンスのマウント データが変化した時のDOMの更新
- ライフサイクルの特定の段階でユーザーが自身のコードを追加する、いくつかのライフサイクルフックと呼ばれる関数を実行する
- iOSでいう
viewDidLoad
みたいな感じかな created
mounted
updated
destroyed
- iOSでいう
テンプレート構文
展開
テキスト
最も基本的な形は二十中括弧をりお湯したテキスト展開
<span>Message: {{ msg }}</span>
生のHTML
v-html
ディレクティブを使うことで実際のHTMLを出力することも可能
<div v-html="rawHTML"></div>
var vm = new Vue({ el: '#app', data: { rawHtml: '<h1>hello</h1>', } });
XSS脆弱性を容易に引き起こすのでウェブサイトで動的に任意のHTMLを描画することは超危険
属性
HTMLの属性をデータバインディングするときはv-bind
を使う
<img v-bind:src="image"></img>
var vm = new Vue({ el: '#app', data: { image: 'http://img.allabout.co.jp/gm/article/7182/mainimg.jpg' } });
v-bind
は省略可能
<img :src="image"></img>
JavaScript式の使用
すべてのデータバインディング内部でJavaScriptを完全にサポートする
ディレクティブ
- ディレクティブは
v-
から始まる特別な属性。 - ディレクティブ属性値は単一のJavaScript式を期待する(
v-for
は例外) - ディレクティブの仕事は属性値の式が変化した時にリアクティブに副作用をDOMに適用すること
省略記法
v-bind
<a :href="url"></a>
v-on
<a @click="doSomething"></a>