my.code();

my.code();

  • Python
    • 1.環境構築と基本思想
    • 2.基本構文とデータ型
    • 3.リスト、タプル、辞書、セット
    • 4.制御構文と関数
    • 5.モジュールとパッケージ
    • 6.オブジェクト指向プログラミング
    • 7.ファイルの入出力とコンテキストマネージャ
    • 8.例外処理
    • 9.ジェネレータとデコレータ
  • Ruby
    • 1.rubyの世界へようこそ
    • 2.基本構文とデータ型
    • 3.制御構造とメソッド定義
    • 4.すべてがオブジェクト
    • 5.コレクション (Array, Hash, Range)
    • 6.ブロックとイテレータ
    • 7.クラスとオブジェクト
    • 8.モジュールとMix-in
    • 9.Proc, Lambda, クロージャ
    • 10.標準ライブラリの活用
    • 11.テスト文化入門
    • 12.メタプログラミング入門
  • C++
    • 1.C++の世界へようこそ
    • 2.型システムとメモリ
    • 3.関数と参照
    • 4.ポインタと動的メモリ
    • 5.クラスの基礎
    • 6.クラスを使いこなす
    • 7.継承とポリモーフィズム
    • 8.テンプレート
    • 9.STL ①:コンテナ
    • 10.STL ②:アルゴリズムとラムダ式
    • 11.RAIIとスマートポインタ
    • 12.プロジェクトの分割とビルド

第10章: 標準ライブラリの活用

Rubyの強力な点の一つは、多くの一般的なタスクを処理するための豊富な「標準ライブラリ」が同梱されていることです。これらは "batteries included"(電池付属)とよく表現されます。

他の言語で import や include を使うのと同様に、Rubyでは require を使ってこれらのライブラリをロードします。ただし、File や Time、Regexp のようなコア機能の多くは、require なしで利用可能です。

この章では、特に使用頻度の高い標準ライブラリの機能を見ていきます。

ファイル操作 (File, Dir, Pathname)

ファイルシステムとのやり取りは、多くのアプリケーションで不可欠です。

Fileクラスによる読み書き

File クラスは、ファイルに対する基本的な読み書き操作を提供します。

ファイルの書き込みと追記:

file_io_example.rb
ruby file_io_example.rb
sample.txt(編集不可)

ファイルの読み込み:

file_read_example.rb
ruby file_read_example.rb

DirクラスとPathname

Dir クラスはディレクトリの内容を操作するために使われます。特に Dir.glob はワイルドカードを使ってファイルやディレクトリを検索するのに便利です。

しかし、パスの連結や解析を文字列として扱うのは面倒です。Pathname ライブラリは、パスをオブジェクトとして扱うための優れたインターフェースを提供します。

日付と時刻 (Time, Date)

Rubyには Time(組み込み)と Date(要 require)の2つの主要な日時クラスがあります。

  • Time: 時刻(タイムスタンプ)をナノ秒までの精度で扱います。
  • Date: 日付(年月日)のみを扱い、カレンダー計算に特化しています。

JSONのパースと生成 (json)

現代のWeb開発においてJSONの扱いは不可欠です。json ライブラリは、JSON文字列とRubyのHash/Arrayを相互に変換する機能を提供します。

正規表現 (Regexp) と match

Rubyの正規表現 (Regexp) は、Perl互換の強力なパターンマッチング機能を提供します。/pattern/ リテラルで記述するのが一般的です。

マッチの確認 (`=~` と `match`)

  • =~ 演算子: マッチした位置のインデックス(0から始まる)を返すか、マッチしなければ nil を返します。
    • String#match: MatchData オブジェクトを返すか、マッチしなければ nil を返します。MatchData は、キャプチャグループ(()で囲んだ部分)へのアクセスに便利です。

検索と置換 (`scan` と `gsub`)

  • String#scan: マッチするすべての部分文字列を(キャプチャグループがあればその配列として)返します。
    • String#gsub: マッチするすべての部分を置換します (Global SUBstitute)。

この章のまとめ

  • Rubyには、require でロードできる豊富な標準ライブラリが付属しています。
    • Fileクラスはファイルの読み書きを、Pathnameはパス操作をオブジェクト指向的に行います。
    • Timeは時刻を、Dateは日付を扱います。strftime でフォーマットできます。
    • jsonライブラリは JSON.parse(文字列→Hash)と to_json(Hash→文字列)を提供します。
    • Regexp(/pattern/)はパターンマッチングに使います。String#match で MatchData を取得し、scan や gsub で検索・置換を行います。

これらは標準ライブラリのごく一部です。他にもCSVの処理 (csv)、HTTP通信 (net/http)、テスト (minitest) など、多くの機能が提供されています。

練習問題1: JSON設定ファイルの読み書き

  1. config.json ファイルを読み込み、内容をJSONパースしてRubyのHashに変換してください。
  2. そのHashの logging の値を true に変更し、さらに :updated_at というキーで現在時刻(文字列)を追加してください。
  3. 変更後のHashをJSON文字列に変換し、config_updated.json という名前でファイルに保存してください。(読みやすさのために JSON.pretty_generate を使っても構いません)
config.json(編集不可)
practice10_1.rb
ruby practice10_1.rb
config_updated.json(編集不可)

練習問題2: ログファイルからの情報抽出

  1. system.log というファイルを1行ずつ読み込みます。
  2. 正規表現を使い、[INFO] で始まり、かつ logged in という文字列を含む行だけを検出してください。
  3. マッチした行から、IPアドレス(192.168.1.10 のような形式)を正規表現のキャプチャグループを使って抽出し、IPアドレスだけをコンソールに出力してください。
system.log(編集不可)
practice10_2.rb
ruby practice10_2.rb