LoginSignup
16
1

Elixir Phoenix 1.7 で heroicons の アイコンを使う

Last updated at Posted at 2023-11-05

Phoenix (関数型プログラミング言語 Elixir で書かれた Web 開発フレームワーク) で heroicons を使ってみます。

Phoenix

LiveView で有名な Web 開発フレームワークです。

執筆時点での Phoenix のバージョンは 1.7.9 です。

heroicons(公式)

Tailwind CSS の製作者たちによって作られた SVG アイコン。

公式の使用方法

公式の使用方法として README に三つ挙げられています。

  1. 必要な SVG アイコンのソースコードを heroicons.com からコピーし、インラインSVGとして利用
  2. React ライブラリを通じて利用
  3. Vue ライブラリを通じて利用

以上の通り、公式のドキュメントによると、React も Vue も使わない人はアイコンのソースコードを直接コピーして使ってくださいとのことです。

では、Phoenixアプリではどうしたら良いのでしょうか。まずは Elixir パッケージを探してみます。

heroicons 関連の Elixir パッケージ

Hex で検索すると複数見つかりますが、執筆時点でダウンロード数が最も多いのは heroicons_elixir パッケージでした。

ですので、それらパッケージのうちのどれかを利用することができそうです。

一切自分でコンポーネントを書きたくない方は Phoenix UI に任せるという手もあります。

Phoenix 1.7.x で heroicons がどう使われているか

heroicons は Phoenix のバージョン 1.7.0 から導入されたようですが、パッチバージョンが上がるにつれて仕様が随分変わりました。

もしお使いの Phoenix のバージョンが古い場合は最新版への差分を確認すると何か手掛かりが得られるかもしれません。

1.7.0

この時点では、heroicons_elixir が依存パッケージとして mix.exs に追加されています。

heroiconsHeroicons モジュールの関数コンポーネントして利用できるようになっています。

<Heroicons.x_mark solid class="h-5 w-5 stroke-current" />

1.7.1

このバージョンから heroicons_elixir パッケージが取り除かれ、代わりに heroicons のアイコンのソースコードがプロジェクトの中に含まれるようになりました。この時点でのアイコンの置き場所は、priv/hero_icons でした。

併せてコンポーネントの実装が代わり、.icon (PiyoPiyoWeb.CoreComponents.icon) 関数コンポーネントになりました。

<.icon name="hero-x-mark-solid" class="w-5 h-5" />

1.7.2

アイコンの置き場所は、priv/hero_icons から assets/vendor/heroicons に変更になりました。

1.7.3 以降

その後は大きな変更はないようです。

Phoenix で heroicons を更新する方法

heroicons は第三者パッケージでありいつどのような変更が起きるか分かりません。

万一、将来アイコンを更新する必要がある場合に備え、Phoenix チームが親切にもスクリプトを用意してくれています。

priv/hero_icons/UPGRADE.md
export HERO_VSN="2.0.16" ; \
      curl -L "https://github.com/tailwindlabs/heroicons/archive/refs/tags/v${HERO_VSN}.tar.gz" | \
      tar -xvz --strip-components=1 heroicons-${HERO_VSN}/optimized

Elixir Forum での議論

Phoenix 1.7.1 で heroicons_elixir パッケージが取り除かれた際には、賛否両論がありました。

José Valim さん (Elixir 言語作者) の見解Í

意訳します。(小生の思い込みが含まれている可能性もありますので予めご了承ください)

  • シンプルイズベスト
  • 非公式の heroicons パッケージを作ってメンテナンスするに値するメリットはあるのか
  • 以前他のフレームワークでWEB開発していた時にアイコンの管理で痛い目にあった

さいごに

heroiconsPhoenix アプリで利用するにあたって色んな選択肢があることがわかりました。

Phoenix チームがフレームワークにアイコンを含めてくれているので、特にこだわりがなければそれを使うのが一番楽そうです。

toukon-qiita-macbook_20230912_091808.jpg

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