コピペコードで快適生活

明日使えるソースを自分のために

RSpecで例外チェック

これまでbegin-rescueで愚直にやってたので、もう少しシュッとした書き方を。 require 'spec_helper' describe TokenService do describe :validate! do context '改ざんしたトークンを渡す' do # 処理を定義 subject { token = TokenService.build_token To…

RSpecのmockの使い方

APIクライアントを外から注入できるようにして、 モックを渡してローカル環境単体でテストできようにした例。 require 'spec_helper' class DummyService # # APIクライアントを外から指定できるようにして # 単体でテストできるようにする # def self.get_i…

RSpecのletの使い方 - before&インスタンス変数使うやり方との比較

ずっとbefore&インスタンス変数でやってたので、let使うやり方をメモしておく。 require 'spec_helper' describe 'beforeとletの違いについて' do context 'インスタンス変数を使う場合' do before do @account = create(:account) end it 'アカウントが存…

ポートフォワードメモ

ローカルフォワードするとき 書き方をよく忘れているのでメモ。 ssh xx-user@app-stg-batch -L 8080:stg.internal-api.local:80 -N

.ssh/configの設定メモ

よくやる書き方をコメント付きでメモ。 # # ssh接続をタイムアウトしないための設定 # - 15秒ごとに応答確認 # - 10回応答がなかったら切断する # ServerAliveInterval 15 ServerAliveCountMax 10 # # Hostにはワイルドカードを指定できる # 設定を共有化し…

RubyのワンライナーHTTPサーバ

さくっとアクセス確認したいときなどに。 ruby -rwebrick -e 'WEBrick::HTTPServer.new(:DocumentRoot => "./", :Port => 80).start'

ES2015のコードをBabel+Jestでテストする

まだ試したことがなかったので、やり方をメモ。 ライブラリのインストール # bableのインストール npm install --save-dev @babel/core @babel/cli @babel/preset-env # jestのインストール # babel-jestも一緒にインストールされる npm install --save-dev …

シェルでヒアドキュメントを使う

そういればやり方知らなかったのでメモ。 # これで標準出力できる。 cat << EOS hoge fuga piyo EOS # ヒアドキュメント内で変数展開できる。 # 標準出力になるので変数に代入したいときはバッククォート使う。 params=`cat << EOS { "login_id": "${LOGIN_I…

Javascriptのオブジェクト指向について

Javascript書くときに雰囲気でオブジェクト指向してたので復習。 function構文使う // 関数オブジェクトはnew演算子でインスタンスを作ることができる。 // インスタンスは、this.xxxで定義したプロパティにアクセスできる。 const Human = function(name){ …

db:migrateで巨大なテーブルへadd_column+default値設定をする

Rails + PostgreSQL環境での話。 数千万行あるような巨大なテーブルに対して、add_column+default設定をまとめて設定すると、サービスを止めてしまうほどに長時間テーブルロックかかってしまう。AccessExclusiveLockなのでSELECTも通らない。 原因は、ALTER_…

Grape+Rspec環境でAPIをテストする

既存RailsアプリにRspecを入れる - コピペコードで快適生活 の続き。まず、JSONのテストを簡単にするgemを入れる。 gem 'json_expressions' テストコードはこんな感じで書ける。 require 'rails_helper' require 'json_expressions/rspec' describe "GET api…

capistranoでデプロイされているブランチのコミットハッシュを確認する

cat ${PATH}/repo/refs/heads/${BRANCH}

Nodejsでのバイナリの取り扱い

よくわかっていなかったので整理した。 Bufferオブジェクト Node.jsではバイナリデータはBufferオブジェクトで扱う。 ArrayBuffer 実際のメモリに格納されたバイナリデータを配列で表現したもの。読み込み専用。 Uint8Array バイナリデータを8bitごとに区切…

AWS NLBとコネクションプールについて

AWS

NLBの後ろに1台足してもそっちに全然クエリが流れてこなかった。 間違っているかもしれないけど、多分こういうことじゃないかな。 コネクションプールについて 接続確立は負荷を伴うので、一度確立した接続を維持して、その中でクエリ発行することで負荷を軽…

シェルスクリプトで対話的に選択肢を選ばせる

よく忘れるのでメモしておく。 # # 入力値チェック/セット # echo 'CloudFrontログを抽出します。' echo '対象ドメインを番号で指定してください' echo ' 1) a.example.com 2) b.example.com 3) c.example.com ' read num case ${num} in 1) DOMAIN='a.examp…

PostgreSQLでプロセスとロック状況を確認する

## 実行中のSQLを確認する。 SELECT * FROM pg_stat_activity; ## 実行中のSQLを確認する ## スロークエリとか主に見る分だけ SELECT pid, query_start, substr(query, 0, 80) AS query FROM pg_stat_activity WHERE state='active' ORDER BY query_start; #…

Imagemagickコマンドメモ

## 黒塗り / 中央寄せ / リサイズせず正方形に整える convert -background black -gravity center -extent 960x960 tamanegi.png _tamanegi.png ## 白色を透過に変える(transparent) / 白から5%くらいずれていても透過させる(fuzz) convert input.png -fuzz …

sidekiqをGracefulShutdownする

# >= 5.0.0 kill -TSTP [worker_pid] # < 5.0.0 kill -USR1 [worker_pid] # すると、 # 該当のworkerにキューが入らなくなる。 # psコマンドでみたときに stopping がつく。 sidekiq 4.2.10 app_name [0 of 8 busy] stopping # busyが0になったら、-TERM送っ…

goenv環境でdepを使うメモ

Go

QuickStart まずはこれでgoenvをインストールする。 http://kinosuke.hatenablog.jp/entry/2019/04/11/104837 # depのインストール # ※GOPATH以下にインストールされる go get -u github.com/golang/dep/cmd/dep # goenv環境でやるとdepコマンドのパスが通ら…

RspecでSQLやRailsのログを出力したい

こんな感じで # spec/rails_helper.rb # 略 Rails.logger = Logger.new(STDOUT) # Rails.loggerを出す ActiveRecord::Base.logger = Logger.new(STDOUT) # SQLログ出す RSpec.configure do |config| # 略 end ※STDOUTは組み込み変数 STDOUT.puts "hogehoge" …

GoModulesを使ってパッケージ管理する

Go

QuickStartメモ # プロジェクトディレクトリを掘る mkdir -p github.com/kinosuke01/gin-tutorial cd github.com/kinosuke01/gin-tutorial/ # 初期化する → go.modというパッケージリストを保持するファイルができる go mod init github.com/kinosuke01/gin-…

aws-cliで複数のプロファイル設定を持つ

AWS

複数のAWSアカウントを扱うことになったので、aws-cliのプロファイルの使い方をメモしておく。 # 設定やプロファイル一覧を見る cat ~/.aws/config cat ~/.aws/credentials # デフォルトの設定をする aws configure AWS Access Key ID [None]: xxx AWS Secre…

Goことはじめ(並列処理)

Go

http://gihyo.jp/dev/feature/01/go_4beginners/0005?page=1 より学んだことメモ。 package main import ( "fmt" "log" "net/http" "sync" ) func main() { wait := new(sync.WaitGroup) urls := []string{ "https://www.example.com", "https://www.example…

Goことはじめ(net/httpパッケージ)

Go

http://gihyo.jp/dev/feature/01/go_4beginners/0004?page=3 より学んだことメモ。 hello worldを返すだけのhttpサーバ package main import ( "fmt" "net/http" ) // // http.ResponseWriterがレスポンスデータ // *http.Requestはリクエストデータ // func…

SELECT文の評価順序メモ

たまに「どうだったっけ?」と忘れてしまう時があるので。 https://qiita.com/suzukito/items/edcd00e680186f2930a8 よりメモ FROM ON JOIN WHERE GROUP BY HAVING SELECT DISTINCT ORDER BY TOP(LIMIT)

xmllintメモ

# 妥当性検証 xmllint --schema feed.xsd --noout feed.xml # 整形 xmllint --format feed.xml # インデントスペース4文字で整形 XMLLINT_INDENT=" " xmllint --format feed.xml

Goことはじめ(ファイルのRead/Write)

Go

http://gihyo.jp/dev/feature/01/go_4beginners/0004?page=2 より学んだことメモ package main import ( "fmt" "log" "os" ) // // ファイルの書き込み // func FileWriteFunc() { fmt.Println("ファイルの書き込み --------- ") // ファイルを生成 file, er…

Goことはじめ(JSONの取り扱い)

Go

http://gihyo.jp/dev/feature/01/go_4beginners/0004 より学んだことメモ package main import ( "fmt" "log" "encoding/json" ) // // 構造体にタグをつけることでJSON変換時の // ルールを定義することができる // 何も指定しない場合はpublicなフィールド…

goenvインストールメモ

Go

# インストール $ git clone https://github.com/syndbg/goenv.git ~/.goenv # ~/.bash_profile に追記 export GOENV_ROOT="$HOME/.goenv" export PATH="$GOENV_ROOT/bin:$PATH" eval "$(goenv init -)" # 反映 source ~/.bash_profile # 使えるバージョン確…

Goことはじめ3

Go

第3章 型システム―型を用いた安全なプログラミング:はじめてのGo―シンプルな言語仕様,型システム,並行処理|gihyo.jp … 技術評論社 より学んだことメモ。 package main import ( "fmt" ) // // 型の拡張 // 同じ型でも違う意味を持つもの(同じintでもIDを…