2023-01-01から1年間の記事一覧
Rubyでpg gemを使って、postgresqlに接続してクエリの実行結果を見ていたところ、boolean型のカラムの戻り値がTRUEの場合にt、FALSEの場合にfとなる現象を確認しました。 CREATE TABLE test1 (a boolean, b text); INSERT INTO test1 VALUES (TRUE, 'sic est…
僕はRubyで何かしら開発をする時にbinding.pryというデバッグツールを愛用してきました。 Rubyを書き始めたのが確か、2.3系の頃で当時からbinding.pryは非常に人気のデバッグツールでした。 しかし、Rubyのバージョンアップにつれてbinding.irbが標準gemとな…
僕がプログラミングを始めたばかりの頃、よく「ファイルをクローズし忘れてるよ」と指摘されていました。 当時は「ファイルはオープンしたらクローズするもの...」と反射的にファイルをクローズするようにしていました。しかし、今になって思うと「なぜオー…
先日、以下の記事を公開しました。 www.okb-shelf.work Rubyで配列からハッシュを作る際に、どの方法が一番パフォーマンスが良いのかを計測したのですが、過去にJavaScriptで似たような計測をした時はシンプルなfor文が最速だったので、Rubyでも同じような結…
Rubyで開発をしていると配列からハッシュ(連想配列)を生成するコードを書くことがあります。 個人的にはreduce関数を使ってバシッと書くのが気持ちよくて好きなのですが、最近、人によってこの処理の書き方が違うことに気づきました。 4つの書き方 僕が個人…
最近、Elmを学びはじめました。 Elmの存在は元から認知していて、Haskellに似た文法を持つ関数型言語にカテゴリーされる言語だそうで、そんな言語でフロントエンドが作れるとのこと...で非常に興味がありました。また、個人でアプリケーションを作るにあたっ…
チームの人数がだんだんと増えてきてポジションが明確化されて来た今、「対話が必要だ...」と思わされる日々を過ごしています。 何年も前に「ポジションは役割に過ぎない」という記事が話題になりました。当時、ポジションというのは上下関係を構築するもの…
しばらく更新が止まってしまい申し訳ありません。 事後報告になりますが、コロナウイルスに感染して5日間ほど寝込んでいました。とても記事を書ける状態ではありませんでした。まさかのGW真っ最中での感染...によって、全ての予定が吹き飛びました。 軽い旅…
いつものように書店を徘徊していると、良さげな本を発見。 同じシリーズの書籍である「SCRUM BOOT CAMP THE BOOK」を過去に読んだことがあったので「この表紙は!」と思い気づいたら購入していました。はい、いつもの衝動買いです。自分は書店で紙媒体のもの…
最近、みなさんは全くやったことがない・知識がなかったことを新しく始めたりされているでしょうか。 僕は先日、同居人と人生ではじめてのキャンプに行きました。 といっても、テントin寝袋で泊まるような立派なものではなく、タープを立てて簡単な食事をし…
よく「人を変えることはできない」という意見を耳にします。 この意見に対しては自分も完全同意で、人を変えることへ労力をかけるのであれば、悲しきかな自分を取り巻く環境を変えてしまった方が圧倒的に簡単でコスパが良いです。 しかし、その一方で「人を…
Railsの開発にてmodelやcontrollerの共通処理をconcernとして切り出すことはよくあるパターンです。 modelやcontrollerはクラス(class)として表現するものの、concernはActiveSupport::Concernをextendしたモジュール(module)として定義する必要があります。…
最近は社内の輪読会で「エンジニア組織論への招待」を読んでいます。 著者の広木さんが書かれた素晴らしい内容に影響されて、組織構造について考える時間がとても増えました。 エンジニアリング組織論への招待 ~不確実性に向き合う思考と組織のリファクタリ…
Rspecでモックを作りたくて動的なクラスをClass.newで生成していた時のことです。 関数で受け取った配列を.mapで処理していたところ、do |student|で定義したブロック変数がClass.new内部に定義した関数のスコープ外になるという現象に遭遇しました。 def cr…
何回も書く機会があるので、まとめておこうと思います。 何も外部ライブラリをインストールしていない状態ではEtc/UTC以外のタイムゾーンを使用することができません。自分のようにAsia/Tokyoを使いたい人はTzdataやTimexといった外部ライブラリをインストー…
僕は卒論でVB.netを使って「センサーで計測したひずみ値を描画・記録するアプリケーションの作成」を行いました。学部では土木・建築を専攻しましたが、先生が「プログラミングを極めたい」という僕の気持ちを汲んでくれたことを今でも感謝しています。目的…
最近のことですが、コードを全く書かない・書こうと思わない日がやってくることに気づきました。 新卒で現職に就いてからこんなことを感じたことはほとんどなかったので、自分でも驚いていますし、本当にショックです。ついに自分にも無気力期間がやってきて…
2023年3月31日をもってRuby2.7がEOL(EndOfLife)となりました。安らかにお眠りください...🪦 Ruby | endoflife.date 業務でRubyを触り始めたのが、ちょうど2.3~2.7系の時だったので感慨深いものがあります。 Ruby2.7のEOLに伴って、プロダクトのレポジトリ内でR…
はてなブログから素敵なメールが届きました。なんとブログを開設してから早くも4年が経過したそうです。 開設したのは学部を卒業して新卒になる前の2019年3月のこと。 当時の僕は、インターンからアルバイトを経てすでにエンジニアとして業務経験を積…
最近は技術書だけではなく、さまざまな書籍を読むようになりました。 今回はヴィクトール・E・フランクル著の「夜と霧」を読みました。今更、自分が紹介するまでもなく名著して語り継がれている書籍です。著者のフランクルが第二次世界大戦渦にて、ユダヤ人…
みなさんはRailsの開発にて、サービスクラス(ServiceObject)を使っているでしょうか。 モデルやコントローラーがファットになるのを防ぐために導入される設計方法で、ドメイン知識におけるサービス(eg: 商品の購入処理)の一連の処理をまとめたクラスを作成す…
Railsでトランザクションを扱いたい時はActiveRecordに実装されたtransactionメソッドを呼び出します。 ActiveRecord::Base::transaction do : end 今までRailsでトランザクションのブロックを宣言した時は、他のトランザクションからデータの取得、更新は出…
昨日、ミヒャイル・エンデ作の「モモ」という書籍を読了しました。 この本は児童文学として書かれているので、普段の自分とは縁もゆかりもない書籍です。一週間前にアップロードされたアバタローさんの解説動画を見て「何だこの本は...面白そう」と思い、い…
Railsではマイグレーションファイルを作成してマイグレートを実行することで、テーブルが作成されます。 非常に便利で手軽にテーブルの定義・作成ができるのですが、マイグレートされた結果、どのような型が選択されるのかが隠蔽化されるという問題があると…
2022/12/28に「Manning Publishing: Unit Testing Principles, Practices, and Patterns」の翻訳書である「単体テストの考え方/使い方」という書籍が発売されました。買うか迷っていたのですが、TDD(テスト駆動開発)で有名なt_wadaさんがツイートされている…
日々のリモートワークでミーティングをしていると、相手と同時のタイミングで話し始めてしまうことがよくあります。特に自分から話を振ってから、返答を待ってる間に何かを追加で自分が話し出した時なんかひどいもので、せっかく相手が話しだしてくれたのに…
データベースの設計において正規化の結果、中間テーブルを作ることがよくあると思います。 以下のようなテーブル群があったとします。登録されたユーザーと登録された商品を誰が出品した商品なのかを中間テーブルへ記録しています。 users products user_pro…
先日、Rubyで巨大な配列(Array)を扱うことがありました。 気になるのは巨大な配列を宣言したときのメモリ使用量です。試しに、要素数が10,000個の配列を宣言してみると89,712Byteほどメモリを使用していることが分かります。 require 'objspace' # memsize_o…
Rubyのブロック引数についてご存じでしょうか。 非常に便利な機能で皆さんもよく使っている、正確にはブロック引数に対してブロックを渡していますが、ブロック引数を定義する機会がほとんどない方も多いでしょう。 例: eachの場合 # do以降の処理がブロック…
ある日のこと。Rubyのコードを読んでいるとboolean型の値が引数となる関数の呼び出し処理を見て「なんじゃこりゃ...」という気持ちになりました。簡単な例を紹介します。 def say_hello(is_morning) if is_morning puts 'おはようございます' else puts 'こ…