RSpecのrequest specでComittteeを使ってレスポンスJSONを自動的にバリデーションする

この記事の続きのようなものです。 blog.kymmt.com やりたいこと Rails + RSpecでWeb APIのrequest specを書くときに、Committee(とCommitee::Rails)の assert_schema_conform を使って、レスポンスのJSONがOpenAPIドキュメントで定義したレスポンスのJSON…

Web APIのレスポンスJSONをCommittee + OpenAPIでバリデーションして仕様と実装の乖離を防ぐ

APIドキュメントに書いたJSON Schemaと実際に実装したWeb APIのレスポンスJSONが一致するかバリデーションするためのCommitteeというgemがあります。また、このCommitteeをRailsプロジェクト中のテストから使うためのCommittee::Railsというgemがあります。 …

Yokohama.rb Monthly Meetup #84 に参加した

2017-09-09(土)のYokohama.rb Monthly Meetup #84参加のメモです。 yokohamarb.doorkeeper.jp Rubyレシピブック 今回から最終章のひとつ手前、第10章の「Webプログラミング」に入りました。次のレシピを読みました。 261: RSSを扱う 262: Rackを使う 263: …

OpenAPI v3.0.0のCallback Objectについて調べた

2017年7月末リリースのOpenAPI v3.0.0に入ったCallback Objectという仕様がパッと見だとどう使うかわかりにくかったので、調べてみました。 Callback Objectの仕様は次のリンク先のとおりです。 OpenAPI-Specification/3.0.0.md at master · OAI/OpenAPI-Spe…

Rails 5.1でRails pluginをセットアップする手順

最近読んでいる “Crafting Rails 4 Applications” の中でRails pluginを開発する場面が多々あるので、手元でもRails 5を使ってRails pluginを書いてみています。 Rails 5だと、プラグインのセットアップ手順が本の記述やRails Guidesの記述と少し違っていた…

GraphQL::Batchのサンプルコードを読む & 使ってみる

単純にGraphQLクエリを投げると、サーバサイドでの関連を含むレコード取得時にN+1問題が発生することがあります。こういうケースでは、複数のデータ取得リクエストをひとまとめにして、単一のリクエストとしてDBからデータを取得するbatchingが推奨されてい…

graphql-ruby + Railsで簡易なクエリとミューテーションが使えるGraphQL APIを実装する

会社でGraphQLのハンズオンがあったのをきっかけに、最近はGraphQLのサーバ側実装をちょっと触っています。 graphql-rubyを使うと、RubyでGraphQL APIを実装することができます。今回はRailsでGraphQLのクエリとミューテーションを実装してみました。 graphq…

Yokohama.rb Monthly Meetup #82に参加した

2017-07-08(土)のYokohama.rb Monthly Meetup #82参加メモです。 yokohamarb.doorkeeper.jp Rubyレシピブック レシピ257から260まででした*1。259, 260についてメモ。 259: リモートホストが稼働していることを確認する リモートホストが動いているかを確…

Yokohama.rb Monthly Meetup #81に参加した

2017-06-10(土)のYokohama.rb Monthly Meetup #81参加メモです。 yokohamarb.doorkeeper.jp 3月の#78も参加していたのにメモを書いていなかったので、久しぶり感あります。 Rubyレシピブック レシピ254から256まで。HTTP, SMTP, FTPというプロトコル3連発…

Springが動くRails+MySQLなAPIサーバの開発環境をDocker Composeで作る

このあいだ、Rails+MySQLという構成のアプリケーション開発環境をDocker Composeで構築できるようにしました。 blog.kymmt.com いろいろと理解が深まるにつれて、何点かクリアしたい問題が見えてきました。 Dockerfile で使うイメージ ruby:2.4.1-onbuild は…

Rails+MySQLなAPIサーバの開発環境をDocker Composeで作る

先日、"Quickstart: Compose and Rails"の手順にしたがいながら、Docker ComposeでRails+MySQLがとりあえず動くような環境を作りました。 blog.kymmt.com 今回は、RailsのAPIサーバの開発環境をもうちょっといい感じにDocker Composeで作ってみます。DBにはM…

"Quickstart: Compose and Rails"を読みながらDocker ComposeでRails+MySQLの環境を作る

次の記事などでDockerを使ってRailsの開発環境を構築しているのを見て、自分でもやっておこうと思ったので、やってみました。 dev.classmethod.jp 公式ドキュメントの"Quickstart: Compose and Rails"を読みながらやります。 docs.docker.com 前提 まったく…

Rails を使った EC アプリケーション開発について学べる本 "Take My Money" を読んだ

読みました。 pragprog.com どんな本か 副題が “Accepting Payments on the Web” となっているように、決済 (payment) システムをもつ Web アプリケーションを作る方法について説明しています。『達人プログラマー』などでおなじみの The Pragmatic Bookshel…

RFC 5988 "Web Linking" を読んだ

Web

JSON を返す API サーバでページネーションを実装したいと思っていて、前/後ページや最初/最後のページなどといった他のリソースとの関係を表すメタ情報をどこに格納すべきかなと考えていました。解決方法として少なくとも次の二つがありそうです。 JSON …

MySQL 徹底入門 第 3 版を読んだ

『MySQL 徹底入門 第 3 版』を読みました。 MySQL徹底入門 第3版 ~5.5新機能対応~作者: 遠藤俊裕,坂井恵,館山聖司,鶴長鎮一,とみたまさひろ,班石悦夫,松信嘉範出版社/メーカー: 翔泳社発売日: 2011/08/26メディア: 大型本購入: 9人 クリック: 82回この商品を…

Web 上のリソースとその表現

Web

RSpec で request spec を書くとき、get "/users/:id.json" と書くかわりに get "/users/:id" と書くとエラーになりました。 ActionController::UnknownFormat: UsersController#show is missing a template for this request format and variant. リソース …

Rails 5.0.1 で rails new するとできる Gemfile の git_source ブロックの意味

Rails 5.0.1 で rails new したときに作成される Gemfile の先頭に次のブロックが挿入されるようになっていました。 git_source(:github) do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/") "https://github.com/#{re…

Yokohama.rb Monthly Meetup #76 に参加した

2017-01-14(土)の Yokohama.rb Monthly Meetup #76 に参加したので、メモを書きます。1 週間たってしまった。 yokohamarb.doorkeeper.jp Ruby レシピブック 今回はレシピ 244 から 247 まで読みました。システム寄りの話題が中心です。 レシピ 244 スレッ…

冪等な更新処理の API エンドポイントでは PUT を使うとよさそう

結論 star や like を付与するような、冪等性を持つアクションのための API エンドポイントでも POST はよく使われる が、HTTP メソッドの意図を考慮すると、冪等な更新処理の API エンドポイントにアクセスするときの HTTP メソッドは、POST より PUT がよ…

2016 年ふりかえり

2016 年をふりかえらないと 2017 年が始まらないので、ハイライトでふりかえります。 上半期と下半期で在籍していた会社が違うので、そのくくりで分けてます。 上半期 個人活動 2015 年の秋ぐらいから触っていた Ruby で引き続き遊んでいました。 読書メータ…

Yokohama.rb Monthly Meetup #75 に参加した

2016-12-10(土)の Yokohama.rb Monthly Meetup #75 に参加しました。 yokohamarb.doorkeeper.jp 次の流れでした。 前半は Ruby レシピブック読書会 後半は LT 今回は、参加者の @Nabetani さんがすでにメモを書いてくださっています。僕もメモしておきます…

Ruby (on Rails) で使える enumeration 実装を比較してみた

こんにちは、GMO ペパボの人間です。これは pepabo Advent Calendar 2016 の 9 日目の記事です。 昨日は我らが CTL けんちゃんくんさんの 「gemビルドしようとして The validation error was 'yourgem-x.y.z contains itself (yourgem-x.y.z.gem), check you…

Ruby のテストカバレッジを Travis CI から Code Climate へ POST する方法が変わっていた

Travis CI 上で Rubygems のテストを実行して、テストカバレッジの集計結果を Code Climate へ POST するときにエラーが発生していたので、解決方法をメモしておきます。 エラー /home/travis/.rvm/rubies/ruby-2.0.0-p598/bin/ruby -I"lib:test" -I"/home/t…

hatenablog gem 0.5.0 をリリースした

Rubygem の hatenablog 0.5.0 をリリースしました。 github.com アップデート Hatenablog::Client.new にブロックを渡すことで認証情報を設定できるようにしました。 client = Hatenablog::Client.new do |config| config.consumer_key = '<consumer key>' config.consumer</consumer>…

Yokohama.rb Monthly Meetup #74 に参加した

2016-11-12(土)の Yokohama.rb Monthly Meetup #74 に参加しました。 yokohamarb.doorkeeper.jp 前半は Ruby レシピブック読書会 後半は LT という 7 月以来の流れでした。 レシピブック 今回はいつもより 30 分短かったこともあって、レシピ 238, 239 だ…

Fukuoka.rb #66 に参加した

現在、会社の研修で福岡に来ています。福岡には、地域 Ruby コミュニティとして Ruby コミッタの nagachika さんや弊社の udzura さんが主催されている Fukuoka.rb があります。今回、udzura さんに誘っていただき、10/12(水)に福岡・天神のグルーブノーツ…

hatenablog gem 0.4.0 をリリースした

Rubygem の hatenablog 0.4.0 をリリースしました。今回追加したのは Basic 認証ではてなブログの API を使えるようにする機能です。 github.com PR ありがとうございます! Basic 認証による利用方法 はてな API で Basic 認証による操作認可を得るには、AP…

読書メーター→ブクログ移行用スクリプトを書いた

読書メーターからブクログへ宗旨替えすることにしたので、データを移行したい気持ちになりました。 幸い、ブクログには CSV データによる読書データのインポート機能が備わっていたことと、私が以前読書メーターのスクレイピング gem である bookmeter_scrap…

hatenablog-writer 0.1.1 と hatenablog 0.3.0

今月は自分の gem にいくつか PR をいただいて新バージョンをリリースしました。PR をくださった方々、ありがとうございました。 hatenablog-writer 0.1.1 hatenablog-writer は CLI からはてなブログに投稿できるツールです。作ったきりほったらかしていた…

Ruby で順列の列挙を実装する

最近いろいろな人が次の本をやっているのを見かけるので、気になって読み進めてみています。 プログラマ脳を鍛える数学パズル シンプルで高速なコードが書けるようになる70問作者: 増井敏克出版社/メーカー: 翔泳社発売日: 2015/10/14メディア: 単行本(ソフ…