Rubyのbytesliceメソッドで指定バイト分の文字列を返す方法【初心者向け】

初心者向けにRubyのbytesliceメソッドの使い方について解説しています。これによって文字列から任意の範囲分だけを返すことができます。指定の際に使うバイトという単位についての基本とbytesliceの使用例、実際のコードを見ていきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

今回はRubyのメソッド、bytesliceについて解説していきます。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのWebアプリケーションオンラインブートキャンプの内容をもとに紹介しています。

 

田島悠介

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

大石ゆかり

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

田島悠介

bytesliceメソッドの使い方について詳しく説明していくね!

大石ゆかり

お願いします!

 

bytesliceとは

bytesliceは文字列をbyte単位で切り出すメソッドです。

byteって何?という疑問が当然湧いてくるかと思いますが、まずはどのような文字列を、どのように変換するかを説明します。

例えば、以下のように切り出すときに使います。

「本日は晴天なり、みなさん張り切って今日もプログラミングをしていきましょう。」
↓
「本日は晴天なり、みなさん張り切っ」

文字数をコンピューターに伝えるとき、byteという単位を用います。

 

byteとは

文字というのは実は文字コードと呼ばれる法則にのっとって、コンピューター上には表示されます。絵文字を入力すると稀に文字化けが起こったりしますよね。あれは絵文字が文字コード表に載っていないから、表示できないよ、という意味なのです。

文字はアルファベット、ひらがな、カタカナ、漢字だけでなく、キリル語やタガログ語など膨大にあります。

それを表示したり、保存するときに必要な容量の単位のことをbyteといいます。

全世界でよく使われるアルファベットや数字は1byteで表示できますが、日本語は2byteを使って表示しています。中には4byteを使ってやっと表示できるものもあります。(2byte以上使う文字のことをマルチバイトといいます。)

つまり単純に私たちがが文字数とはいっても、コンピューターは「byte数で指定してね」と要求してくるのです。

ちなみに2018年現在、プログラミングで使われている文字コードはUTF-8のみという認識で問題ありません。古いシステムだと他の文字コードが使われていることもあります。

 

bytesliceの書き方

bytesliceは切り出したい文字列オブジェクトが持つメソッドとなるので、下記のような書き方になります。

文字列オブジェクト.byteslice(取得したい文字列の開始バイト, 取得したい文字列の長さのbyte数)

 

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

実際に書いてみよう

文法がわかったところで実際に書いてみましょう。

"Ruby is the best programming language.".byteslice(0, 10)
=> "Ruby is th"

アルファベットやスペースは1byteで表示できますので、上記のように10文字切り出せます。ちなみに開始位置が文頭の場合、1ではなくて0と書くことに注意してください。

"Ruby is the best programming language.".byteslice(0, 10) + "..."
=> "Ruby is th..."

こんなふうに…をつければ、よく見かける長い文章を略したような表記をさせることができます。

 

次は日本語を含んだ文字を指定バイト数で切り出してみましょう。

"RubyはMatzの作った世界最強のプログラミング言語です。.".byteslice(0, 15) + "..."
=> "RubyはMatzの\xE4..."

なにか変な文字が出ていますね。

アルファベットや数字は1byteで表示できると先程書きましたが、日本語は2byte使います。その日本語を途中で切り出してしまうと、上のようにコンピューターは認識できず文字化けを起こしてしまいます。

こんなのときに便利なのはRuby2.1から追加されたscrubというメソッドです。scrubは不正な文字をカットしてくれます。

"RubyはMatzの作った世界最強のプログラミング言語です。.".byteslice(0, 15).scrub('') + "..."
=> "RubyはMatzの..."

 

ちなみにRuby on Railsを使われている方はtruncateというこれらの文字化けや…をまとめて面倒見てくれる便利なメソッドがあります。

irbやpryなどでとりあえず使ってみたい方は、下記のようにActive Supportをrequireして使ってみましょう。

require "active_support/all"
=> true
"RubyはMatzの作った世界最強のプログラミング言語です。.".truncate(15)
=> "RubyはMatzの作っ..."

みなさんbytesliceやtruncateを使って文字列を切り出してみましょう。

 

監修してくれたメンター

小原 幹康

小学生のときからプログラミングで遊んでいる31歳。
大手企業、ベンチャー企業のCTOなどを経て、現在はフリーランスのエンジニア。
主にC向けのWebメディアを複数持ち、広告収入で日雇いの如く暮らしている。

好きな言語:Ruby、Python、Go
好きなエディタ:emacs
好きなキーボード:Happy Hacking Keyboard 英語無刻印モデル

 

大石ゆかり

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

田島悠介

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

大石ゆかり

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

TechAcademyでは初心者でも最短4週間でエンジニアになれるRuby on Railsオンラインブートキャンプを開催しています。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間でオリジナルWebサービスを開発することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。