RubyはじめてのRuby!packメソッドでテンプレート文字列を指定しよう!侍テック編集部2018/10/152018/10/15こんにちは!エンジニアのタナカゴダイです。Rubyで配列の内容をバイナリ(パック)に変換するにはpackメソッドを使用します。「packメソッドとunpackメソッドの使い方をそれぞれ知りたい」この記事では、そんな方に向けてpackとunpackメソッドについて、以下の内容で解説していきます。まとめpackとはpackメソッドとは、rubyのArrayクラスが持つインスタンスメソッドであり、引数で指定したテンプレート文字列にしたがって、配列の内容をバイナリに変換(パック)した文字列で返すメソッドです。この説明では少し難解なので、ワンフレーズごとに細かく噛み砕いて解説していきます。「Arrayクラスのインスタンスメソッド」というのは配列に続けてpackメソッドを使えるということです。[配列].pack()packメソッドは、上記のようなコードで書くことができます。引数で指定したテンプレート文字列にしたがってpackメソッドは、引数にテンプレートを文字列で指定することで、そのテンプレートに沿った形式で戻り値を返します。テンプレート文字列とは、型を指定する文字列と長さを示す数字(省略時は1)で並べられた文字列のことを指します。長さとして"*"を指定した場合は、「残りのデータ全て」を表します。テンプレート文字列の例として、以下のような指定方法があります。"a":nul文字を詰めます"A4":長さ4つ分、スペースを詰めます"c*":残りのデータ全てを8bit符号付整数に変換(パック)します。配列の内容をバイナリに変換(パック)した文字列で返すメソッドバイナリとは、一般的にはテキストデータではないデータのことを言います。バイナリデータはコンピュータが解釈するデータ(人間が解釈するのは困難)テキストデータは人間が解釈可能なデータと理解しておくと良いでしょう。packメソッドはコンピュータが解釈するデータに変換(パック)するメソッドなのです。packメソッドの構文を、以下に示しておきます。[配列].pack("テンプレート文字列")"バイナリとして変換(パック)した文字列"packの使い方それでは、実際にサンプルプログラムを用いながら、packメソッドの使い方について解説していきます。3サンプルプログラム1を実行した結果が以下になります。"サンプルプログラム1のそれぞれの行について解説します。1は、テンプレート文字列に"a"(長さが省略された時は1と同等)が指定されているので、nul文字を詰めて返します。配列の内容が1以上あるので、結果は長さ1の"a"になることがわかります。2は、1と同様にテンプレート文字列に"a"が指定されており、長さは4まで指定されているので、長さ4までnul文字を詰めて返します。配列の内容は3までなので、最後はnul文字(\x00)を詰めて、"abc\x00"が返ってきます。3は、配列の要素が2つあり、それぞれに異なるテンプレート文字列を指定しています。一つ目の要素"abc"では"a2"を適用し、2つ目の要素"de"に"A3"(長さ3までスペースを詰める)を適用した結果が返ってきます。一つ、以下のサンプルプログラム2についても考えてきましょう。121].pack("c*")このサンプルプログラム2を実行した結果が以下になります。"Ruby"前項の解説通りにサンプルプログラム2を読み解きます。121]をテンプレート文字列"c*"に合わせて変換(パック)し結果を返します。テンプレート文字列"c*"は、残りのデータ全てを8bit符号付きの整数を表します。"y"]に当たるため、コンピュータが解釈して返す結果は"Ruby"となります。このようにして、packメソッドは様々なテンプレート文字列に合わせて、コンピュータが解釈するデータに変換(パック)するメソッドなのです。unpackとはpackメソッドに続いて、unpackメソッドについても解説いたします。unpackメソッドの特徴としては以下になります。Stringクラスのインスタンスメソッドですテンプレート文字列にしたがってpackメソッドと反対の働きをします戻り値は配列が返りますunpackメソッドの書き方としては、文字列にメソッドを続けて、引数にテンプレート文字列を渡します。unpackメソッドの構文を以下に示します。“文字列".pack("テンプレート文字列")"文字列をアンパックした要素を含む配列"packメソッドと同様に引数にテンプレート文字列を渡しますが、異なる点としてunpackメソッドは文字列に繋げるメソッドであることに注意しましょう。unpackの使い方unpackメソッドもサンプルプログラムを用いて解説します。6サンプルプログラム3を実行した結果が以下になります。"de"]それぞれの行について、以下に解説を記載します。4は、テンプレート文字列に"a"(長さが省略された時は1と同等)が指定されているので、nul文字を削除して結果を返します。文字列の長さが1以上あるので、結果は長さ1の["a"]になることがわかります。5は、4と同様にテンプレート文字列に"a"が指定されており、長さは4まで指定されているので、長さ4までnul文字を削除して返します。文字列の長さは3までなので、長さ3までの["abc"]が返ってきます。6は、文字列の長さによって異なるテンプレート文字列を指定しています。"de"]となります。このように、unpackメソッドは文字列に対して、指定したテンプレート文字列の書式に変換(アンパック)します。まとめこの記事では、packメソッドの使い方をサンプルプログラムを用いて解説しました。packメソッドは、テンプレート文字列に合わせてバイナリデータ(コンピュータが理解するデータ)に変換(パック)するメソッドです。packメソッドとは反対の働きをするunpackメソッドについても解説しているので、ぜひこの機会にpackメソッド/unpackメソッドをマスターしてください!TweetPocket無料でSEからWebエンジニアへ転職しませんか?侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、システムエンジニアという職業だけどコードが書けない事務作業が多くスキルがないため将来が不安スクールに通うと完全未経験者と同じスタートになるからレベルが合わないという、すでに知識があるSEならではのお悩みがあることに気づきました。弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。こちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。