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

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>
<b><font color="red">$\huge{元氣があればなんでもできる！}$</font></b>

<b><font color="red">$\huge{闘魂とは己に打ち克つこと。}$</font></b>
<b><font color="red">$\huge{そして闘いを通じて己の魂を磨いていく}$</font></b>
<b><font color="red">$\huge{ことだと思います}$</font></b>



# はじめに

最近スマホを3年ぶりに買い替えました。ずっとandroidを使っていました。思い切って！？　iPhoneに変えてみました。
写真を撮ると、[Live Photos](https://support.apple.com/ja-jp/guide/iphone/iph17471d6de/ios)というんですかね、何秒か前もいっしょに保存してくれる形式をはじめて知りました。

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

https://qiita.com/yokra9/items/9b1445eb65ee0fe5c759

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

100回コマンドを打つのは面倒なので[Elixir](https://elixir-lang.org/)でスクリプトを書いてみました。


# What is [Elixir](https://elixir-lang.org/) ?

[Elixir](https://elixir-lang.org/)という素敵なプログラミング言語があるのですね。
その素敵具合は「[Elixir Saves Pinterest $2 Million a Year In Server Costs](https://paraxial.io/blog/elixir-savings)」によく現れています。開発者も経営者もこの事実に瞠目することでしょう。 **$2 Million/年の節約ですってよ！、奥さん。**

https://paraxial.io/blog/elixir-savings

# 準備

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

Macで[Homebrew](https://brew.sh/ja/)を使っている私は、

```bash
$ brew install imagemagick
```

このコマンドでインストールしました。[Homebrew](https://brew.sh/ja/)はいろいろなパッケージのマネージャーです。インストール方法はリンク先をご確認ください。

使い方は

https://qiita.com/yokra9/items/9b1445eb65ee0fe5c759

の記事を参考にして、

```bash
$ magick from.heic dest.png
```

です。

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

# [Elixir](https://elixir-lang.org/)のスクリプト

```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 #{heic} #{basename}.png")
end)
|> IO.inspect()
```

こんな感じ（猪木寛至さん）です。

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

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

```bash
$ elixir heic2png.exs
```

# さいごに

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

[File.ls!/1](https://hexdocs.pm/elixir/File.html#ls!/1) |> [Enum.filter/2](https://hexdocs.pm/elixir/Enum.html#filter/2) |> [Enum.map/2](https://hexdocs.pm/elixir/Enum.html#map/2) の流れは他でも適用する場面がありそうです。（今回のような場合、最後の[Enum.map/2](https://hexdocs.pm/elixir/Enum.html#map/2)は[Enum.each/2](https://hexdocs.pm/elixir/Enum.html#each/2)でもよいです）

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

さあ、そこのあなたも[Elixir](https://elixir-lang.org/)の世界へようこそ。
_手始めに[エリクサーチ](https://elixir-lang.info/)なんていかがでしょうか。私のオススメです。_

---

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

---

<b><font color="red">$\huge{元氣ですかーーーーッ！！！}$</font></b>
<b><font color="red">$\huge{元氣があればなんでもできる！}$</font></b>
<b><font color="red">$\huge{１、２、３ ぁっダァー！}$</font></b>