2025-01-01から1年間の記事一覧
はじめに Ruby のコードを書いていると、 「変数を渡しているのに、なぜ呼び出し元が変わるの?」 「再代入すると変わらないのはなぜ?」 挙動の問題に出くわします。 自分でも理解していたつもりですがいざ人に説明しようとすると言葉に詰まってしまいます…
はじめに 柏rbは、2024年に千葉県柏市で誕生した地域コミュニティです。 言語や経験を問わず、どなたでもウェルカムな場となっています 定期的に開催していますので、ぜひ気軽に覗いてみてください [https://kashiwarb.connpass.com/:embed:cite] 取組内容…
はじめに hisakit.hatenablog.com 前回の記事では、 1 + 1 - 1 のような加減算を解析できるミニパーサーを作成しました。 しかし、そのときの実装は「再帰下降パーサー」と言いつつも、 再帰が1つも登場せず、ただの while ループで完結していました。 今回…
はじめに 柏rbで、何回か行ったワイガヤグループ会でパーサーに入門しました。 最初は何がなんだかわからないところからでしたが、3回ほど続けることや、ペアプロ・モブプロを行っていただくことで結構理解できたので、 集大成として、RubyでLLパーサーを作…
はじめに 柏rbは、2024年に千葉県柏市で誕生した地域コミュニティです。 言語や経験を問わず、どなたでもウェルカムな場となっています 定期的に開催していますので、ぜひ気軽に覗いてみてください [https://kashiwarb.connpass.com/:embed:cite] 今回の取…
はじめに この記事では、RubyでCSVを読み込むときに converters: :integer を指定したことで起きた予期せぬ挙動について紹介します。 RubyでCSVクラスを使って、読み込みを行っている方はぜひ参考にしてください 背景・動機 CSVを読み込んでデータベースに登…
はじめに さくらのVPSで動かしているバックエンド(Docker)を、GitHub Actions の手動トリガー(workflow_dispatch)でデプロイできるCD環境にしました。 コンテナイメージは GHCR(GitHub Container Registry) に push、VPS には SSH + Docker Compose で…
はじめに さくらのVPS上にホスティングしているフロントエンド(Vite + React + TypeScript)の静的サイトを、毎回手動でデプロイするのが大変なので、CD環境を作成してみました。 環境 モノレポ構成 Vite, React, TypeScript 手動でのデプロイは完了済 Ngin…
はじめに 柏rbは、2024年に千葉県柏市で誕生した地域コミュニティです。 言語や経験を問わず、どなたでもウェルカムな場となっています 定期的に開催していますので、ぜひ気軽に覗いてみてください [https://kashiwarb.connpass.com/:embed:cite] 今回の取…
はじめに この記事では、Ruby/Railsのメモ化 をハンズオンで確認します。 「メモ化をすると内部で何が起きるのか?」という疑問に対して、低レイヤ(参照・割り当て・GC)の視点で手を動かして確かめます。 背景・動機 Rails で I/O(DB/HTTP)を伴う処理に…
はじめに Rails 7.1.2 で 非カラム属性(non-column-backed attribute)に対して enum を再び使えるようになりました。ところが、この変更はブログ等であまり解説されておらず、理解に時間がかかったため、自分用の整理も兼ねて記事化します。 単なる使い方…
はじめに 今回の記事は、さくらVPSのようなIaaSを使って「サーバー構築からデプロイまで一から理解したい」 という思いから書いています。 普段はPaaSやホスティングを使えば簡単にWebアプリを公開できますが、あえてIaaSを選んで「サーバーの中で何が起きて…
はじめに 柏rbは、2024年に千葉県柏市で誕生した地域コミュニティです。 言語や経験を問わず、どなたでもウェルカムな場となっています 定期的に開催していますので、ぜひ気軽に覗いてみてください kashiwarb.connpass.com 今回の内容 テーマごとにチーム…
はじめに Railsのhas_oneやhas_manyといったアソシエーションは、モデル同士の関連を簡単に扱える強力な仕組みです。しかし、このアソシエーションメソッドを安易にオーバーライドすると、思わぬ副作用が発生し、予期しないオブジェクト生成やテスト失敗の原…
はじめに Railsのhas_oneやhas_manyといったアソシエーションは、モデル同士の関連を簡単に扱える強力な仕組みです。 しかし、このアソシエーションメソッドを安易にオーバーライドすると、思わぬ副作用が発生し、予期しないオブジェクト生成やテスト失敗の…
はじめに 柏rbは、2024年に千葉県柏市で誕生した地域コミュニティです。 言語や経験を問わず、どなたでもウェルカムな場となっています 定期的に開催していますので、ぜひ気軽に覗いてみてください kashiwarb.connpass.com 今回の内容 どんな勉強していく…
はじめに 複数ファイルをまとめてダウンロードしたい場面は、ファイル管理系のアプリやエクスポート処理でよくあります。 ただし React でこれを実現しようとすると、await や setTimeout に頼った実装では、ファイルサイズやネットワーク速度によって動作が…
はじめに この記事では、Raspberry Pi(ラズパイ)などの Linux 環境で、電源ON時に Python スクリプトを自動実行する方法を紹介します。 Linux には cron などの自動実行手段がありますが、「起動時に一度だけ実行したい」といった用途には systemd が使え…
はじめに ASTとはなにかというものを、簡単なコードを書きながら理解していく記事です。 今回は、parser を用いて Ruby のコードから AST(Abstract Syntax Tree)の構造を確認し、さらに Rubocop で簡単なカスタムCopを作成して、理解を深めてみました。 背…
はじめに 前回までのブログ hisakit.hatenablog.com hisakit.hatenablog.com 今回は「意外と使えた小物」と「結局使わなくなったもの」を特集してお届けします。 身の回りの整理や作業環境を整えていると、「ちょっと便利そう」と思ってつい買ってしまうこと…
はじめに TypeScript の discriminated union(判別可能なユニオン型)を導入することで、条件分岐をより安全かつ明示的に記述できるようになったことに気づいたので、それを共有します。 背景・動機 実務で、ユーザー情報の「登録」と「更新」を同じフォー…
はじめに 前回のブログは、こちらをご覧ください。 今回取り上げる周辺機器は、 デスク チェア の2つです。 背景・動機 前回も書きましたが、PC1台で始めたエンジニアライフ。 最初はそれでも問題なかったのですが、長時間デスクワークが続くと「もうちょっ…
はじめに エンジニアとして働き始めてから、気づけば2年が経ちました。 日々の開発の中で「もう少し快適に作業できたらなぁ」と感じる場面が増えてきて、少しずつ作業環境を整えてきました。 今回は、そんな中で実際に導入して「これは買ってよかった!」と…
はじめに Railsでビジネスロジックをサービスクラスに切り出すことはよくあると思います。 中でも「データを更新して状態を進める」ような処理では、ApplicationRecord.transaction を使って整合性を保つことが多いと思います。 今回は、あるサービスが内部…
はじめに 柏rbは、2024年に千葉県柏市で誕生した地域コミュニティです。 言語や経験に関係なく、どなたでもウェルカムな場となっています 定期的に開催していますので、ぜひ気軽に覗いてみてください kashiwarb.connpass.com 昨年、子どもが生まれ、参加…
はじめに Raspberry Pi(ラズパイ)を使い、Linuxの基礎知識を学習中です。 今回は、ラズパイのスクリプトを自動で定期実行できないかと思い、そんなときに使えるLinuxの機能「cron(クーロン)」を紹介します。 今回は、自分で初めてcronを使って「毎日定期…
はじめに hisakit.hatenablog.com 今回は、上記記事のBotに新機能を実装した話です 背景・動機 記事作成通知するBotを作成した結果、毎週のように通知されるようになりました。 そのおかげで、記事を毎週書くというプレッシャーがかかるようになったのですが…
はじめに Rails API を使っていると便利な仕組みも多い一方、気づきにくい落とし穴もあります。 今回はwrap_parametersのいうRailsが用意している機能についてです 背景・動機 フロントエンドから以下のような JSON が送られてきたのですが: { "name": "Ali…
はじめに 特に「ネタはあるけど、なかなか書き出せない」「つい忘れてしまう」… そんな課題を解決するために、Slackで自分に向けて「書いてください」とリマインドしてくれるBotを作りました。 そして、ブログネタは GitHub Issues で管理して、毎週Slackに…
今まで、何気なく使っていた save! メソッドですが、どんな例外を返しているのかあまり意識していませんでいた。 今回は、どのような例外を返しているのか調べ、追加でvalidate!についても調べて見ました。 save! メソッドの例外 以下のような例外が発生しま…