猫の魔法

主にruby系の技術メモを記載

SlackTsuribariというgemを作った

SlackTsuribariというSlackのIncoming Webhookを使う為のラッパーgemを作りました。 目的 自分の勉強用(Github Actionとか使いたかった) SlackのIncoming Webhook ラッパーのgemの代表格であるslack-notifierが長らく更新されずにいたので、メンテ状態にある…

Array#lengthと引数・ブロックなしArray#countの違い

自分はArrayで使える#lengthと#countの違いを生まれてこの方意識した事がなかったのですが、配列の長さを数えるだけであれば、lengthの方がcountより早いという話を聞いたので、自分なりに根拠を調べて見ました。 調査 そもそも両者のドキュメントを比べてみ…

Array#include?の速度

rubyを書いているとよくArray#include? を使う事が多いのですが、これのパフォーマンスが気になったの調査して見ました。 パフォーマンスの調査としては最悪のケースを考えたいので、要素が引っかからない場合(線形探索と仮定した場合、Arrayのすべての要素…

railsの起動プロセスを追う その4

はじめに railsの起動までを見ていこうその4ということで、今回は rails new で生成される config.ru から見ていこうと思います。 以下の「railsの起動プロセスを追う」の部分に各回へのリンクがあります。 rails調査系まとめ - 猫の魔法 ※この起動プロセス…

railsの起動プロセスを追う その3

はじめに また間が空いてしまいましたが、 railsの起動までを見ていこう第3段ということで、今回は rails/all.rb から見ていこうと思います。 以下の「railsの起動プロセスを追う」の部分に各回へのリンクがあります。 rails調査系まとめ - 猫の魔法 ※今回書…

rails調査系まとめ

railsの起動プロセスを追う nekomaho.hatenablog.jp nekomaho.hatenablog.jp nekomaho.hatenablog.jp nekomaho.hatenablog.jp

railsの起動プロセスを追う その2

はじめに だいぶ間が空いてしまいましたが、 railsの起動までを見ていこう第2段ということで、今回はserver_command.rb のperformから見ていこうと思います。 以下の「railsの起動プロセスを追う」の部分に各回へのリンクがあります。 rails調査系まとめ - …

ruby本体をコンパイルしてみる

久々の更新です。 今日は、rubyの本体のコードをちゃんとローカルに持ってきてコンパイル出来る状態にしてみました。 (本当は別の目的があったんですが、すんなりコンパイルが通ったのでやり方だけメモしておこうという算段。。。) 基本はGithubのruby/ruby…

railsの起動プロセスを追う その1

はじめに 運良くruby/rails を使うweb系企業に転職して気がつけばもう1年。 色々あったけど、やっぱり私はrubyが好きです(by キキ) しばらくブログを放置していましたが、せっかくインプットしたことをアウトプットしないのは勿体無いなぁと思ったので、 今…

rubyソースコードリーディング 1日目

特に理由はないが、読める所からrubyのソースを読もうと思う。 パット見途中で挫折しそうだが、何も無しに何処まで読めるか試してみるのもありかなと。 とりあえずはv2_5_0_rc1のmain.cから int main(int argc, char **argv) { #ifdef RUBY_DEBUG_ENV ruby_s…

binding.pry チートシート

binding.pry使ってデバックを行う時のチートシートが欲しかったので自分で作ることにした。随時更新。 チートシート pry関連リンク rails以外 GitHub - pry/pry: An IRB alternative and runtime developer console GitHub - pry/pry-doc: Provide MRI Core …

brewコマンドをrakeタスクの中から呼ぶ方法

Rakefileを使ってbrewをコマンドラインから叩いて実行するスクリプトを作っていたのだが、エラーが出て上手く行かなかった。 ネットを結構探したが、解決策がなかなか見つからなかったのでここに顛末を残しておく。 経緯 Rakefileを作って、その中からshでbr…

今日の学び 2017/10/17

だいぶブログを休んでいたが、やっと生活が落ち着いて来たので学んだ事があったら書き留めて行こうと思う。 空白期間にあった話は、気が向けば今度記事にしようと思う。 とりあえず平日はrubyとvim関連で個人的にメモって置いた方が良さそうなことを記載して…

gsubの謎

Codewarsでよく分からない回答があったので、自分なりに調べてみた。 問題はカード番号のマスキングのように下4桁以外の文字なり数字を#でマスキングするという物で、 自分は以下のような回答で提出した(色々褒められた物ではないが。。。) def maskify(cc)…

プログラミング能力を鍛える手段

今日は毛色を変えて、自分が使っているプログラミング能力を鍛える方法を紹介して見る 自分の場合、普段プログラムを組まないので、出来るだけ組む時間を取りたいと思っている。 だからと言って、何かアプリケーションを作るとなると、環境設定や設計に時間…

[個人的メモ]Webを支える技術(その1)

公私共々忙し過ぎて、久々の更新。 少なくとも週1更新位のペースは維持したいが、どうなるやら… 少し前に「Webを支える技術」を買って読んだ。 普段何気なく使っているHTTPやHTMLと言ったWebの技術を、 特定のプログラム言語ではなく、その技術にフォーカス…

再々考:classとそれが読み込んでいるmoduleの一覧を表示する方法(bugfix)

nekomaho.hatenablog.jp 前に上記の記事を書いたが、改めて見直して見た所、新メソッドと旧メソッドの比較が全く意味の無い物となっている事が分かった。 ※記事のアップ時間が夜中の2時な事を差し引いてもちょっと酷いと思う。 コードを再掲するので、モノ好…

railsアプリケーションを作った

しばらくぶりの更新。 仕事の忙しさとアプリケーション作成に時間を取られて、随分ご無沙汰になってしまった。 今後は今まで通り、こっちに割く時間も取ろうと思う。 とりあえず作っていたrailsアプリケーションがある程度公開出来る物になったので、このブ…

再考:classとそれが読み込んでいるmoduleの一覧を表示する方法

※この記事の最後のプログラムはバグがあります。正しい物は下記の物を参照して下さい。 再々考:classとそれが読み込んでいるmoduleの一覧を表示する方法(bugfix) - 猫の魔法 今日、Module#ancestorsという インスタンスメソッドを目にしたのだが、このメソ…

is_a?についてのメモ

Highlineのソースを読んでいたら以下の部分でちょっと考えてしまった。 if template_or_question.is_a? Question template_or_question else Question.new(template_or_question, answer_type, &details) end 悩んだのはtemplate_or_question.is_a? Question…

deviseのメールアドレスバリデーション

最近deviseを使う事があったのだが、メールアドレスのバリデーションがどうなっているのか気になっったので調べてみた。 devise/devise_test.rb at master · plataformatec/devise · GitHub メールアドレスのバリデーションテストは上記で行っている。 で、…

has_many throughの苦悩

railsのhas_many throughの使い方が分からなかったという話。 モデルの関連付けでhas_manyは分かりやすい。1対多のモデルは1側にhas_manyをつければいい。 問題はhas_many throughでこれが良く分からない。多対多の時につけるというが多対多の場合、リレーシ…

個人的メモ:Rails AntiPatterns(21):最後

CHAPTER10 Building for Failure 発生した障害は素早く復旧される事と、黙って失敗しない事が大事 AntiPattern: Continual Catastrophe 前段の処理が失敗しているのにも関わらず、それをキャッチ出来ずに後続処理が動いてしまうのはよくない。 Solution: Fai…

個人的メモ:Rails AntiPatterns(20)

AntiPattern: Wet Validations DBによってはvalidationで指定された制約をサポートしていない場合がある。その場合、DB上で発生する不整合データを検知出来ない可能性がある。 Solution: Eschew Constraints in the Database ★適切なgemを使うことで上記を回…

個人的メモ:Rails AntiPatterns(19)

Solution: Never Use External Code in a Migration migrationをする際にDB上のデータを一緒に変更する事はよくある事だが、upメソッド内にrubyでその手順を直接書くべきではない 理由はパフォーマンスと、DBから見た外部依存性がrails側にできてしまう為で…

個人的メモ:Rails AntiPatterns(18)

Chapter 9 Databases railsはORMマッパーによって、DBの事を意識せずに済むように設計されているが、それでも気にしなければいけない点はある AntiPattern: Messy Migrations railsはmigrationによってDBへ直接変更を加えなくてもよくなっているが、時間が立…

個人的メモ:Rails AntiPatterns(17)

Solution: Move Processing into Background Jobs 処理時間がwebでの応答に不適切なくらい掛かる場合はcronやキューイングといった。バックグラウンドJobの仕組みを検討した方がいい cronの場合スクリプトを別に作ってそれを動かす。 例えば、テーブルのカウ…

個人的メモ:Rails AntiPatterns(16)

忙し過ぎて時間が空いてしまった。 CHAPTER 8 Scaling and Deploying AntiPattern: Painful Performance 単純なパフォーマンスの問題を防ぐ為の事例を紹介する。 Solution: Don’t Do in Ruby What You Can Do in SQL RubyでSQLで出来る事をやらせないように…

個人的メモ:Rails AntiPatterns(15)

CHAPTER 8 Scaling and Deploying AntiPattern: Sluggish SQL Solution: Reassess Your Domain Model 高度に正規化されたテーブルはテーブル間の結合によってパフォーマンスの問題を起こしやすい。 単純に結合させるのではなく必要な要素をrails側で取得する…

個人的メモ:Rails AntiPatterns(14)

CHAPTER 8 Scaling and Deploying AntiPattern: Sluggish SQL パフォーマンス最もネックになるのはDB。indexの貼り方と副問い合わせを使った方がいいシチュエーション、ドメインモデルを使った方がいいシチュエーションを考える。 Solution: Add Indexes 主…