やわらかテック

興味のあること。業務を通して得られた発見。個人的に試してみたことをアウトプットしています🍵

【Part1 / 2】RuboCopの結果が出力されるまでの実装を追ってみる

※この記事はRuboCopの内部実装を読んでみるシリーズの第1記事です。 ある日のこと、いつものようにRuboCopに怒られた際に「RuboCopってどうやって作られてるのかな...」と唐突に気になってしまったのでコードを読んでみることにしました。最初は数日あれば終…

RubyでArrayクラスを継承させると面白いことが起きる

後に改めて記事を書きますが、最近はRubocopのコードを読み進めています。 そんな中で「面白いなぁ...」と感じたコードがあったので紹介がてら動作を確認してみたい思います。 なんと定義されたクラスがArrayクラスを継承させているではありませんか。 modul…

Ruby東海 第79回 勉強会に参加してきました

昨日、Ruby東海 第79回 勉強会に参加させて頂きました。 主催者・参加者のみなさん、お疲れ様でした。非常に楽しい時間を過ごさせて頂きました。 rubytokai.doorkeeper.jp オフラインの勉強会に最後に行ったのが、コロナウイルスが流行り出す前だったので実…

ステータスを返すだけのAPIをほぼ無料・爆速でCloud Runに作成する

ただスタータスを返すだけのAPIが別のホストに必要になったので作ってみました。 多くのケースではPrismでモックサーバーを立てれば十分ですが、ヘッダーにPreferの指定ができない上に固定のステータスが返ってくれば良いだけだったので自分で作ることにしま…

gemにbinding.irbを仕込んでデバッグする方法

OSSのコードを読むときは基本的にgithub.devを使っていますが、最近、限界を感じています。 というのも巨大なコードベースを持つOSSの場合は処理を追うだけで大変です。その上、この変数には〇〇クラスのインスタンスが...。この関数の引数には△△が指定され…

ChatGPTがついた嘘をはじめて見抜けなかった

以前より「嘘は嘘であると見抜ける人でないと(ChatGPTを使うのは)難しい」と言われています。 例えば「スラムダンクはサッカー漫画です」というような、明らかな嘘であれば簡単に見抜くことが出来ることができますが、微妙な嘘の場合はどうでしょうか。 先日…

話題のコグナビ転職(cognavi)を使ってみた感想

よく「エンジニア」というキーワードと関連して検索されている単語をGoogle広告で見ています。 最近「コグナビ」というキーワードが頻出していることに気づきました。「コグナビって何だろう?」と気になったので調べてみると、2019年頃にリリースされたエン…

「達人プログラマー」を読了したら感謝の気持ちに辿り着いた

先日、しばらく積読してしていた「達人プログラマー 第2版」を読了しました。 達人プログラマー(第2版) 熟達に向けたあなたの旅 | Ohmsha この書籍について改めて自分が語る必要がないぐらい有名な書籍で、著者は伝説のプラグラマーであるDave Thomas(デイ…

Rubyで演算子の順序を入れ替えるとエラーになるのはなぜか

先日、Rubyで文字列を指定数分だけ繰り返す処理を書いていた所、面白い現象に遭遇しました。 文字列を繰り返すために*を使ったのですが「文字列 * 数値」の場合はエラーが発生せずに望み通りの値が返るものの、順序を逆にして「数値 * 文字列」とするとエラ…

【ええな〜コード】フェイクデータ作成gemのfakerはどのようにして作られているのか

僕は技術のキャッチアップのために、定期的にgithubのトレンドを見ています。 最近、Rubyのカテゴリで「faker」という昔から使われているフェイクデータを作成するgemがよくトレンドに上がっており、リリースも今現在(2023年6月)も活発にされているようです…

RailsにIssueを立てたらPRが作成されてマージされた

とんでもないことが起こりました。まじでやばいです。 前回の記事で共有したように「RailsのgithubにIssueとして気軽に立てて良いよ〜」という旨の返信をJean Boussierさんから頂いたので、RailsのIssueを作成してから3日ほど経過しました。 www.okb-shelf.w…

リモートワーカーがジムに通って筋トレを始めたら生活の質が上がった

早いものでリモートワークが始まって3年になります。 リモートワークが始まる以前は当然ですが毎日、オフィスに出勤していました。特に駅までの片道30分の自転車移動が大変だったのですが、今になって思うと非常に良い運動習慣になっていましたし、大学生の…

Rails Discussionに投稿したら返信が来てgithubにIssueを作成した

早いもので一年も折り返し...。東海地方もいよいよ梅雨入りしてジメジメした季節になりました。 先日、cache_storeの設定に環境変数を指定してInterger型に変換しないと、キャッシュの書き込み時にエラーが出るという現象を確認しました。この振る舞いに疑問…

Rails Discussionに投稿をしてみた

「今年こそは...今年こそは...OSSに貢献するぞ...!」と思い気づけはや3年。 気持ちだけが先行して何をしたら良いのか分からず。結局、それらしいことは何もしていませんでした。 ですが、先日開催されたRubykaigi2023(コロナになって行けなかったけど)へ参…

コーチングがない組織が行き着く先はBADENDでしかない

最近はチームビルディングについて思い悩まされる日々を過ごしています。僕は過去に外部メンターの方からマネジメントにおいて重要なのは「ティーチングとコーチングの違いを理解すること」だと教えて頂きました。 www.okb-shelf.work 当時は教育を担当して…

PostgreSQLでboolean型のカラムを持つレコードを取得するとt, fとなる

Rubyでpg gemを使って、postgresqlに接続してクエリの実行結果を見ていたところ、boolean型のカラムの戻り値がTRUEの場合にt、FALSEの場合にfとなる現象を確認しました。 CREATE TABLE test1 (a boolean, b text); INSERT INTO test1 VALUES (TRUE, 'sic est…

binding.irbでdebugコマンドが使えないのはirbのバージョンが古いため

僕はRubyで何かしら開発をする時にbinding.pryというデバッグツールを愛用してきました。 Rubyを書き始めたのが確か、2.3系の頃で当時からbinding.pryは非常に人気のデバッグツールでした。 しかし、Rubyのバージョンアップにつれてbinding.irbが標準gemとな…

ファイルをオープン(open)したらクローズ(close)しないといけない理由について

僕がプログラミングを始めたばかりの頃、よく「ファイルをクローズし忘れてるよ」と指摘されていました。 当時は「ファイルはオープンしたらクローズするもの...」と反射的にファイルをクローズするようにしていました。しかし、今になって思うと「なぜオー…

【Ruby】なぜeach関数よりもfor inが遅いのか

先日、以下の記事を公開しました。 www.okb-shelf.work Rubyで配列からハッシュを作る際に、どの方法が一番パフォーマンスが良いのかを計測したのですが、過去にJavaScriptで似たような計測をした時はシンプルなfor文が最速だったので、Rubyでも同じような結…

【Ruby】配列からハッシュを生成する4つの方法と速度比較

Rubyで開発をしていると配列からハッシュ(連想配列)を生成するコードを書くことがあります。 個人的にはreduce関数を使ってバシッと書くのが気持ちよくて好きなのですが、最近、人によってこの処理の書き方が違うことに気づきました。 4つの書き方 僕が個人…

Elm Architectureに感銘を受けた

最近、Elmを学びはじめました。 Elmの存在は元から認知していて、Haskellに似た文法を持つ関数型言語にカテゴリーされる言語だそうで、そんな言語でフロントエンドが作れるとのこと...で非常に興味がありました。また、個人でアプリケーションを作るにあたっ…

あなたのチームに悪者はいない。だから対話が必要なんだ

チームの人数がだんだんと増えてきてポジションが明確化されて来た今、「対話が必要だ...」と思わされる日々を過ごしています。 何年も前に「ポジションは役割に過ぎない」という記事が話題になりました。当時、ポジションというのは上下関係を構築するもの…

第8波にてはじめてコロナになりました

しばらく更新が止まってしまい申し訳ありません。 事後報告になりますが、コロナウイルスに感染して5日間ほど寝込んでいました。とても記事を書ける状態ではありませんでした。まさかのGW真っ最中での感染...によって、全ての予定が吹き飛びました。 軽い旅…

「アジャイルなチームをつくるふりかえりガイドブック」のすすめ

いつものように書店を徘徊していると、良さげな本を発見。 同じシリーズの書籍である「SCRUM BOOT CAMP THE BOOK」を過去に読んだことがあったので「この表紙は!」と思い気づいたら購入していました。はい、いつもの衝動買いです。自分は書店で紙媒体のもの…

無知であることを体験することの重要さ

最近、みなさんは全くやったことがない・知識がなかったことを新しく始めたりされているでしょうか。 僕は先日、同居人と人生ではじめてのキャンプに行きました。 といっても、テントin寝袋で泊まるような立派なものではなく、タープを立てて簡単な食事をし…

何気ない一言は人を変えることがある

よく「人を変えることはできない」という意見を耳にします。 この意見に対しては自分も完全同意で、人を変えることへ労力をかけるのであれば、悲しきかな自分を取り巻く環境を変えてしまった方が圧倒的に簡単でコスパが良いです。 しかし、その一方で「人を…

Rspec+Railsを使ったconcernの単体テストの書き方

Railsの開発にてmodelやcontrollerの共通処理をconcernとして切り出すことはよくあるパターンです。 modelやcontrollerはクラス(class)として表現するものの、concernはActiveSupport::Concernをextendしたモジュール(module)として定義する必要があります。…

部活動という構造が権限委譲の素晴らしいモデルなのではないか

最近は社内の輪読会で「エンジニア組織論への招待」を読んでいます。 著者の広木さんが書かれた素晴らしい内容に影響されて、組織構造について考える時間がとても増えました。 エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリ…

Class.new内部の関数定義へ変数を受け渡す方法について

Rspecでモックを作りたくて動的なクラスをClass.newで生成していた時のことです。 関数で受け取った配列を.mapで処理していたところ、do |student|で定義したブロック変数がClass.new内部に定義した関数のスコープ外になるという現象に遭遇しました。 def cr…

日本(Asia/Tokyo)の今日の日付をelixirで取得する

何回も書く機会があるので、まとめておこうと思います。 何も外部ライブラリをインストールしていない状態ではEtc/UTC以外のタイムゾーンを使用することができません。自分のようにAsia/Tokyoを使いたい人はTzdataやTimexといった外部ライブラリをインストー…