🎉
hawk v0.2.0リリース - テキスト処理と統計機能で用途が大幅拡張
TL;DR
hawk v0.2.0をリリースしました! 🎉
前回の記事(120+ likes!)で大きな反響をいただいたhawkが、コミュニティからのフィードバックを受けて大幅にパワーアップしました。
- 🆕 テキストファイル対応: ログ解析が可能に
- 🧵 文字列操作: 10種類以上の文字列関数を追加
- 📊 統計機能: median, stddev, unique, sort対応
- 🎨 カラー出力: 見やすい色付き表示
- 🔧 後方互換性: 既存のクエリはそのまま動作
前回からの反響と成長
コミュニティの反応
- Zenn: 120+ likes, 40+ stocks
- GitHub: 35+ stars(現在進行中で成長中)
- PitchHut: プロダクト発見プラットフォームからの招待
ユーザーからの関心
前回の記事のコメントやGitHubのStarを通じて、以下のような用途への関心を感じました:
- 「ログファイル解析への期待」 → テキストファイル対応を決断
- 「文字列処理の需要」 → pandas風文字列操作を追加
- 「統計情報への関心」 → median, stddevなどを実装
- 「出力の見やすさ」 → カラー出力で改善
v0.2.0の新機能ハイライト
🆕 テキストファイル対応
最大の新機能: プレーンテキストの処理が可能になりました
# アプリケーションログからエラー行を抽出
hawk '. | select(. | contains("ERROR"))' app.log
# Kubernetesマニフェストの情報表示
hawk '. | info' deployment.yaml
# Nginxアクセスログの行数カウント
hawk '. | count' nginx.log
実際の使用例:
# Before: 従来の方法
grep "ERROR" app.log | head -5
# After: hawkで統一
hawk '. | select(. | contains("ERROR"))' app.log
# 出力: 2024-01-15 09:01:23 ERROR Failed to process user request: connection timeout
🧵 豊富な文字列操作
pandas風の直感的な文字列処理を実現:
# 文字列の基本操作
hawk '. | map(. | upper)' names.txt # 大文字変換
hawk '. | map(. | trim | lower)' emails.txt # 空白除去 + 小文字変換
# パターンマッチング
hawk '. | select(. | starts_with("INFO"))' logs.txt # 接頭辞フィルタ
hawk '. | select(. | ends_with(".log"))' files.txt # 接尾辞フィルタ
# 高度な変換
hawk '. | map(. | replace("_", " ") | upper)' data.txt
hawk '. | map(. | split(",")[1] | trim)' csv_like.txt
📊 統計機能の充実
データ分析に必要な統計関数を追加:
# 基本統計
hawk '.scores[] | median(.value)' scores.json # 中央値
hawk '.measurements[] | stddev(.temp)' data.csv # 標準偏差
# データクリーニング
hawk '.items[] | unique(.category)' products.json # 重複除去
hawk '.timestamps[] | sort' events.json # ソート
🎨 美しいカラー出力
ターミナルでの可読性が大幅向上:
# 自動的に色付けされる出力
hawk '.users[]' data.json
- テーブルヘッダー: 青色 + 太字
- 数値: 緑色
- 真偽値: 黄色
- null値: グレー
- JSONキー: シンタックスハイライト
実際の業務活用例
DevOpsでのログ解析
# 1. アプリケーションエラーの監視
hawk '. | select(. | contains("ERROR"))' app.log
# 2. メールサーバーの認証失敗検知
hawk '. | select(. | contains("authentication failed"))' mail.log
# 3. Webサーバーのエラーレスポンス統計
hawk '. | select(. | contains(" 500 ")) | count' nginx.log
データクリーニングの自動化
# 1. ユーザーデータの正規化
hawk '.[] | map(.customer_email | lower | trim)' sales.csv
# 2. Kubernetesマニフェストの構造確認
hawk '. | info' deployment.yaml
# 3. ログファイルからの重要情報抽出
hawk '. | select(. | contains("memory"))' app.log
# → 2024-01-15 09:02:45 WARN High memory usage detected: 85%
パフォーマンスと安定性の向上
メモリ効率の改善
- 大容量ファイル処理の最適化
- ストリーミング処理による省メモリ化
エラーハンドリングの強化
# より詳細なエラーメッセージ
hawk '.users[].invalid_field' data.json
# Error: Field 'invalid_field' not found in object at .users[0]
起動時間の短縮
- 依存関係の最適化
- 初期化処理の高速化
後方互換性の維持
重要: v0.1.0のクエリはすべてそのまま動作します
# v0.1.0と同じ書き方がそのまま使える
hawk '.users[] | select(.age > 30) | group_by(.department) | count' data.json
実装の舞台裏
技術的な挑戦
テキスト処理の統一:
// 全形式を統一的に扱う設計
match format {
FileFormat::Json => parse_json(content),
FileFormat::Yaml => parse_yaml(content),
FileFormat::Csv => parse_csv(content),
FileFormat::Text => parse_text_as_array(content), // NEW!
}
文字列操作のパイプライン:
// 複雑な文字列変換も型安全に
.map(|s| s.trim().to_uppercase().replace("_", " "))
pandas風の追求
今回のアップデートの多くは、「pandas風の操作感をより忠実に再現したい」という個人的な思いから生まれました:
-
文字列操作: pandasの
.strアクセサのような直感的な文字列処理 -
統計関数:
median(),std()などの基本統計関数 -
データクリーニング:
unique(),sort()によるデータ整理 - 視認性: Jupyter notebookのような見やすい出力
次のステップ
ロードマップ
- v0.3.0: プラグインシステム
- v0.4.0: リアルタイムストリーミング処理
- v1.0.0: API安定化とパフォーマンス最適化
コミュニティ参加
現在、以下のような貢献を募集中:
- 📖 ドキュメント改善: 使用例の追加
- 🐛 バグ報告: エッジケースの発見
- 💡 機能提案: 新しいユースケースの提案
- 🔧 コード貢献: 新機能の実装
試してみよう
インストール
# Homebrew (推奨)
brew install kyotalab/tools/hawk
# Cargo
cargo install hawk-data
# バージョン確認
hawk --version # hawk 0.2.0
クイックスタート
# サンプルログデータを作成してすぐに試せる
cat << 'EOF' > sample.log
2024-01-15 09:00:01 INFO Application started
2024-01-15 09:01:23 ERROR Connection failed
2024-01-15 09:02:45 WARN High memory usage
EOF
# エラーログの抽出
hawk '. | select(. | contains("ERROR"))' sample.log
# 結果: 2024-01-15 09:01:23 ERROR Connection failed
# JSONデータでも試してみる
cat << 'EOF' | hawk '.users[] | select(.age > 25)'
{
"users": [
{"name": "Alice", "age": 30},
{"name": "Bob", "age": 25}
]
}
EOF
おわりに
hawk v0.2.0は、「pandas風の操作感をCLIでより忠実に再現したい」という個人的な探求心から生まれました。特に:
- 直感的な操作: pandasユーザーが迷わない関数名と動作
- 統一インターフェース: データ形式を意識しない処理
- 実用性重視: 日常業務で実際に使える機能
前回記事での皆様の反響が、開発継続の大きなモチベーションになりました。
引き続き、日常の業務を少しでも楽にするツールとして育てていきたいと思います。
ぜひv0.2.0を試してみて、感想やフィードバックをお聞かせください!
Links
📝 v0.2.0で追加された機能、どれか気になるものはありましたか?
💖 この記事が役に立ちましたら、いいねをお願いします
Discussion