コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

Tips

Rails5でenumの文字列ではなく、実態値が取得したい場合は {{enumの名前}}_before_type_cast

昔はできたが今はできない系 環境 $ bundle exec rails -v Rails 5.2.1 例 以下のようなenumがあるとする class User < ActiveRecord::Base enum sex: { not_known:0, male: 1, female: 2, not_applicable: 9 } #...(後略).... こんなときに『男性のときは1…

WebMockでパラメータによって成功時のリクエストと失敗時のレスポンスのモックを分ける

前回の応用編。 環境 webmock (3.4.2) 実例 想定する用件 "https://example.com/hogehoge" というURLのに { "id": 100 } のようなJSONを作り、idが100だったら成功するが、0を指定すると500エラーで落ちる。みたいなAPIを想定した場合 実際の設定 以下のよう…

WebMockでリクエストの値そのものも見たいときはwithに内容を指定する

WebMock入ってる環境でrspecを実行すると勝手に出てくるサンプル例に出てくるけど紹介 環境 webmock (3.4.2) 書き方 通常モックをさせる場合以下の感じで書くと思います。 stub_request(:post,"https://example.com/post_endpoint") .to_return(status: 200,…

Railsでそのままparamをhashにしたいときは一回permit!する

小ネタ。 環境 $ bundle exec rails -v Rails 5.2.1 事例 paramsはそのままだと ActionController::Parameters なのでhashにまつわるクラスがつかえなかったりする # binding.pryなどした例 params # => <ActionController::Parameters {"contents"=>{"title"=>"hoge", "body"=>"huga"}, "controller"=>"</actioncontroller::parameters>…

nginxでどうしてもアンダースコアを使うheaderを使う場合はunderscores_in_headersという設定をonにする

表題の通りシリーズ。 前提 前に記事に書いたとおり、nginxなどがアンダースコアを含むheaderがあると自動的に間引かれる WEBアプリケーションへのHTTPヘッダにアンダースコアを使うと到達前に弾かれることがある - コード日進月歩 だがいろいろなルールによ…

Rspecにて対象のクラスを明示的にちゃんと書いている場合はdescribed_classを使うと便利

あ、こんな書き方あるんだという感じのメモ。 環境 rspec (3.7.0) 書き方 RSpec.describe User do let(:u) {described_class.new} end と書くと RSpec.describe User do let(:u) {User.new} end と同義になる 参考リンク 【RSpec】described_classの小さなサ…

JSONをさっと整形するときに便利なサイトJSONLint

よく使うサイトなので単純なオススメ的な話。 サイト JSONLint - The JSON Validator 使い方 見えやすい形に成形してくれる また、JSON的におかしいときにも指摘してくれるので便利 一応、外部サイトなので漏らしてはいけないものは貼らないように…

Web広告用語の頭にCがつく用語をざっと調べてみた

紛らわしいCから始まる略語シリーズの意味メモ Cost Per XXXX系 ここでいうCostとは払う側(広告を出す側)においてのコストの話。そのためページやアプリで表示する側はもらう側にあたる。 「コスト」を言い換えて「単価」という読み方をするとイメージがつ…

ndenvだとバージョンを追加するたびにyarnを毎度インストールしないといけないのでhookでやる

便利なプラグインがあるので紹介メモ 環境 $ ndenv -v ndenv 0.4.0-4-ga339097 やり方 ndenv-yarn-installという便利なものがあるので、それを使う。 まずはcloneして、ndenvの管理下のディレクトリに格納する $ git clone https://github.com/pine/ndenv-ya…

PlantUMLでER図を書く

Web開発からスタートするとあまり触ることのないUML。それを使ってER図を書く 今回の記事の端末環境 macOS Mojave ver 10.14.1 homebrew導入済み $ brew --version Homebrew 1.8.4 Homebrew/homebrew-core (git revision c1ab; last commit 2018-11-30) 準備…

ActvieSupportのend_of_**はミリ秒まで設定される

普段は to_i してエポック秒比較しているのに、Time同士でもまぁいっかーとか思ったら降り掛かった厄災系メモ 環境 rails (5.2.0) 事象 end_of_** (end_of_dayやend_of_month)を使うと、対象の切り替わる手前の時刻を引き出してくれるが、その内容は小数点以…

InteliJ IDEにファイルの部分コミットの機能が追加されていた

昨日の記事を書いているときに、SourceTreeみたいな部分的にステージに上げてコミットの機能がついたので紹介メモ 環境 RubyMine 2018.3 ※機能自体は2018.1 からあるみたい スクショ 変更箇所にチェックがつけられるので… チェックを外すと更新対象から外せ…

InteliJ系IDEの2018.3版にはGithubに直接PullRequestを作る機能がある

Githubに繋げなくともPRができる便利機能ができたので紹介 環境 今回試したのはRubyMine2018.3 やり方 変更したいブランチをつくる IDEだけでやりたい場合は右下にGitのメニューがあるのでそれを操作して作る コミットする Version Controlのタブを押して、…

exec $SHELL -l でシェルが再読込されるしくみ

よくシェルの再読込で exec $SHELL -l と紹介されるものの原理を把握できてなかったので調べたメモ 環境 $ help GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17) 原理 exec : 「現行のジョブに置き換えてコマンドを続行する」 $SHELL : 起動中…

今行ったコミットを打ち消すのは git reset —soft HEAD^

ただただよくやり方を忘れるのでメモ 適用できるケース 間違ってコミットしてしまった 変更はそのまま戻ってきてほしい 戻したことをログに残したくない まだpushはしておらずローカルでのcommitしかしてない コマンド git reset —soft HEAD^ 意味 git reset…

Google日本語入力で :bow: を出したいときは「ごめんなさい」で変換すると出る

「えもじ」から連打するの無理ゲーだと思っていたので、備忘録としてのメモ 環境 Google日本語入力のバージョンは以下 2.24.3250.1 変換ワード ビールとかケーキとかわかりやすいのを除き、使いそうでわからないやつを 絵文字 Slack上などでの表現 変換ワー…

都道府県のenumを保つ場合はJIS X 0401:1973 都道府県コードを使うと良い

そういや正式名称なんなんだろうっていうところでメモ 規格名 JIS X 0401:1973 都道府県コード 実データ 01:北海道 02:青森県 03:岩手県 04:宮城県 05:秋田県 06:山形県 07:福島県 08:茨城県 09:栃木県 10:群馬県 11:埼玉県 12:千葉県 13:東京…

Rubyの文字列は * をつかって掛け算のように書くことで繰り返し生成ができるが、注意が必要

あ、そんなこともできるんだというトリビア感と同時に普通にバグが滑り込みそうと思ったのでメモ 環境 $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16] 出典 文字列の内容を times 回だけ繰り返した新しい文字列を作成して返します…

踏み台サーバを経由する場合の ssh conigファイルの書き方

いつもやり方と文法を忘れるのでメモ やり方 Host {{踏み台のサーバのホスト名 / IPアドレス}} User {{SSHで入る際のユーザ名}} IdentityFile {{踏み台サーバの鍵}} Host {{踏み台から見た入りたいサーバのホスト名 / IPアドレス}} User {{入りたいサーバの…

ダミーやサンプル例示でつかうURLはexample.comを使うといい

いつも sampple.com とか test.com とかを間違って使っちゃうので備忘として 出典 The Internet Assigned Numbers Authority (IANA) also currently has the following second level domain names reserved which can be used as examples. example.comexamp…

変数には1度だけ書き込み、オブジェクトはできるだけ生成後に触れる部分を最小限にする。

スコープを狭くしよう、というコラムです。 変数には1度だけ書き込むほうがいい かのリーダブルコードに以下のような記述がある 本章では「生きている」変数が多いとコードが理解しにくくなることを説明した。でももっと理解し難いのは、変数が絶えず変更さ…

cssのfont-size 100%を最上段のhtmlタグに対してセットするとブラウザの種類や状態によって変わってくれる

あー、そうやって相対値をはじき出すほうほうもあるんだ。というメモ 情報の出元 パーセンテージ指定でフォントサイズを指定しておくと、ブラウザのデフォルトのフォントサイズ(通常は 16px = 12pt)や、ユーザが設定したフォントサイズが正しく反映されて…

OpenAPI3.0やswagger用のymlやjsonをInteliJ系IDEで編集するときはSenyaEditorを入れるとプレビューが楽

OpenAPIとかSwaggerをInteliJで書くにはコレが便利!!みたいに勉強会で見かけたものの具体的なプラグイン名がわからなかったので紹介とメモ 公式HP&入れ方 InteliJ用のプラグインだけど公式HPがある、しかもわかりやすいgif動画付き senya.io 例 入れるとTo…

Time.newは31日が存在しない月に31日を指定しても、勝手に繰り上がる

親切だけど、知らないとビビる感じなのでメモ 環境 $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16] 事象 TIme.newで Time.new(2018,6,31) などをしてもエラーにならず勝手に 2018/7/1 相当の情報が返却される 例 Time.new(2019,1,…

ridgepoleでDBを操作するrspecをするとコケるときに見直す設定

そんなこともあったねと新しくセットアップしてたらおきたので備忘 環境 rails (5.2.0) 原因 差分を見てmigrationをかけてくれる機構がridgepoleと噛み合わず起こる現象。 rails_spec.rbにデフォルトで以下の記述あるのでコメントアウトしてあげる ActiveRec…

BEMとMindBEMdingの命名規則の違い

BEMを元にした考え方がMindBEMdingなんですが、地味に命名規則というかModifireの使い方が違うのでメモ 比較元 BEM Quick start / Methodology / BEM MindBEMding MindBEMding – getting your head ’round BEM syntax – CSS Wizardry – CSS Architecture, We…

バックグラウンドで動かしているdockerコンテナを確認して止める

手順を忘れるのでメモ 環境 $ docker -v Docker version 18.03.1-ce, build 9ee9f40 やり方 1.消したいもののIDを確認する $ docker ps そうすると動いているもの一覧が出てくる $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e0598e6…

anyenvのrbenvで最新のrubyを使えるようにする

rbenvって入れてから後のrubyのバージョンに関してはrbenvをアップデートしないといけないので、そのやり方 やり方 rbenvを最新にする $ cd ~/.anyenv/envs/rbenv $ git pull origin master ruby-buildもアップデートする $ cd ./plugins/ruby-build/ $ git …

Rubyで二次元以上の配列もしくはハッシュの値を取るとき、要素数などが不明確な場合、digを使うとスムーズに取れる

知ってそうで知らないシリーズメモ 環境 $ ruby -v ruby 2.3.7p456 (2018-03-28 revision 63024) [universal.x86_64-darwin17] 例 2次元以上のHashから値を取ろうとした場合、1つ目のキー指定時に対象のものがないと2つ目以降が取れない。 # サンプル配列 ha…

Rubyでクラス名のはじめに::(コロンを2つ)をつけるとそのクラスの絶対的な位置表現をすることができる

RailsのActiveRecordのクラス名と同名のModule作ったときに誤動作するけど、どういう原理なのかというメモ 環境 $ ruby -v ruby 2.3.3p222 (2016-11-21 revision 56859) [x86_64-darwin16] 要約 :: から始まる場合は一番上位のレベルを指すため、module内な…