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

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

Rubyには、文字列を扱うためのメソッドが豊富に準備されています。

そのおかげで、他のプログラム言語であれば自作しなければいけないことが多い、文字列の反転や繰り返し処理なども、簡単に使えるのです。

今回は、そんな便利なメソッドの1つchompメソッドについて、詳しく解説します。

簡単な使い方はもちろん、少し複雑だが使い勝手のある使いどころまで、しっかり説明しますので、ぜひお読みください。

なお、合わせて、名前も動きもよく似た、chopメソッドとの違いについても紹介します。

Rubyのchompとは?

chompメソッドは、文字列の末尾にある改行文字を削除するメソッドです。

RubyのStringクラスに定義されているメソッドは多数ありますが、chompメソッドはその中でも、特に限られた機能だけを行うメソッドと言えるでしょう。

ただ、単純に末尾の改行を削除するといっても、改行には複数の種類がありますので、じつは単純ではありません。

改行文字の種類?

改行文字に複数の種類があると言われても、制御文字の一種ですので、あまり意識したことがない人の方が多いかもしれません。

制御文字というのは、65種類存在しています。そのほとんどは周辺機器(プリンタなど)との通信の制御に使われる記号で、改行文字も行末を表現する記号なのです。
(プリンタで印刷するときに、プリンタヘッダを動かして次の行の先頭へ移動するタイミングを知るための記号になります)

ただ、この制御文字は周辺機器のメーカーによって微妙に違っているものもありました。改行もその1つで、CR(キャリッジリターン)とLF(ラインフィード)の2つの文字とその組み合わせの3パターンの改行文字が存在しています。

Rubyでの表現 制御文字表現 よく使われているシステム
\n LF(ラインフィード)
(改行、0x0A)
UNIX
\r CR(キャリッジリターン)
(復帰、0x0D)
Apple Mac
\r\n CR LF
(0x0D 0x0A)
Microsoft Windows

chompメソッドは、これらの改行文字が末尾にあった場合、削除することができます。

確認してみましょう。

puts("--- original -----")
lf = "Banana\n"
cr = "Peach\r"
crlf = "Apple\r\n"
lflf = "Straw\nberry\n\n" 
print(lf, cr, crlf, lflf)
puts("------------------")

puts("--- chomp -----")
chomp_lf = lf.chomp
chomp_cr = cr.chomp
chomp_crlf = crlf.chomp
chomp_lflf = lflf.chomp
print(chomp_lf, chomp_cr, chomp_crlf, chomp_lflf)
puts("---------------")

(結果)

--- original -----
Banana
Peach
Apple
Straw
berry

------------------
--- chomp -----
BananaPeachAppleStraw
berry

---------------

少しわかりにくいかもしれませんが、結果の「--- original -----」と「------------------」に囲まれているのが、元々の文字列です。lf「Banana」、cr「Peach」、crlf「Apple」それぞれの文字列の末尾には、種類の違う改行文字があります。また、lflf「Straw\nberry\n\n」は文字列の途中と末尾に2つの改行文字が入っています。

その後、書く文字列に対して、chompメソッドを実行した結果が「--- chomp -----」と「---------------」に囲まれている部分です。

結果の通り、末尾の改行が削除されて、「Banana」から「Straw」までがつながって表示されています。しかし、文字列の途中にあった改行と、最後に2つあった改行のうちの1つは削除されていませんので、「berry」は別の行に表示されているわけです。

Peachが表示されない?

じつは、ほとんどの環境では、「--- original -----」の中に「Peach」が表示されていません。

この現象は、コンピュータがCRをどう解釈するかの問題です。

CRは、そもそも「左端に戻る」という意味で、改行ではありません。

そのため、多くの環境はこの意味を素直に実行しますので、「Peach」を表示したあと、カーソルが左端に戻って、そこから「Apple」が上書き表示されるため、「Peach」が表示されていないように見えるわけです。

以下のプログラムを動かしてみれば、確認できるでしょう。

cr = "123456789\r"
crlf = "000\r\n"
print(cr, crlf)

このプログラムを、「Peach」が表示されない環境で実行すると、以下のように表示されます。

000456789

cr「123456789」を表示したあとに、カーソルが左端に戻り、crlf「000」が「123」の上に表示されているのです。

以上のように、chompメソッドは文字列の末尾にあるすべての種類の改行を削除するメソッドです。

なお、末尾に改行文字がなければなにもしません

コツコツ独学×スクールで実践。未経験からエンジニアに転職!【WebCamp卒業生インタビュー】

chompの他の種類

chompメソッドそのものの説明はここまでですが、chompにはあと2種類ありますので、紹介しておきます。

引数付きのchomp

じつは、本当のchompの構文は以下のようになっています。

Stringオブジェクト.chomp(引数 = "\n")

つまり、「chompメソッドは引数に渡された文字が末尾にあった場合、その文字を削除する」という動きをするメソッドなのです。

引数のデフォルト値に改行文字が設定されています。渡されるため、改行文字を削除するわけです。

そのため、もし引数に改行以外の文字が渡された場合は、末尾にあるその文字を削除します。

datas = "test>"
print(datas.chomp(">"))

(結果)

test

なお、引数に空文字列「""」を渡すことで、末尾の連続した改行も1度に削除できるのは、ちょっとしたTIPSと言えます。

datas = "test\n\n\n"
print(datas.chomp(""))

(結果)

test

破壊的メソッドchomp!

chompメソッドには、破壊的メソッドchomp!が準備されています。

これまで使ってきたchompメソッドは、末尾の改行を削除した文字列を戻り値として返すだけで、元の文字列には何の影響もありませんでした。しかし、破壊的メソッドchomp!は、元の文字列自身を変更してしまいます。

datas = "test>"
datas.chomp!(">")
print(datas)

(結果)

test

“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー

chompとchop

Stringクラスには、chompメソッドによく似たメソッドで「chopメソッド」というメソッドがあります。

名前もよく似ていますが、動作もよく似ており、chopメソッドは、末尾の文字を1文字削除するメソッドです。(\r\nが末尾にあった場合のみ、2文字削除します)

つまり、chopメソッドでもchompメソッドと同じように末尾の改行文字の削除を行うことができます。

しかし、chopメソッドはどんな文字であっても末尾の1文字を削除しますので、末尾に改行がない場合でも末尾の文字が削除されてしまいます。そのため、「改行を削除したい」のであれば、chompメソッドを使うべきでしょう。

datas = "Apple\n"
print("改行あり:#{datas.chomp} <-同じ?-> #{datas.chop}")
puts
datas = "Apple"
print("改行なし:#{datas.chomp} <-同じ?-> #{datas.chop}")

(結果)

改行あり:Apple <-同じ?-> Apple
改行なし:Apple <-同じ?-> Appl

時間や場所にとらわれず自由に働くために必要なスキルとは?【WebCamp卒業生インタビュー】

chompの使いどころ

chompメソッドは、文字列の末尾に改行があれば、その改行を削除するメソッドです。しかし、ただ改行を削除するだけですので、どういったシーンで使うのかが想像しにくいかもしれません。

ここでは、このメソッドを、どういったシーンで使うのが最適なのか、もっとも代表的な例を紹介しておきます。

ファイルから読み込んできたデータをつなげる

プログラムからテキストファイルを扱う場合、改行文字が邪魔になることがあります。

なぜなら、テキストファイルには、必ず行末に改行文字があるからです。

そのため、テキストファイルを読み込んで文字数を数える処理をなどでは、改行文字を削除しなければ正しく文字数を算出できません。

# 読み込んだテキストファイルのイメージ
testfile = ["line1 aaaa\n",
            "line2 bbbb\n",
            "line3 cccc\n",
            "line4 dddd\n",
            "line5 eeee\n"]

# 文字数を数える
file_data = ""
testfile.each do |l|
  file_data += l.chomp # 改行を削除しながら文字列をつなげる
end

# 結果表示
p(file_data.size)

(結果)

50

まとめ

chompメソッドを紹介しました。

chompメソッドは、数多くあるStringクラスのインスタンスメソッドの中では、機能も単純であまり使うことはないかもしれません。

しかし、単純な機能であるからこそ、最適な使いどころで使うとても強力な武器になるとも言えます。

確実に憶えておく必要はないかもしれませんが、存在だけでも憶えておき、いざというときに使えるようになっておきましょう。


・chompは文字列の末尾にある改行を削除する(改行文字でなければなにもしない)
・改行には、「\n」「\r」「\r\n」の3種類あるが、chompはすべてに対応している
・chompは引数に渡された文字が末尾にあった場合に削除するメソッド
・chompの引数に空文字("")を渡すと末尾にある連続した改行文字をすべて削除できる
・破壊的メソッドchomp!も存在する
・chopメソッドは末尾の1文字を削除する

DMM WEBCAMP ONLINE/プログラミングコースについて

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

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

DMM WEBCAMP ONLINEが選ばれる3つの理由

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

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

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

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

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

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

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

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

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

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

転職のサポートがほしい

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

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

おすすめの記事