【Python】FontAwesome 6 Free の icons.json からアイコンの Unicode を抽出する

プログラミング

この記事を手にとっていただき、ありがとうございます。

なんちゃってエンジニア・Mojatto です。

概要

大変使いやすいアイコンツールキット「Font Awesome」。

Font Awesome
The internet's icon library + toolkit. Used by millions of designers, devs, & content creators. Open-source. Always free (以下略)

Webサイトをはじめ、様々なアプリケーションにて採用されているこのツールキットですが、Unity で使おうとした場合は、コガネブログ様の下の記事のように、各アイコンの Unicode をチートシートなどから調べ、TextMeshPro向けFontAssetとしてセットアップする必要がありました。

従来手法では、Font Awesome 公式ページにあるチートシート (スタイル情報やアイコンの Unicode などの情報が掲載されたページ) から、Javascript などを用いてページ上から Unicode のみを抽出するようにしていました。

ただ、最新版の Font Awesome 6 においては、Google 検索には出現こそするものの、クリックしてもアイコンライブラリのページへリダイレクトされ、前バージョンの Font Awesome 5 まで公開されていたチートシートへのアクセスができない状態となったため、これまでの手法が取れなくなってしまいました。
※ 実はできるのかもしれませんが・・・

ただ、公式ページから取得できるツールキットデータ (ottなどフォントデータやスタイルデータなどがまとまったZipファイル) の中に、チートシートに掲載されているようなアイコン情報が含まれている Json ファイルが入っているので、この Json ファイルから各アイコンの Unicode を抽出して使うことにしました。

この記事では、試しとして「Python」を使った手法を紹介してみようと思います。

手順とソースコードは大分手前味噌な感じで作成したため、セオリーから離れた手法やコード記述をしている可能性がありますので、よければコメントなどでご指摘いただけると幸いです。

このエントリによって可能となること

  • 入れ子構造になっているJSONファイルから特定のキーを持つ値をPythonで取得できる
  • FontAwesome6 Free のアイコン情報 (icons.json) から任意のスタイルを持つアイコンフォントの Unicode を抽出することができる

検証環境

項目名内容
使用PC個人所有の Windows 11 PC
Python 実行環境Python 3.11.4 (Anaconda 23.7.2)
IDE (使用エディター)Microsoft Visual Studio Code 1.78.2

手法説明

事前準備

本エントリの手順を実践する前に、以下の項目の準備が整っていることとします。

  • 何らかのプラットフォームでPythonの実行環境が整っていること
  • (オプション) Python の GUI アプリが実行できるじょうたいであること ※ サンプル内で tkinter を使用しているため、CLIのみの環境ではソースコードの改変が必要です。

ソース本体

使用手順

  1. 上記のソースコードを Python コード (*.py) として任意の場所に保存する
  2. Python 動作環境にて上記のソースコードを実行する
  3. ファイルピッカーが表示されるので Font Awesome 6 のツールキットに含まれるアイコン情報が含まれている Json ファイル (<ツールキットのルートディレクトリ>/metadata/icons.json) を指定する
  4. 正しいファイルが選択されていれば、FA_ICON_TYPE で指定したスタイルに対応する、アイコンの Unicode が、コンソールに出力される
  5. 出力された Unicode をコピーし、TextMeshPro の FontAsset の設定画面の該当フィールドにペーストする
    ※ Unity 側の手順については別途記事にしようと思います

あとがき

Unicode抽出からUnityのTextMeshPro向けのFontAssetを生成するまでを、一気通貫で処理できるエディタ拡張作ったら、需要ありますかね・・・?
(局所的すぎて無い気しかしない)

補足

なし

参照情報・参考文献

コメント

タイトルとURLをコピーしました