-
「items.map(&:name)」が動く仕組み――&: 記法の裏にある巧妙なハック
Ruby で配列を処理していると、何度もお世話になる短縮記法があります。それが「&: トリック」、通称「アンパサンド・コロン(pretzel colon)」と呼ばれる書き方です。 words = [would, you, like, to, play, a, game?] # この書き方が... words.map &:length # ...実質的にはこれと同じ意味になります: words.map { |w| w.length } 筆者は長い間、この &: 構文を「演算子の一種」だと思い込んでいました。ところが実際にはそうではありません。これはもともと Acti
-
`top`と`ps`で表示されるRubyスクリプトのプロセス名を変更する方法
LinuxやOS Xでプログラムを実行すると、そのプログラムは必ず「プロセス」として動作します。そして、すべてのプロセスには名前が付けられています。この名前は、psやtop、htopといったコマンドを実行したときに目にするものです。 htopでは、右端の列にプロセス名が表示されます。 デフォルトのプロセス名の課題 デフォルトでは、プロセス名は実行中のプログラムを含む実行ファイルの名前から自動的に決まります。多くの実行ファイルにとってこれは理にかなっています。たとえば「less」コマンドを実行すれば、そのプロセス名が「less」になるのは自然なことです。 しかし、コマンドラインからRu
-
Rackアプリケーションで受信メールを処理する「Incoming!」の使い方
クライアントから突然電話が… クライアントは、自分のアプリで受信メールを処理したいと言っています。まるでBasecampのように。 「問題ないよ」と思うでしょう。多くのサービスがPOSTリクエスト経由でメールをアプリに送信してくれるのだから、簡単なはずです。本当に? 実は、そう甘くありません。 各サービスは独自のフォーマットを採用しています。パース済みのメールを送ってくるものもあれば、生データを送るものもあります。認証署名付きのサービスもあれば、そうでないものもあります。 この面倒な工程を丸ごとスキップして、標準的(よく知られた)なRubyオブジェクトとして直接扱えたら素敵だと思いま
-
本番環境でRubyGems.orgを使うべきでない理由と、自前gemホスティングの始め方
本記事は、gemを自前でホストする方法を解説するコラム+ハウツーガイドです。 最初に断っておきます。gemは素晴らしいものであり、RubyGems.orgも優れたサービスです。 ……しかし最近、アプリに新しいgemを追加するたびに、なぜか不安な気持ちになるようになりました。考えてみれば考えるほど、私たちのgemの使い方は単なる欠陥どころか、いつ爆発してもおかしくない時限爆弾なのではないかと思うのです。 ソーシャルエンジニアリングの実証実験 数日前、RubyNationというカンファレンスで、Ben Smithによる「Hacking With Gems」という印象的な講演がありました。
-
Rails × Hotwire入門:JavaScriptを書かずにSPAのような高速Webアプリを作る方法
ページ遷移やフォーム送信を高速化したい、複雑なページをコンポーネント単位に分割したい——しかもJavaScriptのコードを一切書かずに。そんな願いを叶えてくれるのがHotwireです。本記事では、サーバーサイドレンダリングを実現するツール「Hotwire」を活用して、Railsアプリケーションを次のレベルへ引き上げる方法を、実例を交えながら詳しく解説します。 Hotwireとは? Hotwireは、JSONの代わりにHTMLを通信経路上でやり取りすることで、JavaScriptを書かずにモダンなWebアプリケーションを構築できるフレームワークです。HTMLベースの配信により、ページの表示
-
Rubyニュースブリーフ 2021年Q3:Rails 7 Alpha登場、RubyConf 2021開催へ
Honeybadgerが四半期ごとにお届けするニュースブリーフでは、プログラミングコミュニティの重要な動向をコンパクトにまとめてご紹介しています。情報収集にかかる時間を削減し、本当に重要な作業に集中できるよう、編集部がニュースを厳選しました。 本ブリーフは、以下のカテゴリーで構成されています。 イベント:カンファレンスやミートアップなど、今後開催予定および直近で開催されたイベント情報 セキュリティ:最近報告された脆弱性情報 プロジェクト:主要なコミュニティプロジェクトに関するニュース 注目トピック:コミュニティで話題になっている大きなテーマのまとめ その他の注目コンテンツ:ほかのセクショ
-
ActiveSupportの#descendantsメソッド徹底解説:Rubyの継承とモジュールの仕組みから実践的な活用法まで
Railsは、Rubyの組み込みオブジェクトに多くの機能を追加しています。これは「Rubyの方言」とも呼ばれ、Rails開発者が1.day.agoのようなコードを書ける理由でもあります。 こうした追加メソッドのほとんどはActiveSupportに含まれています。今回は、その中でもやや知名度の低い、ActiveSupportがClassクラスに直接追加しているdescendantsメソッドについて掘り下げていきます。このメソッドは、呼び出したクラスのすべての子孫クラスを返します。たとえばApplicationRecord.descendantsを実行すると、アプリケーション内でそれを継承して
-
RailsアプリでDynamoDBを活用する方法 ― Dynamoid gem入門
DynamoDBは、キーバリュー型とドキュメント型のデータ構造を提供するNoSQLデータベースです。まずはここを整理してみましょう。この記事を読んでいる開発者の多くは、明確に定義されたスキーマと、テーブル・行・列へ正規化されたデータを持つ従来のリレーショナルデータベース(RDBMS)に慣れていることと思います。テーブル同士は外部キーによる「リレーションシップ」で結び付けられていますよね。 それに対してDynamoDBはスキーマレスです。すべてのテーブルにはプライマリキーが必要ですが、それ以外の非キー属性には制約が一切ありません。「では、どんな場面でこれが有利になるのか?」という疑問が湧くかもし
-
Rubyで構築するGoogle Cloud Functions:OTP認証システムの実装からテスト、デプロイまで
サーバーレス関数は、クラウドサービスを開発・デプロイするための新しいプログラミングパラダイムです。サーバーレスの世界では、バックエンドサービスのプロビジョニング、保守、スケーリングといった作業をすべてクラウドプロバイダーに任せることができます。これにより、開発者は本来解決すべき課題に集中できるようになり、開発生産性が大幅に向上します。サーバーレス関数には多くのメリットとデメリットがありますが、構築時に検討すべきポイントの一つが「言語サポート」です。近年、GoogleはGoogle Cloud FunctionsにおけるRuby 2.7のサポートを発表しました。本記事では、Rubyを使ったサーバ
-
Dry Monadsで実現するRailway Oriented Programming(鉄道指向プログラミング)入門
エラーハンドリングは、あらゆるプログラムにおいて不可欠な要素です。コードの実装過程でどのようなエラーが発生しうるかを事前に想定し、それぞれのエラーが「どの段階で」「なぜ」発生したのかを適切に説明できる出力を返すことが重要です。しかし同時に、その実装によってコードの可読性や保守性が損なわれては本末転倒です。 まずは、多くの方が抱くであろう疑問から始めましょう。Railway Oriented Programming(鉄道指向プログラミング)とは何なのでしょうか? Railway Oriented Programming(ROP)とは ある目的を達成する関数は、より小さな関数の組み合わせ(合成
-
RubyでAWS Lambda関数を書いてみよう!初心者向け実践ガイド
AWS Lambdaを使えば、オーバーヘッドを最小限に抑えながらスケーラブルな関数を構築できます。Railsアプリ全体を作成・ホスト・保守する代わりに、Lambda関数を活用すれば、個々のイベントに対して独立して応答する仕組みを簡単に実現できます。本記事では、AWS初心者のあなたを、自分自身のRuby製Lambda関数を書けるレベルまで導きます。 Lambdaは、サーバーを管理することなく、イベントに反応してコードを実行できるサービスです。このイベント駆動型アーキテクチャにより、コードが実際に稼働している時間にのみ課金され、アイドル状態の間は費用が発生しません。LambdaはS3バケットから
-
TurbolinksからTurboへの移行完全ガイド:Hotwireで実現する高速なRailsアプリ
Turbolinksは、Webアプリケーションのページ遷移を高速化する優れたツールでしたが、現在では活発な開発が終了しています。その後継として登場したのが、Hotwireファミリーの一部である「Turbo」という新しいフレームワークです。 開発チームは、Turbolinksから抽出されたコンセプトを、フレーム、フォーム送信、ネイティブアプリなど、より高速なWebを実現するためのさまざまな機能に応用できると考えました。 この記事では、Turbolinksの後継であるTurboフレームワークについて解説し、Turbolinksで最も重要かつ頻繁に使われていた機能をTurboでどのように扱うのかを、
-
Railsアプリでユーザー権限を管理する完全ガイド〜Policy Objectパターンの実践〜
Webアプリケーションにおいて、特定のロール(役割)や権限をユーザーに割り当てる機能は、非常によくある要件です。 多くのWebアプリでは、管理者と一般ユーザーでアクセスできる範囲を分けています。これを実現する最もシンプルな方法は、「そのユーザーが管理者かどうか」を判定する真偽値(boolean)を持たせることです。しかし、実際のアプリケーションでは、ロールや権限の要件はもっと複雑になることが少なくありません。 アプリケーションの価値は、特定のデータや操作へのアクセスを制限することにあります。この部分の実装は絶対に失敗したくないところです。本記事では、Ruby on Railsアプリケーションに
-
Railsの隠れた宝石:ActiveSupportキャッシュのincrement/decrementメソッド
Railsは、特定の状況に役立つ便利なツールが数多く組み込まれた大規模なフレームワークです。このシリーズでは、Railsの膨大なコードベースの中に隠れている、あまり知られていないツールを紹介していきます。 本記事では、Rails.cacheが提供するincrementメソッドとdecrementメソッドについて解説します。 Rails.cacheヘルパーとは Rails.cacheは、アプリケーションのキャッシュを操作するための入り口です。同時に抽象化レイヤーでもあり、内部で実際にどのキャッシュ「ストア」が使われているかにかかわらず、共通のAPIでアクセスできるようになっています。Rai
-
RuboCopで実現するRubyコードのリントと自動フォーマット徹底ガイド
リンティング(Lint)とは、ソースコードに含まれるプログラム上の誤りやスタイル違反を自動的に検出する仕組みです。このチェックは「リンター」と呼ばれる静的コード解析ツールによって行われます。一方、コードフォーマッターは、あらかじめ設定されたルールセットにソースコードを厳密に準拠させることに特化したツールです。一般的にリンターは違反を報告するだけで、実際の修正はプログラマーの手に委ねられます。それに対してコードフォーマッターは、ルールを直接ソースコードに適用し、フォーマットのミスを自動的に修正してくれます。 プロジェクトで一貫性のあるコードスタイルを実現するには、通常リンティング用とフォーマッ
-
KafkaとKarafkaで実現するRailsアプリのイベントストリーミング徹底解説
現代の企業は、大量のデータをリアルタイムに処理・共有し、そこからインサイトを得たり、より魅力的な顧客体験を創出したりすることが求められています。そのため、従来型のデータ処理の手法ではもはや時代に対応できなくなっています。 これを実現するには、膨大なデータをできるだけ高速に処理し、さらなる加工のために他のサービスへ送信する必要があります。そして、こうした素早い処理の中で重要になるのが「イベント発生時にコンシューマーへ通知する仕組み」です。これこそがイベントストリーミングが活躍する場面です。 本記事では、実際にGitHub上で公開しているサンプルリポジトリを使いながら解説を進めていきます。 イベン
-
隠れた宝石:ActiveRecordのstoreとstore_accessor徹底解説
Railsは、さまざまな場面で役立つ便利な組み込みツールを多数備えた大規模フレームワークです。このシリーズでは、Railsの巨大なコードベースの中に隠れている、あまり知られていないツールを紹介していきます。 本記事では、ActiveRecordが提供するstoreメソッドとstore_accessorメソッドに焦点を当てます。どちらも、JSONやYAMLといった構造化データをデータベースの1つのカラムに格納するユースケースを想定したものです。store_accessorは、getterメソッドでモデルを汚すことなくこれらのデータへアクセスできる便利な手段を提供し、storeはさらに一歩進んで
-
既存のRailsアプリケーションをDockerでコンテナ化する完全ガイド
ソフトウェアのコンテナ化とは、開発やデプロイを容易にするために、アプリケーションを標準化された単位にパッケージングすることです。コンテナには、アプリケーションのコードとその依存関係がすべてまとめられています。コンテナは完全に独立して動作でき、ソフトウェア本体、ランタイム環境、システムライブラリをひとつのパッケージとして内包します。コンテナを活用すれば、開発チームと運用チームは、環境に左右されずにソフトウェアを同じように動作させられるようになります。コードとインフラを分離することで、「コンテナ化」されたアプリはローカル環境でもテスト環境でも本番環境でも、まったく同じ挙動で実行されます。 Dock
-
RailsでElasticsearchを使った全文検索の実装方法を徹底解説
Elasticsearchは、現在最も人気のある検索エンジンのひとつです。Netflix、Medium、GitHubといった大手企業もこよなく愛用し、本番環境で積極的に活用しています。 Elasticsearchは非常に強力なツールで、主なユースケースとしては全文検索、リアルタイムログ分析、セキュリティ分析などが挙げられます。 残念ながら、RailsコミュニティではElasticsearchがあまり注目されていません。そこで本記事では、次の2つを目標にその状況を変えていきます。Elasticsearchの基本概念を読者に紹介することと、Ruby on Railsでの使い方を実践的に示すことです
-
Rubyプログラミングは何に使われている?言語の特徴と活用事例を徹底解説
プログラミング言語について少し調べただけでも、Rubyとその人気Webフレームワーク「Ruby on Rails」の名前を耳にすることでしょう。インターネットの大きな部分はRubyによって構築されており、Web以外にも多くのアプリケーションがこの言語で作られています。では、Rubyとはどのようなプログラミング言語で、具体的に何に使われているのでしょうか? Rubyプログラミング言語とは?Rubyと他のプログラミング言語の比較Rubyプログラミングは何に使われている?Rubyプログラミングはどこで学べる? Rubyプログラミング言語とは? Rubyは、フロントエンドおよびバックエンドのWeb開発