Circle CIのcacheは先頭一致したkeyのcacheが使われる

たとえば以下の設定になっていたとします - restore_cache: keys: - gem-cache-v1-{{ arch }}-{{ .Branch }}-{{ checksum "Gemfile.lock" }} - gem-cache-v1-{{ arch }}-{{ .Branch }} - gem-cache-v1 https://circleci.com/docs/2.0/caching/#restoring-cac…

特定の例外をSentryに送らないようにする方法

Sentryに特定の例外を送りたくない場合、プログラムを修正すれば済みますがそれが深淵な理由でできないOR面倒な場合、プログラム側でSentryに送らない例外を指定できます。 もちろんSentry側でignoreにできますが、たくさんの箇所で発生したりアプリケーショ…

config gemを使って環境変数も読み込む

config gemには、ENVオブジェクトから値を読み込むためのuse_envオプションがあります。 しかし単にuse_envをtrueにしても、ちゃんと環境変数が読み込まれません(env_separatorがデフォルトだと.になっているため) なので以下のようにenv_separatorに_を指定…

GAS(Google Apps Script)で秒まで指定して実行する

GAS

GAS(Google Apps Script)のトリガータイプに特定の時刻を指定しても分までしか指定できません。 また仮に12:00に指定しても12:00から12:01の間のどこかで処理が実行されるので、ちょうどこの秒に処理を実行したいというのが通常はできません。 しかしUtiliti…

AWS Elastic Beanstalkのデプロイメントポリシーについて

AWS Elastic Beanstalkのデプロイメントポリシー(デプロイ方法の種類)はここに書かれていますが、機械翻訳なのか品質が酷く大変分かりにくいので、メモしておきます。 バッチとは デプロイメントポリシーを説明する前に、バッチについて説明しておく。 Elast…

最近買ってとても良かったもの

最近買ってとても良かったもの紹介します。 特に人感センサー付きライトはみんな買って損がないと思います。 人感センサー付き ライトソケット 人感センサー付き E26口金 延長アダプタ PIR 誘導赤外線モーションセンサーバルブアダプタLEDランプベース プラ…

Kubernetes勉強会第6回 〜Kubernetesの実行と管理、CustomResourceDefinitions(CRD)、Container Runtime Interface(CRI)〜

Kubernetes in Action作者: Marko Luksa出版社/メーカー: Manning Pubns Co発売日: 2018/01/20メディア: ペーパーバックこの商品を含むブログを見る 「Kubernetes in Action」を読んで学んだ結果を社内で共有しました。 その第6回の内容です。 Kubernetesの…

Kubernetes勉強会第5回 〜node affinity, pod affinity、Init containers、lifecycle hooks〜

Kubernetes in Action作者: Marko Luksa出版社/メーカー: Manning Pubns Co発売日: 2018/01/20メディア: ペーパーバックこの商品を含むブログを見る 「Kubernetes in Action」を読んで学んだ結果を社内で共有しました。 その第5回の内容です。 node affinity…

システムリニューアルで重要視していること

自分は今の会社に入社してから、PHPで書かれたシステムをRubyで書かれたシステムへリニューアルするプロジェクトをやっています。 PHPで書かれたシステムが122万行くらいあって、DBのテーブルも300以上あるのでそう簡単にはリニューアルはできません。 また…

Kubernetes勉強会第4回 〜cAdvisor、Heapster、podとnodeのauto scaling、taintsとtolerations〜

Kubernetes in Action作者: Marko Luksa出版社/メーカー: Manning Pubns Co発売日: 2018/01/20メディア: ペーパーバックこの商品を含むブログを見る 「Kubernetes in Action」を読んで学んだ結果を社内で共有しました。 その第4回の内容です。 cAdvisor kube…

Kubernetes勉強会第3回 〜Resource RequestとResource Limit、pod QoSクラス、LimitRangeリソース、ResourceQuotaリソース〜

Kubernetes in Action作者: Marko Luksa出版社/メーカー: Manning Publications発売日: 2018/01/20メディア: ペーパーバックこの商品を含むブログを見る 「Kubernetes in Action」を読んで学んだ結果を社内で共有しました。 その第3回の内容です。 podの使用…

Kubernetes勉強会第2回 〜RBAC、セキュリティを高める方法、PodSecurityPolicy、NetworkPolicy〜

Kubernetes in Action作者: Marko Luksa出版社/メーカー: Manning Pubns Co発売日: 2018/01/20メディア: ペーパーバックこの商品を含むブログを見る 「Kubernetes in Action」を読んで学んだ結果を社内で共有しました。 その第2回の内容です。 RBAC Kubernet…

Kubernetes勉強会第1回 〜Secrets、StatefulSet、DaemonSet、API server への接続方法〜

Kubernetes in Action作者: Marko Luksa出版社/メーカー: Manning Pubns Co発売日: 2018/01/20メディア: ペーパーバックこの商品を含むブログを見る 「Kubernetes in Action」を読んで学んだ結果を社内で共有しました。 その第1回の内容です。 Secrets Confi…

Kubernetes in Actionの個人的なまとめ

Kubernetes in Action作者: Marko Luksa出版社/メーカー: Manning Publications発売日: 2018/01/20メディア: ペーパーバックこの商品を含むブログを見る 追記 2018/07/11 以下にまとめ直したのでこちらをご参照下さい。以下のリンク先のほうが詳しいです。 K…

一年間本気で英語勉強をした話

こちらはポエムです。実際の英語勉強方法については、11ヶ月間でTOEICスコアを300点から835点に上げた英語学習法 をご覧ください。 学年ビリのアホが1年半でTOEICスコアを300点から840点に上げた英語勉強法の話の記事を見たのをきっかけにして今年の初めから…

TOEICに有効な勉強法、テクニック

勉強時 スピーカーをあえて質の悪いものを使ってリスニング力を鍛える TOEIC試験ではリスニングがある意味関門です。 まず試験会場の教室が広いと音が反響して聞こえづらいです。もし後ろの席になってしまった場合、音量チェック時に聞き取りづらいかどうか…

短時間勉強会のススメ

最近社内で短時間勉強会を行っている。 特徴としては、 1時間〜1時間半くらいで終わる 参加者、主催者が特に事前準備をしない ことがあげられる。 たとえば"他事業部のサービスのソースコードを読む会"をやったときは、 30分間他事業部のサービスのソースコ…

ネストしたHashからOpenStructを作る

HashからOpenStructを作成する場合、 pry(main)> OpenStruct.new({hoge: 1}) => #<OpenStruct hoge=1> pry(main)> OpenStruct.new({hoge: 1}).hoge => 1 のようにすればよい。 しかしネストしたHashだと以下のようになる。 pry(main)> OpenStruct.new({hoge: {fuga: 2}}) => #<OpenStruct hoge={:fuga=>2}</openstruct></openstruct>…

FactoryGirlで Hashを定義

FactoryGirlでARではなくhashのモックデータを返してほしいときがある。 そういう場合は以下のようにすればよい。 FactoryGirl.define do factory :dog, class: Hash do id 1 name 'john' color 'black' initialize_with { attributes } end end initialize_…

Capybaraで非表示要素を対象とする

Capybaraで非表示(style="display: none;")になっている要素を検索対象にできないか調べたら、 visibleオプションが使えることが分かった。 例えば、以下のような感じだ find("#hoeg", visible: false) have_selector('.hoge', visible: false) have_css('#h…

Slimのスタイルガイド

テンプレートエンジンのSlimのスタイルガイドはないものかと探していたら見つけた。 https://github.com/idmean/slim-style-guide Slimはシンプルなのでそんなにどう書くか決めなくても大丈夫なんだけど、いくつかは迷うときがある。 例えば属性の定義は以下…

API BlueprintについてLTをした

エンジニア飲み会があったので、ちょうど調べていたAPI BlueprintについてLTをした。 スライド↓ API Blueprintとその周辺ツール API Blueprintは読み書きしやすいのが特徴だ。 JSON SchemaはAPIドキュメントとしてはそのままだと読みにくいし、Swaggerはなん…

rack-attack gemでユーザごとにアクセス数を数える

http://shepherdmaster.hateblo.jp/entry/2016/08/21/000115 でも紹介しましたが、 https://github.com/kickstarter/rack-attack という便利なgemがあります。 n秒間にn回アクセスされたらアクセスを弾くThrottles機能を使う場合、 IP単位でアクセス数を数え…

rack-attack gemで保存先にRedisを指定する

https://github.com/kickstarter/rack-attack という便利なgemがあります。 特定のアクセスのみを許可するSafelists機能や、特定のアクセスを弾くBlocklist機能や n秒間にn回アクセスされたらアクセスを弾くThrottles機能、特定のアクセスを記録するTracks機…

factory_girlでmethodという名前のフィールドをもっているモデルを定義しようとするとエラーになる

method 'GET' みたいに定義するとエラーになる。 その場合は、 add_attribute :method, 'GET' のようにadd_attribute を使うと回避できる。 またmethod以外にもエラーになる名前があって、以下がそのリスト。 __send__ __id__ nil? send object_id extend in…

朝早く出社するようになった

先週くらいから朝8時くらいに出社するようになった。 きっかけとなったのは以下の記事だ。http://kitak.hatenablog.jp/entry/2016/07/04/182403 なんで朝早く出社しようと思い立ったかというと、 ・今の会社は10時出社で昼が12時からなので午前が2時間しかな…

Railsで生のSQLにテーブル名やカラム名を動的に埋め込みたい場合はquoteメソッドを使おう

Railsでアプリケーション開発をしていると、深淵なる理由で生のSQLにテーブル名やカラム名を動的に埋め込みたいケースが出てくる。 その場合安全だと分かっていてもサニタイズしないでSQLに文字列を埋め込むのは気が引ける。 そういう場合は、 ActiveRecord:…

Railsで未実行のmigrationを調べたい時はrake db:migrate:statusを使うとよい

本番環境でrake db:migrateを実行する場合、はたしてどのmigrationが実行されるのか確認したくなる場合がある。 その場合、rake db:migrate:statusを実行すると未実行のmigrationが表示されて便利だ。 たとえば、以下のような場合downとなっているのが未実行…

RSpec Mocksで既存メソッドを上書く

RSpecで既存のとあるメソッドが呼びだされたら特定の値を返したい場合、 allow(model).to receive(:foo).and_return(14) みたいにant_returnすればよい。これは有名。 しかし深淵なる理由でメソッドを上書きたい場合がでてくる。テスト中に特定の値を返すの…

Railsで複数DBのmigration

大規模なRailsアプリケーションだったり、旧来のシステムをRailsに置き換えたりしてると、どうしても複数DBを扱いたくなってくる。 その場合は例えば、以下のようなlib/tasks/database_foo.rakeを作成します。 namespace :foo do desc 'Configure the variab…