「またデバッグ出力消し忘れた...」を撲滅するツール「flop」
TL;DR
C/C++のデバッグ用printf文をコマンド一発で管理できるツールflopを作りました。インタラクティブなTUIで、コメントアウト・有効化・削除を直感的に操作できます。
- GitHub: Justhiro55/flop
- インストール:
cargo install flop-cli

なぜ作ったのか
42TokyoでC/C++を学習する中で、こんな悩みがありました。
// デバッグ中:あちこちにprintf追加
printf("debug: i = %d\n", i);
printf("debug: array[%d] = %d\n", i, array[i]);
// 提出前:手動で一つずつ削除... 面倒!😫
// しかも、またデバッグが必要になったら書き直し...
42のNorminetteという厳格なコーディング規約では、デバッグ出力を残したままコミットできません。かといって、毎回手動で削除するのは非効率です。
「非効率を解決するツールを作ろう」ということで、flopを開発しました。
flopでできること
flopは3つのコマンドでprintf文を管理します。
flop on # コメントアウト(無効化)
flop off # コメント解除(有効化)
flop delete # 完全削除
特徴
📱 インタラクティブTUI(デフォルト)
ripgrepライクなシンタックスハイライトで、選びたい出力文だけを選択できます。
🚀 高速な再帰検索
プロジェクト全体を瞬時にスキャン。.gitignoreも尊重します。
🎯 柔軟なフィルタリング
--debugフラグで"debug"を含む出力のみを対象にできます。
🔍 安全なプレビュー
--previewで変更内容を確認してから実行できます。
対応している出力関数
- C:
printf,fprintf,puts,perrorなど - C++:
std::cout,std::cerr,std::clog - ファイル:
.c,.h,.cpp,.hpp,.cc,.cxx
インストール
# crates.ioから(推奨)
cargo install flop-cli
# ソースから
git clone https://github.com/Justhiro55/flop.git
cd flop
cargo build --release
使い方
基本操作
# インタラクティブモード(デフォルト)
flop on
# 矢印キー or hjkl: 移動
# Space/Tab: 選択トグル
# Enter: 確定 / Esc: キャンセル
実行前:
printf("Starting...\n");
printf("debug: value = %d\n", value);
実行後(flop on):
// printf("Starting...\n");
// printf("debug: value = %d\n", value);
よく使うパターン
# デバッグ出力だけを無効化
flop on --debug
# プレビューで確認してから実行
flop on --preview
flop on # 問題なければ実行
# 特定ディレクトリを処理
flop on src/
# バッチモード(確認プロンプトあり)
flop on --yes
実践例
例1: 42プロジェクトでの活用
# デバッグしながら開発
vim main.c # printf追加
# 提出前にプレビュー
flop on --preview
# 問題なければコメントアウト
flop on
# Norminetteチェック→提出
norminette *.c && git push
# 再デバッグが必要になったら
flop off
例2: 段階的なデバッグ
# まずdebug系だけ無効化
flop on --debug
# 動作確認
# すべての出力を無効化
flop on
# 本番環境でテスト
技術的なポイント
TUIの実装
Ratatuiを使用してインタラクティブなUIを実現しました。
- 2ペイン表示(ファイルリスト + ステートメントリスト)
- Vim風キーバインド(hjkl)に対応
- ripgrepライクなシンタックスハイライト
高速な検索
ignoreクレートと正規表現で効率的にファイルをスキャンします。
// 出力関数のパターンマッチング例
let patterns = vec![
r"printf\s*\(",
r"std::cout\s*<<",
// ...
];
大規模プロジェクトでも快適に動作するよう、.gitignoreを尊重した並列処理を実装しています。
安全性の工夫
- プレビューモード: 変更前に確認
- 確認プロンプト: 誤操作を防止
-
可逆性:
on/offで元に戻せる設計
まとめ
flopは、C/C++のデバッグ出力管理を効率化するツールです。42TokyoのCommon Coreを通過した節目に、「今まで困っていたこと」を解決するために作りました。
是非、コマンドを通してCLI上でログ管理試してみてください!
今すぐ試せます
cargo install flop-cli
flop on # カレントディレクトリで実行
今後の予定
-
Homebrewリリース
brew install flopでインストール可能に -
多言語対応
Go(fmt.Println)、Python(print)への拡張 -
機能拡張
ログライブラリ対応、カスタムパターン設定
フィードバックやコントリビューションを歓迎しています!
- GitHub: Justhiro55/flop
- Issues: バグ報告や機能リクエストはこちら
- 対応してほしい言語や使用例の共有もお待ちしています
Discussion