はじめに:Map操作、まだ「containsKey」で書いていませんか?
JavaでMapを使うとき、以下のようなコードを書いた経験はありませんか?
Java 8以前ではこれが一般的でした。しかしJava 8では、computeIfAbsentやmergeを使うことで、こうした冗長なコードをたった1行で表現できます!
本記事では、これらのメソッドの使い方から実践例まで徹底的に解説します。
✅ computeIfAbsentとは?
🔍 役割
キーが存在しないときに初期値を生成しMapに登録する。
📌 シグネチャ
✅ 使用例:リストを保持するMapに要素を追加する場合
📉 Before(従来のコード)
📈 After(computeIfAbsentで1行に)
👉 このように、存在確認不要でスッキリ!
✅ mergeとは?
🔍 役割
指定したキーに対して、既に値がある場合は「結合処理」を行い、新規ならそのまま値を格納。
📌 シグネチャ
✅ 使用例:カウントアップ処理
📉 Before(キー存在チェックあり)
📈 After(mergeで1行)
👉 キーがなければ1を設定。あれば現在値と1を足す。美しい!
✅ computeIfAbsentとmergeの使い分け
| ケース | 推奨メソッド |
| 値を「初期化してから操作」したい | computeIfAbsent |
| 「集計・加算・結合」したい | merge |
| ListやSetを使うMapに要素を追加したい | computeIfAbsent |
| 数値や文字列をまとめたい | merge |
✅ さらに活用例:文字列の出現回数カウント
📤 出力:
✅ Listを使ったグルーピングも簡単に!
📤 出力:
✅ まとめ:Map操作はJava 8で劇的にスマートになる!
| キーワード | 内容 |
| computeIfAbsent | 値がない場合のみ初期化 |
| merge | 既存値と競合処理(加算・結合など) |
| メリット | if文不要・コードが短く読みやすくなる |
WinMergeは「ファイルの違いを見るだけのツール」ではありません。
正規表現とフィルタ機能を組み合わせることで、不要な差分を除外し、実質的な変更だけに集中できます。
この記事では、
初心者でもすぐに使える「正規表現の基本」と、
上級者向けの「フィルタファイルを使った高度な差分除外テクニック」までを詳しく解説します。
🔍 正規表現を使える主な場面
| 機能 | 対応 | 説明 |
| 検索・置換 | ✅ | 検索ダイアログで「正規表現を使用」にチェック |
| フィルタファイル(.flt) | ✅ | 比較時に除外ルールを定義できる |
| 差分検出ロジック | ⚙ 一部 | 特定パターンの行を無視可能 |
🧩 よく使う正規表現例
| 目的 | 正規表現例 | 意味 |
| 空行を無視 | ^\s*$ | 空白や改行のみの行を除外 |
| 日付を無視 | \d{4}-\d{2}-\d{2} | 例:2025-10-09 のような日付を除外 |
| コメント行を無視 | ^#.* / ^\s*//.* | コメント始まりの行をスキップ |
| 数値部分を無視 | \d+ | 動的なIDやカウンタ値を除外 |
⚙️ WinMergeの検索で正規表現を使う方法
-
メニューから 「編集」→「検索…」 を開く

-
検索キーワードに正規表現を入力(例:^ERROR.*)
-
下部の「正規表現を使用」にチェック

-
「次を検索」で対象行を強調表示
🔍 よく使う検索パターン集
| パターン | 意味 |
| ^ERROR.* | ERRORで始まる行を検索 |
| TODO|FIXME | TODO または FIXME を検索 |
| [A-Z]{3} | 3文字以上の大文字英単語 |
| \bhttps?://[^\s]+ | URLを抽出 |
🧱 フィルタファイルとは?
WinMergeで比較時に「特定の行を無視」するための設定ファイルです。
拡張子は .flt。
コメントや空白行、日付などのノイズを除外して、本質的な差分を見やすくできます。
🧰 フィルタファイルの作り方
① 新規作成
-
メモ帳などで新しいテキストファイルを作成
-
以下の内容を記述
| 項目 | 意味 |
| Enable=1 | フィルタ有効化 |
| IncludeFileMask | 対象ファイル(例:*.java) |
| ExcludeRegExp | 除外したい正規表現(カンマ区切りOK) |
-
名前をつけて保存
例:
② WinMergeに読み込ませる
-
WinMergeを起動
-
メニューで
[編集] → [フィルタを選択] をクリック
-
「ファイル比較フィルタ」ダイアログで
[参照…] → 作成した .flt ファイルを選択
-
「OK」を押すと有効化完了!
これで比較時にフィルタが自動的に適用されます。
③ 効果を確認する例
比較ファイルA
比較ファイルB
通常比較では「日付が違う」と表示されますが、
次のようなフィルタを設定すれば「差分なし」になります。
→ コメントや日付行を完全に無視できるようになります!
🎯 フィルタの応用テクニック
| シーン | 推奨設定例 |
| コードレビュー | コメント・空行を除外 (^//.*, ^\s*$) |
| ログ比較 | タイムスタンプを除外 (\d{2}:\d{2}:\d{2}) |
| 設定ファイル(JSON) | 動的値を除外 ("updated_at":\s*".*") |
| HTML比較 | script/styleタグ内を除外 () |
💡 複数の .flt ファイルを作り、用途に応じて切り替えるのがおすすめです。
🧠 まとめ
| ポイント | 内容 |
| 正規表現で柔軟に検索 | 複雑な条件でも効率的にマッチング |
| フィルタファイルで差分を制御 | コメント・日付などノイズを無視 |
| 設定は簡単 | メモ帳で作ってWinMergeに読み込むだけ |
| 比較効率UP | 実質的な変更に集中できる |
🏁 結論
WinMergeの「正規表現」と「フィルタファイル」を組み合わせると、
**「無駄な差分を消して、本質だけを見る」**比較環境が作れます。
コードレビュー、ログ検証、設定差分チェックなど、
日常の比較作業を大幅に効率化してくれる強力な武器です。
Redmineでは、チケットコメントやWikiでMarkdown記法が使えます。
ただのテキスト入力よりも見やすく、チーム内の情報共有が格段にスムーズになります。
この記事では、Redmineのコメントで使える代表的なMarkdown書式をまとめて紹介します。
🔹 Markdownの基本ルール
Redmineの設定で「テキスト書式」が Markdown になっている場合に使用可能です。
管理者設定から [管理] > [設定] > [全般] > [テキスト書式] で確認しましょう。
📘 よく使うMarkdown記法一覧
| 目的 | 記法例 | 表示例 |
| 見出し | # タイトル | タイトル |
| 強調 | **重要** | 重要 |
| 斜体 | *補足* | 補足 |
| 打ち消し | ~~不要~~ | 不要(取り消し線) |
| 箇条書き | - 項目1 - 項目2 | ・項目1 ・項目2 |
| 番号付きリスト | 1. 手順A 2. 手順B | 1. 手順A 2. 手順B |
| 引用 | > メモ内容 | メモ内容(引用表示) |
| コードブロック | ```java System.out.println("Hello"); ``` | コード枠付きで表示 |
| リンク | [Redmine公式](https://www.redmine.org/) | Redmine公式へのリンク |
| 画像 |  | 画像を表示 |
| 水平線 | --- | 水平線が引かれる |
| チェックリスト | - [x] 完了 - [ ] 未完了 | ☑ 完了/□ 未完了 |
💡 コメントを見やすくするテクニック
1. 見出しで構造化
### 問題の詳細
### 再現手順
### 対応方針
といった形で区切ると、レビューする側がすぐに内容を把握できます。
2. コードやログは囲む
Redmineはコードハイライトに対応しているため、
のように書くと、整ったコードブロックで表示されます。
3. 引用でメッセージのやりとりを整理
前回のコメント引用
対応方針を確認しました。
このように相手の発言を引用してから返信すると、会話の流れが分かりやすくなります。
4. リンクで関連チケットを明示
🧩 Redmine特有の便利書式
| 機能 | 記法例 | 説明 |
| チケット参照 | #123 | 該当チケットにリンク |
| 添付ファイルリンク | attachment:log.txt | 添付済みファイルを参照 |
| Wikiページ参照 | [[Wikiページ名]] | Wiki内リンク |
| メンション | @ユーザー名 | 通知を送る(設定による) |
🌟 まとめ
| ポイント | 内容 |
| 構造化 | 見出しと箇条書きで整理 |
| 明確化 | 引用とリンクで文脈を共有 |
| 強調 | 太字・斜体で重要箇所を目立たせる |
| 見やすさ | コードや表を活用して情報を整理 |
Markdownを使いこなせば、Redmineのコメントは「読む」ものから「伝わる」ものへ進化します。
特に開発・運用チームでは、ログ・SQL・設定内容をコードブロックで整えるだけでも大幅に改善できます。
1. assertThrowsとは?
JUnit5で例外をテストする際に便利なのが assertThrows です。
従来は try-catch を使って例外を検証していましたが、コードが冗長になりがちでした。JUnit5から追加された assertThrows を使うと、例外発生をシンプルにテストできます。
2. 旧来のtry-catch方式との比較
JUnit4までの書き方は以下のようになります。
fail を入れたり、catchブロック内で assertEquals を書く必要があり、テストコードが長くなっていました。
assertThrows を使えば、これを 1行でシンプルに記述可能 です。
3. 例外メッセージの検証
assertThrows は戻り値として発生した例外オブジェクトを返すため、メッセージや詳細を検証することも可能です。@Test
4. 複数の例外クラスに対応
もし異なる種類の例外が発生する可能性がある場合、複数の assertThrows を組み合わせてテストできます。
5. assertThrowsを使うメリットまとめ
まとめ
JUnit5の assertThrows を使えば、例外発生テストがとてもスッキリ書けるようになります。
「テストコードの読みやすさ・保守性を高めたい」という方には必須のテクニックです。
これを取り入れるだけで、テストがより楽しく、効率的になるので試してみましょう!
「駑馬十駕」を信念に IT系情報を中心に調べた事をコツコツ綴っています。