• WebCamp_インタビュー
    時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
    2018.01.26
  • WebCamp_インタビュー
    “未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
    2017.10.04
  • WebCamp_インタビュー
    「自信の持てるスキルを得たい!」内定辞退した女子大生がプログラミングを学習したワケ。
    2018.04.28
  • WebCampPro_インタビュー
    未経験でも寿司職人からWebデザイナーになった!ホスピタリティでスクールを支える宮脇トレーナー
    2017.05.26
  • WebCamp_インタビュー
    【WebCamp受講生インタビュー】起業準備中にCEOが気がついたプログラミングスキルの重要性とは?
    2017.12.25
  • WebCampPro_インタビュー
    自分で稼ぐ力をつけるため、新卒5年目の営業マンがエンジニアに転職!【WebCampPro転職者インタビュー】
    2018.02.02
  • WebCamp_インタビュー
    【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
    2018.01.15
  • WebCamp_インタビュー
    「1カ月頑張ればこの先が見えてくる」地元メディアを立ち上げたママさん
    2017.07.20
  • WebCampPro_インタビュー
    未経験から上京し、エンジニアとしてチームラボグループに転職!【WebCampPro卒業生インタビュー】
    2018.03.10
  • WebCampPro_インタビュー
    未経験31歳からエンジニア転職を実現【実際に聞いてみた】
    2017.04.01
  • WebCamp_インタビュー
    【卒業生インタビュー】台湾で月間100万UUの訪日旅行メディアを手掛けるCEOが、プログラミングを学んで得たものとは?
    2018.01.15

◆当サイトで人気のプログラミング教室のおすすめランキングはこちら!
プログラミングは独学では非効率で、時間を無駄にするリスクがあります。効率的なカリキュラムで学べるスクールを受講しましょう。

WEBCAMP【マンツーマンサポート】1ヶ月短期集中でプログラミングを学ぶスクール
1ヶ月通い放題・メンター常駐の教室環境でプログラミングを学びたい方!
TechAcademyオンラインで開講しているプログラミングスクール
オンラインでどこでも学べる!/教室に行くのが忙しい人でも安心!
Tech Camp教養としてのITスキルを学べるスクール
Webデザイン/AI(人工知能)/IOS/Androidアプリ制作/VRを学びたい方!
WEBCAMP PRO転職保証付き!エンジニアとして転職したい人におすすめ!
未経験からプロのエンジニアへ3ヶ月で転職する為のスクールです!
12月生募集中!当社人気の転職保証コース
プログラミング学習から転職成功まで導く、当社人気のWebCamp Proコース。
11月生は満員となっております。12月生募集に向け、お早めの申込みをオススメします。
プログラミング未経験でもエンジニア転職を絶対成功させたい
スキルを身に着けて人生を自ら切り開きたい
上記にあてはまる方は、ぜひご検討ください!

文字列を扱うStringクラスは、多彩なメソッドが搭載されており、とても便利なクラスです。

そのため、いろいろなサイトや参考書でメソッドの説明を中心に数多く説明されています。

しかし、改めてStringクラスそのもの、特にStringクラスが持っている文字列についての説明は意外に多くありません。

そこで、今回は、Stringクラスが持っている文字列について、詳しく解説します。

Stringクラスとは

Stringクラスは、文字列を扱う標準クラスです。

明示的なnewメソッドを使用することなく、""や''で文字列を定義すると、自動的にその文字列はStringクラスとして解釈されます。

他のプログラム言語が持つ文字列操作の機能のほとんどすべてを持っており、より改善されたメソッドになっているのが特長です。

保持できる文字列の長さには、メモリ容量的な点以外に制限はありません。

エンコーディングを持っている

一般的なスクリプト言語では、エンコーディングはファイルの先頭に「magic comment」と呼ばれる文を挿入することで行います。

Rubyでも、基本的にはそれは踏襲されており、次のようなmagic commentをファイルの先頭に記載することで、エンコーディングを設定できます。(EUC-JPの場合)

# coding: 

※スクリプトエンコーディングを指定しなければ、Ruby実行時の指定(-Kオプション)や、設定に従います(初期はUS-ASCII)

なお、magic commentを使って、そのファイルで扱うエンコーディングを指定できます(スクリプトエンコーディング)

しかし、Stringクラスもオブジェクト自身がエンコーディングを保持しています。

初期値は、オブジェクト生成時のエンコーディングですが、以下のencodeメソッドで変更、encodingメソッドで参照ができます。

# coding: utf-8

str = "てすと"
p("#{str} code        :#{str.encoding}")
p("#{str} changed code:#{str.encode("Shift_JIS").encoding}")

(結果)

"てすと code        :UTF-8"
"てすと changed code:Shift_JIS"

※エンコーディングは環境によって初期設定や対応状況に差があります。上記はWindowsでの結果ですので、Macでの実行している場合は、Shift-JISではなく、EUC-JPなどで試してみましょう。

コツコツ独学×スクールで実践。未経験からエンジニアに転職!【WebCamp卒業生インタビュー】
2018-03-22 23:28
今回の記事では、独学でPHPを1年半学習し、その後WebCampを受講して未経験からエンジニアへと転職された佐々木さんにお話を伺いました。 <プロフィール> 佐々木 祐樹 さん(2...

リテラル文字列

リテラル文字列というのは、""や''で囲まれた文字列のことです。また、%q()や%Q()という表現方法もあります。

Stringオブジェクトは、主にこのリテラル文字列を使用することで生成されます。

ただし、リテラル文字列には""(ダブルクォート)で囲まれたものと、''(シングルクォート)で囲まれたものの2種類があり、それぞれ動作が違っていますので、注意が必要です。

種類 説明
""(ダブルクォート) 文字列の中に\が含まれていた場合、エスケープシーケンスとして\の次の文字と組み合わせた特殊記号として解釈され、相応の動作を行います
''(シングルクォート) \'と\\以外のエスケープシーケンスを無視して、ただの文字として扱います
%q() ()の中に文字列を記載します。
""(ダブルクォート)と同じです
%Q() ()の中に文字列を記載します。
''(シングルクォート)と同じです

つまり、改行やタブ文字などの表示されないような特殊文字を使用するのであれば、""でなければいけないわけです。

エスケープシーケンス

エスケープシーケンスは「\」とそれに続く文字で表される特殊文字で、改行や改ページ、タブ文字などを表しています。文字列を扱ううえで、頻繁ではありませんが使うことが少なくはありませんので、代表的なエスケープシーケンスを紹介しておきましょう。

記号 表現される文字 文字コード
\t タブ 0x09
\v 垂直タブ 0x0b
\n 改行 0x0a
\r キャリッジリターン 0x0d
\f 改ページ 0x0c
\b バックスペース 0x08
\a ベル 0x07
\e エスケープ 0x1b
\s 空白 0x20
\nnn 8進数表記(nは0から7) -
\xnn 16進数表記(nは0から9,aからf) -
\cx
\C-x
コントロール文字(xはASCII文字) -
\M-x メタ x (c | 0x80) -
\M-\C-x メタ コントロール x -
\x 文字xそのもの -
\unnnn Unicode文字(nは0から9,aからf,AからF、16進数4桁で指定) -
\u{nnnn} Unicode文字列(nは0から9,aからf,AからF、nnnnは16進数で1桁から6桁まで指定可能)
スペースかタブ区切りで複数のUnicode文字を指定できます。例:"\u{30eb 30d3 30fc a}" # => "ルビー\n"
-
\改行 文字列中に改行を含めずに改行します -

中には聞きなれないものもあるかもしれませんが、今の段階では「そういうものもある」と考えていただいて問題ありません。必要になったときに、確認していきましょう。

“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
2017-10-04 10:26
今回の記事では、未経験からWebCampを1ヶ月受講し、その後エンジニアとして転職をした喜田さんにお話を伺いました。 <プロフィール> 喜田 大介 さん (28歳) 大学時代はプ...

展開記法

展開記法というのは、文字列の中に式を埋め込むことができる記述手法です。

展開記法を使えば、手軽に変数の内容やメソッドの戻り値を表示することができますので、プログラミングを進めていく中で頻繁に使っていくことになるでしょう。

ぜひ、今の段階でマスターしておきたいテクニックです。

展開記法の構文

展開記法は、ダブルクォートで囲まれた文字列や正規表現の中で以下の記載をすることで利用することができます。

#{式}

式には、数式だけではなく変数やメソッド、オブジェクトなどを記載することができます。

すでに上で紹介したプログラムで使用していますが、改めて動きを確認しましょう。

a = 10
b = 5

str = "展開記法"

p("#{a} + #{b} = #{a+b}")
p("#{str}の文字数;#{str.length}")

(結果)

"10 + 5 = 15"
"展開記法の文字数;4"

+で連結するのと何が違う?

じつは、展開記法を使わなくても、文字列を連結する「+メソッド」を使えば同じ動作を実現できます。

a = 10
b = 5

str = "展開記法"

p(a.to_s + " + " + b.to_s + " = " + (a + b).to_s)
p(str + "の文字数;" + str.length.to_s)

もちろん、ある程度好みの問題もありますが、展開記法には以下のようなメリットがありますので、展開記法を使用する方が良いでしょう。

・to_sメソッドを記載する必要がないため、プログラムコードが読みやすい
・to_sメソッドを持たないオブジェクトでも利用できる
・もし変数がnilだった場合でも、問題なく使用できる(+メソッドではエラーになる場合がある)

なお、展開記法は正規表現の中でも使用できますので、応用範囲はとても広いと言えます。

時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】
2018-01-26 13:03
今回の記事では、WebCampに1ヶ月間通い、未経験からエンジニアとして転職した星野さんにお話を伺いました。 <プロフィール> 星野 智洋 さん(25) 学生時代は日本大学芸術学部...

ヒアドキュメント

すでに説明したリテラル文字列の一種に、「ヒアドキュメント」と呼ばれる文字列があります。

Rubyのヒアドキュメントは、(エスケープシーケンスではない)改行を含む文字列を扱うことができますので、通常のリテラル文字列に比べて長文を扱う場合などに使い勝手が良くなるでしょう。

構文

ヒアドキュメントは、任意の「識別子」で文字列を挟むことで、挟まれた文字列すべて(空白や改行を含むすべて)を文字列として定義できます。

構文は以下です。

<<識別子
文字列
識別子

識別子は一般的に大文字英数字で作られた文字列で、同じ文字列で挟むことで、ヒアドキュメントを定義します。

なお、識別子の前に「-」「~」を記載すると文字列の扱いが違ってきますので、まとめておきます。

種類 説明
識別子のみ 識別子に挟まれたすべての文字列(空白も改行も含む)をひとかたまりの文字列して定義できます。
最後の識別子は必ず行頭から始まる必要があります
-識別子 最後の識別子にインデントを付けることができます。あとは識別子のみの場合と同じです
~識別子 -識別子と同様の機能に加えて、文字列の行頭にある空白をインデントとみなして無視してくれます

実際の動作を確認しましょう

それぞれ実際に動かして確認してみましょう。

標準的なヒアドキュメント

def here_doc
  a = 10

  str = <<TEST_DOC
  標準的なヒアドキュメントです。
    改行も空白もすべてそのまま反映されます。

  a = #{a}
TEST_DOC
end

puts(here_doc)

(結果)

"  標準的なヒアドキュメントです。
    改行も空白もすべてそのまま反映されます。

  a = 10"

最後の識別子を行頭から記載しなければ、エラーが発生します。注意してください。

「-」を付けたもの

一覧にも記載していますが、「-」を識別子の前に付けることで、最後の識別子のインデントを合わせてもエラーがでなくなります。

def here_doc
  a = 10

  str = <<-TEST_DOC
  識別子のインデントを合わせたヒアドキュメントです。
    改行も空白もすべてそのまま反映されます。

  a = #{a}
  TEST_DOC
end

puts(here_doc)

(結果)

"  識別子のインデントを合わせたヒアドキュメントです。
    改行も空白もすべてそのまま反映されます。

  a = 10"

文字列の前の空白はインデントとする

ヒアドキュメントは識別子に挟まれた部分すべてを文字列としますが、読みやすくするためにインデントを入れると、それも文字列の一部として扱われます。インデントについては無視したい場合は「~」を使用します。

def here_doc
  a = 10

  str = <<~TEST_DOC
  インデントを無視した部分を文字列とするヒアドキュメントです。
    行頭の空白のインデントと同じ文字数までは削除されています。

  a = #{a}
  TEST_DOC
end

puts(here_doc)

(結果)

"インデントを無視した部分を文字列とするヒアドキュメントです。
  行頭の空白のインデントと同じ文字数までは削除されています。

a = 10"

まとめ

Stringクラス、文字列について、詳しく解説しました。

Stringクラスや文字列といえば、とかくエンコードやメソッドの話が多くなりますが、ベースとなるリテラル文字列にも種類があり、それを理解しておかなければ思わぬ動作の違いに悩むことがあります。

逆に、文字列をしっかり理解した後にメソッドを使えば、思ったよりもしっくりと理解することができることでしょう。


・Stringクラスは、リテラル文字列を定義することでオブジェクトが生成される
・リテラル文字列には、""(ダブルクォート)と''(シングルクォート)がある
・""(ダブルクォート)は、エスケープシーケンスや展開記法が有効になる
・展開記法を使えば、変数や式を文字列の中に埋め込める
・改行を含んだ長文をプログラムの中に埋め込むにはヒアドキュメントが便利

WebCampOnline プログラミングコースについて

WebCampでは、「どこでも学べる」オンラインコースを開講しています。

初心者・未経験の方でもわずか1ヶ月でプログラミングの基礎を学び、アプリケーション開発をすることができます。

WebCampOnlineが選ばれる3つの理由

1.学習の仕方がわからなくても安心!初心者に寄り添った学習カリキュラム

これから学習を始める初心者の方や、独学で挫折してしまった方に向けて、アプリケーション作成をゴールとする一気通貫したカリキュラムを提供しています。2500名を輩出しているWebCampだからこその教室でのリアルな受講生の声を反映し、オンラインコースでも初心者に寄り添った学習体験をご提供いたします。

2.つまずいたらすぐ解決!プロのエンジニアに質問し放題

プログラミング学習で挫折する理由の多くは「つまずいた時に聞ける人がいない」ことです。オンラインコースでは、現役エンジニアやプロ講師に、すぐにチャットでの質問が可能です。つまずきをすぐに解消できるので、挫折せずに学習を継続することができます

3.1ヶ月間で終わらなくても大丈夫!カリキュラムは"卒業後"も"無料"で利用可能

受講したいけど、仕事が急に忙しくなるかもしれないから受講するか迷っている・・・そんな方も多いのではないでしょうか?ご安心ください。カリキュラムは期間終了後も「無料」で使うことができます。また、しっかり学習時間を確保した方も、振り返って学習することでプログラミングスキルがご自身に馴染んできます。

▼まずは無料でWebデザインのカリキュラムを体験しよう!

【インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!

ブラジルから帰国し技術をつけようとRubyエンジニアを目指してWebCampでRubyを学び、見事Webエンジニアとして転職を果たした田中さんにお話を伺いました。

Rubyの学習がしたい。基礎をしっかりと理解したい

転職のサポートがほしい

と考えている方はぜひお読み下さい。

【WebCamp卒業生インタビュー】1ヶ月でRubyをゼロから学び、Webエンジニアとして転職!
2018-01-15 13:23
今回の記事では、WebCampで1ヶ月間Rubyを学習し、Webエンジニアとして転職した卒業生の田中さんにお話を伺いました。 <プロフィール> 田中 デニス 昭彦さん(...
関連キーワード
Rubyの関連記事
  • 【Ruby入門説明書】rescueについて解説
  • 【Ruby入門説明書】jsonについて解説
  • 【Ruby入門説明書】csvについて解説
  • 【Ruby入門説明書】mapについて解説
  • 【Ruby入門説明書】gemsについて解説
  • 【Ruby入門説明書】ruby sliceについて解説
おすすめの記事