- HOME >
- ポンコツPdM
ポンコツPdM

独立系のSIerに務めるSE,PM。 仕事の上で得たIT関連やプロジェクト運営関連の知識を書きます。 使用技術:Java,ウェブ関連全般,データベース全般 (どれも広く浅く)
学習と現場をつなぐ
「何が分からないの?」と聞かれても、そこを説明できない。質問文を書く手まで止まったら、まず見えている状況から相談できます。 先に結論 目的・止まった操作・見える結果を送る。原因や仮説がなくても、相談は始められる。 調べた分だけ、操作と結果を足す。観察したことと、まだ確かめていない考えを分ける。 困りごとの影響で、相談する時点を決める。期限や安全に関わる場合は、調べ終わるまで待たない。 架空の問い合わせ管理を題材に、整理できていないときと、少し調べた後の相談文を紹介します。「件名は必須・1〜100文字」は説 ...
AIによる要約e.getMessage()が返すのは例外メッセージのStringだけです。SLF4JへThrowableを渡していないため、発生クラスや行番号を含むスタックトレースは記録されません。log.error("保存失敗", e)またはlog.error("userId={}の保存に失敗", userId, e)のように例外自体を最後の引数へ渡します。ただし、同じ例外を各層で繰り返しERROR記録しないことも重要です。 この記事はXへ投稿したJavaクイズの詳しい解説です。まず問題を解きたい方は、 ...
AIによる要約NumberFormatExceptionは、文字列が対象の数値型として解釈できない場合に発生します。空文字、空白、3桁カンマ、全角数字、小数点、単位付き、int範囲外など原因は複数です。例外をcatchして0へ変換すると未入力や不正値を隠します。入力仕様を決め、文字列段階の形式チェック、必要な正規化、適切な数値型への変換、利用者向けエラーの返却を境界で行います。 画面入力、CSV、環境変数、外部APIは、数値に見えるデータも最初は文字列です。Integer.parseIntへ渡すだけで変換 ...
AIによる要約BigDecimalのdivideは、結果を正確に有限小数で表せない場合、丸め指定なしではArithmeticExceptionを投げます。1÷3のような計算では、業務仕様に基づいてscaleとRoundingModeを明示します。例外を避けるため適当に丸めるのではなく、金額、税率、表示値、DB保存値のどの段階で何桁にするかを決めることが重要です。 この記事はXへ投稿したJavaクイズの詳しい解説です。まず問題を解きたい方は、Xの元ポストを開くことができます。 金額、単価、税率、進捗率などを ...
AIによる要約isEmptyは文字数が0かを判定し、空白だけの文字列はfalseです。isBlankは空文字または空白文字だけならtrueになります。どちらも呼び出し元がnullならNullPointerExceptionです。画面入力では未送信、空文字、空白だけ、値ありを区別し、必須項目ならisBlank、空文字だけを特別扱いするならisEmptyなど、業務仕様に合わせます。trimとstripは文字列を変換するメソッドで、判定とは役割が異なります。 入力チェックでは『値がない』という言葉をよく使います ...
AIによる要約String.splitの引数は単なる区切り文字ではなく正規表現です。正規表現のピリオドは任意の1文字を表すため、split(".")では文字列全体が区切りとして扱われます。ピリオドそのもので分割するならsplit("\\.")、区切り文字が変数ならPattern.quoteを使います。また、末尾の空項目を残すには第2引数へ-1を指定します。 この記事はXへ投稿したJavaクイズの詳しい解説です。まず問題を解きたい方は、Xの元ポストを開くことができます。 画面入力、ファイル名、バージョン番号 ...
AIによる要約Integer同士の==は数値ではなく参照を比較します。ただしInteger.valueOfが一定範囲のインスタンスを再利用するため、小さい値ではtrue、大きい値ではfalseとなることがあり、さらに混乱を招きます。数値として同じか確認するならequals、大小比較ならcompareやintValueを使います。Integerがnullの可能性を持つ場合はObjects.equalsや明示的なnull判定を選びます。 Stringの==が参照比較だと知っていても、Integerは数値だから ...
AIによる要約利用者の入力値をSQL文字列へ直接連結すると、引用符を含む名前でSQLが壊れるだけでなく、入力がSQL構造として解釈されるSQLインジェクションの原因になります。値はPreparedStatementやJdbcTemplateの?、NamedParameterJdbcTemplateの名前付きパラメータへ渡し、SQLとデータを分離します。ただしテーブル名やORDER BY列などの識別子はプレースホルダー化できないため、許可リストから選びます。 SQL文字列連結は、コード量が少なく、テストデー ...
AIによる要約StringBuilderは内容が同じでもequalsでtrueになりません。StringBuilderはObjectのequalsを内容比較用にオーバーライドしていないため、同じインスタンスかを比較します。内容を比較するならtoStringしてString.equalsを使うか、String側のcontentEqualsへStringBuilderを渡します。StringBuilderは可変なので、Setの重複判定やMapのキーにも向きません。比較する時点で不変なStringへ変換するのが ...
AIによる要約git addはファイルを「今後ずっとコミット対象」にする操作ではなく、その時点の内容をステージング領域へ記録する操作です。add後に同じファイルを編集すると、add時点までの差分はstaged、その後の差分はunstagedとして同時に存在します。git diffで未ステージ差分、git diff --cachedでコミット予定差分を確認します。後の編集も同じコミットへ入れるなら再度git addし、分けるならそのままコミットします。 新人がGitで混乱しやすいのは、「ファイル単位でステー ...