はじめに
Sinatraで簡単なメモ帳アプリを作成していく中で、「投稿したメモをデータベースではなく、ファイルに保存したいのだけど、どうすれば次々とファイルを作成していくことができるんだ?」と悩んだので、その解決方法の一つをまとめたいと思います。
解決方法
ファイルにユニークな名前(被らない名前)をつければ解決します‼️
そのコードは以下になります。
File.open("#{SecureRandom.uuid}", "w") { |f| f.print "ファイルにユニークな名前をつけたよ" }
解説
まず、新しくファイルを開くメソッドとしてFile.open()
というFileクラスのメソッドがあります。
このメソッドは、引数にファイル名とモード(読み込みか書き込みか)、パーミッション(ファイルの権限)を取ることができますが、存在しないファイル名を書き込みモードで渡すと新しくファイルを作成することができます。
irb(main):002:0> File.open("example", "w") {|f| f.print "test"} => nil irb(main):003:0> File.read("example") => "test"
次に、ユニークな名前をつける方法です。
これはSecureRandom
モジュールを使うと、実現できます。このモジュールは乱数を生成することができます。
そして、このモジュールの.uuid
(Universally Unique IDentifier)メソッドを使用することで、ユニークな名前をつけることができます。
実際にやってみると以下のようになります。
irb(main):005:0> require 'securerandom' => true irb(main):006:0> SecureRandom.uuid => "ebd5390d-24ac-45cf-9610-9783fffd22c7"
この2つのメソッドを組み合わせて、上記のようなコードを作ることで、ユニークな名前を持つファイルを作成することができます😆
最後に
このファイルを次々と作成するという作業を実現するのにとても悩みましたが、先輩方の日報を参考になんとか実現できました😆
参考文献
module SecureRandom (Ruby 2.6.0)
フィヨルドブートキャンプの先輩方の日報