2018-01-01から1年間の記事一覧

『WEB+DB PRESS Vol.108』でスキーマ駆動Web API開発についての特集記事を執筆しました

このたび、2018年12月22日に発売された『WEB+DB PRESS Vol.108』の特集1「効率急上昇!スキーマ駆動Web API開発」の企画と執筆に携わりました。id:june29さん、id:ackintoshさん両名との共著です。 WEB+DB PRESS Vol.108作者: 中野暁人,山本浩平,大和田純,曽…

Stripe Sources APIにおける決済の抽象化

この記事はGMOペパボ Advent Calendar 2018の23日目の記事です。 GMOペパボのAdvent Calendarと言っておきながら、Stripeが提供しているWeb APIの話をします。 Stripeの決済用Web APIでは、sourceという概念を通じて多様な決済方法を抽象化して表現していま…

"The Modular Monolith: Rails Architecture"を読んだ

Modular MonolithというアーキテクチャをRailsアプリケーションへ適用する記事を読みました。 medium.com モノリスアーキテクチャとマイクロサービスアーキテクチャの中間に位置する、一つのモノリシックなアプリケーション内でドメインごとにモジュールに分…

このブログをHTTPS化した

はてなブログで独自ドメインを当てているときもHTTPS化できるようにとっくになっていたので、このブログもHTTPS化しました。 手順 こちらの記事を全面的に参考にさせてもらいました。 blog.jnito.com まずはgemをインストールします。config.yml の準備もい…

『なるほどUnixプロセス』を読んだ

読みました。 tatsu-zine.com どんな本か 主にRubyの Process モジュールを使いながらUnixプロセスについて知る本です。 Rubyでには Process モジュールを通じてUnixプロセスを操作することができます。つまり、プロセスに関するUnixのシステムコールをRuby…

GraphQLナイトに参加した & 『GraphQLとスキーマファースト開発』についてLTした

connpass.com 五反田のfreeeさんでGraphQLナイトが開催されたので参加してきました。会社のSlackの開発者チャンネルで@hsbtさんが貼ったリンクを見て開催に気づけたので、ありがたい限りでした。 また、LT枠が急遽空いたので、前日に飛び入りでLTすることに…

graphql-guardとポリシーオブジェクトをgraphql-ruby 1.8で使うための方法

これの続きです。 blog.kymmt.com 問題 graphql-guardはインラインでポリシーを書く方法の他に、ポリシーオブジェクトを定義して GraphQL::Guard.new に渡すという方法があります。使いかたはREADMEに書いてあるとおりです。 class GraphqlPolicy RULES = { …

graphql-guardをgraphql-ruby 1.8で使うためのある方法

問題 graphql-ruby 1.8ではclass-based APIが導入されました。フィールド定義は型を表すクラスのコンテキストでクラスメソッド field を呼ぶ形で定義します。 class Types::Query < Types::BaseObject field :viewer, Types::User, null: true def viewer co…

アソシエーションのscopeを使いつつLIMITっぽいことをやる

細かすぎて伝わらないかもしれませんが、ハマったので共有します。 問題 ユーザーが免許を持つ次のようなモデルを考えます。has_one :licenseは免許更新を重ねてきたなかで最新の免許を取得したくて書いたと思ってください。 class User < ApplicationRecord…

GraphQL Subscriptionsをgraphql-rubyとAction Cableで作る

graphql-rubyでは、RailsのAction Cableに乗ることでGraphQL Subscriptionsを実装できます。 GraphQL Subscriptionsとは GraphQL Subscriptionsは、あらかじめ特定のGraphQLクエリを購読しておき、サーバ側でイベントが起きるたびにその形式のデータを受信で…

wscatでAction Cableと通信する

Railsで/cableなどのエンドポイントにAction CableをマウントするとWebSocketサーバとして利用できます。wscatを使ってAction CableによるWebSocket APIと対話的に通信するために、送信するデータの形式などを調べました。 準備 wscat github.com npmでイン…

GraphQL APIを作るときにテストをどう書いていくか

こういうのはどうかという最近の考えを書いておきます。とはいっても、だいたいはgraphql-rubyのドキュメントに書いてあります。Rails + graphql-ruby + RSpecが前提です。 各フィールドのテスト フィールドから正しく値を取得できるか、つまりRailsのモデル…

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

2018-02-17(月)のYokohama.rb Monthly Meetup #88 参加メモです。 yokohamarb.doorkeeper.jp Rubyレシピブック 気づいたら第11章「オブジェクトとメタプログラミング」に入っていました。 273: オブジェクトが同じか調べる 274: オブジェクトを複製する 27…

dry-containerとdry-auto_injectでDIコンテナを作る

dry-rbファミリーのdry-containerとdry-auto_injectを使うと、POROの組み合わせでDIが実現できます。 DIについてハイパーざっくり理解を得るには次の記事を読めばよいです。 qiita.com 上の記事の中のDIコンテナを適用したコードをdry-containerとdry-auto_i…