【Ruby初心者入門説明書】日本語と文字列、コードについて解説

公開日: 2018.07.03
更新日: 2024.01.17
ruby_日本語

Rubyで作ったプログラムの多くは、何らかの文字を表示させることが多いと思います。

そのため、文字列の扱いをきちんと押さえておくことは、Rubyを学習する上で重要なポイントと言えるでしょう。

今回は、Rubyで文字列を扱うことについて、少し踏み込んだ説明をしていきます。

Rubyで文字列を扱う

参考書のサンプルプログラムなどでは、あまり意識しないようにしてくれていますが、WindowsでRubyを使うとき、日本語を表示させようとするとうまくいかないことが多いです。

これは、日本語などの全角文字を扱うための文字コードというものの設定が必要になるからです。

文字コードというのは、じつは何かと問題になることの多いものですが、最初にきちんと理解しておけば、恐れるものではありません。

詳しく説明しましょう。

文字コードとは

いきなり「文字コード」と言われても、よく分からない人も少なくありません。 そもそも、文字コードというものは何かから、説明していきます。

コンピュータは文字を理解しない

コンピュータは、計算機です。それも、0と1しか扱えない計算機です。そのため、彼らが理解できるのは、0と1だけです。 もちろん、0と1だけでも桁を多くすれば大きな値を表現することはできます。そのため、コンピュータは値だけは理解することができると言って良いでしょう。 しかし、人間がコンピュータを扱うには、命じるにも結果を確認するにも、文字は書かせません。 そこで、文字を値で表現して、「値と文字の対応表」を作り出しました。そして、コンピュータがこの対応表を元にして文字を表示する仕組みができました。その結果、値しか知らないコンピュータがあたかも文字を理解しているように見えるようになったのです。 この対応表のことを「文字コード」と呼びます(厳密に言えば、違っている場合もありますが、学者でもなければ気にする理由はありません)。

文字コードは1つではない

最初にできたコンピュータは、非常に非力でしたので、文字コードも大きなものを持たせられませんでした。(具体的には、最大でも256種類(1バイト)程度しか、扱えませんでした)そのため、アルファベットと数字、一部の記号のみだけの、最低限の文字コードが使われていました。 「ASCIIコード」と呼ばれるこの文字コードは、現在もすべてのコンピュータの、基本の文字コードとして使われています。 しかし、世の中には無数の文字があり、それらの文字を使う必要が出てくるのは当然のことです。 そこで、文字として認識させる値を256×256(2バイト)などまで拡張した文字コードが生まれました。しかしこのとき、あらゆる国のあらゆる人たちが、自分たちに都合の良い文字コードを作ってしまったのです。

日本語を扱っている代表的な文字コードの例

文字コード 説明
Shift-jis Windowsで標準になっているごく一般的な文字コードです。
EUC-JP UNIX上で日本語の文字を扱う場合にもっとも多く利用されている文字コードの1つです
JIS JIS(日本工業規格)で定めた日本語の文字コードの1つです
UTF-8 ASCIIコードと互換性を持っている世界的にポピュラーな文字コード

しかしこれでは、同じプログラムでも、違う文字コードの環境で動かすことで結果が違うということになり、非常に不便です。 そのため、現在は世界的に文字コードを統一しようという動きがあります。その文字コードが、Rubyが採用している「UTF-8」なのです。

文字コードを指定する

では、Rubyで文字コードを指定して、余計な問題が起きないようにする方法を紹介しましょう。

入出力先に教える

文字コードを指定するといっても、RubyではUTF-8として扱っていますので、Ruby環境になにかするわけではありません。 指定する必要があるのは、Rubyに文字を渡す入力元と、渡された文字を解釈して表示する出力先である「コマンドプロンプト(ターミナル)」なのです。

入力元

入力元については、主にRubyのプログラムを作成するエディタでしょう。エディタで入力する文字コードを、UTF-8にしてやらなければいけないということです。 これには、以下の2つの対策を施す必要があります。

・ファイルの先頭に、UTF-8であることを示す文字列を入力する。

ファイルの先頭行に以下の文字列を入力してください。

#! ruby -Ku

・UTF-8で保存する

エディタでプログラムを作って保存するときに、「文字コードをUTF-8に指定して保存する」わけです。なお、一部のエディタ(Windowsのメモ帳など)では対応していませんので、注意が必要です。

また、必ず「BOMなし」で保存するようにしましょう。

出力先

出力先は、主にコマンドプロンプト(ターミナル)になるでしょう。ただし、上述のファイルの設定をしておけば、ほとんどの場合はUTF-8と解釈されます

そのため、ここまでの対応で日本語表示できますが、万が一うまくいかなかった場合は、以下の方法を試してみましょう。

・ruby起動時のオプション設定

プログラムを起動するとき、何も考えなければ「ruby ファイル名」としているでしょう。

しかしこのときに、以下のように文字コードを指定する オプション引数を設定します。

[bash]
ruby -Ku プログラムのファイル名.rb
[/bash]

このオプション引数によって、コマンドプロンプトは、起動されたプログラムの文字コードがUTF-8だと解釈するわけです。
※なお、ここで設定されている末尾のuが、UTF-8を表しています。同様にShift-jisを扱いたければ、-Ks、EUC-JPであれば-Keとなります。

Windowsの場合

残念ながら、Windowsのコマンドプロンプトの場合、初期設定がShift-jisになっています。そのため、以下のようなRubyが出力するUTF-8の日本語文字列が、思ったように表示されないことが多いです。

#! ruby -Ku

print(“るびーで表示する”)

もし文字化けしてしまう場合には、以下のように、出力する文字列をShift-jisに変換する仕組みを入れてあげることで、文字化けを回避することができます。

#! ruby -Ku

require “kconv”

print(Kconv.tosjis(“るびーで表示する”))

なぜ文字化けを回避できるかというと、Kconvという名前のライブラリ(メソッドの固まり)の中に含まれているtojis()関数を使って、Rubyが出力するUTF-8をShift-jisへ変換するためです。

ただし、このままMacやUNIX上で動かすと、逆に文字化けする可能性が高いので、その場合は処理を消しておくなどの別の仕組みが必要になりますので、注意が必要です。(多くの場合、環境の確認なども自動で行っています。詳細は本記事と離れますので、割愛します)

※次から紹介するサンプルプログラムでは、煩雑になることから、敢えてKconvを使用していません。必要な場合は、適宜対応するようにしてください。

文字列を使おう

文字コードの設定ができてしまえば、安心して文字列を使った処理を行えます。 ここからは、文字列を扱うための手法について、説明していきましょう。

結果は、以下のようになりますので、確かに、目的の通りに表示されています。

[bash]
MojiSuji
MOJISUJI

[/bash]

しかし、このプログラムに違和感を覚える人は多いと思います。

なぜなら、空白を取り除いた文字列をわざわざ手で入力して、大文字に変換しているからです。これでは、プログラムの意味がありません。

そこで、「str= “Moji Suji “」のように、変数と呼ばれる箱に入れてあげることで、汎用的なプログラムにするわけです。

それが、以下のプログラムです。

#! ruby -Ku

# 変数に代入
str= “Moji Suji “

# “Moji Suji “から空白を取り除く
str = str.tr(” “,””) # 入れなおすのであれば、str.tr!(” “,””)だけでもOK
puts(str)

# すべて大文字にする
str.upcase! # strの中身を直接変更している
puts(str)

結果は同じです。

しかし、固定文字列を使ったプログラムと違って、人が関与することはなく、プログラムがすべての置換や変換を行ってくれます。
また、もし文字列が変更となった場合、変数に入れる文字列を変更するだけで対応できるのは、大きな利点でしょう。

考えてみよう

では、前項で紹介したメソッドを使って、少し複雑な文字列操作をしてみましょう。

メソッドの使い方は、上のサンプルプログラムで書いているように、「文字列を格納した変数.メソッド()」です。

じつは、文字列を格納している変数は、文字列専用の「String型」になっており、だからこそString型のメソッドを利用することができるのです。

では、次のサンプルプログラムを見て、何が表示されるのか、予測してみましょう。

敢えてコメントを最小限にしていますので、上の表を参考にして、最終的に何が表示されるのかをしっかりと考えてから、実行してみてください。

#! ruby -Ku

# 初期の文字列
str = “Queen’s talk after Xmas”

# 最終的な結果が入る変数
ret = “”

# ばらして
str1,str2,str3,str4 = str.split(‘ ‘)
str1 = str1.chr()
str2 = str2.chr()
str3 = str3.chr()
str4 = str4.chr()

# ずらして
ret = str1.next()
str2.next!()
str3.next!()
str4.next!().downcase!()

# つなげる
ret = ret + str2 + str3 + str4
puts(ret)

まとめ

Rubyをはじめとしたプログラムを作っていくに当たって、文字列操作というのは、避けて通れないものです。

特に漢字もある日本語は、文字コードについては必ずどこかで気にしなければいけなくなるものですので、最低限の知識は持っておきたいものです。

また、文字列操作メソッドをすべて憶えておく必要はありませんが、何ができるのかは分かっておきましょう。

・Rubyの文字コードはUTF-8
・Windowsの文字コードはShift-jis
・UNIXの文字コードはEUC-JP
・Rubyのプログラムを保存するときは、UTF-8(BOMなし)で
・プログラムがUTF-8を扱っていることを表すため、ファイルの1行めに「#! ruby -Ku」と入れておく
・Windowsのコマンドプロンプトの場合は、Kconvを使って文字コード変換しなければいけないこともある

関連記事

資料請求

  • 短期集中で最速エンジニア転職を実現-転職成功者インタビュー一覧

    DMM WEBCAMPでは転職成功率98%を実現しています。本資料では、元警察官や元ラーメン屋など様々なバックグラウンドを持つ卒業生の声をお届けします。

    資料をダウンロードする
  • IT技術がもたらす3つの変化と身につけるべきスキル

    IT技術の発展により、今後10~20年程度で47%の仕事がなくなると言われています。どのような変化が訪れ、私達はどのようなスキルを身につけるべきかを解説します。

    資料をダウンロードする
  • 未経験がフリーランスエンジニアになる方法-年収アップで自由な働き方を手に入れる

    働き方改革やリモートワークの影響でフリーランスという働き方の人気は高まりつつあります。フリーランスエンジニアとして活躍するために必要な情報をお届けします。

    資料をダウンロードする

© 2024 WEBCAMP MEDIA Powered by AFFINGER5