2019-01-01から1年間の記事一覧
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 (Adobe Reader) (Addison-Wesley Professional Ruby Series) (English Edition)作者:Russ Olsen出版社/メーカー: Addison-Wesley Professiona…
OSSなど実装を見る機会が乏しいコードに触れる時、あるメソッドがどこに定義されているか継承を辿るとデバッグに時間がかかる時がある。 そんな時は、methodとsource_locationメソッドを利用すると便利である。 GraphQL::Types::String.method( :graphql_def…
GraphQL-Rubyでは、Int、Float、String、Boolean,IDといったビルドイン以外にISO8601DateTimeやISO8601Date型が提供されています。 また、独自Scalar型を定義することができ、その方法はドキュメントに記載されています。 class Types::Url < Types::BaseSca…
XSSとは、攻撃者によって意図しないHTMLやJavaScriptを挿入される脆弱性です。 XSSを説明する際に、ローカルサーバーを立ち上げた後にブラウザ上でhttp://localhost:8080/?keyword=<script>alert(1)</script>にアクセスすると警告ダイヤルが表示される例を目にすることが多い…
GraphQLにおけるUnion型は、Object型のリストを表現します。 実装方法は、ドキュメントを参考にすると以下の通りです。 簡易的にUnionを試すためUserクラスにcommentsメソッドを実装していますが、本来はSTIやCTIなどの実装を表現する場合に利用します。それ…
Rubyの予約語を取得するワンライナーを知った。いくつか疑問があるので忘れないように残しておく。 RubyToken::TokenDefinitions.select { |definition| definition[1] == RubyToken::TkId }.map { |definition| definition[2] }.compact しかし、v2_7_0_pre…
Rubyでは、クラスを比較できることを知ったのでメモとして残しておく。 String < Object 比較演算子は、Moduleクラスに存在している。 ここで、以下を比較すると結果としてnilが返る。 Kernel < BasicObject これは、BasicObjectとKernelが継承関係にないか…
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にありま…
Classにmoduleをmix-inしてもmoduleで定義したクラスメソッドを利用できない。 これを解決するために、以下ようにincludeされた時点でクラスに対してmoduleをextendする方法がある。 module M def self.included(klass) klass.extend ClassMethods end modul…
GraphQL-Rubyには、Queryの実行前後で処理を差し込むことが可能なInstrumentが実装されています。 この機能を利用するためには、必ず#before_query(query)と#after_query(query)二つのメソッドを定義する必要があります。 以下のように自身のスキーマクラス…
Browser Image Loadingを読みました。タイトルの通り、ブラウザで画像ロードをどのように行うかを知ることができます。 High Performance Images: Shrink, Load, and Deliver Images for Speed (English Edition)作者: Colin Bendell,Tim Kadlec,Yoav Weiss,…
2018年に出版された「初めてのGraphQL」の原書である「Learning GraphQL」を読みました。 なぜ、読んだのか 新卒研修で一度読了したのですが、社内のエンジニアから日本語訳が出版される前に読書会を開かないかと誘われました。プロダクトコードで、もっとク…
GemfileにRubyのVersionをベタ書きしているプロジェクトがある。 rbenvでVersion管理を行っている場合、rbenv local 2.6.5と実行すると.ruby-versionというファイルが作られる。 $ cat .ruby-version 2.6.5 そして、Gemfileで以下の記述するとGemfileにRuby…
RailsでActiveRecordを継承しているオブジェクトのデータ型カラムに対して100年後の日時を設定したい場合、Time.current.since(100.days)を利用することで実現できる。 しかし、Rubyを理解している人以外がデータを更新したい場合に上記は適切ではない。 SQL…
TL;DR 株式会社グロービスに入社した。元気に生存中。押忍 はじめに 2019年4月1日から新卒エンジニアとして株式会社グロービスに入社しました。 普段は、グロービス学び放題というビジネスを動画で学べる学習サービスを開発しています。 hodai.globis.co.jp …
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さんのブログメンタリングを卒業しました。 3ヶ月間があっという間に過ぎるぐらい濃い時間を過ごすことができました。 「最初は、誤字が多かったな〜」、「なんで@kakakakakkuさんはブログメンタリングをしてるんだろう?」、「もっと人生の先輩…
プロダクトでGraphQL-Rubyのgemを最新バージョンにアップデートしました! 1.9ではfieldにextras:[:lookahead]を追加できます。 この機能は、子field要素がリクエスト対象であるかで条件分岐を可能にします。 ドキュメントを見るだけでは挙動がわかりにくい…
エンジニアとして働き始めると、学生時代には意識しない問題に取り組むことが多くなります。 ライブラリのアップデートもその中の一つでしょう。RubyのライブラリであるGemをアップデートする方法を学んだので忘れないうちにアウトプットしようと思います。 …
OSSにいつかコントリビュートしたいという想いから、OSS Gate東京ワークショップ2019-09-14に参加しました。 OSS Gateは、OSS開発未経験者の方とOSSの門をくぐった先輩メンターがペアになってOSS開発を体験するイベントです。メンターのサポーターがいるなど…
下記のようなクラスインスタンス変数を定義した後に、値を確認する方法としてAPI::APIBase.class_eval { puts @remote_host }があります。class_evalは、Moduleクラスのインスタンスメソッドでブロック内でレシーバ定義式の中であるように振舞います。 ENV['…
OpenSSHを基礎から学ぶことができる「OpenSSH実践入門」を読みました。ローカルで編集したコードをGitHubにpushするためにSSHのKeyを登録する必要があるなど、身近なところで頻繁に利用されている技術ですが、毎回コピーアンドペースト(以下、コピペ)で何も…
環境 $ docker --version Docker version 19.03.1 本題 Ubuntu18.04をベースイメージとしたDockerfileを作成し、docker-composeでコンテナの管理をしようとすると、イメージからコンテナを作成されていることが標準出力から確認できるのですが、attachをする…
創意ラボさんが主催する、「サーバーにメモリ刺してもらっていいですかね」に参加しました。 connpass.com 参加者は6人いたので、ペアで作業をすることになりました。 内容は、以下のようにとても濃いものでした。 ラックサーバーにメモリを刺す RAID0構成を…
動作環境 macOS Mojave # echo $0 /bin/bash 利用可能なコマンド一覧を取得するには、compgen -A commandまたはcompgen -acを実行すればよいことを知りました。 そこで、man compgenで詳しい利用法を確認しようとするとNo manual entry for compgenというメ…
Gitのバージョン $ git --version git version 2.21.0 git rev-parse --show-toplevelを実行すると、Gitで管理しているrootのpathを知ることができます。 rails new check_rev-parse-dirでRailsプロジェクト作成してgit rev-parse --show-toplevelの動作確認…
特定のLinuxコマンドのコマンドやオプション名を忘れたが、一部のみ覚えている時にmanコマンドの結果からgrepしたいことがあります。 manコマンドで特定のLinuxコマンドのドキュメント読もうとすると、Manual pageが起動しますが標準出力されないためgrepコ…
ISUCON9の練習をするため、Vagrant ISUCONを利用しました。チームはGoで参加するので、初期実装はPythonでした。言語を切り替える方法がわからず、悪戦苦闘していたのですがsystemctlコマンドを用いることで実現できることがわかりました。 解決する過程で、…
とあるプロジェクトをForkした後に、ローカルでCloneをして遊んでいると予期せず間違ってPRを元プロジェクトに投げてしまいました。そこで、Forkをしたリポジトリを削除し自分で新しくリポジトリを作成しました。変更に伴い、リモートリポジトリのリンク先を…