おふくろさまより愛をこめて

mmmpa ふとしです。誠実なプログラミングを心がけたい。

Rails entries

2018/05/01 13:23:02

一つのアプリケーション開発でも機能を gem に分けて分割統治すると具合がよい

コツは同じリポジトリかローカルパスが通る状態でやること。あと vendor とかにダウンロードする方式にしないこと。 gem 'module_a', path: '../module_a' gem 'module_b', path: '../module_b' rails s でのサーバーへの反映 (つまりブラウザでクリッククリックして動作確認しているような場合) は再起動が必要で

2017/08/18 01:06:01

Rails の ActiveRecord での lock! の細かい話

前プロジェクトでログを眺めていて気づきました。仕組みを考えれば確かにという感じだった。 class User < ApplicationRecord after_initialize -> { logger.info('Instantiate!') } end User.find(1).lock! # User Load (0.2ms) SELECT `use

2016/12/25 15:27:03

Ruby on Rails + webpack-dev-server で Development.

Rails で JavaScript が必要なプライベートプロジェクトでは、ながらく Npm + Watchify + Gulp + Rails を手動起動などしながらすすめていましたが、最近、意を決して Yarn + Webpack + Rails に変更しました。そこで、Rails と JavaScript の接合点も Railsway にのった設定に変えようと思いました。(今までは pub

2016/10/30 22:35:11

siege をラップして多少細かい情報をまとめる gem 書いた。

github.com Usage たとえば Rails 内でこうやる。 re = SiegeSiege.run( time: 20, concurrent: 4, user_agent: false, urls: [ "http://localhost:3002#{students_path}"

2016/10/17 04:23:37

最近 SQL にはまっているので、ついでに Rails というか ActiveRecord で発行された SQL query をカウントする gem を書いた。

Installation gem 'a_r_q_logger' github.com せつめい ActiveRecord::Base サブクラスのインスタンス生成をできるだけ抑えれば、それだけ処理時間が抑えられるのは自明とされています。 そこで、今は、できるだけ少ない queries に抑えることを目的として SQL の練習をしていますので、すぐわかるようにしまし

2016/07/28 06:38:08

Access-Control-Allow-Originが設定されてないWeb APIを叩くために中継サーバー書いた。

大げさなタイトルみがありますがただのRailsです。 github.com うすうす実装なのでさがせばあるんでしょうけど、人が書いたもの使いたくない場合ってあるじゃないですか。 起動 $ TARGET=http://you-want-to-ajax.server.com ALLOW=http://your-local-js.server.com rails s つか

2016/07/26 13:28:10

ActiveAdmin辺りでCircular dependency detected while autoloading constant Fooが出る場合の措置。

Rails 4.2.7、ActiveAdmin 1.0.0.pre4で発生しました。 普通にやってる分には出ないんですけど、下の記事みたいに外からRails.application.require_environment!すると、models関連でCircular dependency detected while autoloading constant Fooが出ます。 mmmp

2016/07/24 16:00:27

Rails開発でリポジトリには入れたくないんだけどローカルではやっておきたいテストがある場合の取りあつかい

自明だったり、すごく重かったり、細かすぎるテストたちがいます。 重いテストは短期的にも長期的にもコストになり、細かすぎるテストは実装変更時のコストが必要以上に高く、よくありません。 しかし、たまにやっときたいんですよというテストがありますので、本体に影響がないようにやっていきます。 Railsのディレクトリの外にもう一層つくる 以下のような構成になりました。 - /

2016/07/24 00:09:38

Authlogicに関するメモ

認証機能再発明するべからずは有名な鉄則ですが、まるで知らないままというのもマズイので実装を読むことでお茶を濁していきたい。 saltやSCryptの運用、persistence_tokenの更新などで比較的安全にいけるのでは。 パスワード salt Authlogic::Random.friendly_token def friendly_token # us

2016/07/20 12:06:33

`Regexp`などActiveRecordでメソッドが用意されていない標準SQLの演算子を清く正しく使う。

清く正しくとは、生SQL文字列を書かない程度の意味です。 下の方の長いやつはRails 4までの話です REGEXPはRails 5もしくはArel 7からmatches_regexpとしてメソッドが用意されました。 Writer.where(Writer.arel_table[:email].matches_regexp('.*@gmail.com')) # SELECT

2016/07/05 02:34:47

レールズにプルリクエストがマージされてハッピーだった

ので、思いつく限りのSNSやブログに書いています。 ここにも書きます。 どれ 以下の記事のやつを作ってる時に「バグかしら?」と思ってモンキーパッチで回避してて、せっかくだからとpull requestを飛ばしてみたら忘れた頃にマージされたという話です。 qiita.com Rails5.0.0がつい先日リリースされましたが、その時には自分でも忘れていて、ほん今日、な

2016/06/15 15:27:21

rails-erdでRails Engineベースのアプリケーション(Spree、Solidusなど)のER図を得る。

たっぷりとしたコードを含むRails Engineは上から読んでいくにはつらいものです。 いくつかのgemに分割されているSpreeのようなアプリケーションを読むにはインストールして起動しつつ、その上で読んでいくのが楽ですが、手がかりがないのはつらい。ということてrails-erdを使います。しかし、 Engine以下のmodelsは読んでくれない という問題があるのでそれに対

2016/05/14 01:20:01

ActionCableで遊んでたらなんかリロード毎につながったりつながらなくなったりすんですけど?って時。

あたらしいもの好きなのでActionCableをいじっています。WebSocketは別に新しくない?おかたいことを言わないで。 ところでこの解決策は推測でしかないんですが、とりあえず解決したので暫定メモ的なアレですが、困ってる人はどうですか。 Redisががんばったまま おそらく開発中に、ブラウザから接続したままでサーバーを再起動したりしてると、適切にConnectionが切断

2016/05/13 20:47:49

ぐぐりんぐしてなんとなく使う、という癖を治すためにとりあえずRails 5.0.0.rc1のドキュメントを入手する。

最初はドキュメントを頭からケツまで読んだほうが良いと思うんですよ。その時使わないポイントも頭に入れておくと、それが使えるタイミングが来たら、あれ、見たことあるぞ?となると思うんです。 歳を取ってくると結構実感するレベルで記憶力が弱ってきて、全部とは言わないまでも、新しいクラスなどを頭からケツまで気合入れて読むタイミングを設けないと駄目なんじゃないかという気がしてるのもあります。 Ra

2016/03/22 00:39:27

質問のしやすいグループウェアとはどんなのなのか〜?

とか考えながらモックをつくってました。動いてる。 おしえてください mmmpa/askable 反応をボタンひとつで返せるようにしたかった ただ知らないだけでも、その反応がわかるようにしたかった、という感じです。 メーリングリストで質問を投げた時の問題点は、知らないから黙っているのか知っているけどめんどくさいから返信していないのか、そもそも読んでいないの

2015/10/03 21:58:20

なにができるか、なにをしてくれているか。「Railsガイド 電子書籍版」全部流し読みした。

サイトでも読めるし電子書籍でも読める。本の体裁になっている方が「全部流し読む」のは楽な印象。 EPUB版をGoogle play bookに突っこんで暇があれば読んでいた。 tatsu-zine.com railsguides.jp 読んだらよさそうなところ すでにRailsを多少業務でやっていってる俺みたいな駆け出しメンズが読めばよさそうなところ。 第14章

2015/07/05 02:17:06

RailsのControllerからSweetAlert呼び出せるやつ書いた。

最終出社を済ませ、母と妹に詳細を知らせ、本格的に無職になりました。 こんな感じで雑に呼び出せるのでroughという名を関してます。 <a href="https://github.com/mmmpa/rough_swal">mmmpa/rough_swal</a>github.com def create User.create!(user_para

2015/06/28 13:16:58

Viewのテンプレート内で下から上に挿入するgem書いた。

Kaizan <a href="https://github.com/mmmpa/kaizan">mmmpa/kaizan</a>github.com 改ざんです。self.output_buffer.gsub!するとCould not concatenate to the buffer because it is not html safe.って怒られたりH

2015/06/27 01:29:01

会社をやめることにしたのでとりあえず引きつづき小物 gem を書いてる。

ActiveRecordSamplooper <a href="https://github.com/mmmpa/active_record_samplooper">mmmpa/active_record_samplooper</a>github.com ActiveRecord#sample したり、アルバムランダム再生みたいに 1 周で 1 回だけしか出て

2015/06/02 14:42:12

Squeel 導入したら ActiveRecord#select で死んだ

User.select(:first_name, :last_name) みたいなことをしておった状態に squeel をいれたら ArgumentError (wrong number of arguments (2 for 0..1)) と言われました。 コードをみたら引数一個しか取らない感じになってる。他はだいたい*argsなのに、なんでselectだけこんな仕打ち

2015/03/03 06:14:25

Rails で mountable なのを作ってる時、test/dummy 以下の FactoryGirl が二重に呼び出されてしまいアレだった。

ネット上で見つけたコードを馬鹿正直にコピペしていたら死んだし俺が悪かったという話です。 いつもの感じで rails plugin new new_plugin --mountable cd new_plugin rails g rspec:install したままではプラグイン用に生成される factories にパスが通ってないので以下のような感じで rails_helpe

2015/02/25 23:14:34

API へのアクセス後にコールバックがいる動作のテスト用にアクセス内容を表示するだけの Rails 用意した。

ギョームおつかれさまです。 <a href="https://github.com/mmmpa/any_receiver">mmmpa/any_receiver</a> 素 これで http://192.168.30.130:3000/access こう返る。 {"path":"access","method":"get"} パラ

2015/02/23 13:29:02

Rails で RESTful な API をつくるときは認証、承認をどうしたらいいの?

認証はまぁともかくとして承認の段で http://example.com/api/sessions/token/resources/show みたいなのが一般的ですみたいなこと言われて「?」となったのが発端で考えてました。許可証からなんか出てくるわけじゃないだろ的なあれで。 こう? Rails では簡単にベーシック認証を処理できるので http://token@ex

2015/02/11 15:44:18

Authlogic の create、save で undefined method `true' と言われて困った

Rails 4.2.0、Authlogic 3.4.2 での話です。 Authlogic の問題ではなく scrypt が 2.0.0 だと死ぬので 1.2.1 にしたら動きます。 gem 'authlogic' gem 'scrypt', '~> 1.2.1' 原因がわからなかったのでひとまず gem 'authlogic', github: 'binarylo

2015/02/08 00:47:10

各 Input の下にエラーメッセージ出すだけの FormBuilder を書いていた

Rails Plugin のつくりかたを学ぶ一環として書いていた。 これが こうなる 仕事で Rails を触りだしてからとにかくフォームをつくる機会が多い。サイト訪問者が使う層はともかくとして、サイト管理画面になるとなんか嫌になるほどフォームをつくる羽目になって半ば死んでいた。 もっと早く Rails Guide をちゃんと読んで FormBuilder

2015/02/05 14:00:29

Rails の FormBuilder をテストしようと思ったら new にわたす template をどうすればいいかわからず困った

view 内の form_for から instantiate_builder を経てこういう形で呼びだされます。 builder.new(object_name, object, self, options) self is 何?かというと view から呼びだされるのでもちろん view ですが、FormBuilder 対象のテストなので view なんてありません。ので用意し

2015/02/03 02:09:26

SASS 記法でマップの書き方がわからなくて困った。

SCSS ではこうですが、SASS では怒られる。 $black: ( name: 'black', light: #666, dark: #000 ) SASS 記法では 1 行でおねがいしますということでした。 $black: (name: 'black', light: #666, dark: #000) ちまたでは SCSS の記事ばか

2015/02/01 16:32:04

Authlogic の Session.create! を失敗したときに Session のインスタンスを例外オブジェクトに持たせたかった。

要は ActiveRecord::RecordInvalid#record のように使いたいんでモンキーパッチで module Authlogic module Session module Existence class SessionInvalidError < ::StandardError def initialize(session)

2015/01/27 13:50:05

途中から attr_encrypted を導入したら配列アクセス演算子でアクセスできなくて困った。

最近はドット演算子で attribute を参照する統一をしているので問題ないのですが、初期に書いたのは配列アクセス演算子 [] を結構使っていて難儀しました。 もともとはworker[:name]つう感じで生で扱われてました。 attr_encrypted :name, key: 'a secret key', attribute: 'name_encrypted' こ

2015/01/19 00:39:33

ActiveModel の errors.messages に入ってるエラーメッセージが、どの validation でひっかかったかテストで知りたい。

という思いがずっと前からあって下記エントリーのような対応をしていました。 <a href="http://mmmpa.hatenablog.com/entry/2014/05/11/%E3%83%86%E3%82%B9%E3%83%88%E3%81%8C%E9%80%9A%E3%82%8B%E3%81%9F%E3%81%B3%E3%81%AB%E3%83%AC%E3%83%83%E3

2015/01/12 23:56:30

Rails の form_for でエラー出たときに、エラーはちゃんとエラーが出た項目の下に出したい。

エラーは各フォームの近くに表示したいけど form_for の中身の記述を増やしたくはないのでカスタムフォームビルダーを作成する。 Rails Guide でやり方読む フォームヘルパー — Rails ガイド <a href="http://railsguides.jp/form_helpers.html#%E3%83%95%E3%82%A9%E3%83%BC%E3%8

2015/01/12 13:48:33

Rails Engine を RSpec でアレしてたら controller spec で No route matches が出まくって困った

rails plugin new --mountable からつくる Rails プラグイン作成を試しています。 自動テストにはいつも RSpec を使っているので使えるように調整して model spec は問題なく終了したのですが、controller spec でひっかかりました。 generate にまかせた spec で module ChatPlug RSpec

2014/12/16 14:13:05

カスタム Validator をつくったら自動的に translate されなかったので困った。

ネット先生いわくこのようにエラーメッセージを追加しなさいとのことだったが、直接 errors に << すると ActiveModel::Errors#normalize_message を通らないのでメッセージが未消化のまま出てくる事態となる。 class StrNumValidator < ActiveModel::EachValidator def valida

2014/11/28 14:42:52

Ruby on Rails の Routes を Controller スペックで使える感じに内部で取得する。

ログイン時、非ログイン時の振り分けなんかは全自動総当たりテストしたいので。 routes = Rails.application.routes.routes.map do |route| path = route.path.spec.to_s.gsub(/\(\.:format\)/, "") params = path.scan(/:([a-zA-Z_]+)/).flatten.

2014/11/05 00:31:20

Capybara で feature から 2 つ以上の scenario を回すと Capybara::Poltergeist::DeadClient で死ぬ

用もないのに Poltergeist などで全ページスクリーンショット撮るのが半ば趣味です。 さて今日も今日とて楽しくフィーチャスペックを書いておりましたところ死にました。 Failure/Error: auth_manager(page, kill: true) Capybara::Poltergeist::DeadClient: PhantomJS client died whi

2014/09/23 21:41:26

validates いじってないのに valid? で false になるようになった

作業をすすめていると突然テストが通らなくなって、valid? が false 返すのはいいけど errors みてもなにも message ないし本当にどうしようかと思いました。save(validate: false) でその場をしのいて、結局あとで一つずつコメントアウトしたりして、これ。 <a href="http://itakeshi.hatenablog.com/entry/

2014/08/15 05:48:11

弊社、アジャイルっぽいことをしたいらしい。

テスト一枚も書かない文化の弊社でそれやると、サイクル毎に臨死体験が楽しめると思う。 おれも頭数で聴衆として参加した Ruby ビジネスフォーラムで、講師 matz さんがアジャイル推ししていたのをきいて思いついてしまったのだろうか。同時に、テストあってこそアジャイルでまわせる、すなわちテスト文化がある Ruby 最高と言っていたのだが(たぶん)、そういうことはおろか弊社の現状もわかっていな

2014/07/15 14:30:20

滅裂というツイッタークライアントをつくりました。

http://m2r2.ore-omae.com/ ツイートの単語を入れかえて文意が変わる感じのやつです。 Twitter の連係保持とかアカウント確認テストの試しように作りました。 ツイートの単語を入れかえて文意が変わる感じのやつです。 が 単語のやつを入れかえてツイートが変わる文意の感じです。 みたいになります。

2014/06/23 00:23:26

Ruby on Rails で Stylus をつかう。あと、nib も。

Stylus は簡潔な記法で CSS をナニできるアレです。HTML コーディングが主だった前職でもウィンド~ズ + Sublime Text で使ってました。いまも使ってますが。 http://learnboost.github.io/stylus/ 最近の Rails では stylus_rails じゃなくて stylus を使います。 gem 'stylus' 忘

2014/06/09 03:04:59

Rails でアクションの再利用してたら render :hoge and return で DoubleRenderError に足つっこんだ。

任意の view を描画してアクションを中断するには render :hoge and return などとするわけですが、これは render がtrueを返すことを期待したandの使用法です。今回は new -> create の流れのなかでエラーを出すために使っていたのですが、エラー表示や hidden の埋め込みのためにrender :newではなくnew()しており

2014/05/23 19:53:21

RSpec 3 にアップデートするにあたっての章が「RSpec による Rails テスト入門」に追加されたらしいので早速ためした。

読むと RSpec 2.99 beta2 を導入すると RSpec 3 でなくなったりする API を使ってたりすると警告を出してくれるらしいので早速ためしました。 うまれてはじめてテスト書き出いてから 1 週間とか 2 週間なので、変更するポイントはほとんどなくて、指示に従ってこういうのを expect(collection_owner).to have(0).errors_on(

2014/05/16 06:58:04

Rails で MeCab と KEN_ALL.CSV などをもちいて住所の抽出を試みた。

http://13.ore-omae.com こんな感じの精度が悪いアレです。 形態素解析(なんて言葉も把握してなかったときですけど)を試みようとして、これあきらかに個人では無理やんとあきらめていたところ MeCab というオープンソース形態素解析エンジンを発見したのでさっくりとコンパイルしてコマンドを叩いたところ、おどろきの性能に文明を感じました。 http://mecab.go

2014/05/14 01:32:01

今日もテストを書いてて Capybara に殺されそうになってる。

コントローラーのテストの章が終わったのでフィーチャテストに進んだのですが、しょっぱなから Capybara 内でおこなった Model#create が visit 先のビューに反映されない事例に遭遇して死にそうになった。 Capybara でもコントローラーもビューも全部 Rails.env == 'test'なのにビューだけからっぽでなにが起こってるかさっぱりわからない。 泣きそ

2014/05/12 02:22:13

テストが通るたびにレッドライト!グリーンライト!ってさけんでるんだけど RSpec でわからないことがある。

Ruby を全面に押し出してる会社に転職してはや半年ほど、Ruby というか Rails 力が足りないので他の職務をこなしておりますが、そればっかりやってもいられないということで最近は空き時間をみて Rails をさわっています。 いちおう慣れてきた感じはするので Ruby と Rails といえばテストだろつうことで「Everyday Rails - RSpecによるRailsテスト入門

2014/05/08 23:47:55

Rails の Rake からツイートさせるようにしました。

http://13.ore-omae.com の追加内容を http://twitter.com/mmmpa にツイートします。 必要な gem は twitter だけなので Gemfile に書いて gem 'twitter' あとは twitter.rake かなにかを用意して引数でツイ~トできるようにする。 namespace :twitter do tas

2014/05/07 19:21:37

定期的に動くなにかを Rails でつくりました。

http://13.ore-omae.com twitter でロムしてる優れ技術者のなかには定期的に動く何かを飼っている人がおり、ワナビーとしてはやはり形から真似しなければなるまいと、とりあえずスクレイパーのたぐいをつくることにしました。 定期実行には Whenever Rails の定期実行には Whenever という gem を使いました。 #config/sch