こんにちは。たいら(@tairaengineer2)です。
転職を繰り返し現在4社経験している、11年目エンジニアです。
この記事では、 Rubyのrubyzipライブラリを使ってzip圧縮するやり方について、
- zip圧縮サンプルプログラム
- 実行結果
- 解説
という順番で解説していきます。
rubyzipをインストールするやり方はこちらの記事をご参考ください。
前提条件:実行環境について
実行環境は以下の通りです。
OS | Windows10 |
---|---|
Rubyのバージョン | 2.6.6 |
rubyzipのバージョン | 2.3.0 |
この記事ではRubyプログラムは
C:\rubystudy
に作成しています。
zip圧縮サンプルプログラム
このサンプルプログラムは、sampleディレクトリ配下の
- hogehoge.txt
- test.txt
をzip圧縮するプログラムです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# zipファイルを作成 require 'zip' zip_folder_path = Dir.pwd + "/sample" zip_file_name = Dir.pwd + "/test.zip" inputs = ["hogehoge.txt", "test.txt"] Zip::File.open(zip_file_name, Zip::File::CREATE) do |zipfile| inputs.each do |input| zipfile.add(input, File.join(zip_folder_path, input)) end end puts "zip圧縮完了" |
実行結果
実行してzip圧縮ができているかを確認します。
Rubyプログラムを実行するやり方は、以下の記事をご参考ください。
1 2 |
C:\rubystudy>ruby create_zip_sample.rb zip圧縮完了 |
zipファイルができているか確認します。
指定したディレクトリに【test.zip】ができていることが確認できました。
中身を確認してみます。
指定した
- hogehoge.txt
- test.txt
がzipファイルの中にあることが確認できました。
もしファイル名が文字化けしてしまっている場合はこちらの記事をご参考ください。
解説
サンプルプログラムから大切な点である
- requireについて
- zip圧縮処理について
の2点をピックアップして解説していきます。
requireについて
rubyzipライブラリを使う場合
1 |
require 'zip' |
は必須の宣言です。
忘れないようご注意ください。
require関数については、こちらの記事をご参考ください。
zip圧縮処理について
肝心なzip圧縮している箇所は
1 2 3 4 5 |
Zip::File.open(zip_file_name, Zip::File::CREATE) do |zipfile| inputs.each do |input| zipfile.add(input, File.join(zip_folder_path, input)) end end |
ざっくりですが、以下の処理を行っています。
作成するzipファイルや対象のテキストファイルをフルパスで指定する必要があるため
1 2 |
zip_folder_path = Dir.pwd + "/sample" zip_file_name = Dir.pwd + "/test.zip" |
と4、5行目でフルパスの文字列を作成していました。
(もちろん、直接指定してもOKです。)
ちなみにDir.pwdメソッドとは、カレントディレクトリを取得するメソッドです。
詳しくはこちらの記事をご参考ください。
11行目の
1 |
zipfile.add(input, File.join(zip_folder_path, input)) |
addメソッドで指定する引数は下記を意味しています。
第一引数 | zipファイルに入れるファイル名を指定 |
---|---|
第二引数 | zipファイルに入れるファイルをフルパスで指定 |
たとえばzip圧縮前は【sample.txt】という名前だったとします。
addメソッドの第一引数で【sample_change.txt】と指定した場合、zipファイルの中には【sample.txt】と同じ中身のファイル名が【sample_change.txt】が格納されています。
addメソッドでzipファイルに入れるファイル名をzip圧縮前のファイル名から変更することはできます。
が、整合性が取れなくなるため変更しない方が分かりやすいかと思います。
まとめ:rubyzipでzip圧縮してみよう
以上がRubyでrubyzipライブラリを使ってzip圧縮するやり方の解説でした!
あなたのご参考になったのなら、とても嬉しいです(*´▽`*)
ではでは~(・ω・)ノシ
コメント