Rubyによるchrメソッドの利用方法について現役エンジニアが解説【初心者向け】

初心者向けにRubyによるchrメソッドの利用方法について解説しています。chrメソッドを使うことで文字コードから文字を出力することができます。基本の書き方と使い方の例を見ていきましょう。

TechAcademyマガジンは受講者数No.1のオンラインプログラミングスクールTechAcademy [テックアカデミー]が運営。初心者向けに解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。

Rubyによるchrメソッドの利用方法について、テックアカデミーのメンター(現役エンジニア)が実際のコードを使用して初心者向けに解説します。

Rubyによるchrメソッドを利用することで数値を文字に変換することができます。

実務でも数値を文字に変換する際に活用することが可能です。

目次

そもそもRubyについてよく分からないという方は、Rubyとは何なのか解説した記事を読むとさらに理解が深まります。

 

 

 

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

chrメソッドの利用方法について詳しく説明していくね!

大石ゆかり

お願いします!

chrメソッドとは

chrメソッドは、ASCIIコードで表示された数値等を文字列に変換するメソッドです。

変換する際にどんな文字コードで変換するかという、変換のためのエンコーディングの種類を指定することもできます。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

chrメソッドの記述方法

基本の使い方

chrメソッドは、数値に対して呼び出します。戻り値は文字列です。

数値.chr

サンプルコード

例えば、49という10進数を変換したい場合は、

puts 49.chr

と書きます。49を変換すると、戻り値は、文字列 “1” です。

表示結果

1

 

16進数を指定する

16進数にも使えます。

サンプルコード

puts 0x45.chr

と書きます。0x45を変換すると、戻り値は、文字列 “E” です。

表示結果

E

 

エンコーディングを指定する

エンコーディングを指定して呼び出すには、chrの後にエンコーディングを指定します。

サンプルコード

puts 0x3042.chr(Encoding::UTF_8)

と書きます。0x3042をUTF-8でエンコードすると、戻り値は、全角文字列 “あ” です。

 

表示結果

エンコーディング表記には、「UTF_8」の部分に、「US_ASCII」「 EUC_JP」「 SHIFT_JIS」どを使うことができます。

その他のエンコーディング表記は、”class Encoding ( Ruby 3.0.0 リファレンスマニュアル)“をご覧ください。

 

chrメソッドと数値データを利用して文字列を出力してみよう

それでは実際にchrメソッドを利用してみましょう。

 

文字コード表を出力する

半角文字の一部の文字コード表を表示してみます。

サンプルコード

#横軸のラベル表示
puts "  |0123456789ABCDEF"
puts "-------------------"

#0x20から0x7fまでを表示
(2..7).each do |roop|
  subset = 0x10*roop
  #縦軸のラベル表示
  print subset.to_s(16) + "|"
  (0x00..0x0f).each do |num|
    print (subset + num).chr
  end
  puts
end

 

表示結果

 

解説

puts ” |0123456789ABCDEF”では、|0123456789ABCDEFという文字列を表示しています。

この文字列が表示結果の1行目になります。

puts “——————-“では、1行目と3行目の間に表の罫線を表す波線を2行目に表示しています。

(2..7).each do |roop|では、each do 処理を利用して、2から7までの数値を、変数roopに代入し続ける繰り返し処理です。

each do のdoは省略可能でが、省略すると実装コードも若干変わります。

詳しくは、繰り返し処理!Rubyでeachを使う方法 を参考にしてみてください。

subset = 0x10*roopでは、変数roopに入った数値を10進数の16で掛け算して、変数subsetに代入します。

0xから始まるため、この0x10が16進数であることがわかります。

16進数の0x10は、10進数の16を意味します。

例えば、0x10*2では、最初の変数roopに入っている2を、0x10と掛けることで32という数値を導き出しています。

今回、0x10と2から7までの数値を掛けることで、それぞれ次のような数値が導き出されます。

0x10*2の結果は 32
0x10*3の結果は 48
0x10*4の結果は 64
0x10*5の結果は 80
0x10*6の結果は 96
0x10*7の結果は 112

これらの数値を繰り返し処理の中で変数subsetに代入しています。

print subset.to_s(16) + “|”では、to_sを利用して、変数subsetの値を、16を基数とした文字列に変換しています。

その後、列部分の罫線を表す|を表示しています。

たとえば、最初に表示される値は、subsetに32が代入されているため、32.to_s(16)の結果である20が表示されます。

to_sメソッドについては、Rubyのto_sメソッドの使い方の記事を参考にしてみてください。

表示結果で言うと、次のような3行目以降の各列の最初の表示の部分になります。

20|
30|
40|
50|
60|
70|

(0x00..0x0f).each do |num|では、each do を利用して変数numに、 0x00から0x0fまでの値を繰り返し代入しています。

0x00は0xで始まる16進数で、10進数の0を意味します。

print (subset + num).chrでは、変数subsetと変数numを加算し、.chrメソッドで

例えば、subsetが48で、numに0x00から0x0fまでの値を繰り返し代入し、加算した場合次のような結果になります。

これらの結果は、表示結果4行目にある、30の行の文字コード表で出力されます。

(48+0x00).chrの結果は 0
(48+0x01).chrの結果は 1
(48+0x02).chrの結果は 2
(48+0x03).chrの結果は 3
(48+0x04).chrの結果は 4
(48+0x05).chrの結果は 5
(48+0x06).chrの結果は 6
(48+0x07).chrの結果は 7
(48+0x08).chrの結果は 8
(48+0x09).chrの結果は 9
(48+0x0a).chrの結果は :
(48+0x0b).chrの結果は ;
(48+0x0c).chrの結果は <
(48+0x0d).chrの結果は =
(48+0x0e).chrの結果は >
(48+0x0f).chrの結果は ?

endでは、(0x00..0x0f).each do |num|の繰り返し処理を終了しています。

putsでは、改行を出力しています。

endでは、(2..7).each do |roop|の繰り返し処理を終了しています。

実行すると、以下のように文字コード表を出力します。

  |0123456789ABCDEF
-------------------
20| !"#$%&'()*+,-./
30|0123456789:;<=>?
40|@ABCDEFGHIJKLMNO
50|PQRSTUVWXYZ[]^_
60|`abcdefghijklmno
70|pqrstuvwxyz{|}~

 

まとめ

chrを使うと、数値を文字に変換できます。文字コードの数値から文字を出力したいときに使ってみてください。

 

この記事を監修してくれた方

中本賢吾(なかもとけんご)
アジマッチ有限会社 代表取締役社長開発実績:PHPフレームワークによるフランチャイズ企業向け会員制SNS。Shopifyによる海外進出用大規模ネットショップ構築。Vue.jsによる金融機関向け内部アプリ。AWSやLinuxハウジングサーバーでの環境構築。人工知能を利用した画像判別システム。小売チェーン店舗用スマホアプリ。Wordpressによる不動産チェーン店向け賃貸・売買仲介システム。基幹システム移管用データコンバートシステム。ボランティア活動:小学生がオリジナルAndroidアプリをGooglePlayでリリース、NHK Whyプログラミング入賞、全国Programing Festival入賞、中学生がSNS型PWAアプリリリースする市クラブ講座活動を行っている。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

TechAcademyでは、初心者でもRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプRuby講座を開催しています。

挫折しない学習方法を知れる説明動画や、現役エンジニアとのビデオ通話とチャットサポート、学習用カリキュラムを体験できる無料体験も実施しているので、ぜひ参加してみてください。