LoginSignup
13
1

闘魂Elixir ── たくさんのファイルに同じコマンドを実行したい(たとえば画像ファイルの変換を楽しむ)

Last updated at Posted at 2023-11-25

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

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

はじめに

最近スマホを3年ぶりに買い替えました。ずっとandroidを使っていました。思い切って!? iPhoneに変えてみました。
写真を撮ると、Live Photosというんですかね、何秒か前もいっしょに保存してくれる形式をはじめて知りました。

LINEのアルバムにiPhoneで撮影した写真を100枚くらいあげたくなりました。
私はAmazon Prime会員になっているので、Live Photosも無制限でAmazon Photosに保存できます。
Macに拡張子.heic形式でダウンロードしてきてLINEのアルバムめがけてアップロードしようとすると、.heic形式は受け付けてくれませんでした。
.pngなりに変換すればLINEのアルバムにアップロードできます。

この記事をみつけました。
ありがとうーーーーッ!!! でございます。

100回コマンドを打つのは面倒なのでElixirでスクリプトを書いてみました。

What is Elixir ?

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

準備

ImageMagickのインストールが必要です。

MacでHomebrewを使っている私は、

$ brew install imagemagick

このコマンドでインストールしました。Homebrewはいろいろなパッケージのマネージャーです。インストール方法はリンク先をご確認ください。

使い方は

の記事を参考にして、

$ magick convert from.heic dest.png

です。

本当に簡単に変換できます。

Elixirのスクリプト

heic2png.exs
File.ls!()
|> Enum.filter(&(Path.extname(&1) == ".heic"))
|> Enum.map(fn heic ->
  IO.puts heic
  basename = Path.basename(heic, ".heic")
  :os.cmd(~c"magick convert #{heic} #{basename}.png")
end)
|> IO.inspect()

こんな感じ(猪木寛至さん)です。

File.ls!/1を引数無しで呼び出しているのでカレントディレクトリ配下のファイル一覧がリストで取れます。
そのリストを拡張子が.heicのファイルのみにフィルタリングしています。
あとは.heicのファイルのリストに対して、ImageMagickのコマンドを実行すればいいわけです。
:os.cmd/1にはcharlistsで指定します。charlistsに設定したコマンドを実行してくれます。charlistsでも#{}で式展開をしてくれますのでいい感じにcharlistsを作ります。
(ファイル名に拡張子以外の.があるとうまく動かないとおもいます。まあそんなものは今回無いという前提で!) 改良しました!

実行は言わずもがなのことかもしれませんが、書いておきます。
.heicが置いてあるフォルダにheic2png.exsを置いて以下のコマンドを迷わず実行です。

$ elixir heic2png.exs

さいごに

たくさんのファイルに対して同じコマンドを実行したくなることはきっとあるでしょう。
私はLINEのアルバムに静止画をアップロードするために、.heic -> .png変換をしたくなりました。

File.ls!/1 |> Enum.filter/2 |> Enum.map/2 の流れは他でも適用する場面がありそうです。(今回のような場合、最後のEnum.map/2Enum.each/2でもよいです)

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

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


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


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

13
1
2

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
13
1