rubyzip gemを使って、パスワードなし/付きZIPファイルを作成するモジュールの、サンプル実装です。
ZipGeneratorというモジュールを実装しています。
実装したモジュール・メソッドの詳細は、[Ruby] rubyzipでパスワード付きZIPファイル(良くないけど)を作成する(Zenn)を確認してください。 (リンク先で説明していますが、まずは「そもそもパスワード付きZIPファイルの使用は非推奨!」ということをご認識ください。)
-
モジュールのサンプル実装の確認(lib/ディレクトリ配下)
ZipGeneratorモジュールを実装しています
-
動作確認サンプルプログラムの確認・実行(example.rb)
ZipGeneratorモジュールの使い方を確認できます
-
モジュールのYARDドキュメントの生成・閲覧
- メソッドの詳細を確認できます
Ruby 3.1.2, rubyzip 2.3で動作確認をしています。
まずは、このGitリポジトリをgit cloneし、クローンされたディレクトリ内に移動します:
$ git clone https://github.com/shu-i-chi/rubyzip-password-zip-example.git
# (出力は省略)
$ cd rubyzip-password-zip-example/このあとbundle installしますが、「YARDドキュメントを生成するか否か」で分岐します:
特段何のオプションもつけずにbundle installしてください。
$ bundle install
# (出力は省略)GemfileにてYARD gemをdevelopmentグループに指定しています。
というわけで、このグループを除外してbundle installするようにします。
$ bundle config set --local without 'development'
# => .bundle/configファイルが生成され、除外設定が書き込まれる
$ bundle install将来の変更にて、bundle installにつけて実行->裏で設定を記憶する系のオプションは、廃止予定です。(BundlerがCLIフラグを記憶しないようになる。)
The --clean, --deployment, --frozen, --no-prune, --path, --shebang, --system, --without and --with options are deprecated because they only make sense if they are applied to every subsequent bundle install run automatically and that requires bundler to silently remember them. Since bundler will no longer remember CLI flags in future versions, bundle config (see bundle-config(1)) should be used to apply them permanently.
bundle configコマンドで設定を行うようにしましょう。
$ bundle config set --local without 'development'
$ cat .bundle/config
---
BUNDLE_WITHOUT: "development"
example.rbというファイルが、ZipGeneratorモジュールを使用するサンプルのプログラムになっています。
トップディレクトリで、以下のようにして実行してください:
$ bundle exec ruby example.rb
EXAMPLE 1. -- ZipGenerator.get_zip_buffer
> ZIPファイル [ tmp/zipfile_buffer.zip ] を作成
> パスワード付きZIPファイル [ tmp/zipfile_buffer_pw.zip ] を作成(パスワード:buffer)
EXAMPLE 2. -- ZipGenerator.get_zip_tempfile
> ZIPファイル [ tmp/zipfile_tempfile.zip ] を作成
> パスワード付きZIPファイル [ tmp/zipfile_tempfile_pw.zip ] を作成(パスワード:tempfile)
EXAMPLE 3. -- ZipGenerator.zip_archive
> ZIPファイル [ tmp/zipfile_file.zip ] を作成
> パスワード付きZIPファイル [ tmp/zipfile_file_pw.zip ] を作成(パスワード:file)
$ ls tmp/
file_1 file_2 zipfile_buffer.zip zipfile_buffer_pw.zip zipfile_file.zip zipfile_file_pw.zip zipfile_tempfile.zip zipfile_tempfile_pw.ziptmp/ディレクトリ配下にZIPファイルが作成されます。
ZIPファイルの解凍をしてみたり、example.rbのZIPファイルのパスワードを変更してみたり、エラーが出るようにしてみたりなどを試してみてください。
(デプロイ時に、YARDドキュメントを生成する場合を選んでいる必要があります。 もしそうでない場合は、YARD gemを含めてデプロイし直したい場合の手順でYRAD gemをインストールしてください。)
トップディレクトリで、以下のコマンドを実行します(まとめてbundle exec yard doc && bundle exec yard serverでもいいです)。
$ bundle exec yard doc
# doc/ディレクトリ配下にHTMLドキュメントを生成
# (出力は省略)
$ bundle exec yard server
# => Webブラウザで、http://localhost:8808にアクセスWebブラウザで、http://localhost:8808にアクセスしてください。
ポートを指定したい場合は、bundle exec yard server -p <port番号>のようにしてください。
デプロイ時にYARDドキュメントを生成しない場合の方を選択した場合は、bundle config unsetでgemグループ除外設定を解除して、bundle updateします:
$ bundle config unset --local without
$ bundle update
Fetching gem metadata from https://rubygems.org/...
Resolving dependencies...
Using bundler 2.3.7
Using rubyzip 2.3.2
Using webrick 1.7.0
Using yard 0.9.28
Bundle updated!
$ bundle exec yard --version
yard 0.9.28(おまけ:.bundle/configの様子)
$ cat .bundle/config
---
BUNDLE_WITHOUT: "development"
$ bundle config unset --local without
$ cat .bundle/config
---
$ tree -F
.
├── Gemfile
├── Gemfile.lock
├── README.md
├── (doc/) # YARDドキュメントを生成した場合に作成される
├── example.rb # 動作確認サンプルプログラム
├── lib/
│ ├── zip_generator/
│ │ ├── errors.rb # 例外を定義
│ │ └── file_entry.rb # FileEntry Structを定義
│ └── zip_generator.rb # ここに各メソッドを定義
└── tmp/ # example.rbが、ZIPファイルに含めるファイルや生成したZIPファイルを、ここに格納