はじめに
最近、SlackやDiscordでのテキストコミュニケーションが増える中で、もう少し「インパクトのある」メッセージを送りたいなと思うことはありませんか?
例えば、リリース報告や「LGTM」を伝える時、ただの太字や既存のスタンプだけでは味気ないことがあります。
そこで、「好きな文字を、好きな絵文字で構成された巨大なアスキーアート(のようなもの)に変換する」 CLIツールを自作してみました。
今回はそのツール 「emjtxt」 の紹介です。
作ったもの
「emjtxt」
指定したテキストを、指定した絵文字で描画するCLIツールです。
主な機能は以下の通りです。
- テキスト → 絵文字バナー変換
-
標準絵文字のエイリアス対応 (
:smile:など) - Slack/Discord等のカスタム絵文字対応
- クリップボードへの直接コピー
なお、コードはGitHubに公開しています。
https://github.com/levyxx/emjtxt
1. ターミナルを華やかに
基本機能として、アルファベットや数字を巨大な文字に変換します。
例えば、HELLO WORLD を :star-struck:(目がキラキラしている顔)で表示させるとこのようになります。
npx emjtxt "HELLO\nWORLD" -e ":star-struck:"
このように、改行(\n)を含めることも可能です。ターミナル上で実行結果を見るだけでも結構楽しいです。
2. SlackやDiscordの「カスタム絵文字」でLGTM
このツールは、SlackやDiscordで定義されている「カスタム絵文字」のフォーマットにも対応しています。
例えば、SlackやDiscordのチャット欄で、複数のカスタム絵文字を使って文字を書くのは非常に面倒ですが、emjtxtを使えば一瞬で作れます。
以下は、背景に :black_square: という絵文字を、文字部分に :lgtm: というカスタム絵文字を指定して生成した例です。
npx emjtxt "LGTM" -e ":lgtm:" -g ":black_square:"
出力されたテキストは、そのままSlackやDiscordの入力欄にペーストするだけで、画像のように綺麗に表示されます。
コードレビューの際に「LGTM」をこれで送ると、インパクト抜群だと思います。
3. コマンド一発でクリップボードへ
生成したテキストをマウスで選択してコピーするのは地味に手間だと思います。
そこで、--copy (または -c) オプションを付けました。
npx emjtxt "CONGRATS" -e ":tada:" --copy
これを実行するだけで、結果がクリップボードに格納されます。あとはチャットツールに Ctrl + V するだけです。
4. その他
他にも、複数の絵文字を指定して文字を構成させたり、さらに、各ドットでの絵文字の選び方も、ランダム、行(列)ごと、行(列)方向にグラーデションなど様々なオプションから選ぶことが出来ます。
例えば、以下のコマンドで行方向にグラーデションをかけて表示することが出来ます。
npx emjtxt "Gradient" -e "🔴,🟠,🟡,🟢,🔵" -m row-gradient
また、縦方向に文字を表示させたり、Slack Block Kit JSON形式で出力させたりすることもできます。詳しくは以下のコマンドを叩いてヘルプを表示するか、https://www.npmjs.com/package/emjtxt を御覧ください。
技術スタック
今回の開発には Node.js + TypeScript を採用しました。
ランタイム / 言語
- ランタイム: Node.js
- モジュールシステム: ES Modules
- 言語: TypeScript
主要ライブラリ
-
node-emoji:
:smile:のようなエイリアスから、実際のUnicode絵文字(😄)への変換に使用しています - commander: CLI引数のパースに使用
- clipboardy: クリップボード操作に使用
開発・ビルド環境
-
ビルド:
tsc(npm run build) -
開発:
tsxを使用してsrc/index.tsを直接実行 (npm run dev) - Linter/Formatter: ESLint, Prettier
作ってみて分かったこと
1. 絵文字の幅問題
絵文字によって、絵文字の大きさが異なります。そのため、表示位置の調整を行わないと各行でズレが発生してしまい、何て書いてあるかわからなくなってしまいます。今回は、コマンド内で指定された絵文字の中で最も大きい絵文字のサイズに合わせてグリッド分けして、各スタンプをそのグリッド中央に表示するという対応を行って対処しました。
2. Commanderの使い勝手
Node.jsの commander は非常に直感的で使いやすかったです。特にヘルプメッセージの自動生成や、必須・任意引数の定義がシンプルに書けるため、スムーズに開発が行えました。
3. コミュニケーションツールとしての可能性
絵文字で文字を構成することで、「文字や絵文字単体で伝える」以上の熱量やニュアンス、面白さなどを手軽にメッセージに付加できるツールになったと思います。
おわりに
単なる文字出力ツールですが、SlackやDiscordなどのチャットツールと組み合わせることで、日々のコミュニケーションが少し楽しくなるツールになりました。
インストール不要で npx からすぐに試せるので、ぜひ仲間への「LGTM」メッセージやネタなどに使ってみてください。


