MogLog

日記 兼 備忘録

aws-sdk-s3 for Rubyを使ってみた

今更感があるが、Rubyのaws-sdk-s3 gemを使ってS3と戯れた記録を残す。 事前準備 Gemとしては aws-sdk-s3 だけ使えれば良いので、これをGemfileに書く。 # ./Gemfile source "https://rubygems.org" git_source(:github) {|repo_name| "https://github.com/#…

Rails6で導入されたinsert_all、insert_all!、upsert_allを使ってみる

環境 insert_all, insert_all! upsert_all その他のメモ Rails6にて insert_all, insert_all!, upsert_all という一括作成・更新の機能が導入された。 railsguides.jp これらのメソッドを、公式のAPIドキュメントを読みつつ手元の環境で実際に使ってみた記録…

【Ruby】rescueした例外のmessageを上書きしてre-raiseする

rescueした例外のmessageを上書きしてre-raiseしたい場合、Exception#exception を使うとスッキリ書ける。 https://docs.ruby-lang.org/ja/latest/method/Exception/i/exception.html 引数を指定しない場合は self を返します。 引数を指定した場合 自身のコ…

『雰囲気で使わずきちんと理解する!整理してOAuth2.0を使うためのチュートリアルガイド』がわかりやすくてオススメ

最近読んで良かった技術本『雰囲気で使わずきちんと理解する!整理してOAuth2.0を使うためのチュートリアルガイド』の紹介をしたい。 雰囲気で使わずきちんと理解する!整理してOAuth2.0を使うためのチュートリアルガイド (技術の泉シリーズ(NextPublishing…

現場で使えるRSpecパターン集 for Rails App

はじめに 検証環境、ライブラリ 基本方針 Request spec ステータスコードが xxx であること レスポンスボディに xxx が含まれていること データが新規作成されていること データが更新されていること データが削除されていること リダイレクトされること フ…

ActiveSupport::Concernが裏でやっていること

ActiveSupport::Concern を extend したモジュールは以下の機能が使えるようになる。 class_methods do .. end ブロックに定義したメソッドをクラスメソッドとして、include する側のクラスに取り込む included do .. end ブロックに定義した処理を include …

Rails の Flash の機能はどのように実現されているか

環境 事前準備 Flash は Rails 内部でどのように管理されているか 実際に動かして確認する Flash はどのようにして「直後のリクエスト」でだけ参照できるようにしているか 事象の確認 (1) Flashをセットするリクエスト(再掲) (2) Flashを参照するリクエス…

ecs-deployを使ったAmazon ECSへのデプロイの裏側

前提 全体的な流れ 現在のECSタスク定義を取得する 現在のECSタスク定義をベースに、新しいタスク定義を作成する 新しく作成したタスク定義をAWS上に登録する 新タスク定義を使うよう、ECSを更新をする デプロイの最終確認をする まとめ ecs-deploy というデ…

if-then-elseを使うかガード節を使うかの判断基準

最初に結論から 一方が正常な振る舞い、もう一方は特殊な振る舞いと考えられる場合はガード節を使う 双方とも同等に正常な振る舞いと考えられる場合は、if-then-else構文を使う 詳細 ガード節の有効性 プログラムを書いていると、様々な条件が考えられ、それ…

RubyのProcは `#call` 以外でも実行できる

Procオブジェクトは #call を使って実行することが多いと思う。 fn = Proc.new { |v| puts v } fn.call("Hello, world!") # => "Hello, world!" しかし、次のように [] を使っても実行できるのだ。 fn = Proc.new { |v| puts v } fn["Hello, world!"] # => "…

VSCodeでマウスを使わずにパネルサイズを調整する

自分は左側にエディタ、右側にターミナルという配置で作業をすることが多いのだけれど、作業中にパネルのサイズを調整したくなることがよくある。 左にエディタ、右にターミナルの図 このサイズの調整をマウスを使わずに行いたい!VSCodeにそういった機能は…

gRPC × Rubyのチュートリアルをカスタムしてやってみた

Protocol Buffersでサービスの定義を書く Protocol BuffersからRubyコードを生成する サーバの実装を書く クライアントからサーバへrpcリクエストを送る 番外編:インターフェース定義に反するレスポンスを返すとどうなる? gRPC公式のRuby版チュートリアル…

Rubyライブラリでよく見る `configure do ... end` による設定管理の仕組み

configure を使ったサンプルコード configure メソッドの実装 Configuration モジュールの取り込みとextend 設定項目の管理とクラスインスタンス変数 まとめ Rubyのライブラリで設定を管理するときに、次のようなパターンのコードをよく見ると思う。 Xyz.con…

Rubyの`&&`と`||`

&& && をよく使うのは、if 式などでの条件を書くときだろう。つまるところ真か偽の結果を得ることを期待していると思う。 cond1 = true cond2 = false cond3 = true if cond1 && cond2 # 実行されない end if cond1 && cond3 # 実行される end ここで気をつ…

mysqldumpに`--complete-insert`オプションをつけるとカラム名を含むINSERT文を出力してくれる

mysqldumpコマンドのデフォルト状態で出力されるINSERT文にはカラム名の情報が含まれていない。以下例(※ 見やすいようにインデントしている)。 INSERT INTO `users` VALUES (1,'taro',20,'male',1,'2019-02-13 23:44:02','2019-02-13 23:44:02'), (2,'jiro…

RSpec with Railsでテスト時のデータはどのように削除されているか

use_transactional_fixtures 削除の仕組み before(:each) と before(:all) Tips 参考リンク RailsアプリでRSpecを使うと通常example実行のたびにデータが削除されるようになっているが、これが具体的にどのように行われているかについて。 検証環境は以下の…

書き出して自分と対話・思考しながら仕事を進めるスタイルとそれについて考えたこと

ふと考えたことをとりとめもなく書いてみる。 書きながら自分と対話・思考しながら物事を進めるスタイル 自分は仕事をするときに、作業の記録を書き残しながら進めることが多い。 書いているのは以下のような内容。 何のためにやるのか どうしてやることにな…

「既存のコードがそうなっているから」は逃げる理由になりがち

何らかの追加実装の作業をしているとき、往々にして既存のコードと類似した実装をする、あるいはそうできる場面に遭遇することがあると思う。 このような時、既存のコードと同じパターン・同じ構成で実装するというのは1つの選択肢になる。 なぜならそのよう…

【Rails】データベース名を明示せずにActiveRecordでMySQLに接続する

環境 Rails 5.1.6 MySQL 5.7.21 状況 データベースはまだ存在しないが、ActiveRecordでMySQLへの接続だけは確立したい。 何も考えずに次のようなコードを実行すると... ApplicationRecord.connection.execute("<なんかSQL>") 次のようなエラーが起こる。 Act…

【Rails】app/以下に新規作成したディレクトリのファイルが読み込まれない件

結論:springの再起動が必要だった あらまし Ruby On Railsアプリケーションの開発中、app/以下に新しくvalidatorsというディレクトリを作ることになった。 最近のRailsではapp以下のファイルを自動で読み込んでくれるようになっているので、追加の設定は不…

draperを使ってみた

draperとは なぜdraperを使うのか 使ってみる セットアップ デコレートメソッドを追加する Controllerでモデルをデコレートする Viewでデコレートメソッドを呼び出す アソシエーションに対応する その他のメモ draper というデコレーター(またはプレゼンタ…

ActiveModel::Serializersを使ってみた

出鼻をくじかれる README.mdを読んだ fast_jsonapiの登場 Getting Started アソシエーションに対応させる アダプタを切り替える 独自の属性を追加する その他気になった機能 使ってみての雑感 ActiveModel::Serializers(AMS) という、出力するJSONをいい感じ…

SOP(Same Origin Policy)とCORS(Cross Origin Resource Sharing)について調べた

Web

SOP(Same Origin Policy)の理解が怪しいなぁと思ったのでちゃんとした仕様を調べた。 同時にCORS(Cross Origin Resource Sharing)についても調べることになったのでまとめて整理した。 SOP(Same Origin Policy: 同一生成元ポリシー) Webブラウザなどの…

属人化の排除と責任感のトレードオフについて

スクラムでプロダクト開発をするようになって、約1年が経過した。 スクラムは実によくできたフレームワークであり、スクラムから得られたものはたくさんある。 例えば.. 今自分がやっていることに対して納得感を持って取り組むことができるようになった 発生…

三浦半島 自転車旅行記

三浦半島を自転車で巡ってきたのでその記録を残す。 三浦半島とは 三浦半島(みうらはんとう)は、神奈川県南東部にある半島である。 ※ from: Wikipedia 地図で言うと大体この辺り。 ルート(当初計画) ルートは、大まかに次のように設定した。 地元の駅 → …

TOEICリスニングの問題が全然わからないので原因と対策を考えてみる

あらまし 最近TOEICのリスニング問題を解いているのだが、びっくりするくらい全然わからない。 これはアカンということで自分なりに原因と対策を考えてみたい。 解けないのはPart3とPart4 TOEICのリスニングは全部で4つのPartから構成されるようだ。 Part1: …

「成るようになる」のではなく「人事を尽くして天命を待ち」たい

成るようになる いろいろと気を揉んだり焦ったりしなくても物事はうまい具合に進行する、流れに任せてしまえばよい、といった意味合いで用いられる表現。「ケセラセラ」とも言う。 ※ from: 成るようになるとは - 日本語表現辞典 Weblio辞書 人事を尽くして天…

今更ながらベイマックスを見たら脳が震えた

ベイマックス (字幕版)発売日: 2015/04/17メディア: Amazonビデオこの商品を含むブログを見る 中身のない日記です。 AmazonでKindle本50%OFFセールがやっていたので適当に気になった本を数冊買ったところ、Amazonビデオの割引クーポンが送られてきたのでベ…

LPICレベル1 合格体験記

LPICレベル1を受験し、無事に合格できたので感想やら何やらを書いていく。 受験の動機 ことのはじまりはSREに興味があって、SREにどんな技術セットが求められるかを調べたりしていたところ、Linuxの深い知識を求められる傾向があると気づいたことだった。 ま…

『Web開発者のための大規模サービス技術入門』がめっちゃ良かった

『Web開発者のための大規模サービス技術入門』を読んだ。とても勉強になった。 [Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ)作者: 伊藤直也,田中慎司出版社/メーカー: 技術評論社…