Java

スポンサーリンク
Java

Java Tips | 文字列処理:小文字変換

小文字変換は「表記ゆれを“ゆるく受け止める”ための技大文字変換が「全部そろえてガチっと比較する」イメージだとしたら、小文字変換は「とりあえずぜんぶ丸めて、ゆるく受け止める」イメージに近いです。GET,...
Java

Java Tips | 文字列処理:大文字変換

大文字変換は「バラバラな表記を“同じもの”として扱う」ための技業務システムでは、ユーザーや外部システムが好き勝手な表記でデータを送ってきます。abc, Abc, ABC が混ざっていたり、jp, JP...
Java

Java Tips | 文字列処理:半角→全角

半角→全角は「機械っぽい文字を“日本語の紙”に合わせる」技全角→半角は「検索や比較のために揃える」話でしたが、半角→全角はどちらかというと「見た目・帳票・印刷物の世界」に寄ったニーズが多いです。例えば...
Java

Java Tips | 文字列処理:全角→半角

全角→半角は「バラバラな入力を“同じもの”として扱う」ための技業務システムで一番よくある地味トラブルの一つが、これです。「1234」と「1234」が別物として扱われてしまう「ABC」と「ABC」で検索...
Java

Java Tips | 文字列処理:英字抽出

英字抽出は「ごちゃ混ぜ文字列から“アルファベットだけ”をすくい上げる」技業務システムでは、「商品名に英字と数字と日本語が混ざっている」「ログにIDやコードが埋まっている」「外部システムから来た文字列が...
Java

Java Tips | 文字列処理:数字抽出

数字抽出は「文章の中から“数値だけ”をすくい上げる」技業務システムでは、ログメッセージ、メール本文、外部システムからのテキスト、Excel から吐き出された中途半端な文字列など、「文字と数字がごちゃ混...
Java

Java Tips | 文字列処理:正規表現置換

正規表現置換は「パターンに合うところだけ賢く書き換える」技正規表現マッチが「パターンに合う部分を見つける」技だとしたら、正規表現置換は「パターンに合う部分だけを、狙った形に書き換える」技です。「電話番...
Java

Java Tips | 文字列処理:正規表現マッチ

正規表現マッチは「文字列の中から“パターン”を見つける」技文字列分割が「区切りで切る」技だとしたら、正規表現マッチは「ルール(パターン)に合う部分だけを見つける」技です。「メールアドレスかどうかチェッ...
Java

Java Tips | 文字列処理:文字列分割

文字列分割は「一つの塊を意味ごとに切り出す」技業務システムでは、CSVの1行、ログ1行、設定ファイルの1行、HTTPヘッダ、クエリ文字列など、「一つの長い文字列を、意味のあるピースに切り分けたい」場面...
Java

Java Tips | 文字列処理:高速StringBuilder

「高速StringBuilder」は“たくさんつなぐ”場面を丸ごと任せる道具前回の「文字列連結」で触れたとおり、+ 連結は少ない回数なら問題ありませんが、ループの中で何百回・何千回と連結するときは、S...
Java

Java Tips | 文字列処理:文字列連結

文字列連結は「小さなピースを一つのメッセージにまとめる」技業務システムでは、ログメッセージ、SQL、URL、エラーメッセージ、メール本文など、「いくつかの値を組み合わせて一つの文字列にしたい」場面がひ...
Java

Java | Java 詳細・モダン文法:並行・非同期 – 非同期例外処理

まず「非同期の例外」がなぜややこしいのか同期コードなら、try-catch で囲めばだいたい済みます。try { int x = doSomething(); // ここで例外が出たら catch に...
Java

Java | Java 詳細・モダン文法:並行・非同期 – allOf / anyOf

allOf / anyOf を一言でいうとCompletableFuture.allOf と CompletableFuture.anyOf は、「複数の非同期処理をまとめて扱うための“ハブ”」です。...
Java

Java | Java 詳細・モダン文法:並行・非同期 – thenApply / thenCompose

まず「何をつなぎたいのか」をはっきりさせるCompletableFuture を使うとき、thenApply と thenCompose の違いで必ずつまずきます。でも本質はシンプルで、こうです。「た...
Java

Java | Java 詳細・モダン文法:並行・非同期 – CompletableFuture 組み合わせ

CompletableFuture の「組み合わせ」をざっくり俯瞰するCompletableFuture の本質は「非同期処理を“値”として扱い、それらをつなぎ合わせること」です。単発で supply...
Java

Java | Java 詳細・モダン文法:並行・非同期 – ThreadPool 設計

ThreadPool を一言でいうと「スレッドの再利用工場」ThreadPool(スレッドプール)は、「あらかじめ何本かスレッドを作っておき、タスクをそこに流し込んで再利用する仕組み」です。毎回 ne...
Java

Java | Java 詳細・モダン文法:並行・非同期 – ExecutorService 詳細

ExecutorService を一言でいうとExecutorService は、「スレッドを自分で new せずに、“仕事(タスク)だけ渡して実行してもらう”ための仕組み」です。new Thread...
Java

Java | Java 詳細・モダン文法:並行・非同期 – happens-before

happens-before を一言でいうとhappens-before は、「この処理が終わってから、あの処理が“必ずその結果を見える形で”起きる」という“時間とメモリの順序”を表す言葉です。もっと...
Java

Java | Java 詳細・モダン文法:並行・非同期 – volatile の役割

volatile を一言でいうとvolatile は、「この変数の“最新の値”を、すべてのスレッドから必ず見えるようにする」ためのキーワードです。もっと砕くと、「CPU やスレッドごとのキャッシュにこ...
Java

Java | Java 詳細・モダン文法:並行・非同期 – synchronized の仕組み

synchronized は何を「約束」してくれるのかsynchronized は一言でいうと、「同じ場所を同時に触ろうとする複数スレッドを、順番待ちにさせる仕組み」です。もっと具体的に言うと、あるオ...
Java

Java Tips | 基本ユーティリティ:URLデコード

URLデコードは「URLの中身を人間とプログラムの世界に戻す」技URLエンコードが「暴れそうな文字を URL の中で安全な形に変える」技だとしたら、URLデコードはその逆で、「%E3%81%82 みた...
Java

Java Tips | 基本ユーティリティ:URLエンコード

URLエンコードは「URLの中で暴れる文字をおとなしくさせる」技業務システムで外部APIを叩くとき、ブラウザからのリダイレクトURLを組み立てるとき、クエリパラメータを自前で作るとき。そのたびに出てく...
Java

Java Tips | 基本ユーティリティ:Base64デコード

Base64デコードは「文字列を元の世界に連れ戻す」技Base64エンコードが「バイナリを文字列の世界に連れてくる」技だとしたら、Base64デコードはその逆で、「Base64文字列から、元のバイト列...
Java

Java Tips | 基本ユーティリティ:Base64エンコード

Base64エンコードは「バイナリを文字の世界に連れてくる」技業務システムでは、画像・PDF・バイナリデータを「そのままでは扱いにくい場所」に載せたい場面がよくあります。例えば、JSON のフィールド...
Java

Java Tips | 基本ユーティリティ:XMLパース

XMLパースは「外部仕様を自分のオブジェクトに落とし込む」技XML生成が「こちらの世界のデータを外に出す」なら、XMLパースはその逆で、「外の世界から来た XML を、自分の世界(Java のオブジェ...
Java

Java Tips | 基本ユーティリティ:XML生成

XML生成は「機械にも人にも読める構造を作る」技JSON が主流になった今でも、業務の世界では XML が普通に生きています。古い外部システム連携、バッチの入出力、設定ファイル、帳票レイアウト定義など...
Java

Java Tips | 基本ユーティリティ:JSONパース

JSONパースは「外の世界のデータを自分の型に落とす」技JSON文字列化が「Javaのオブジェクトを外の世界に出す」技だとしたら、JSONパースはその逆で、「外の世界から来た JSON を、自分の型に...
Java

Java Tips | 基本ユーティリティ:JSON文字列化

JSON文字列化は「データを言語の壁から解放する」技業務システムでは、フロントエンドとの通信、外部API連携、ログ出力、設定ファイルなど、あらゆるところで JSON が使われます。Java のオブジェ...
Java

Java Tips | 基本ユーティリティ:TSV対応

TSV対応は「CSVの兄弟をちゃんと扱う」技業務システムでは、CSV だけでなく TSV(Tab Separated Values)もよく出てきます。「Excel からタブ区切りで出したデータ」「ログ...
Java

Java Tips | 基本ユーティリティ:CSV分解

CSV分解は「カンマの意味をちゃんと理解する」技CSV を読むときに、line.split(",") と書きたくなる気持ちはよく分かります。でもそれをやると、名前にカンマが入っていたり、ダブルクォート...
Java

Java Tips | 基本ユーティリティ:CSV一行生成

CSV一行生成は「地味だけど壊れやすいところを固める」技業務システムで CSV を出力するとき、「とりあえずカンマでつなげばいいでしょ」と思って書き始めると、すぐにハマります。名前にカンマが入っていた...
Java

Java Tips | 基本ユーティリティ:ファイル名生成

ファイル名生成は「衝突させずに意味を持たせる」ための技業務システムでは、ログファイル、レポート出力、アップロードファイルの保存先など、「新しいファイル名を決める」場面が山ほどあります。ここで適当に "...
Java

Java Tips | 基本ユーティリティ:MIMEタイプ判定

MIMEタイプ判定は「中身の種類をちゃんと確認する」ための技拡張子はあくまで「ラベル」でしかなくて、virus.exe を virus.png にリネームすることも簡単にできます。業務システムでファイ...
Java

Java Tips | 基本ユーティリティ:拡張子取得

拡張子取得は「ファイルの中身を推測するためのラベル取り」業務システムでは、「CSV だけ受け付けたい」「画像ファイルだけ処理したい」「ログローテーションで .log だけ対象にしたい」など、「ファイル...
Java

Java Tips | 基本ユーティリティ:ファイルサイズ取得

ファイルサイズ取得は「重さを意識した設計」をするための技業務システムでは、「このファイル、本当にメモリに全部載せて大丈夫?」「アップロードされたファイルが想定より巨大じゃない?」といった“重さ”の感覚...
Java

Java Tips | 基本ユーティリティ:パス正規化

パス正規化は「同じ場所を同じ文字列で表す」ための技ファイルパスって、同じ場所を指しているのに書き方がバラバラになりがちです。logs/app/../app/current.log と logs/app...
Java

Java Tips | 基本ユーティリティ:再帰削除

再帰削除は「作業領域を丸ごと片付ける」ための技業務システムでは、「ジョブごとに作った作業ディレクトリを最後に丸ごと消したい」「テストで作った一式を一発で片付けたい」といった、“ディレクトリ配下を全部削...
Java

Java Tips | 基本ユーティリティ:ファイル削除

ファイル削除は「後片付けをちゃんとやる」ための技業務システムは、動けば終わりではなく「後片付け」まで含めて仕事です。一時ファイル、古いバックアップ、失敗した処理の中途半端な成果物など、放っておくとディ...
Java

Java Tips | 基本ユーティリティ:ファイルコピー

ファイルコピーは「安全にデータを移動・退避させる」ための技業務システムでは、「インポート用ファイルをバックアップしてから処理したい」「出力結果を別ディレクトリに退避したい」「テンプレートを所定の場所に...
Java

Java Tips | 基本ユーティリティ:一時ファイル作成

一時ファイル作成は「一時的な作業領域を安全に借りる」技業務システムでは、「大きなデータを一度ファイルに落としてから処理したい」「ZIP を展開して中身を検査したい」「外部システムに渡す前に一時的にファ...
Java

Java Tips | 基本ユーティリティ:ディレクトリ作成

ディレクトリ作成は「ログや一時ファイルの置き場を整える」ための技業務システムでは、ログ出力先、インポートファイル置き場、エクスポート結果の出力先、一時ファイルの作業ディレクトリなど、「ディレクトリが存...
Java

Java Tips | 基本ユーティリティ:ファイル存在確認

ファイル存在確認は「前提条件をちゃんと確かめてから動く」ための技業務システムでは、「設定ファイルがある前提で起動する」「インポート用の CSV が届いている前提でバッチを回す」「テンプレートファイルが...
Java

Java Tips | 基本ユーティリティ:CPUコア数取得

CPUコア数取得は「どこまで並列化してよいか」を知るための技マルチスレッドや並列処理を書くとき、「スレッドを何本まで増やしていいのか」はとても重要です。CPU が 2 コアしかないのに 100 スレッ...
Java

Java Tips | 基本ユーティリティ:メモリ使用量取得

メモリ使用量取得は「今どれくらい余裕があるか」を知るための技業務システムが重くなったり、OutOfMemoryError で落ちたりするとき、「その瞬間にどれくらいメモリを使っていたのか」が分かるかど...
Java

Java Tips | 基本ユーティリティ:Javaバージョン判定

Javaバージョン判定は「使っていい機能の境界線を知る」ための技業務システムでは、「このコードは Java 8 でも動かしたい」「Java 11 以上なら新しい API を使いたい」「古いランタイムで...
Java

Java Tips | 基本ユーティリティ:OS判定

OS判定は「環境依存コードを一箇所に閉じ込める」技Java は基本的にマルチプラットフォームですが、実務ではどうしても OS ごとに挙動を変えたい場面が出てきます。例えば「Windows だけパスの区...
Java

Java Tips | 基本ユーティリティ:環境変数取得

環境変数取得は「インフラ側の設定をアプリから読む」技業務システムでは、「本番とステージングで接続先を変えたい」「パスワードや API キーをコードに書きたくない」「コンテナやクラウドの設定をそのまま使...
Java

Java Tips | 基本ユーティリティ:システムプロパティ取得

システムプロパティ取得は「実行環境の設定をコードから読む」技業務システムでは、「本番と検証で挙動を変えたい」「OS や Java のバージョンをログに出したい」「起動オプションで渡した値を読みたい」と...
Java

Java Tips | 基本ユーティリティ:ログフォーマット

ログフォーマットは「あとから読めるログ」を作るための設計ログは「その瞬間に何が起きていたか」を後から再現するための記録です。でも、ただ System.out.println("エラーしました") と出...
Java

Java Tips | 基本ユーティリティ:スタックトレース文字列化

スタックトレース文字列化は「エラーの足跡をテキストとして残す」技例外が起きたとき、Java は「スタックトレース」という“足跡”を持っています。これは「どのメソッドからどのメソッドへ呼ばれて、最終的に...
Java

Java Tips | 基本ユーティリティ:例外ラップ

例外ラップは「生の例外をそのまま外に漏らさない」ための技業務システムを書いていると、標準ライブラリや外部ライブラリから、いろいろな種類の例外が飛んできます。SQLException, IOExcept...
Java

Java Tips | 基本ユーティリティ:タイムアウト制御

タイムアウト制御は「いつまでも待たない」ための安全装置業務システムで一番怖いのは、「固まっているのに気づかない」状態です。外部 API が返ってこない、DB が詰まっている、重い処理が終わらない──こ...
Java

Java Tips | 基本ユーティリティ:再試行処理

再試行処理は「一時的な失敗に負けない仕組み」業務システムでは、外部 API、DB、メッセージキュー、ファイル I/O など、「たまに失敗するけれど、少し待ってもう一度やれば成功する」処理がたくさんあり...
Java

Java Tips | 基本ユーティリティ:スリープユーティリティ

スリープユーティリティは「意図的に待つ」を安全にラップする道具業務システムでも、「少し待ってから再試行したい」「ポーリング間隔を空けたい」「テストで時間経過をシミュレートしたい」といった場面で「スリー...
Java

Java Tips | 基本ユーティリティ:タイムゾーン変換

タイムゾーン変換は「同じ瞬間を別の国の時計で見る」ことタイムゾーン変換は、「ある瞬間」を、日本時間で見たり、UTC で見たり、ニューヨーク時間で見たりする作業です。同じ「瞬間」なのに、国や地域によって...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – マルチ catch

マルチ catch を一言でいうとマルチ catch は、「複数の例外型を、同じ 1 つの catch ブロックでまとめて処理できる構文」です。catch (IOException | SQLExce...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – ntry-with-resources 拡張

まず「元祖」try-with-resources をおさらいするtry-with-resources は、「使い終わったら必ず close() しなきゃいけないリソース(ファイル、ソケット、DB 接続...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – null 許容と switch

なぜ「null と switch」をちゃんと考えないといけないのかswitch は「値に応じて分岐する」構文ですが、その値が null になりうるかどうかを意識していないと、実行時にいきなり Null...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – instanceof の進化

instanceof の「進化」をざっくり俯瞰するinstanceof は、もともと「あるオブジェクトが、ある型のインスタンスかどうかを調べるための演算子」としてスタートしました。昔は「型チェック」と...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – パターンマッチング(instanceof)

パターンマッチング付き instanceof を一言でいうと「instanceof で型を調べたあと、すぐ下でキャストして変数に代入する」――この“二度書き”をまとめて一発で書けるようにした構文が、パ...
スポンサーリンク