正規表現で〜から〜までのパターン

こういうやつです。 宮藤官九郎(第1話、第2話、最終話)で名前と後ろを分けたい場合。 (?<name>.[^((]*)(?<supplement>.*)? 否定を間に挟んで、それ以外までにする。 これがミソ。 このパターン多いと思うし、覚えておこ。</supplement></name>

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

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

rubyでeach_with_indexで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 中身は微妙かもしれないけど、自分で使う分だからいいのかなと思いました。 以上です。