- 公開日: 2021年03月03日
Rubyでファイルの操作をしてみよう② [JSON編]
RubyはWebアプリケーションを作る以外にも、様々な用途で使用されています。その中でも使用頻度が高いのが、「ファイルの操作」です。
今回はRubyを使って、JSONファイルの読み込み・書き込みなど基本操作について解説していきます。
準備編
『JSON』とは、「JavaScript Object Notation」の略で、Javascriptのオブジェクトの書き方をもとにしたデータのことを指します。
言葉高ではイメージしづらいと思うので、実際にJSONを見てみましょう。JSONは、下記コードのように、Rubyでいう『ハッシュ』と同じように、キーとバリューのセットになっています。
{
userId: 1,
id: 1,
title: "this is json title",
body: "this is json body"
},
最近のWebアプリケーションでのデータのやり取りは、ほとんどがJSONで行われるため、非常に需要の高いデータ形式です。
ファイル操作用のRubyファイルを作成しよう
JSONファイルを操作するRubyのファイルを作成していきます。ターミナルで下記コマンドを実行してください。
$mkdir file_practice_json
$cd file_practice_json/
$touch file_write.rb
$ls
//実行結果
file_write.rb
ここまででファイル操作用のコードを書くファイルが完成しました。Visual studio code(以降VScodeと呼ぶ)など、お使いのコードエディタで「file_practice_json」ディレクトリを開きます。
空のJSONファイルを作成しよう
次にターミナル(コマンドプロンプト)を使い、サンプル用のテキストファイルを作ってください。ファイルの作成場所は「file_practice_json」ディレクトリの直下にしましょう。
下記コマンドの「touch」は、Linuxで用意されているファイルを作成するコマンドです。(「$」は入力不要です。)
$cd
$cd file_practice_json
$touch sample.json
またRubyがインストールされているか、下記コマンドを実行して確認してください。バージョンが表示されればOKです。
$ruby -v
//実行結果
ruby 2.6.5p114 (2019-10-01 revision 67812) [x86_64-darwin19]
RubyでJSONファイルに書き込みをしよう(基礎編)
本章では、特定のJSONファイルに書き込みを行う方法について解説していきます。まずは、コードエディタで「file_write.rb」を開き、下記コードを貼り付けてください。
require 'json'
File.open("sample.json", "w") do |file|
json = {taro: {name: "Taro", age: 25, height: 175}}
str = JSON.dump(json, file)
end
JSONファイルをRubyで扱うには、「require ‘json’」という形で、jsonというモジュールを読み込む必要があります。
またコード内にある下記コードは、ハッシュ(コード内でいうjson)をJSON文字列に変換するために必要です。
JSON.dump(json, file)
これで、「file_write.rb」ファイルの内容が実行されて、「sample.json」にJSONの内容が書き込まれたはずです。「sample.json」を開き、jsonの内容が入力されていることを確認してください。
「file_wtite.rb」で使用した「File」は自分で定義していないにも関わらず、問題なく使用できています。このように読み込みや定義無しでしようできるものが『組み込みライブラリ』です。
次は先程書き込んだJSONに改行やインデントを入れて、見やすい形に整形してみましょう。そのためには、「JSON.pretty_generate()」を使用します。
では次のコードを「file_write.rb」に貼り付けてください。
require 'json'
File.open('sample.json', 'w') do |file|
json = { taro: { name: 'Taro', age: 25, height: 175 } }
arranged_str = JSON.pretty_generate(json)
puts arranged_str
end
ターミナルで「ruby file_write.rb」を実行して、出力結果がみやすいように整形されていることを確認してみましょう。
$ruby file_write.rb
//実行結果
{
"taro": {
"name": "Taro",
"age": 25,
"height": 175
}
}
RubyでJSONファイルに書き込みをしよう(応用編)
次は複数のハッシュをJSONファイルに書き込む方法について解説していきます。「file_practice_json」ディレクトリに、「sample2.json」と「file_write2.rb」を作成しましょう。
ファイルを作成できたら、「file_write2.rb」ファイルを開き、下記コードを貼り付けてください。
require 'json'
File.open('sample2.json', 'w') do |file|
hash = { taro: { name: 'Taro', age: 25, height: 175 } }, { ami: { name: 'Ami', age: 23, height: 165 } }
str = JSON.dump(hash, file)
end
コードを貼り付けられたら、ターミナルで下記コマンドを実行して、sample2.jsonの結果を確認してみましょう。
ruby file_write2.rb
//実行結果
[
{"taro":{"name":"Taro","age":25,"height":175}},
{"ami":{"name":"Ami","age":23,"height":165}}
]
書き込んだハッシュが配列([ ])のなかに格納されていれば成功です。このように複数のハッシュをJSON形式に変換できます。
RubyでJSONファイルの内容を読み込もう(基礎編)
本章では、ファイルの読み込みについて解説していきます。まずは「file_practice_json」ディレクトリ配下に「file_read.rb」と「sample3.json」を作成してみましょう。
ファイルを作成できたら、「file_read.rb」を開き、下記コードを貼り付けてください。
require 'json'
File.open('sample3.json') do |f|
hash = JSON.load(f)
puts hash
end
次に「sample3.json」を開き、下記コードを貼り付けてください。
{
"userId": 1,
"id": 1,
"title": "test title1",
"body": "test body1"
}
コードを貼り付けたら、ターミナルで下記コマンドを実行して、実行結果を確認してみましょう。
$ ruby file_read.rb
//実行結果
{"userId"=>1, "id"=>1, "title"=>"test title1", "body"=>"test body1"}
これでJSONファイルの内容を正しく受け取れました。 次はsample3.jsonにもう1つオブジェクトを追加してあげます。
[
{
"userId": 1,
"id": 1,
"title": "test title1",
"body": "test body1"
},
{
"userId": 2,
"id": 2,
"title": "test title2",
"body": "test body2"
}
]
再度ターミナルで、下記コマンドを実行して「sample3.json」の中身が表示されているのを確認してください。
$ ruby file_read.rb
//実行結果
{"userId"=>1, "id"=>1, "title"=>"test title1", "body"=>"test body1"}
{"userId"=>2, "id"=>2, "title"=>"test title2", "body"=>"test body2"}
オブジェクトの数が増えても、正しくJSONの内容を受け取ることができました。
RubyでJSONファイルの内容を読み込もう(応用編)
次はもう少し応用的なファイル操作を行っていきましょう。まずは「file_practice_json」ディレクトリに「sample4.json」と「file_read2.rb」ファイルを作成してください。
作成できたら、下記コードを貼り付けてみましょう。
[sample4.json]
JSON
[
{
"userId": 1,
"id": 1,
"title": "Rubyの魅力",
"body": "Rubyは楽しいよ。"
},
{
"userId": 2,
"id": 2,
"title": "Rubyの特徴は?",
"body": "Rubyは初学者でも書きやすいコードになっている。"
}
]
[file_read2.rb] ```Ruby require 'json'
File.open('sample4.json') do |f| array = JSON.load(f) array.each do |hash| user_id = hash['userId'] title = hash['title'] body = hash['body'] puts "ユーザー#{user_id}の記事は、タイトル:#{title} / 内容:#{body}です。" end end ```
JSON.load(f)は、オブジェクト({ })が複数格納された配列なので、「each」メソッドで1つずつ取り出す必要があります。
コードを貼り付けたら、ターミナルで下記コマンドを実行して、実行結果を確認してみましょう。
ユーザー1の記事は、タイトル:Rubyの魅力 / 内容:Rubyは楽しいよ。です。
ユーザー2の記事は、タイトル:Rubyの特徴は? / 内容:Rubyは初学者でも書きやすいコードになっている。です。
RubyでJSONファイルの内容を読み込もう(発展編)
発展編として、Web上のJSONデータをRubyで読み込んでみましょう。今回使用するJSONデータは、JSON placeholderが提供しているものを使います。
JSON placeholderは、様々な形のJSONデータを公開しているサイトで、JSONをWeb上から正しく取得できるか確認するために頻繁に使用されています。
まずは「file_practice_json」ディレクトリ配下に、「file_read_api.rb」ファイルを作成しましょう。 次にファイルの中に、下記コードを貼り付けてください。
require 'uri'
require 'net/http'
require 'json'
Uri = 'https://jsonplaceholder.typicode.com/posts'
# JSON形式で取得
results = Net::HTTP.get(URI.parse(Uri))
# JSON形式をRubyで扱えるように変換
results_hash = JSON.parse(results)
results_hash.each do |hash|
user_id = hash['userId']
title = hash['title']
body = hash['body']
if user_id == 1
puts "ユーザーID:#{user_id}"
puts "タイトル:#{title}"
puts "内容:#{body}"
end
end
コードを貼り付けられたら、ターミナルで下記コマンドを実行して、ユーザーIDが1のデータのみ表示されていることを確認しましょう。
$ruby file_read_api.rb
//実行結果
ユーザーID:1
タイトル:sunt aut facere repellat provident occaecati excepturi optio reprehenderit
内容:quia et suscipit
suscipit recusandae consequuntur expedita et cum
reprehenderit molestiae ut ut quas totam
nostrum rerum est autem sunt rem eveniet architecto
(以下省略)
\Rubyでのサービス開発スキルが身に付く/
まとめ
Rubyを使ったJSONファイルの読み込み・書き込み操作について解説しました。 本記事で紹介したコードを参考に、ぜひ手を動かして学んでみてください!
- この記事を書いた人
- ヤマモト