正しいものを正しく作る塾に参加しました

正しいものを正しくつくる(設計実装)に参加しました。 せっかくなので、塾の感想をブログに書き留めておこうと思います。 正しいものを正しくつくる(設計実装)とは 現場で役立つシステム設計の原則 ~変更を楽で安全にするオブジェクト指向の実践技法を執筆さ…

整理してOAuth2.0を使うためのチュートリアルガイドを読んだ

雰囲気で使わずきちんと理解する!整理してOAuth2.0を使うためのチュートリアルガイド (技術の泉シリーズ(NextPublishing))作者:Auth屋発売日: 2019/09/20メディア: Kindle版 モチベーション 個人開発でYoutube Data APIを利用したかったので、ドキュメン…

2020年 GWに読んだ書籍

Linux教科書 LPICレベル1 Version5.0対応 社会人2年目の目標は、「緊急時のバグ修正速度の向上や運用を意識した開発を行う」です。 Linuxの基礎をググらなくても理解できていることを目指すのが良いと思い、LPIC1xxと2xxを取得するため勉強していました。 Li…

Linuxで動かしながら学ぶTCP/IPネットワーク入門 Kindle版 が開けない時の対処法

Kindle for Macで「Linuxで動かしながら学ぶTCP/IPネットワーク入門」をDLするとKindleのアップデートを求められた。 KindleやMacのアップデートを行ったが、症状が継続していた。 Twitterで呟くと、著者様より記事を紹介してもらった。 Kindle Updateしても…

GitHubのGraphQL API v4にて、EmailのScalar型を定義していない理由を考察してみた

GitHubのAPI v4は、GraphQLで開発されている。バックエンドの開発者で参考にされることが多い。 GraphQLは、StringやIntなどビルドインのScalar型以外に独自定義を行うことで型安全なAPIを開発することができる。 GitHubのAPIにおいても多くのカスタムScalar…

IRBをアップデートすると undefined method `encoding_system_needs' for Reline:Module エラーになるときの対応

環境 $ irb -v irb 1.2.3 (2020-02-15) $ ruby -v ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin18] 解決方法 reline をインストールする gem install reline 参考文献 IRB 1.2.3 does not boot with Ruby 2.7 on my mac · Issue #87 · ruby/i…

WebAPIは、HTTP通信という制約を持ったPublicメソッドである

エンジニアになって1年経ったので考えを整理しておく。 タイトルの通り、「WebAPIとは、HTTP通信という制約を持ったPublicメソッド」である。 HTTP通信という制約下で実行するため、通信による失敗が多いことやデータベースによるトランザクションを利用でき…

メトリクスをなぜ、とるのか

note.com 「スタートアップ経営で現れる壁と事例とその対策について」を読んでメトリクスをなぜ、とる必要があるのか考えてみたので、メモとして残しておく。 資料を摺り合わすことなく考えたため、大枠すら捉えられていない可能性があるので注意したい。 メ…

Enumerable#none?でReadableなコードにする

Railsにて要素が存在しないことを blank? や empty? で確かめることがある def purchased_book payments payments.none? "未購入" : "購入済み" end しかし、あるユースケースではRubyの Enumerable#none? を利用した方が意味が明らかになるので、積極的に利…

新規プロジェクトでGraphQL-Rubyを利用する際に気をつけること

GraphQL-RubyでAPI開発する際に、以下のように--apiオプションをつけたくなる。 rails new iikannzino_service --api そうすると、rails generate graphql:installとした時にgraphiql-railsがinstallされなくなってしまう。 rails g graphql:install --no-ap…

「Design It!」は、人生に影響を与える本になりそうです

設計から携われるタスクがあり希望の上、チーム異動しました。どのように設計を行うか、何を考慮する必要があるのか、どのように関係者(ステークホルダー)に説明するかなど、ありとあらゆることが手探り状態です。「Design It!」を読んだことで具体的なアク…

Best Practice Ruby on Rails Refactoringは、Rails開発を初めて半年のエンジニアにピッタリの本だった

Rails AntiPatterns: Best Practice Ruby on Rails Refactoring (Addison-Wesley Professional Ruby Series) (English Edition)作者:Chad Pytel,Tammer Saleh出版社/メーカー: Addison-Wesley Professional発売日: 2010/11/09メディア: Kindle版 Best Practi…

Design Patterns in RubyでStrategyパターンを学んだ

Design Patterns in Ruby でStrategyパターンを学んだ。自分用のメモとして残しておく。 Design Patterns in Ruby (Adobe Reader) (Addison-Wesley Professional Ruby Series) (English Edition)作者:Russ Olsen出版社/メーカー: Addison-Wesley Professiona…

Rubyであるメソッドの定義場所を知る方法

OSSなど実装を見る機会が乏しいコードに触れる時、あるメソッドがどこに定義されているか継承を辿るとデバッグに時間がかかる時がある。 そんな時は、methodとsource_locationメソッドを利用すると便利である。 GraphQL::Types::String.method( :graphql_def…

GraphQLで独自Scalar型を定義する時に気をつけること

GraphQL-Rubyでは、Int、Float、String、Boolean,IDといったビルドイン以外にISO8601DateTimeやISO8601Date型が提供されています。 また、独自Scalar型を定義することができ、その方法はドキュメントに記載されています。 class Types::Url < Types::BaseSca…

alert(1)では、危険性がわからなかった人にも優しいXSS解説

XSSとは、攻撃者によって意図しないHTMLやJavaScriptを挿入される脆弱性です。 XSSを説明する際に、ローカルサーバーを立ち上げた後にブラウザ上でhttp://localhost:8080/?keyword=<script>alert(1)</script>にアクセスすると警告ダイヤルが表示される例を目にすることが多い…

GraphQL-RubyでUnion型を実装する方法

GraphQLにおけるUnion型は、Object型のリストを表現します。 実装方法は、ドキュメントを参考にすると以下の通りです。 簡易的にUnionを試すためUserクラスにcommentsメソッドを実装していますが、本来はSTIやCTIなどの実装を表現する場合に利用します。それ…

Rubyの予約語を取得する方法

Rubyの予約語を取得するワンライナーを知った。いくつか疑問があるので忘れないように残しておく。 RubyToken::TokenDefinitions.select { |definition| definition[1] == RubyToken::TkId }.map { |definition| definition[2] }.compact しかし、v2_7_0_pre…

Rubyでは、クラスの比較ができる

Rubyでは、クラスを比較できることを知ったのでメモとして残しておく。 String < Object 比較演算子は、Moduleクラスに存在している。 ここで、以下を比較すると結果としてnilが返る。 Kernel < BasicObject これは、BasicObjectとKernelが継承関係にないか…

GraphQL-RubyのEnum classes are never instantiated and their methods are never called.とは何か

GraphQL-RubyのEnumを翻訳するにあたり、Enum classes are never instantiated and their methods are never called.に疑問を持ったのでソースコードを読むことにしました。 version graphq-ruby: 1.9.5 ruby: 2.6.5 実装は、GraphQL::Schema::Enumにありま…

Rubyのmodule_functionは、引数なしで指定できる

Classにmoduleをmix-inしてもmoduleで定義したクラスメソッドを利用できない。 これを解決するために、以下ようにincludeされた時点でクラスに対してmoduleをextendする方法がある。 module M def self.included(klass) klass.extend ClassMethods end modul…

GraphQL-RubyのInstrumentationを翻訳して学んだこと

GraphQL-Rubyには、Queryの実行前後で処理を差し込むことが可能なInstrumentが実装されています。 この機能を利用するためには、必ず#before_query(query)と#after_query(query)二つのメソッドを定義する必要があります。 以下のように自身のスキーマクラス…

High Performance Imagesの「Browser Image Loading」を読んだ

Browser Image Loadingを読みました。タイトルの通り、ブラウザで画像ロードをどのように行うかを知ることができます。 High Performance Images: Shrink, Load, and Deliver Images for Speed (English Edition)作者: Colin Bendell,Tim Kadlec,Yoav Weiss,…

「初めてのGraphQL」の原書を読んだ

2018年に出版された「初めてのGraphQL」の原書である「Learning GraphQL」を読みました。 なぜ、読んだのか 新卒研修で一度読了したのですが、社内のエンジニアから日本語訳が出版される前に読書会を開かないかと誘われました。プロダクトコードで、もっとク…

GemfileにRubyのVersionをベタ書きしない方法

GemfileにRubyのVersionをベタ書きしているプロジェクトがある。 rbenvでVersion管理を行っている場合、rbenv local 2.6.5と実行すると.ruby-versionというファイルが作られる。 $ cat .ruby-version 2.6.5 そして、Gemfileで以下の記述するとGemfileにRuby…

MySQLで100年後の日時を設定する

RailsでActiveRecordを継承しているオブジェクトのデータ型カラムに対して100年後の日時を設定したい場合、Time.current.since(100.days)を利用することで実現できる。 しかし、Rubyを理解している人以外がデータを更新したい場合に上記は適切ではない。 SQL…

株式会社グロービスに新卒入社して半年が経った

TL;DR 株式会社グロービスに入社した。元気に生存中。押忍 はじめに 2019年4月1日から新卒エンジニアとして株式会社グロービスに入社しました。 普段は、グロービス学び放題というビジネスを動画で学べる学習サービスを開発しています。 hodai.globis.co.jp …

Railsアプリケーション初期段階のGemfileに記載されているplatformsについて調べた

rails new .でRailsアプリケーションを作成すると、Gemfileが生成されます。 source 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } ruby '2.6.5' gem 'rails', '~> 6.0.0' ~~~~~ gem 'bootsnap', '>= 1.4.2', re…

@kakakakakkuさんのブログメンタリングで学んだこと

@kakakakakkuさんのブログメンタリングを卒業しました。 3ヶ月間があっという間に過ぎるぐらい濃い時間を過ごすことができました。 「最初は、誤字が多かったな〜」、「なんで@kakakakakkuさんはブログメンタリングをしてるんだろう?」、「もっと人生の先輩…

GraphQL-Ruby1.9+から子fieldが選択されたかによって処理を変更できるようになった

プロダクトでGraphQL-Rubyのgemを最新バージョンにアップデートしました! 1.9ではfieldにextras:[:lookahead]を追加できます。 この機能は、子field要素がリクエスト対象であるかで条件分岐を可能にします。 ドキュメントを見るだけでは挙動がわかりにくい…