kikeda1104's blog

備忘録・技術に関することを書いています。(webエンジニア)

Ruby

shellコマンドのエスケープ[Ruby]

外部コマンドで、ファイルパスを渡す際にエスケープが必要になり探していたら見つけた。 前提 ruby 2.2.10 rails 4.2.x.x コマンドまたは引数の文字列をエスケープ require 'shellwords' file_name = 'tmp/file_name1(1).txt' system "ls -lShellwords.es…

Redshiftへのデータ流し込み(Batch)

Batchを作ることになったので、そちらを書いていきます。warningを解消する際にすでに公開していたバッチですが、コードを改善したのでまた載せていきます。 サンプルコードは参考までにしてください。 前提 Rails(4.2.x) Ruby(2.2.10) RedShift S3 検討・方…

Rubyからシェルコマンドを実行する(Kernel.#system ..etc)

調べていたので、書いていきます。 前提 Ruby 2.2.10 外部コマンドの呼び出し 実装で利用したは、#system, #`を利用していて、コマンドを実行して返却値、ステータスは無視するケースと返却値を利用するケースで分けて使っています。 Kernel.#system 引数を…

mysql([Warning] Using a password on the command line interface can be insecure.)

コマンドファイルを作っている際に出てきたので、警告を表示しないようにする。 前提 mysql: 5.7.18 ruby 2.2.10 Rails(secret.ymlに依存していて、環境変数で書かれていない) 解決方法 confファイルを利用して、client情報を渡すことにする。 confファイル…

sidekiq + redisの構築(Rails 4系) 2

前回の続きで、sidekiqのデプロイについて書いていきます。 前提環境 rails 4.x ruby 2.2.10 capistrano 3.5 capistranoを利用していたので、capistrano/sidekiqをGemに追加します。 unicorn, pumaなどの設定は無視していきます。 実装 # Gemfile group :dev…

Rails 5.0からRails 5.1へのアップデート(1/?)

こんにちは。時間の合間に作成しているサービスのRailsを5.0から5.1へアップデートしていまして その内容を書いています。rails upgrade guideが、まだ作成中で、issueを読んで対応していました。 テスト, jsの移行は、まだ終わっていなくて順次移行中です。…

FormObject実装(2回目)

前回からの引き続き。viewとcontrollerの実装を進めていきます。 前回まで FormObject実装(1回目) - kikeda1104's blog controllerの実装 # controller/sample_forms_controller.rb class SampleFormsController < ApplicationController def new @offer_for…

FormObject実装(1回目)

form_objectの実装を進める際に、gem virtusを使って実装を進めたので、何度かに分けて書いていきます。 環境 Cent 7.x rails 5.0.0.1 ruby 2.3.3 gemの導入 Gemfileに追加します。 # Gemfile ... gem 'virtus' ... $ bundle install app/forms app/formsの…

ActiveRecord::Base.establishによる複数回切り替え時の不具合

掲題の件、テスト書いていることで発見できまして、APIリファレンスを読むと割と合点はいきましたが 間違えなどあれば、指摘いただきたいです。 環境 - rails 5.0.0.1(puma) - ruby 2.3.1 ActiveRecord::Base.establishを何度も読み出すことで、queryを発行…

Strong parameterで受け取れなかったparameter

Strong Parameterを使っていて、取れないケースあたってしまい、後回しにしたので、気になっている。 Workaroundや、Hackな対応をする予定なので、明日また書き直す。 { hoge: { id: '1', name: '2', age: '29', '1': { ... }, '2': { ... } } } class HogeC…

Module名を切り出してclass_nameを取り出す。

Qiitaに同じ内容の記事が丁度あって悲しい気分になったが、コードを書いていたので記録として残しておく。 本ブログは、備忘録という面もありますので、読まれている方は気分を害さないでいただきたいです。 動的にSQLのテーブル、カラムの別名を定義したく…

Factory Methodの利用(Ruby)

Rubyによるデザインパターンという本を借りたまま、持っているのですが、たまたま実務でFactory Methodパターンを利用するのに 良い機会が得られたので、本を思い出しながら設計/実装を進めました。周りを気にせず、実装に集中できるのは楽しいですね。 前…

フィーチャーテスト(Rails + Rspec + Capybara)

追記: コメントをいただきまして、一部内容を更新しています。 今朝、rspec 3.5リリースの記事*1をrspecの公式HPから確認した所 Rails 5 では、 assigns と assert_template が soft deprecated になりました。 という内容が書いてあり、今までcontroller sp…

認証機能のユニットテスト(controller)

今日は、自作のアプリでユニットテストを作っていたので、このあたりを書いていきたいと思います。 自作アプリでは認証のgemは使っていないんですが、記事のためにsorceryを使って書いていきます。 gemの導入手順は省いています。 準備 # Gemfile gem 'sorce…

whereの指定方法

ActiveRecordを利用していて、どうやってwhereを書くのかわからないことがありますし 良く聞かれたりもしますので、書き方について、まとめておきます。 where ActiveRecordの条件を記述する際に利用します。 model # app/models/user.rb class User < Appli…

ActiveRecord::Relation#orのworkaround

先日書いた記事の付け足しになりますね。orを利用して検索ロジックを書いていましたが mergeや、whereを利用することで構造に不一致になるケースがあり、HACK,WORKAROUNDで対処しました。 原因はなんとなくイメージできているんですが、詳しい方いましたら、…

Rubyのモジュール

コードを整理する際に、classではなく、moduleで整理したいと思う場面がありました。 Railsで書いていることもあり、ActiveSupport::Concernにまとめる形にします、 moduleクラスに機能を混ぜ合わせることで複数のクラスで機能を共有する(Mix-in)という機能…

constraintsの利用について

後輩にvimの折り畳み開閉のショートカットキーを聞かれてて、忘れてたのに落ち込んだり、 参加したセミナーでテストコードに関する有益な話を聞けてほっこりしてます。 コミュ力って重要。 Railsのroutes.rbで、ルーティングを無条件で利用すると、public下…

friendly idを利用したURI設計

プロジェクトでSEO対策と数値を含めずにURIを設計するため、friendly_idを採用してURIの再設計をしました。 railsではURIにmodelの主キーを含める形の設計が主になりますが、数値では分かりづらくなります。(resourceでは作成されませんが) それほど複雑な仕…

Rspecでseeds.rbをリセット時に読み込む。

プロジェクトにrspecとfactory girlのgemを追加して seeds.rbを読み込んでから、毎回テストを起動したかったのでこのあたりをまとめておく。 環境 Mac OS rails new済み rspecとfactory girlの導入 まずは、Gemfileにrspec_railsとfactory_girl_railsを追加…

gem unicornの起動・定義・再起動

こんにちは。kikedaです。 毎回忘れるので、備忘録代わりに書いておきます unicorn コマンド 起動 railsのrootディレクトリで実行する bundle exec unicorn_rails -c config/unicorn.rb -E development -D 停止 railsのrootディレクトリで実行する kill -QUI…

rmagickのインストール(Cent OS 6.5)

こんにちは。kikeda1104です。 rmagickのインストールで、必要なライブラリが足りずにコンパイルエラーになっていたので、 調べて対応しました。 環境 Cent OS(6.5) 必要なlibのインストール $ yum -y install libjpeg-devel libpng-devel $ yum -y install …

ActiveRecordを利用する(Ruby)

kikeda1104です。 スクレピングした内容をDBに保存する際になどに、ActiveRecordを利用することで簡易に操作することができるので、利用してみました。 ActiveRecord Railsの標準の添付されており、MVCのM(odel)の概念を実現しているライブラリです。 Activ…

capybara-webkitのインストール

こんにちは。kikeda1104です。 nokogiriと利用して、スクレイピングをしようと思いましたが、jsによるrenderが発生しているサイトだったので、gem capybaraとcapybara-webkitのインストールをします。インストール最中につまづきがあったので、備忘録として…

nokogiriのインストール

こんにちは。睡眠のリズムを崩しているkikeda1104です。 とはいえ、眠い眠いと思いながら作業することがないので快適に作業を進められてます。 環境 Mac OS yosemite homebrew nokogiriのインストール 事前準備 $ brew update $ brew upgrade $ brew install…

module, class(Ruby)

こんにちは。kikeda1104です。 ファイル別にコードを切り出して、必要なモジュールやクラスでひとまとめに呼び出すのは、 割とgithubなどで公開されているコードでは一般的だと思います。 自分の頭の整理もかねて、moduleとclassの知識の整理とやりたいこと…

コードの見直し(Ruby)

kikeda1104です。自宅の周りで騒音がひどくいらついて切れましたヽ(`Д´#)ノ ムキー!!。 近所の人が自分の職業を知っているのが、「プログラマ」だと知られているのがなぜですし。 「ゾンビ脳」とかふざけたこと言われていることもあるので、良い加減ここ出て行…

Gemのテンプレート作成(Ruby)

こんにちは。サービスで利用するAPIを使うライブラリを開発しているのですが、Gemしておいたほうが保守しやすそうだったので こちらを進めています。Gemを開発する上でのテンプレートの作成方法について、記事を書いておきたいと思います。 Gemのテンプレー…

Rubyのevalの利用例

割とRubyだと動的にメソッドを定義することで、evalを利用することがあります。 gem Faradayでは、structクラスと併用することで使われています。 ただし、evalを利用する事は、非常に可読性が落ちたりや、デバックがしにくくなることから、とにかく 批判を…

class << self( Ruby )

豆知識。 class << self class << self ... endに囲まれた宣言をクラスメソッドを定義することができます。 class << self def output_message puts "メッセージ" end end 以上。 るびま読むと参考になりますねぇ。 参考 Rubyist Magazine - Ruby 初級者のた…