14
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ElixirAdvent Calendar 2023

Day 21

闘魂Elixir ── ファイル名から拡張子を除いた`basename`や拡張子だけを取り出したいときにはPathモジュールを使いましょう(Fileモジュールではありませんよ)

Last updated at Posted at 2023-11-25

$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$

$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$

はじめに

Elixirで、ファイル名から拡張子を除いたbasenameや拡張子だけを取り出したいときありますよね。
そんなときは Pathモジュール を使いましょう。
Fileモジュールではありませんよ、Pathモジュールですよ! という話です。

Pathモジュールとこれから仲良くなるために記録を残しておきます。

What is Elixir ?

Elixirという素敵なプログラミング言語があるのですね。
その素敵具合は「Elixir Saves Pinterest $2 Million a Year In Server Costs」によく現れています。開発者も経営者もこの事実に瞠目することでしょう。 $2 Million/年の節約ですってよ!、奥さん。

Pathモジュール

知っている人は知っていることでしょう。basenameextnameを取り出す関数が用意されているのはPathモジュールです。
しかしながら私はこれを知らずにFileモジュールだろうとあたりを付けてドキュメントをくまなく読んでみましたがありません。
それで自分用のスクリプトでへんなファイルも無いし、String.split/3で雑に書くことをよくやっていました。

[basename, ".heic"] = String.split(path, ".")

basenameのほうに.があるような意地悪な環境下では動きそうにありません。みんなどうやってやっているのだろうなあ? とふと疑問におもいました。

Pathモジュールとの出会い

Hexを探してみましたがそんな大掛かりなものではなさそうです。
それで次にやったのが「Ruby ファイル名 拡張子」でググることです。そうするとFileクラスが見つかって、extnamebasenameというメソッドを見つけました。
次に「Elixir extname basename」でググって、Pathモジュールにたどり着いたというわけです。
ですから、先輩のRubyでまずググってみてRubyで用意されているメソッドに該当する関数を探すというのはよい方法なのではないかとおもいました。
小話です。

Path.basename/2

Path.basename/2の実行例です。

iex> Path.basename("~/foo/bar.ex", ".ex")
"bar"

iex> Path.basename("~/foo/bar.exs", ".ex")
"bar.exs"

iex> Path.basename("~/foo/bar.old.ex", ".ex")
"bar.old"

Path.extname/1

Path.extname/1の実行例です。

iex> Path.extname("foo.erl")
".erl"

iex> Path.extname("~/foo/bar")
""

iex> Path.extname(".gitignore")
""

さいごに

ファイル名から拡張子を除いたbasenameや拡張子だけを取り出したいときには、Pathモジュールを使いましょう。
Fileモジュールではありませんよ、Pathモジュールですよ! という話をしました。
Elixirでどのモジュールにあるのかわからないときは先輩のRubyのメソッド名が参考になるかもしれませんよという話をあわせて書きました。

人類は不老不死の霊薬を意味する素敵なプログラミング言語Elixirを手に入れました。並行処理を他のプログラミング言語よりも比較的容易に書くことができます。それはきっとコンピュータ資源を有効活用できることにつながるでしょう。巡り巡って世界平和に貢献できることでしょう。

さあ、そこのあなたもElixirの世界へようこそ。
手始めにエリクサーチなんていかがでしょうか。私のオススメです。


闘魂とは、 「己に打ち克つこと。そして闘いを通じて己の魂を磨いていくことである」 との猪木さんの言葉をそのまま胸に刻み込んでいます。
知っているだけで終わらせることなく、実行する、断行する、一歩を踏み出すことを自らの行動で示していきたいとおもいます。
アントニオ猪木さんのメッセージから元氣をもらったものとして、それを次代に語り継ぎ、自分自身が「闘魂」を体現するものでありたいとおもいます。


$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{1、2、3 ぁっダァー!}$

14
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?