tusbasaのブログ

業務や勉強中に調べたことを自分用にメモするブログ

2020-01-01から1年間の記事一覧

【DB】正規化

RDBMSでは違うテーブルに同じ値を持たないような設計にする。 違うテーブルに同じ値を持つ設計だとデータの整合性が取れなくなる可能性がある。 特に異常系が発生した場合に処理が大変になる。

【rails】sort_byは遅い

1万件を超えるようなデータをソートする際はsort_byだと速度が低下するので、カラムに使用する値を持たせてindexを使って処理する。

【rails】benchmark測定

benchmarkモジュールをrequireしない方法 ブロックの中の処理のbenchmarkをlogに出力してくれる <% benchmark("render index") do %> ... <% end %> 参考 https://qiita.com/akishin/items/cf74559875cf475bbf66

【ruby】created_atのクラス

ActiveSupport::TimeWithZoneクラスがcreated_atのクラスに使われている。 Timeクラスとほとんど同じで、完全な互換性がある。 参考 https://qiita.com/jnchito/items/cae89ee43c30f5d6fa2c#activesupporttimewithzone%E3%82%AF%E3%83%A9%E3%82%B9

【cron】

# crontab型の設定「分」「時」「日」「月」「曜日」 # 毎月27日〜31日まで0:00に実行 every '0 0 27-31 * * ' do command 'x' end 参考 https://morizyun.github.io/blog/whenever-gem-rails-ruby-capistrano/

【SQL】explain テーブル結合の順番について

同じ構造のクエリでもjoinによって結合する時の駆動表がどのテーブルになるかは実際に入る値によって異なる。 mysqlのオプティマイザによって判断される。 必ずしも最初に書いたテーブルが駆動表になり結合するかどうかはわからない。

【SQL】explain

JOINする場合は、駆動表が一番最初に表示される。 参考 https://free-engineer.life/mysql-explain/

【SQL】inner join 書き方

select * from 表A, 表B where 表A.列1 = 表B.列2 and 表A.列3 = 値 と select * from 表A inner join 表B on 表A.列1 = 表B.列2 where 表A.列3 = 値 は同じ inner joinは両方のテーブルにあるレコードしか反映されない。 一方にしかないレコードは削除され…

【rails】default scope

指定したモデルの全てのクエリで使用されのでメンテナンス性が悪くなる。 default scopeでorderを使用しており、それに気づかずデバッグに時間がかかった。 参考 https://qiita.com/shierote/items/7ecbd0c099ddc3855067 https://qiita.com/qsona/items/2ca5…

【Mysql】SQLモードについて

MySQLは独自にSQL文を解釈しており、その設定をSQL-modeで行える。 参考 https://qiita.com/kumamo-n/items/d9a4fa3c95c8226204d8 https://www.wakuwakubank.com/posts/414-mysql-sqlmode/ https://qiita.com/hidetoshi-tsubaki/items/046d16ab46d954c55a40

【ruby】&:メソッド名の技法

&(アンパサンド)に対してシンボルオブジェクトを渡している。(&はブロックをProcオブジェクトに変換する) シンボルオブジェクトをprocオブジェクトに変換してメソッドとして呼ぶ実装がされている。 x = [1,2,3,4] x.map(&:to_i) #=> ["1","2","3","4"] 参…

【rspec】デバッグについて

system specででエラーが発生した場合はエラーがコントローラー内で起きている可能性があるので、使われているアクションの最後でbinding.pryで止めてみる。 正しく動く場合はコントローラー内ではエラーが発生していないことがわかる。

【rspec】capybara

pageの中身はpage.bodyで確認することができる。 参考 http://xengineer.hatenablog.com/entry/2014/10/15/rspec_%2B_capybara%E3%81%AEpage%E3%81%AE%E4%B8%AD%E8%BA%AB

【vscode】文字サイズ変更 mac

command + _→ 文字サイズ小さくなる command + shift + +→ 文字サイズ大きくなる

【rails】composed_of

値オブジェクト(データベースに紐づかない、一意性のないオブジェクト)の属性値(attr_accessorで定義した属性)とデータベースに紐づくActiveRecordのオブジェクトの属性値(カラム)をマッピングする。 参考 https://qiita.com/okuramasafumi/items/16bcda8f63…

【Ruby】select reject

selectは各要素をブロックで評価し、trueになる要素を抽出する。 rejectはfalseになる要素を抽出する。 array = [ 1, 2, 3, 4, 5 ] selected = array.select { |i| i > 3 } p selected #=> [ 4, 5 ] array = [ 1, 2, 3, 4, 5 ] rejected = array.reject { |i…

【Ruby】マイナスのインデックスで最後の文字や要素を指定する

number = [ 0, 1, 2, 3, 4 ] number[-1] # => 4 参考 https://qiita.com/jnchito/items/dedb3b889ab226933ccf

【Ruby】privateメソッド

privateメソッドはそのクラスを継承した他のクラスでも呼び出すことができる。 参考 https://qiita.com/jnchito/items/dedb3b889ab226933ccf#comments

【Ruby】配列の連結

*変数名で配列の中で展開される。変数名だけだと配列は展開されず2次元配列になる。 number = [ 1, 2, 3 ] array = [ 0, *number, 4 ] # =>[ 0, 1, 2, 3, 4 ] 参考 https://qiita.com/jnchito/items/dedb3b889ab226933ccf#comments

【rspec】system spec ボタンクリック

capybaraでリンクやボタンをクリックする場合クラスやリンクの文字列だけでは重複する場合がある。 以下のようにクラスとリンクの文字列で指定できる。 #view <a class="page-link test_click" href="#">2</a> #rspec find('.test_click', :text => 2).click 参考 https://qiita.com/fkagami/items/d9ac438…

【rails】マニフェストファイル

app/assets/javascripts/application.jsやapp/assets/stylesheets/application.cssのこと。 sproketsの機能を利用してアッセトのファイルを一つにまとめる為の設定ファイル。

chromeでパラメータを確認する

Networkタブ→Record network logをオンにする→Doc→ファイル名→header 参考 https://www.tsukimi.net/chrome-developer-tools_post.html

【JQuery】ajax context

ajaxのコールバック関数の中(then以下)で普通にthisを使うと戻り値が使われてしまう。 contextオプションを使うとコールバック関数の中で使うthisに任意の値を設定できる。 配列やハッシュでも設定できる。this.[キー名]でバリューを参照できる。 $.ajax({ u…

【JQuery】textareaの入力後の値を取得する

.text()ではセットした初期値の値を取得してしまう。 .val()では入力後の値を取得できる。

【DB】REDOファイル

データベースを更新した際に、その変更が格納されるファイル。 データファイルはコミットのたびに更新されるワケではなく、キャッシュ領域にデータを保持して定期的にデータファイルを更新している。(定期的な更新をチェックポイントという。) キャッシュ…

【DB】レプリケーションについて

片方向/準同期レプリケーション マスタの更新時SQLのバイナリファイルが作成され、それをもとにスレーブ(データベースのコピー)のデータを更新する。 この際準同期型はスレーブがバイナリファイルを受信し終えるまで処理を確約せずクライアントを待たせる。 …

【SQL】explain row

explainで表示されるrowの項目は、各行の積が検索されるレコード数を表している。

【SQL】join

違うサーバーに保存されているテーブルはjoinで結合することができない為予めテーブル設計をしっかり考える必要がある。

【DB】covering index index read only

インデックス部分とデータ部分は独立して存在する。 データ領域を読まずインデックス領域内で処理が完結するような処理のことをcovering indexまたはindex read onlyという。 例えば、price < 1000 のような処理をする際にpriceにインデックスが貼っている場…

【rails】ベンチマークを測定する

標準ライブラリをrequireして使用する require 'benchmark' result = Benchmark.realtime do # 処理 end logger.debug "#{result}" 参考 https://qiita.com/yakiimo23/items/7293c7606c1d59501d89