Rubyでファイル名を操作する方法を現役エンジニアが解説【初心者向け】

初心者向けにRubyでファイル名を操作する方法について現役エンジニアが解説しています。RubyのFILEクラスのメソッドを使うとファイル名やフォルダ名など取得することが出来ます。その他にも絶対パスや拡張子なども取得することが出来ます。ディレクトリやファイルを操作できる機能があれば便利なCGIなどが作成出来ます。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Rubyでファイル名を操作する方法について解説します。

Rubyについてそもそもよく分からないという方は、Rubyとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのオンラインブートキャンプRuby on Rails講座の内容をもとに紹介しています。

田島悠介

今回は、Rubyに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Rubyでファイル名を操作する方法について詳しく説明していくね!

大石ゆかり

お願いします!

 

ファイル名を取得する方法

ファイル名を取得するには、Fileクラスのbasenameメソッドを使います。
引数にファイルへのパスを指定すると、ファイル名だけを返してくれます。

ファイル名を変更するにはFileクラスのrenameメソッドを使います。引数に、変更前のファイル名(パス)と、変更後のファイル名(パス)を指定すると、ファイル名が変更されます。

他にもFileUtilsモジュールのmvやmoveでも変更できます。引数はFile.renameと同じです。

 

ファイル名に関するその他の操作方法

ファイル名に関するその他の操作をいくつか紹介します。

  • File.extname:拡張子(.txt や .rb など) を取得できます。
  • File.dirname:フォルダ部分(パス)を取得できます。
  • File.split:各フォルダ名とファイル名を要素とした配列を取得できます。
  • File.absolute_path:絶対パスを取得できます。

 

[PR] Rubyのプログラミングで挫折しない学習方法を動画で公開中

実際に書いてみよう

今回は事前に以下のようなフォルダとファイルを作成しておきました。
parent
-child
–taro.txt

 

bash
$ mkdir -p parent/child
$ touch parent/child/taro.txt
$ cd parent
$ pwd
/Users/hoge/parent

 

ファイル名を取得する方法

ますはFile.basenameでファイル名を取得します。
フォルダ名が除外されたtaro.txtを取得できました。

 

irb(main):001:0> File.basename("child/taro.txt")
=> "taro.txt"

 

ファイル名を変更する方法

次にFile.renameとFileUtils.mvでファイル名を変更してみます。ファイル名が変更されているかどうかは、File.exist?メソッドで確認できます。
taro.txt から hanako.txtに、続けてhanako.txtからkenji.rbに変更できています。

 

# File
irb(main):002:0> File.rename("child/taro.txt", "child/hanako.txt")
=> 0
irb(main):003:0> File.exist?("child/taro.txt")
=> false
irb(main):004:0> File.exist?("child/hanako.txt")
=> true
# FileUtils
irb(main):005:0> FileUtils.mv("child/hanako.txt", "child/kenji.rb")
=> 0
irb(main):006:0> File.exist?("child/hanako.txt")
=> false
irb(main):007:0> File.exist?("child/kenji.rb")
=> true

 

ファイル名に関するその他の操作方法

最後にファイル名に関するいくつかの操作を見てみます。

 

# 拡張子の取得
irb(main):008:0> File.extname("child/kenji.rb")
=> ".rb"
# フォルダ名の取得
irb(main):009:0> File.dirname("child/kenji.rb")
=> "child"
# パスに関する配列の取得
irb(main):010:0> File.split("child/kenji.rb")
=> ["child", "kenji.rb"]
# 絶対パスの取得
irb(main):011:0> File.absolute_path("child/kenji.rb")
=> "/Users/hoge/parent/child/kenji.rb"

 

筆者プロフィール

メンター稲員さん

フリーランスエンジニア。
大手SEからフリーランスのWeb系エンジニアにジョブチェンジ。

経験言語:Ruby、Rails、Python、C/C++、Java、Perl、HTML/CSS3、JavaScript、CoffeeScript,Node.js。
おうち大好きマンです。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

TechAcademyでは初心者でも最短4週間でRuby on Railsを使ったプログラミングを習得できるオンラインブートキャンプを開催しています。

また、現役エンジニアから学べる無料体験も実施しているので、ぜひ参加してみてください。