Flutterの開発をしていると、ログが大量に出力されて見づらいと感じることがあります。
そこで、今回はPythonでログを色分けして見やすくするスクリプトを紹介します。
```python import re import sys import time import signal
# 色定義
COLOR_CODES = {
"RED": "\033[91m",
"GREEN": "\033[92m",
"YELLOW": "\033[93m",
"BLUE": "\033[94m",
"MAGENTA": "\033[95m",
"CYAN": "\033[96m",
"RESET": "\033[0m",
}
# 文字列と色のマッピング (辞書で管理)
# 例: r"(FlutterLoader\.loadEntrypoint)" のように、
# マッチしたグループ1を赤色で表示
STRING_COLOR_MAP = {
r"(FlutterLoader\.loadEntrypoint)": "RED",
r"(Main function started)": "CYAN",
r"^Exception$": "YELLOW", # 行頭にException、行末に何もない場合のみマッチ
}
def colorize_log(line):
"""Flutter のログ行に色を付ける関数
Args:
line: ログの一行
Returns:
色付けされたログ行
"""
for pattern, color in STRING_COLOR_MAP.items():
match = re.search(pattern, line)
if match:
# マッチしたグループを色付け
highlighted_text = f"{COLOR_CODES[color]}{match.group(1)}{COLOR_CODES['RESET']}"
line = line.replace(match.group(1), highlighted_text)
return line
def main():
"""Git Bash からの出力をパイプで受け取り、色付けして出力する関数
"""
def signal_handler(sig, frame):
print("\nCtrl+C で終了します。")
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
try:
while True:
line = sys.stdin.readline()
if not line:
break
print(colorize_log(line), end="")
sys.stdout.flush()
except KeyboardInterrupt:
print("\nCtrl+C で終了します。")
if __name__ == "__main__":
main()
# --- 使い方 --- # 1. このスクリプトを colorize.py として保存 # 2. Git Bash で以下のコマンドを実行 # flutter run 2>&1 | python colorize.py # 3. Ctrl+C で flutter run を終了してください。 # その後、このスクリプトも自動的に終了します。 # 4. STRING_COLOR_MAP に、色を付けたい文字列と色を追加 # 例: # r"(Building flutter tool)": "GREEN", # r"(Error:)": "RED", ```
1. 上記のスクリプトを `colorize.py` という名前で保存します。 2. Git Bash で以下のコマンドを実行します。
flutter run 2>&1 | python colorize.py
3. Ctrl+Cで`flutter run`を終了してください。
その後、このスクリプトも自動的に終了します。
`STRING_COLOR_MAP` に、色を付けたい文字列と色を追加することで、ハイライト表示する部分をカスタマイズできます。
STRING_COLOR_MAP = {
# ... (他のパターン)
r"(Building flutter tool)": "GREEN",
r"(Error:)": "RED",
}
このスクリプトを使うことで、Flutter のログが見やすくなり、開発効率が向上するでしょう。 ぜひ活用してみてください。