Java

スポンサーリンク
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 で型を調べたあと、すぐ下でキャストして変数に代入する」――この“二度書き”をまとめて一発で書けるようにした構文が、パ...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – sealed class

sealed class を一言でいうとsealed クラスは「このクラスを継承してよい“サブクラスの種類”を、あらかじめ限定する仕組み」です。継承を完全に禁止する final と違って、「継承は許す...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – レコード(record)

record を一言でいうとrecord は「フィールドを持つだけの“データ用クラス”を、最小限のコードで定義するための仕組み」です。equals / hashCode / toString / コン...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – テキストブロック

テキストブロックを一言でいうとテキストブロックは、"""(ダブルクォート3つ)で囲んで「複数行の文字列を、そのままの見た目で書ける」新しい文字列リテラルです(Java 15 以降で正式導入)。今までの...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – yield

yield を一言でいうとyield は、switch「式」の中で「この case ブロックから“この値を返す”」とコンパイラに伝えるためのキーワードです。return が「メソッドから値を返す」のに...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – switch 式(Java 14+)

switch 式とは何か(Java 14 以降の新しい switch)Java 14 以降では、switch が「文(statement)」だけでなく「式(expression)」としても使えるように...
Java

Java | Java 詳細・モダン文法:言語仕様詳細 – var(ローカル変数型推論)

var を一言でいうとvar は「型を書かなくても、右辺からコンパイラが型を推論してくれるローカル変数宣言」のためのキーワードです。「型がなくなる」のではなく、「型を書く手間を省く」だけで、コンパイル...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – 日付計算の注意点

日付計算が「思ったより難しい」理由日付計算は、一見「足し算・引き算だけ」に見えますが、実際には月末の長さの違い、うるう年、タイムゾーン、夏時間(DST)、日付の境界の扱いなど、落とし穴だらけです。ja...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – Clock

Clock を一言でいうとClock は「“今”をどう決めるかをカプセル化するためのオブジェクト」です。Instant.now() や LocalDateTime.now() が、裏側で「どの時計を使...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – Instant

Instant を一言でいうとInstant は「世界共通の“ある一瞬”を、UTC 基準で表したもの」です。人間が「2025年1月18日 10時(日本時間)」と考えるのに対して、Instant は「1...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – OffsetDateTime

OffsetDateTime を一言でいうとOffsetDateTime は「日付+時刻 + UTC からのズレ量(オフセット)」をセットで表すクラスです。ZonedDateTime が「タイムゾーン...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – TimeZone の扱い

まず「タイムゾーンって何者か」を整理するタイムゾーンは、ざっくり言うと「その場所の“ローカルな時刻”と、世界共通の時刻(UTC)をどう対応づけるかのルール」です。日本(Asia/Tokyo)は「UTC...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – 不変オブジェクトとしての日時

「不変な日時」ってどういうことかまず言葉からいきます。LocalDate や LocalDateTime、ZonedDateTime など java.time のクラスは「不変(immutable)」...
Java

Java | Java 詳細・モダン文法:日付・時刻 API – DateTime API 設計思想

なぜ新しい DateTime API が必要だったのかまず一番大事な背景からいきます。Java 8 で導入された java.time(DateTime API)は、「古い日付 API(java.uti...
Java

Java | Java 詳細・モダン文法:Optional – フィールドに Optional を持たない理由

そもそも Optional は「フィールド用」に設計されていないまず大前提として押さえておきたいのは、Optional は「戻り値用のコンテナ」として設計されている、ということです。「値があるかもしれ...
スポンサーリンク