タケユー・ウェブ株式会社のフィード

https://zenn.dev/p/takeyuwebinc

Ruby on Rails によるWebサービス受託開発をしています。 中小規模のWebサービスの新規開発の他、他の個人開発者などから引き継いで保守運用を行ったりしています。 新規開発、お手伝いや顧問、レガシーなRailsプロジェクトの保守など、ニーズにあわせて対応できます。ご相

フィード

記事のアイキャッチ画像
Rails + OTel + AWS X-Ray で実現するリクエストの構造化トレース
はてなブックマークアイコン 1
タケユー・ウェブ株式会社のフィード
Rails 8.1アプリケーションにOpenTelemetry(OTel)の自動計装を導入すると、HTTPリクエストの処理がController、DBクエリ、View描画といったSpan単位で構造化され、AWS X-Rayのタイムラインでボトルネックを一目で特定できるようになります。テレメトリの中継にはADOT Collector(AWS提供のOTel Collector)を使い、SigV4(AWS APIリクエストの標準的な署名方式)認証付きでX-RayのOTLPエンドポイントに送信します。Docker Compose環境で再現可能な構成を、本記事で一通り構築します。!この記事の執...
4日前
記事のアイキャッチ画像
Web Push APIはなぜ外部サービスなしで通知を届けられるのか — 仕組みとRails実装
タケユー・ウェブ株式会社のフィード
Web Push APIはW3C/IETF標準のプロトコルであり、FCMやOneSignalといった外部サービスのアカウント登録やAPIキー取得なしに、サーバーからブラウザへプッシュ通知を送信できます。アプリサーバー、プッシュサービス、ブラウザの3者間で、VAPID認証による身元証明とペイロード暗号化によるエンドツーエンドの秘匿性が標準仕様として組み込まれています。Railsではweb-push gemを使えば、これらのRFC準拠の暗号処理を意識せずに実装できます。!この記事の執筆にあたり、AIによる支援(レビュー、文章の整形、ファクトチェック)を受けています。内容の正確性については...
11日前
記事のアイキャッチ画像
RubyLLMで始めるLLM Agentプログラミング — 構成要素の理解から実装まで
タケユー・ウェブ株式会社のフィード
LLM Agentは「Agent定義」「Tool Calling」「構造化出力」「マルチエージェントワークフロー」の4つの構成要素に分解できます。Anthropic、OpenAI、Googleが公開しているエージェント設計ガイドでも、表現は異なるものの「LLM + ツール + オーケストレーション」という共通の構成に収束しています。RubyLLMを使えば、これら4つの構成要素をRails開発者が馴染みのあるパターン(クラスマクロ、ActiveRecord統合、Pure Rubyによるワークフロー構成)で実装できます。本記事では、技術記事自動作成ワークフローのデモアプリを題材に、各構成要素...
18日前
記事のアイキャッチ画像
Kamalは常にHEADをビルドする — リリースタグとpre-buildフックで本番デプロイを制御する
タケユー・ウェブ株式会社のフィード
Kamal v2はVERSION環境変数を指定しない場合、HEADのコミットSHAをDockerイメージのタグ名に使います。ではVERSIONにタグ名やコミットIDを指定すれば、そのコミットがビルド・デプロイされるのでしょうか?されません。VERSIONはイメージのタグ名を決めるだけであり、ビルド対象は常にHEADです。この仕様を理解していないと、意図しないコミットが本番に出る事故 につながります。対策として 「リリースタグ付きコミットからのみ本番ビルドを許可する」 運用ルールを採用し、Kamalのpre-buildフックでこのルールを機械的に強制する実装を紹介します。!この記事の執...
25日前
記事のアイキャッチ画像
Rails enum のカラム型、integer・string・PostgreSQL native enum をどう選ぶか
タケユー・ウェブ株式会社のフィード
Rails の ActiveRecord::Enum で、カラム型に integer・string・PostgreSQL native enum のどれを選ぶべきか。多くのケースでは string 型 + CHECK 制約が最適です。本記事では3つの選択肢のトレードオフを整理し、この判断に至る根拠をデータベースごとに示します。!この記事の執筆にあたり、AIによる支援(レビュー、文章の整形、ファクトチェック)を受けています。内容の正確性については可能な限り筆者が確認していますが、もしも誤りを見つけた場合はコメントでお知らせ頂けると嬉しいです。 背景: なぜ enum のカラム型が...
1ヶ月前
記事のアイキャッチ画像
Dev ContainerでClaude Codeのプラグインマーケットプレイスのプラグインを読み込めなくなる問題を解決する
タケユー・ウェブ株式会社のフィード
Dev Container環境でホストのClaude Code設定をバインドマウントで共有すると、プラグインマーケットプレイスからインストールしたプラグインをコンテナ内で読み込めなくなります。バインドマウント先をホストと同じパスに変更し、CLAUDE_CONFIG_DIR環境変数を設定することで、ホスト・コンテナ双方向のパス解決を実現できます。!この記事の執筆にあたり、AIによる支援(レビュー、文章の整形、ファクトチェック)を受けています。内容の正確性については可能な限り筆者が確認していますが、もしも誤りを見つけた場合はコメントでお知らせ頂けると嬉しいです。 背景Claude...
1ヶ月前
記事のアイキャッチ画像
RailsアプリにLLMオブザーバビリティを導入する — Langfuse + langfuse-rb gem
タケユー・ウェブ株式会社のフィード
RailsアプリケーションでLLMを活用する際、プロンプトのバージョン管理やLLM呼び出しの追跡が運用上の課題になります。この記事では、LLMオブザーバビリティプラットフォームLangfuseとlangfuse-rb gemを使い、Railsプロジェクトへのインストール方法と、プロンプト管理・トレーシングの基本を解説します。!この記事の執筆にあたり、AIによる支援(レビュー、文章の整形、ファクトチェック)を受けています。内容の正確性については可能な限り筆者が確認していますが、もしも誤りを見つけた場合はコメントでお知らせ頂けると嬉しいです。 背景 — LLMアプリケーション開発の...
2ヶ月前
記事のアイキャッチ画像
Dockerのuserns-remapが有効な環境でボリュームマウントの書き込みに失敗する
タケユー・ウェブ株式会社のフィード
TL;DR現象: コンテナ内でrootなのにマウントしたボリュームに書き込めない原因: userns-remapによりコンテナ内のUID=0がホスト上では別のUID(例: 165536)にマッピングされている解決策: ホストディレクトリの所有者をマッピング後のUIDに変更する 問題ホストの/mnt/shared/storageをコンテナ内の/app/storageにマウントしたところ、書き込みがPermission deniedで失敗した。 ホスト側$ ls -al /mnt/shared/drwxr-xr-x 2 app-user app-user 1...
4ヶ月前
記事のアイキャッチ画像
Rails Engine で tailwindcss-rails を使う方法
タケユー・ウェブ株式会社のフィード
はじめにRails Engineを使ったモジュラーモノリス構成において、各Engine独立したTailwindCSSの管理方法について、tailwindcss-rails gemを用いた実装方法を詳しく解説します。https://railsguides.jp/engines.htmlhttps://github.com/rails/tailwindcss-rails 課題Rails Engineでtailwindcss-railsを使う際の主要な課題:ソースファイルパスの解決: 親アプリケーションのディレクトリから見た、TailwindCSSソースファイルのパスがE...
5ヶ月前
記事のアイキャッチ画像
Claude Code で作業プロファイル機能を実装して効率的にAI活用する
タケユー・ウェブ株式会社のフィード
はじめにAI エージェントを活用した開発では、適切なコンテキスト設定が作業効率を大きく左右します。Claude Code では、 CLAUDE.md にコンテキストとして必要な指示や説明を記載することで、プロジェクト固有の事情にも対応することができます。本記事では、私が開発プロジェクトに実装した作業プロファイルについて、設定方法からメリットまでを解説します。 作業プロファイルとは作業プロファイルは、作業の種類(開発・レビューなど)に応じて、Claude Code のコンテキストを動的に切り替える仕組みです。プロファイルごとに特化したプロンプトを用意しておくことで、特定のタス...
5ヶ月前
記事のアイキャッチ画像
Sentry Logsで実現するRailsアプリの構造化ロギング
タケユー・ウェブ株式会社のフィード
はじめにRailsアプリケーションの運用において、ログの管理は問題発生時のデバッグやサービス監視のために重要な構成要素です。しかし、従来のプレーンテキストログでは、特定の条件に合致するログを正確に抽出したり、ログを集計・分析したりすることが困難でした。この記事では、Sentry Logs と ActiveSupport::Notifications を組み合わせて、Railsアプリケーションに構造化ロギングを導入する方法を解説します。構造化ロギングにより属性ベースのログ検索・集計が可能になり、さらにSentry Logsを使うことで、エラー、トレース、ログを一つの画面で確認できる...
6ヶ月前
記事のアイキャッチ画像
Real World Kamal
タケユー・ウェブ株式会社のフィード
対象読者Kamal の仕組みを知りたいKamal のメリットを知りたいKamal の実際の運用方法を知りたい※デプロイツールって何?Dockerって?という初学者は対象としていません。※Kamalの基本的なインストール方法、導入方法については詳しく説明していません。 はじめにこの記事では、Kamal v2を実際に案件で使ってみてわかったことをもとに、実践的なKamalの使い方を紹介します。Kamalは、RenderやECS+Fargateなどの商用サービスと違い特定のプラットフォームに依存せず、昔ながらのCapistranoなどと比べてデプロイ先の環境構築が容易...
1年前
記事のアイキャッチ画像
カスタムバリデーションはカスタムバリデータクラスで書こう
タケユー・ウェブ株式会社のフィード
!カスタムバリデータを使うと、モデルクラスから本質的でないロジックを追い出し、コードやテストを見通し良く保つ ことができます。 この記事でわかることActiveModel::EachValidator の使い方テストの書き方 事の起こりある案件で wareki gem を使って入力された日付を和暦に変換して表示しています。ある日お客様が入力した日付に誤りがあり、和暦が存在しない年がデータベースに登録され、ページを表示する際にエラーが発生し、表示できなくなってしまいました。その際はデータを修正することで復旧しましたが、次回から同じ誤りが発生しないよう、バリデーシ...
1年前
記事のアイキャッチ画像
現実のRuby/Railsアップグレード
タケユー・ウェブ株式会社のフィード
!この記事は、Kaigi on Rails 2024 で発表した内容の原稿をもとに作成しました。 対象読者課題を感じているけどどのように対処すればよいかわからない中級者課題に気づいていない初級者あるあるを楽しめる上級者 はじめにRuby on Railsアプリケーションを最新の状態に保つことは、新機能の利用だけでなく、セキュリティやパフォーマンスの面でも重要です。定期的なアップグレードは、アプリケーションの堅牢性を確保し、最新のフレームワークの進歩を活用するために不可欠です。Railsアプリケーションのアップグレードは、決して簡単ではありません。計画、テスト、...
1年前
記事のアイキャッチ画像
Windowsユーザーがmacを使う必要があるときにしたキーボード設定
タケユー・ウェブ株式会社のフィード
私は普段の開発業務にWindows11(+WSL2)を使用していますが、今回必要があってmac(Sonoma)を使うことになりました。その際キーボードの違いにストレスを感じることが多かったのですが、いくつかの設定を行うことで、これを改善できました。 環境macOS Sonoma 14.4.1REALFORCE 日本語フルキーボード(Windows)KVMによりWindows機とディスプレイと入力機器を共有 設定 Karabinerのインストールhttps://karabiner-elements.pqrs.orgインストール・起動後、案内に従って『セキュリ...
2年前
記事のアイキャッチ画像
ActiveRecordでCTEを使ってクエリを分割して個別にテストする
タケユー・ウェブ株式会社のフィード
Rails 7.1 以降では、任意の ActiveRecord Relation をCTEとして使用することができます。 共通テーブル式(CTE)を使うと、複雑なクエリ名前付きの一時結果セットに分割でき、クエリの可読性を高めるのに役立ちます。ActiveRecordでは .with クエリーメソッドに任意の ActiveRecord Relation を渡すことでCTEを定義できます。これは個々の結果セットをテスト可能になることを意味します。複雑なクエリを分割することで、テストしやすくなり、保守性を高めることにもつながります。ただし現時点では再帰的に利用することはできません。https...
2年前
記事のアイキャッチ画像
Cache-Control: public にする
タケユー・ウェブ株式会社のフィード
Railsアプリケーションで、特定のページのみCDNやブラウザにキャッシュさせたい場合、Cache-Control: public ヘッダーの付与と、応答に Session Cookie が含まれないようにします。 サンプルコードapp/controllers/concerns/enable_cache.rbmodule EnableCacheControlPublic extend ActiveSupport::Concern included do before_action -> do # このリクエストはSessionを使わないし、応...
2年前
記事のアイキャッチ画像
ActiveStorage::DiskController が返すファイルの Cache-Control ヘッダを設定する
タケユー・ウェブ株式会社のフィード
ActiveStorage のディスクアダプタを利用している場合、応答として返すバイナリデータについて、キャッシュ制御したいとき、どのようにするか説明します。 Cache-Control; public を返すことで、ブラウザキャッシュや、CDNでのキャッシュを活用し、サーバとネットワークへの負荷の軽減に役立ちます。動作確認したRailsのバージョン:7.1.3.2オープンクラスを使って ActiveStorage::DiskController に before_action を設定します。config/initializers/active_storage.rbRails....
2年前
記事のアイキャッチ画像
自由に働く技術
タケユー・ウェブ株式会社のフィード
はじめに私は長年にわたり自由に働くことを選んできました。その理由を紹介しながら、自由に働くために心掛けていることについてご紹介します。変化し続けるツールの使い方よりも、根本的な考え方・心構えの話になります。 筆者について私は2008年11月に24歳で個人事業主として独立開業し、2016年に法人化しました。2018年には数名の社員を雇用しましたが、現在は一人会社として活動しています。リモートワークは開業当時から行っていますので、15年 ほどのキャリアとなります。現在はWebサービス開発の受託開発や事業会社の技術支援を行う傍ら、Saitama.rbという地域Rubyコミュニテ...
2年前
記事のアイキャッチ画像
CDKで別のリージョンのリソースを使用する方法
タケユー・ウェブ株式会社のフィード
はじめにCDKを使用していると、時々異なるリージョンにまたがるリソースを利用したい場合があります。例えば、CloudFrontディストリビューションで使用する証明書は必ず us-east-1リージョンである必要があります。このような場合、CDKでどのように対処すればよいかを調べました。 この記事の対象読者CDKで構成管理しているエンジニア この記事に書くことカスタムリソースの使用例 この記事に書かないことCDKについての説明カスタムリソースとは何か? 方法こちらのIssueが参考になりました。[lambda] Lambda@Edge supp...
2年前