-
RubyのTime・Dateクラス徹底解説!時刻と日付を自在に操るテクニック
Timeは、Rubyにおいて特定の時点(日付と時刻)を表現するためのクラスです。 この記事を読み終える頃には、Rubyで時刻や日付を自由に扱うために必要な知識をすべて身につけられるでしょう。 この記事で学べること 文字列をTimeオブジェクトに変換する方法 時刻を構成要素(日・時・ミリ秒など)に分解する方法 RubyにおけるDate・DateTime・Timeクラスの使い分け 任意の形式で時刻をフォーマットする方法 2つのTimeオブジェクトの差分を求める方法 それでは始めましょう! RubyのTimeクラスとは RubyのTimeクラスを使うと、日付と時刻をひとつのオブジェクトとして表現
-
Rubyのfreezeメソッド完全解説 – オブジェクトの可変性と不変性を理解しよう
オブジェクトが「変更可能(ミュータブル)」であるとは、どういう意味なのでしょうか? 難しい言葉に構える必要はありません。「可変性(ミュータビリティ)」とは、単純に「オブジェクトの内部状態を後から変更できる」という意味です。これはすべてのオブジェクトのデフォルトの挙動であり、freeze(凍結)されたオブジェクトや、言語側で特別扱いされている一部のオブジェクトだけが例外となります。 つまり、Rubyのすべてのオブジェクトが変更可能というわけではないのです。 なぜ数値やシンボルは変更できないのか? たとえば、整数・シンボル、さらにはtrueやfalse(これらもすべてオブジェクトです)が変化するの
-
これまでに見たことのないRubyトリック11選+ボーナス技
ちょっとしたRubyトリックをお探しですか? ここにありますよ! この記事では、筆者のお気に入りのトリックをいくつかご紹介します。どれも短いコードで試せるものばかりなので、ぜひ実際に手を動かしながら読んでみてください。 目次 1. ディープコピー(Deep Copy) 2. ラムダを呼び出すさまざまな方法 3. 初期値入りの配列を作成する 4. true・false・nilもオブジェクト 5. ラムダは引数に厳密、Procはお構いなし 6. irbやファイルなしでコードを直接実行する 7. コマンド1行で作る自作ミニirb 8. オブジェクトの凍結を解除する(危険!) 9. 特別なIDを持
-
【Ruby入門】ブロック・Proc・Lambdaの違いを徹底解説!yieldやクロージャの仕組みまで完全ガイド
Rubyにおけるブロック(blocks)、Proc、Lambda。 これらは一体何なのでしょうか? どのように動作するのか? そして、それぞれにどんな違いがあるのでしょうか? この記事を読めば、それらすべてがわかります。さらに実践的な知識も一緒に身につけましょう! 目次1. Rubyのブロックを理解する2. yieldキーワードの使い方3. 暗黙的ブロックと明示的ブロック4. ブロックが渡されたかどうかを確認する方法5. Lambdaとは何か?6. LambdaとProcの違い7. クロージャ(Closure)8. Bindingクラス9. まとめ Rubyのブロックを理解する Rubyのブ
-
Ruby MRIのソースコードを読んで内部構造を学ぶ方法
Rubyを使い込んでいると、その裏側でどのように動作しているのか気になったことはありませんか? Rubyの内部に深く踏み込む方法の一つが、それを実現しているソースコードを読むことです。C言語がわからなくても、興味深い発見はたくさんあります。 ソースコードはRubyのGitHubリポジトリで公開されています。 理想を言えば、クラス名やメソッド名を簡単に検索できるCodequeryのようなツールを使うのがおすすめです。 コアクラスを探検する 調査のほとんどはルートフォルダで行うことになります。ここには、object.cにあるObjectや、array.cにあるArrayなど、すべてのコアクラスのソ
-
RubyのEnumerableモジュール入門ガイド〜筆者イチオシのeach_consメソッドを徹底解説〜
Enumerableモジュールとは? Enumerableは繰り返し処理(イテレーション)用メソッドのコレクションで構成されるRubyのモジュールであり、Rubyが多くの開発者に愛される大きな理由のひとつとなっています。 Enumerableには、次のような便利なメソッドが含まれています: map select inject Enumerableのメソッドは、ブロックを渡すことで動作します。 ブロックの中には、各要素に対して実行したい処理を記述します。 例えば: [1,2,3].map { |n| n * 2 } このコードを実行すると、すべての数値が2倍になった新しい配列が得られます
-
RubyでTwitter APIを使う方法|ツイートの取得・保存・自動投稿まで解説
RubyでTwitterアプリケーションを作ってみたいと思ったことはありませんか?この記事では、Twitter APIと連携するプログラムの作り方を、特定キーワードの検索や自動返信といった実例とともに、ステップバイステップでわかりやすく解説します。 それでは始めましょう! 事前準備 まず最初に、twitter gemをインストールします。以下のコマンドを実行するだけで完了する、とても簡単な作業です。 gem install twitter 続いて、https://apps.twitter.com/ にアクセスし、新しいアプリケーションを作成します。画面右側の「Create New App」
-
Rubyメタプログラミング入門:Rails・Sinatra・Paperclipの実例で学ぶ
Rubyのメタプログラミングについて、これまでに読んだことや耳にしたことがある方は多いでしょう。 しかし…… 具体的なコード例がなければ、その仕組みは少し分かりにくいものです。 そこで本記事では、Rubyメタプログラミングを活用している有名なオープンソースプロジェクトを実際に見ていきます。 取り上げるのは次のプロジェクトです: Rails Sinatra Paperclip gem これらはすべて、何らかの形でメタプログラミングを使っています。 それでは、実際のコードを読み解きながら、それぞれが何を行っているのかを詳しく見ていきましょう! Railsの例 Railsはメタプログラミングを多
-
加重乱数(重み付き乱数)を生成する方法【Ruby実装例つき】
通常、乱数は「一様分布(uniform distribution)」に従います。これは、どの数値が選ばれる確率もすべて等しいという意味です。 しかし、特定の数値が他の数値よりも高い確率で選ばれるようにしたい場合は、別の戦略が必要になります。それが加重乱数ジェネレーター(重み付き乱数生成器)です。 実際の応用例としては、次のようなものが挙げられます。 ゲーム内のルートテーブル:敵が異なるアイテムを、それぞれ異なるドロップ率で落とす仕組み 抽選会:抽選券を多く持っている人ほど、当選する確率が高くなる仕組み シンプルな方法:配列を使う戦略 抽選会の例で考えてみると、すぐに思いつく解決策があります
-
Ruby標準ライブラリの便利なクラス5選!実用的なコード例付きで解説
Ruby標準ライブラリとは、Ruby本体に同梱されているものの、言語そのものには含まれていないモジュールやクラスの集まりのことです。 これらのクラスは、以下のようなさまざまなユーティリティを提供しています。 Base64エンコード・デコード 素数の生成 DNS名前解決 この記事では、その中から特に役立つ5つのクラスを、実用的なコード例とともに紹介します。 RubyのLoggerクラスでログ出力 エラーやデバッグメッセージを記録したいときは、Ruby標準のLoggerクラスが便利です。ログ出力に必要な機能がすべて揃っています。 Loggerを使うには、Loggerオブジェクトを生成して、出力
-
RubyのRangeとは?基本構文から内部の仕組みまで徹底解説
Range(レンジ)とは何か? RubyにおけるRange(範囲オブジェクト)は、開始値と終了値を持ち、その2つの値にまたがる連続的なシーケンスを簡単に作成できるオブジェクトです。 例えば、1から20までの連続した整数や、aからzまでのアルファベットなどを表現できます。 この記事で解説する主なトピック: RubyでのRangeの作り方 stepメソッドとinclude?メソッドの使い方 Rangeの内部的な仕組み それでは早速見ていきましょう! Rangeの基本構文をおさらい まずは、Rubyの基本的なRangeの書き方を確認します。 (1..20) Rangeを定義するだけであれば、括
-
Rubyで作る独自Linuxツール:/procファイルシステムを使ってps・netstat・fuserを再現する方法
一緒にプロジェクトを作ってみませんか? ps、top、netstatといったLinuxツールは本当に便利です。 システム上で何が起こっているのか、多くの情報を教えてくれます。 しかし、これらのツールはどうやって動作しているのでしょうか? 情報は一体どこから取得しているのか? その仕組みを応用して、自分専用のツールを作るにはどうすればいいのか? この記事では、3つの人気Linuxツールを一緒に再現していきます。 Rubyのテクニックと実用的なLinuxの知識を同時に身につけられる、まさに一石二鳥の内容です!🙂 ステータス情報はどこにあるのか まずは「これらのツールはどこから情報を得ているの
-
わずか25行のRubyコードで自作シェルを作ってみよう
LinuxやMacを使っているなら、ターミナルを開くたびに、あなたは無意識のうちにシェルというアプリケーションを利用しています。 シェルとは、システム上でコマンドを実行するためのインターフェースです。環境変数を管理しながら、コマンド履歴や自動補完といった便利な機能を提供してくれます。 「物事の仕組みを裏側から理解したい」というタイプの人にとって、この記事はうってつけの内容です。それでは、実際にシェルを作りながら、その内部構造を見ていきましょう。 シェルはどのように動作するのか? 独自のシェルアプリケーションを構築するために、まず「シェルとは本来何なのか」を考えてみます。 シェルの動作は非常にシ
-
Rubyの数値クラス徹底解説:Integer・Float・BigDecimalの違いと内部の仕組み
Ruby 2.4では、それまで別々のクラスだったFixnumとBignumが、Integerという単一のクラスに統合されました。そこで本記事では、Rubyにおけるさまざまな数値型について改めて整理してみたいと思います。 数値クラスの階層構造から、Floatの精度問題、BigDecimalとの使い分け、さらにはFixnumの内部的な仕組みまで、順を追って解説していきます。 数値クラスの全体像 まずは、Rubyの数値関連クラスの継承関係(クラス階層)を見てみましょう。 Numeric Integer Fixnum Bignum Float Complex Rat
-
Rubyで独自のWebサーバーをゼロから構築する方法
Rubyで自分だけのWebサーバーをゼロから作ったことはありますか? 実はRubyには、すでに多くのWebサーバーが存在します。例えば: Puma Thin Unicorn しかし、シンプルなWebサーバーの仕組みを深く理解したいなら、自分で一から作ってみるのは最高の学習教材になります。 この記事では、その方法をステップバイステップで解説していきます。 ステップ1:接続を待ち受ける さて、どこから始めましょうか? まず必要なのは、TCPポート80で新しい接続を待ち受けることです。 Rubyによるネットワークプログラミングについては別記事で詳しく解説しているので、ここでは仕組みの詳細説明は省
-
Rubyアプリケーションの内部で何が起きている?ObjectSpaceモジュールの使い方
Rubyアプリケーションの内部で今何が起きているのか、気になったことはありませんか? 残念ながら、手軽に使える高機能なGUIツールはほとんどありません。 しかし大丈夫、RubyにはObjectSpaceモジュールがあります! ObjectSpaceを使えば、アプリケーションの現在の状態に関する情報を取得できます。 さっそく、その仕組みを見ていきましょう。 オブジェクトの数を数える ObjectSpaceを使えば、プログラム内で現在有効(alive)なオブジェクトを把握できます。 「オブジェクトが有効」とはどういう意味でしょうか? オブジェクトは、どこかから参照されている限り有効です。参照とは、
-
Minitestの仕組みをソースコードで徹底解説!Rubyテストフレームワークの内部動作
Minitestとは? MinitestはRubyのテストライブラリで、TDD(テスト駆動開発)スタイルでコードのテストを書くためのツールです。 Railsのデフォルトのテストフレームワークであり、Railsの生みの親であるDHH(David Heinemeier Hansson)のお気に入りでもあります。 主な競合であるRSpecと比較して、シンプルでコード量が少ない点を評価してMinitestを選ぶ開発者も多くいます。 下の画像をご覧ください: ただし、この記事の目的は「どちらを選ぶべきか」「どちらが優れているか」を語ることではありません。 この記事で扱うのは、Minitestが実際にど
-
Rubyでポートスキャナーを作成する方法【TCP通信の基礎から実装まで】
なぜポートスキャナーを自作したいと思うのでしょうか? ポートスキャナーの作成は、TCPプロトコルの基礎を学ぶ絶好の方法です。TCPは、HTTPやSSHを含むほとんどのインターネットプロトコルが利用するトランスポート層(伝送層)です。 また、Rubyのネットワークプログラミングの仕組みを深く理解するための良い演習にもなります。 それでは、ポートについての説明から始めましょう! ポートとは何か? 「ポート」というとき、私たちは実際には何を指しているのでしょうか?OS(オペレーティングシステム)レベルにおけるポートとは、単純に言えばプロセスに関連付けられた「ファイルディスクリプタ」のことです。 ファ
-
Ruby 2.4の注目すべき9つの新機能まとめ
新しいRubyのバージョンがクリスマスにリリースされるのは、もはや恒例行事となっています。この記事では、Ruby 2.4の特に興味深い変更点をいくつかピックアップしてご紹介します。最新情報のキャッチアップにぜひお役立てください。キーワード引数に対応したFloat#roundアプリケーションで浮動小数点数を扱っているなら、丸め処理にはfloorやceilを使うことをおすすめします。Ruby 2.4では、Float#roundメソッドのデフォルトの挙動が変更されるからです。例:# Ruby 2.3 (2.5).round 3 # Ruby 2.4 (2.5).round 2デフォルトの挙動は「偶
-
Rubyメソッドをスパイする方法!TracePointで実行をトレースしよう
Rubyには、TracePointクラスを使ってアクセスできる組み込みのトレーシングシステムが備わっています。このシステムを利用すると、メソッド呼び出し、新しいスレッドの開始、例外の発生などをトレースできます。 なぜこれを使いたくなるのでしょうか? たとえば、特定のメソッドの実行過程を追跡したい場合に非常に便利です。その処理の中で他にどのメソッドが呼ばれているのか、どんな戻り値が返されているのかを、目で確認できるようになります。 それでは、いくつか具体例を見ていきましょう! メソッド呼び出しをトレースする 多くの場合、TracePointでトレースしたいのはアプリケーション側のコードであり、