【Bash / Ruby / Python3】ANSIエスケープシーケンスを用いた出力文字色の変更方法を比較
前書き
自動化Script作成時に、Bash (Shell Script)ではなく、RubyやPython3を用いた方がScriptのメンテナンス負荷が低くなります。自動化Scriptに使用するプログラミング言語変更を目的として、各言語の実装を比較します。
本記事では、ANSIエスケープシーケンスを用いた出力文字色の変更方法を比較します。比較では、実装例および実行例をそれぞれ示します。
Bashではなく、RubyやPython3を使った方が好ましい理由は、以下の記事に記載しています。この記事には、各プログラミング言語の様々な実装(ディレクトリ操作やファイル操作など)を比較した他記事へのリンクを一覧にまとめています。
Bash(Shell Script)からRubyやPythonに乗り換え!頻繁に使う処理を各言語で比較
各言語のVersion
- Bash:GNU bash, バージョン 5.0.3(1)-release
- Ruby:ruby 2.5.5p157 (2019-03-15 revision 67260)
- Python:Python 3.7.3
ANSIエスケープシーケンスの一覧
ANSIエスケープシーケンスでは、ターミナルに表示される文字色や背景色の変更、文字の強調などができます。以下に、文字色設定の一例を示します。
No. | 文字色 | ANSIエスケープシーケンス |
1 | 黒 | “\033[30m” |
2 | 赤 | “\033[31m” |
3 | 緑 | “\033[32m” |
4 | 黄 | “\033[33m” |
5 | 青 | “\033[34m” |
6 | マジェンタ | “\033[35m” |
7 | シアン | “\033[36m” |
8 | 白 | “\033[37m” |
9 | 元の文字色に戻す | “\033[0m” |
出力例は、以下の通りです。
比較:出力文字色の変更方法
自動化Scriptでは、ユーザに分かりやすくするために、警告メッセージやエラーメッセージの文字色をデフォルト色から変更する事があります。
以下に、各言語の実装例および実行例を示します。
Bashの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
#!/bin/bash # 第一引数の文字列を赤字で出力する。 function errMsg() { local message="$1" # -nオプション:改行なし # -eオプション:バックスラッシュによるエスケープシーケンスを解釈する。 # \033[31m :文字色を赤に変更 echo -n -e "\033[31m" echo "${message}" # \033[31m:文字色を元に戻す。 echo -n -e "\033[m" } function warnMsg() { local message="$1" # \033[33m:文字色を黄色に変更 echo -n -e "\033[33m" echo "${message}" # \033[31m:文字色を元に戻す。 echo -n -e "\033[m" } errMsg "エラーメッセージ(赤)" warnMsg "ワーニングメッセージ(黄色)" |
Rubyの場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
#!/usr/bin/env ruby # Rubyは、color_echo(※)というGemで文字色を変更できる。 # ※ http://colorecho.github.io/ja/ # 本記事ではcoloe_echoを用いず、Bashと同じ方法で文字色を変更する。 def err_msg(message) print("\033[31m") # \033[31m:文字色を赤に変更 puts(message) print("\033[31m") # \033[31m:文字色を元に戻す。 end def warn_msg(message) print("\033[33m") # \033[33m:文字色を赤に変更 puts(message) print("\033[31m") # \033[31m:文字色を元に戻す。 end err_msg("エラーメッセージ(赤)") warn_msg("ワーニングメッセージ(黄色)") |
Python3の場合
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/usr/bin/env python3 def err_message(message): # \033[31m:文字色を赤に変更 # \033[31m:文字色を元に戻す。 print("\033[31m%s\033[0m" % message) def warn_message(message): # \033[33m:文字色を黄色に変更 # \033[31m:文字色を元に戻す。 print("\033[33m%s\033[0m" % message) err_message("エラーメッセージ(赤)") warn_message("ワーニングメッセージ(黄色)") |
Bash、Ruby、Python3の実行例
ロシア人と国際結婚した地方エンジニア。
小学〜大学院、就職の全てが新潟。
大学の専攻は福祉工学だったのに、エンジニアとして就職。新卒入社した会社ではOS開発や半導体露光装置ソフトを開発。現在はサーバーサイドエンジニアとして修行中。HR/HM(メタル)とロシア妻が好き。サイトに関するお問い合わせやTwitterフォローは、お気軽にどうぞ。
1件の返信
[…] 出力文字色の変更 […]