正規表現で名前付きキャプチャが便利だった

これがあれば何にマッチさせているかわかるじゃん!って感動しました。 正規表現でキャプチャするときに$1で変数格納されますが、この場合何にマッチさせているのかがわかりづらいときがあります。 何より量が増えてくるとしんどいです。 使い方 (?<name>正規表現</name>…

rubyでeach_index_withでindexの値を0以外から始める方法

rubyでeach x indexをしたいパターンが多いです。 そのために、each_with_indexというメソッドがあります。 each_with_index こちらは基本的に初期値が0からになります。 array = %w(foo bar baz) array.each_with_index do |x, index| puts "#{index}番目#{…

ActiveModelでcallbackをする方法

Formオブジェクトを使用していて、まともにActiveModelを使用しました。 ActiveRecordの場合は自動的にcallbackを仕込めるのですが、ActiveModelの場合はどうすればいいのかわからなかったです。 使い方 class WorkForm include ActiveModel::Model define_m…

rails5でautoload問題を解決する

やられましたよ。 rails4 → rails5へのアップデートをしていたのですが、libpathの配下のものが読まれない。 config/application.rb config.autoload_paths += %W(#{config.root}/lib) 問題ないだろ。 そう思っていましたよ。 どうやら、この作業が無効にな…

nodeのメモリー足らない問題をswapで回避する

AWSのt2.microだと、メモリーが1Gです。 webpackerを使用していると、普通にdeployで落ちてしまいます。 FATAL ERROR: JS Allocation failed - process out of memory Aborted こんな感じのエラーが出てにっちもさっちもいかなかったです。 memoryが足らない…

gitのリポジトリの中で、issueのURLを開くコマンドを作成した

git

いちいちgitを開けるのが面倒くさいってパターンです。 #!/usr/bin/env ruby require 'open-uri' url = "https://github.com/foo/bar/issues/#{ARGV.first}" system "open #{url}" ファイル名をbin/issueで登録する。 bin/issue 10 これで開きます。 もう少…

rubyでrakeの外部コマンドが失敗した時のエラーハンドリング

webpackerを使用していて、webpacker installって出ているのに、installは失敗していた。 これはムカつくからpullreq出してやろうと思ったら、すでにあった。 さすがだ。 fail hard when webpacker:install ./bin/yarn fails by sealocal · Pull Request #14…

nvmでnodeをインストールしているのに、deployしたら「/usr/bin/env: node: No such file or directory」が出る場合

なんでだよ! node -v => v7.7.4 deploy→/usr/bin/env: node: No such file or directory 確実にインストールはされている。 ということで、シンボリックリンクを貼りましょう。 sudo ln -s "$(which node)" /usr/bin/node ちなみにdebianのversion cat /etc…

rails5からはcontrollerテスト書くぐらいなら、requestテストを書くのがいいっぽい

controllerテストいらねみたいな流れだったけど、requestテスト書けって話だったのか。 Rails 3 と 4 において、controller spec の assigns は慣用されてきました。 今回の RSpec 3.5 はマイナーリリースであり、私たちは SemVer に準拠する以上、 既存の c…

rails5ではrender methodをいたるところで使えるようになっている

rails5にアップデートするときに変更されていて、手を加えて変更したので、備忘録として書いておきます。 rails4.2時代のrenderのやり方 下記のように、requestを強引に擬似るような形でやっていました。 class Renderer def renderer controller = Applicat…

vueのオブジェクトの並び順について

vue

jsonで値を渡しているのに、並び順が違う!って状態に陥りました。 なんでだ?って思うと、どうもObject.keys()の並び順に整理されるようですね。 オブジェクトを反復処理するとき、順序は Object.keys() の列挙順のキーに基づいており、全ての JavaScript …

mysqlのorder by fieldで指定のID順に並べる

どういった時に使うんだよwwwって思いましたが、使う感じになりました。 select * from icons where id in(4, 5, 6) order by field(id, 5, 4, 6) => mysql> select * from icons where id in(4, 5, 6) order by field(id, 5, 4, 6); +----+----------------…

railsで複合uniqueのvalidationをつけてやる

mysqlとrailsの両方に念のためつけます。 複合uniqueなんて、使うことあるのか?って思っていたけど、必要になりました。 忘れないために書いておきます。 まずは、migrationの書き方からです。 class CreateReactions < ActiveRecord::Migration def change…

es2015の分割代入は、rubyのキーワード引数のイメージ

わかりづれー!ってなっていました。 {}←これ何?って感じで意味不明に陥りやすかったです。 function foo({x, y}) { return x + y } console.log(foo({x: 1, y: 2})); =>3 x, yのvalueが代入されている。 これってrubyのキーワード引数と同じっぽく感じる。…

has_manyのhas_manyのcountで効率よくパフォーマンスを出す

counter_cacheはできるだけ使いたくないんですよ。 無駄なカラムを持ちたくないということで、頑張りました。 対策としては、最初で全てのcountを手にするのが一番いいですね。 countは重たいので、先に何とかして値を入手したい・・・。 今回のサンプルでは…

ES2015のIteratorとGeneratorについて

最近はVue.jsを個人で使用しているので、javascriptについても学んでいます。 ES2015の機能を少しづつ勉強しています。 基礎能力がないと結局開発の仕方がわからないなってのがあるので、勉強がてらに記事を書きます。 Iteratorって何? そもそもIteratorっ…

フックメソッドについて

特定のタイミングで実行されるものです。 意味不明だと思うので、解説します。 included includeではありません、includedです。 なんとなく、見覚えがあったのですが、違いを全く理解していませんでした。 includedメソッドは、includeメソッドによってモジ…

特異メソッドでincludeする方法

何個か方法あるので、少しづつ紹介します。 クラス内でincludeする module Foo def hello 'hello' end end class Bar class << self include Foo end end Bar.hello => "hello" 特定のオブジェクトだけincludeする x = Bar.new class << x include Foo end x…

クラス変数の注意点

クラス変数なんて、めったに使うことなんてないし、railsで使うならclass_attributeがあるんで、普通は必要ないです。 しかし、よくクラス変数やめろ!なんて言われることが多いと思うので、ここでおさらいしておきます。 クラス変数とは そもそもクラス変数…

mysqlの予約語に気をつけた方がいい

やられました...orz 直接sqlをいじることがなかったのですが、いじった時に気付きました。 mysql> show tables; +-----------------------------------+ | Tables_in_foo | +-----------------------------------+ | categories | | comments | | rankings |…

cpuの情報を見る方法(mac/linux)

lscpuでいけるんじゃない?って思っていたのでしたが、macは違いました。 mac system_profiler SPHardwareDataType Hardware Overview: Model Name: MacBook Pro Model Identifier: MacBookPro11,1 Processor Name: Intel Core i5 Processor Speed: 2.4 GHz …

macのmysqlをupdateしたら、Library not loaded: /usr/local/opt/mysql56/lib/libmysqlclient.18.dylibって出るようになった

なんじゃこりゃーってなりました。 なんだ昔のmysqlを見に行ってるの? そんな古い情報見に行かないでくれよ!って感じだと思います。 原因は、gemの情報で古いmysqlの場所を見に行っているのが原因でした。 gem uninstall mysql2 ここで全てのversionを削除…

railsのmysqlでemojiを使う方法

emojiを使おうと思ったら、色々と問題があるようなので、まとめます。 文字コード問題 collation問題 ハハパパ問題(参考) index問題 mysql側の設定 rails側の設定 文字コード問題 まず、emojiはmysqlのutf8では使用できません。 mysqlでemojiを使用するにはu…

クラスメソッドをprivateメソッドにする方法

単純にprivateにするだけはダメです。 class Foo def self.bar puts 'bar' end private def self.baz puts 'baz' end end Foo.baz =>baz という風に実は普通に呼べています。 方法は二種類あります。 self内でprivateを呼ぶ private_class_methodを定義する …

文字列からクラス名にアクセスする方法

constantizeを使用します。 "Topic".constantize => Topic(id: integer, title: string, body: text, category_id: integer, thumbnail_updated_at: datetime, thumbnail_file_size: integer, thumbnail_content_type: string, thumbnail_file_name: string,…

nestしたcontent_tagを書く方法と注意点

nestしたcontent_tagを書く場合です。 concatで連結して書くことができます。 content_tag(:div, class: "c-grid__quotation-image") do concat(image_tag(url)) concat(link_to("出典:#{host_name}", url)) end ただし、こんだけ連結させる場合は、別途ren…

file_fieldに拡張子を制限する方法

今までjs側で処理を行おうとしていました。 普通にhtml属性で設定ができます。 = f.file_field :thumbnail,accept: 'image/jpg,image/jpeg,image/png,image/gif' acceptを使用することで、拡張子が画像系のものしか上げなくできます。 twitterってどうやって…

Redisについて

Redisについてお話ししたいと思います。 Redisとは メモリ上にKVS(Key Value Store)を保存できるようにするソフトウェアです。 インメモリ型データベース メモリ上にデータをすべて持ち、ディスクから取り出すよりも高速処理が可能になる データを永続化する…

capybaraのrpsec実行時にブラウザを切り替えるgemを作成しました

普段はwebkitで十分なのですが、たまにchromeで開きたいって時ありますよね? そんなgemを作成しました。 GitHub - ryosuke-endo/capybara_switch_driver 中身は微妙かもしれないけど、自分で使う分だからいいのかなと思いました。 以上です。

javascriptのprototypeオブジェクトの利点

javascriptのprototypeオブジェクトについてです。 今まで適当にやっていたのですが、少しまとめたいと思います。 メモリの使用量を削減できる メンバーの追加や変更をインスタンスがリアルタイムに認識できる メモリの使用量を削減できる こちらはどういう…

database cleanerの設定について

rspecのテスト実行時にDatabaseCleanerを使用しています。 データベースを毎回キレイな状態にしてくれるやつですね。 これの何がいいかというと、テストデータが固定化されるのと、増えないのでテストの実行が遅くならないということです。 ただし、設定によ…

viewの条件式を減らす

viewにロジックを書きすぎるな!ってことです。 自戒の意味を込めて書きます。 - if area? && action_name == "show" - if citys? = render "foo" - else = render "bar" - else = render "bar" こういうのがあったとします。 viewにこんだけロジックが積ま…

javascriptとrubyのクロージャーについて

クロージャーは「ローカル変数を参照する関数」です。 このいいところは、変数を一時保存できるところだと思ってます。 function closure() { let x = 0; return function(){ return ++x; } } c = closure() c() =>1 c() =>2 何回押したとか、初回だけとかの…

javascriptの引数について

javascriptの引数についてです。 引数のチェックをjavascriptでは行ってくれません。 ES2015からは改善されているようです。 引数のチェックはしない function showName(name) { console.log(name); } showName('foo'); =>foo showName('foo', 'bar'); =>foo…

javascriptのスコープについて

javascriptのスコープについてです。 曖昧な知識のままだったので、まとめます。 ブロックスコープ ブロックでのスコープという概念がありません。 { var i = 5; } console.log(i); =>5 このように平気でアクセスできてしまいます。 rubyだとブロックの中の…

javascriptの関数の書き方について

最近少しずつ、javascriptについても学習をしています。 当然ながら、rubyとは動きが違うのですが、違う部分を意識するためにも、ここに記載しておきます。 関数の作り方 function命令で定義する Functionコンストラクターで作成する 関数リテラルで作成する…

nginxのパフォーマンスを向上させてみる

前回のエントリーでパフォーマンスの測定ができるようになりました。 今回はnginxのパフォーマンス向上に努めます。 なお、サイトの事前調査では最大リクエスト数の処理数が70なので、限界までリクエストするようにします。 最初に設定前のファイルを見てみ…

Apache Benchでパフォーマンス測定する

サイト作成していて、負荷テストにはまっていました。 便利なパフォーマンス測定ができるものがありますね。 パフォーマンス測定 Apache Bench こちらを使用すれば、サイトに負荷をかけてレスポンスの向上するのかが確かめることができます。 ab -n 100 -c 1…

factory girlでnamespaceのあるモデルのfactoryを生成する

ActsAsTaggableOnのデータを生成したかったのですが、namespaceがあるために生成できませんでした。 そんな時の技です。 FactoryGirl.define do factory :tag, class: ActsAsTaggableOn::Tag do |f| f.name '脈あり' end end 公式にもっといいのがありました…

factory girlのtraitで関連するモデルを作成するのを選択制にする

関連するモデルを作成する場合は、associationを使います。 ただ、必ずしも毎回そのモデルが必要になるのか?と言われると疑問が浮かびます。 なので、選択制にする方が自由度が高いと考えています。 taritは選択制にできるので、使い方を書きます。 trait f…

routeのresourcesのnestした部分をnamespaceにする方法

nestしたresourcesだと、namespaceでcontrollerとviewのファイル置き場が別々になってしまって嫌です。 下のやつです。 resources :foo do resouces : bar end 結果 foo_bar_index GET /foo/:foo_id/bar(.:format) bar#index POST /foo/:foo_id/bar(.:format…

railsの複数形・単数系がうまくいかない場合の対処

どう見てもこれは変換がおかしいだろってことがありました。 'loves'.singularize => "lofe" 普通にloveを返すべきところじゃん・・・ このおかげでpathがnew_lofe_pathなんてなったりしました。 これはどうにかしたいと思ったら、イレギュラー登録をするこ…

respond_to?でメソッドがあるかを確認する

タイトルの通りです。 respond_toの書き方 class Foo def foo p 'foo' end private def private_foo p 'private foo' end end x = Foo.new x.respond_to?(:foo) => true x.respond_to?(:foo, true) => true x.respond_to?(:private_foo) => false x.respond_…

shared_examples_forに引数を渡して処理をさらにまとめる

ここ最近はリファクタリングやより短い書き方を考えてます。 一行でもコードから文字が減るのは嬉しい。 そんなわけで、カラム名が違うだけで、内容同じじゃん・・・って場合のテストの書き方です。 前提条件 カラムの:login, :passwordは半角英数字のみで文…

返ってくる値を真偽値に変換する

例えば、matchを使用して、正しいかどうかの確認だけをしたいと思います。 REG_EXP = /foo/ x = 'foo' x.match(REG_EXP) => #<MatchData "foo"> x.match('bar') => nil 通常だと判定した結果が返ってきます。 これを真偽値に変換します。 !!(x.match(REG_EXP)) => true !!(x.m</matchdata>…

rspecでprivate methodを呼び出したい時の方法

privateメソッドを実行したいけど、できないよ!って場合の方法です。 sendを使えばできます。 class Foo private def foo puts 'hoge' end end x = Foo.new x.send(:foo) hoge => nil x.foo NoMethodError: private method `foo' called for #<Foo:0x007fa279135010> こうなるので</foo:0x007fa279135010>…

オブジェクトのインスタンス変数名とメソッド一覧の取得方法

タイトルの通りです。 オブジェクトのインスタンス変数名とメソッド一覧の取得方法を探っていきます。 まずはインスタンス変数名からです。 インスタンス変数名の取得方法 instance_variables class Foo def initialize @foo = 1 @bar = 2 end end x = Foo.n…

rubyのthreadについて

スレッドは同じプロセス上でメモリを共有しつつ、処理を並列に実行することができます。 スレッドを用いることで、単独で時間がかかる処理を早くすることができる可能性があります。 スレッドの生成 スレッドを作成し、処理を実行するには、Thread.fork/Thre…

eval族

evalについてです。 |メソッド名|動作| |Kernel.#eval|selfが呼び出された式を評価する| |Module#class_eval|レシーバのクラスをselfとして式を評価する| |Module#module_eval|レシーバのモジュールをselfとして式を評価する| |Basic#Object#instace_eval|レ…

mysqlでcsvエクスポートする

mysqlのcsv出力です。 SELECT * FROM テーブル名 INTO OUTFILE 'hoge.csv' FIELDS TERMINATED BY ',' ←区切り文字の指定 OPTIONALLY ENCLOSED BY '"'; ←項目間の囲う文字 以上です。