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.zip
tmp/ディレクトリ配下に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ファイルを、ここに格納