RUNTEQに入って良かったと感じたこと。
はじめに
RUNTEQに入って良かったと感じたことについて書きます!
これからRUNTEQに入会しようと思う方にも参考になったらなと思います!
講師がコーチ形式で教えてくれる
わからないことに対してコーチ形式で教えてくれるので、問題解決に対する自走力がつきます!「手取り足取り教える」ことをスタンスに置いていなく、「自走力をつける」ことにスタンスを置いています。
例えばRUNTEQではエラーにぶつかったからといって、「エラーが解決できません!教えてください!」みたいに、簡単に質問することはできません!
しっかりと自分が「どこまで理解しているのか」、「エラー解決をするためにどういう取り組みをしたのか」を伝えることが求められます!(最初は言語化することに苦労しました。笑)
そうすることで講師陣が、「自分が理解しているつもりで書き出したことは、そもそも合っているのか」、「そもそもそのエラー解決の為に試したことは意味があったのか」など解説してくれます!
ただ答えを教えてくれるのではなく、自分で答えが見つけられるように導いてくれます!
現場で通用する質問力をつける為にもそういった形式をとっているとのことです。
Slackで他の人の様子を覗くことができる
RUNTEQでは主にコミュニケーションツールとしてSlackを使用していますが、他の人たちのTimesを覗いたりすることができます!
各自が好きなことを投稿していたりするのですが、RUNTEQ受講生には面白い人たちがたくさんいるので、それぞれのTimesをのぞくと色々な発見があります。笑
いろいろな人が反応してくれるので、そこから受講生同士で仲が深まったりもしているようです!笑(私はまだうまく活用しきれていないけど...)
適当に投稿したことに対していろいろな人が反応してくれるのは嬉しいですよ!RUNTEQの運営側の方々も反応してくれるので、コミュニケーションが深まり、いろいろなことに対して質問しやすくなります!
また、不安なこととかを投稿したりしたら、みんなが励ましてくれたりするので「孤独感」に悩むことはなくなると思います!
勉強会イベントが行われている
個人的にこれはかなり大きいなと思います!
RUNTEQはメインでRailsの学習カリキュラムを扱っていますが、そのほかにも定期的にRUNTEQコミュニティ限定の勉強会が開催されます。
いろいろな技術に関する簡単な勉強会を行っていて、それに参加することで知らなかった技術とかを知るきっかけとなるので、めちゃくちゃ良いです!
最後に
やっぱり学習していると、どこかで挫折しちゃったりすると思います。
そんな時、同じコミュニティに所属している学習仲間がいればやっぱり心強いと思います!
私自身まだまだコミュニティの良さを活かしきれていない部分もありますが、RUNTEQに入会して良かったと感じています!
Vue.js学習メモ
<index.html>
①Vue.jsで扱うUIの領域を定義する為に、div id="app"を用意する。
<js/main.js>
②Vue.jsでUIに結びつくモデル、vmを作り、el:でどのviewの領域と結び付けるかを指定する。そしてdata:でモデルが持つデータを指定する。
③上記のデータを{{ name }}でUIに反映させる。(データからUIへの反映)
④input="text" v-model="name" (UIからデータへの反映)
two way data bindingというのはdataが更新されればUIが更新され、UIが更新されればdataも更新されるということ。
アプリの基本設定 Rails学習メモ
<Railsの初期化>
Railsではサーバーを立ち上げる際に、初期化という作業が行われている。
この初期化時には、以下の3種類のファイルが呼び出されており、それぞれ異なる初期作業を実行している。
・config/initializers以下の各ファイル
・config/environments以下のうち、実行環境に合致しているもの
・config/application.rb
---------------------------------------------------------------------------------------
<初期化設定の記述>
・config/initializers以下の各ファイル
特定のツールや機能に対するファイルを、ファイル別に記述する。
・config/environments以下のうち、実行環境に合致しているもの
環境別に行いたい初期化作業を記述する。
・config/application.rb
アプリケーション全体に関する設定を行う。
paramsメソッド
<paramsメソッド>
paramsメソッドはRailsで送られてきたパラメータを受け渡しするメソッドである。
主にPOSTでフォームから送られてきたパラメータを受けわたす際に使われる。
・params・・・「パラメータを格納する箱」
・パラメータ・・・「サービスの利用者がサーバに対して送ってきた値」
---------------------------------------------------------------------------------------
<paramsメソッドの使い方>
URLから送られきた値や、フォームで入力した値をparams[:パラメータ名]という形で受け渡しする。
・リンクによるパラメータの受け渡し
・フォームによるパラメータの受け渡し
・配列やハッシュでのパラメータの受け渡し
---------------------------------------------------------------------------------------
<サービスの利用者がサーバーに対して送った値を受け取る>
以下のようなフォームがあったとする。
<label>概要</label>
<input type="text-area" name="description">
nameがここに入力された内容はdescriptionという名前がつけられると教えてくれている。そしてこのnameがパラメータの名前となり、params[:description]としてサーバーに送られる。
---------------------------------------------------------------------------------------
<ストロングパラメータ>
ストロングパラメータは「Web画面上から内部へ送られてきた値を安全に受け取る仕組み」である。
この仕組みを使用することで、意図しない(安全ではない)データの登録・更新を防いでくれる。
メソッドにあらかじめ登録・更新を許可するカラムを指定することで、未許可のカラムデータが送られてきても、データの登録前に未許可であることを検出し、登録対象として無視することができる。
JSONとは?
<JSONとは?>
「JavaScript Object Notation」の略であり、JavaScriptのオブジェクト記法を用いたデータ交換フォーマット」のこと。
様々な言語でサポートされていて、JSONを用いることで各プログラミング言語間のデータの受け渡しが簡単にできる。
JSONの例
[
{"id" : "1", "name" : "nakamura"},
{"id" : "2", "name" : "katou"}
]
---------------------------------------------------------------------------------------
<JSONの書き方>
JSONは{}の中にキーと値をコロンで区切って記述する。キーは必ずダブルクォーテーションで囲む必要があり、シングルクォーテーションだとエラーになる。
・基本的な書き方
{"key" : "value"}
・カンマで区切ると、キーと値の組み合わせを複数記述できる。
{"key1" : "value1", "key2" : "value2"}
・行数が多くなると読みにくくなるため、その場合は改行とインデントを使用する。
{
"key1" : "value1",
"key2" : "value2",
"key3" : "value3"
}
---------------------------------------------------------------------------------------
<JSONが対応しているデータ型>
文字列、数値、null、bool値、オブジェクト、配列といったデータ型に対応している。
・文字列
{"name" : "nakamura"}
・数値
{"id" : 1}
・null
{"id" : null}
・bool値
{"a" : true, "b" : false}
・オブジェクトの中にオブジェクトを入れ「ネスト」することもできる。
{
"id" : 1,
"name" : "nakamura",
"attribute" : {
"gender" : "male",
"birth" : "1997/04/09"
}
}
・配列
{
"id" : 1,
"name" : "nakamura",
"result" : [
4
3
9
]
}
Ruby学習メモ 範囲(Range)
<範囲(Range)>
Rubyには「1から5まで」「文字’a’から文字’e’まで」のように、値の範囲を表すオブジェクトがあり、これを範囲オブジェクトという。
具体的には次のようなコードで範囲オブジェクトを作成する。
1..5
1…5
‘a’..’e’
‘a’…’e’
範囲オブジェクトはRangeクラスのオブジェクトである。
(1..5).class
(1…5).class
..と…の違いは、最後の値を範囲に含めるか含めないかの違いになる。include?メソッドを使うと引数の値に含まれるかどうかを判定できる。
include?メソッドを使用して..と…の違いを確認してみると以下のようになる。
# ..を使うと5が範囲に含まれる (1以上5以下)
(1..5).include?(5) #=> true
# …を使うと5が範囲に含まれない(1以上5未満)
(1…5).include?(5) #=> false
<配列や文字列の一部を引き出す>
配列に対して添字の代わりに範囲オブジェクトを渡すと、指定した範囲の要素を取得することができる。
a = [1, 2, 3, 4, 5]
# 2番目から4番目までの要素を取得する。
a[1..3] #=> [2, 3, 4]
文字列に対しても同じような操作が行える。
a = ‘abcdef’
# 2文字目から4文字目までを抜き出す。
a[1..3] #=>”bcd”
<n以上m以下、n以上m未満の判定をする>
n以上m以下、n以上m未満の判定をしたい場合は、<や>=のような記号を使うよりも範囲オブジェクトを使用した方がシンプルに書ける。
# 不等号を使う場合
def liquid?(temperture)
0 <= temperture && temperture < 100
end
liquid?(-1) #=> false
liquid?(0) #=> true
liuquid?(99) #=> true
liquid?(100) #=> false
# 範囲オブジェクトを使う場合
def liquid?(temperture)
(0…100).include?(temperture)
end
liquid?(-1) #=> false
liquid?(0) #=> true
liuquid?(99) #=> true
liquid?(100) #=> false
<case文で使う>
範囲オブジェクトはcase文と組み合わせることもできる。
次のコードは年齢に応じて料金を判定するメソッドの実装例。
def charge(age)
case age
# 0歳から5歳までの場合
when 0..5
0
# 6歳から12歳までの場合
when 6..12
300
# 13歳から18歳までの場合
when 13..18
600
# それ以外
else
1000
end
end
charge(3) #=> 0
charge(12) #=> 300
charge(16) #=> 600
charge(25) #=> 1000
<値が連続する配列を作成する>
範囲オブジェクトに対してto_aメソッドを呼び出すと、値が連続する配列を作成することができる。
(1..5).to_a #=> [1, 2, 3, 4, 5]
(1…5).to_a #=> [1, 2, 3, 4]
(‘a’..’e’).to_a #=> [“a”, “b”, “c”, “d”, “e”]
(‘a’…’e’).to_a #=> [“a”, “b”, “c”, “d”]
(‘bad’..’bag’).to_a #=> [“bad”, “”bae”, “baf”, “bag”]
(‘bad’…’bag’).to_a #=> [“bad”, “”bae”, “baf”]
[ ]の中に*と範囲オブジェクトを書いても同じように配列を作ることができる。
*を使って複数の値を配列に展開することをsplatという。
[*1..5] #=> [1, 2, 3, 4, 5]
[*1…5] #=> [1, 2, 3, 4]
<繰り返し処理を行う>
範囲オブジェクトを配列に変換すれば、配列として繰り返し処理を行うことができる。
# 範囲オブジェクトを配列に変換してから繰り返し処理を行う
numbers = (1..4).to_a
sum = 0
numbers.each { |n| sum += n }
sum #=> 10
配列に変換しなくても、範囲オブジェクトに対して直接eachメソッドを呼び出すことも可能。
sum = 0
# 範囲オブジェクトに対して直接eachメソッドを呼び出す。
(1..4).each { |n| sum += n }
sum #=> 10
stepメソッドを呼び出すと、値を増やす間隔を指定できる。
numbers = []
# 1から10まで2つ飛ばして繰り返し処理を行う
(1..10).step(2) { |n| numbers << n }
numbers #=> [1, 3, 5, 7, 9]
Ruby学習メモ ブロックを使う配列のメソッド
<map/collect>
mapメソッド(エイリアスメソッドはcollect)は各要素に対してブロックを評価した結果を新しい配列にして返す。
例えば、次のように配列の各要素を10倍した新しい配列を作るコードがあったとする。
numbers = [1, 2, 3, 4, 5]
new_numbers = []
numbers.each { |n| new_numbers << n * 10 }
new_numbers #=> [10, 20, 30, 40, 50]
mapメソッドを使うとブロックの戻り値が配列の要素となる新しい配列が作成されるため、mapメソッドの戻り値をそのまま新しい変数に入れることができる。
numbers = [1, 2, 3, 4, 5]
# ブロックの戻り値が新しい配列の各要素になる
new_numbers = numbers.map { |n| n * 10 }
new_numbers #=> [10, 20, 30, 40, 50]
空の配列を用意して、他の配列をループ処理した結果を空の配列に詰め込んでいくような処理の大半は、mapメソッドに置き換えることができる。
<select/find_all/reject>
selectメソッド(エイリアスメソッドはfind_all)は各要素に対してブロックを評価し、その戻り値が真の要素を集めた配列を返すメソッド。
偶数の数値だけを集めた配列を新たに作ることができる。
numbers = [1, 2, 3, 4, 5, 6]
new_numbers = numbers.select { |n| n.even? }
new.numbers #=> [2, 4, 6]
rejectメソッドはselectメソッドの反対で、ブロックの戻り値が真になった要素を除外した配列を返す。
言い換えると、ブロックの戻り値が偽である要素を集めるメソッド。
numbers = [1, 2, 3, 4, 5, 6]
non_multiples_of_three = numbers.reject { |n| n % 3 == 0 }
non_multiples_of_three #=> [1, 2, 4, 5]
<find/detect>
findメソッド(エイリアスメソッドはdetect)はブロックの戻り値が真になった最初の要素を返す。
numbers = [1, 2, 3, 4, 5, 6]
even_number = numbers.find { |n| n.even? }
even_number #=> 2
<inject/reduce>
injectメソッド(エイリアスメソッドはreduce)はたたみ込み演算を行うメソッド。
次のコードはeachメソッドを使って1から4までの値を変数sumに加算していくコード。
numbers = [1, 2, 3, 4]
sum = 0
numbers.each { |n| sum+= n }
sum #=> 10
上のコードはinjectメソッドを使用すると次のように書ける。
numbers = [1, 2, 3, 4]
sum = numbers.inject(0) { |result, n| result + n }
sum #=> 10
ブロックの第1引数(result)は初回のみinjectメソッドの引数(0)が入る。2回目以降は前回のブロックの戻り値が入る。
ブロックの戻り値は次の回に引き継がれ、ブロックの第1引数(result)に入る。繰り返し処理が最後まで終わると、ブロックの戻り値がinjectメソッドの戻り値となる。
<&とシンボルを使ってもっと簡潔に書く>
ブロックを使うメソッドは条件によってはかなり簡潔に書くことがきできる。
# このコードは
[‘ruby’, ‘java’, ‘perl’].map { |s| s.upcase } #=> [“RUBY”, “JAVA”, “PERL”]
# こう書き換えられる
[‘ruby’, ‘java’, ‘perl’].map(&:upcase) #=> [“RUBY”, “JAVA”, “PERL”]
# このコードは
[1, 2, 3, 4, 5, 6].select { |n| n.odd? } #=> [1, 3, 5]
# こう書き換えられる
[1, 2, 3, 4, 5, 6].select(&:odd?) #=> [1, 3, 5]
mapメソッドやselectメソッドにブロックを渡す代わりに、&:メソッド名という引数を渡している。
この書き方は次に条件が揃った時に使うことができる。
①ブロック引数が1個だけである。
②ブロックの中で呼び出すメソッドに引数がない。
③ブロックの中では、ブロック引数に対してメソッドを1回呼び出す以外の処理がない。