JUnit:使用出来るアノテーションの種類

JUnitで使用可能なアノテーションの種類についてまとめておきます。

環境

    junit_4.10.0

JUnit 4.10で使用できるアノテーション

    アノテーション用途
    @Beforeメソッド単位で事前実行する
    @BeforeClassテストクラスで一回だけ事前実行
    @Afterメソッド単位で事後実行する
    @AfterClassテストクラスで一回だけ事後実行
    @Ruleテスト時における一時的なルールの作成
    @ClassRule複数のテストを通じてのルール設定
    @Testテストメソッドの指定
    @Ignore一時的にテスト対象外メソッドを指定

SQL:レコード件数を取得する方法

SQLでテーブルのレコード数を取得する方法をご紹介します。

サンプルテーブル

    以下の商品テーブル「goods」を元に説明します。
    商品テーブル「goods」
    //write-remember.com/wordpress/wp-content/uploads/2016/01/26cb158d92485675df251b7cf17ff9e4.png\">//write-remember.com/wordpress/wp-content/uploads/2016/01/26cb158d92485675df251b7cf17ff9e4.png\" alt=\"\" width=\"289\" height=\"116\" class=\"aligncenter size-full wp-image-4813\" />"

単純なレコード件数の取得

    SQL

    SQLは
    「SELECT COUNT(*) FROM [テーブル名];」形式で記述します。

    実行結果

重複データを除いたレコード件数の取得

    SQL

    重複データを除いて取得する場合、SQLは
    「SELECT COUNT(DISTINCT [列名]) FROM [テーブル名];」形式で記述します。

    実行結果

SQL:内部結合と外部結合の違い

業務でSQLを使用する場合、必ず使用する事になると言って良いのがテーブルの結合処理です。WEB系システムの場合、そのほとんどはRDBMSを使用してますのでテーブルが一つだけなどという事はまずありえません。複数のテーブルからその時々に応じて必要なデータを取得し使用するのが常です。その際に重要になるポイントの一つが内部結合と外部結合です。

サンプルテーブル

    以下の商品テーブル「goods」と属性コードテーブル「type_code」を元に説明します。
    商品テーブル「goods」属性コードテーブル「type_code」
    ""

内部結合とは

  • 2つのテーブルで一致したデータ行のみ取得します。
  • SQLは「SELECT * FROM [テーブル名1] INNER JOIN [テーブル名2] ON [結合条件]」形式で記載します。
  • サンプルSQL

    サンプルSQLの実行結果

外部結合とは

  • 2つのテーブルで一致しないデータも含めてどちらか一方のテーブルのデータを全て取得します。
  • SQLは左外部結合の場合、「SELECT * FROM [テーブル名1] LEFT OUTER JOIN [テーブル名2] ON [結合条件]」形式で記載します。
  • SQLは右外部結合の場合、「SELECT * FROM [テーブル名1] RIGHT OUTER JOIN [テーブル名2] ON [結合条件]」形式で記載します。
  • サンプルSQL(左外部結合の場合)

    サンプルSQLの実行結果

jpgとpngの違い

このサイトにも記事を書く際に画像を添付する事が多いのですが、「画像の形式ってjpgとpngどっちがいいんだろう・・・」と思いながらも適当に使っていたのでその辺を整理しておこうと思います。他にはgifなどもありますが今はあまり使用される事は少ないでしょうからjpgとpngについてのみまとめておきます。

jpgの特徴

  • 写真やグラデーションのある画像など色数が多い画像の場合の保存に適しています。
  • 透明/半透明の画像は扱えません。
  • 高画質でファイルサイズが小さくなります。
  • 画質が必ず劣化します。

pngの特徴

  • PC画面のキャプチャやイラストなど色数が少ない画像の場合の保存に適しています。
  • 透明/半透明の画像が扱えます
  • ファイルサイズが大きくなりやすい。ただしキャプチャなどのシンプルな画像の場合はjpgよりファイルサイズが小さくなります。
  • 画質が全く劣化しません。

SQL:SELECT文の各句の実行順番について

SQLを理解する上で記載する各句の実行順序を理解している事はとても重要な事です。この辺の知識がおろそかになっていると複雑なSQLを書く場合や作成したSQLのパファーマンスに問題が発生した場合、他人か作成したSQLの修正などの対応に苦慮する事になるからです(はい私の事です)。逆に各句の実行順序を正しく理解していれば複雑なSQLもスラスラ書けるようになっていきます。
では今回は「SELECT文の各句の実行順番について」まとめておきます。

SELECT文で指定可能な句

    SELECT文での指定順序で記載すると以下の様になります。
  • SELECT句
  • FROM句
  • WHERE句
  • GROUP BY句
  • HAVING句
  • ORDER BY句

SELECT文で指定可能な句の実行順序

    上記の句を実際に実行される順序に並び替えると以下の様になります。
  1. FROM句
  2. WHERE句
  3. GROUP BY句
  4. HAVING句
  5. SELECT句
  6. ORDER BY句

ブラウザ表示でのF5とctrl+F5の違い

Web系の開発していると画面表示確認する際に、「cssやjsは変更したのに画面を表示してみると反映されていない」という事を経験した方は少なくないと思います。
こういう場合はまず、F5もしくはctrl+F5を押下して画面を再表示(リロード)確認すると思いますが、そもそも「F5単独」押下と「ctrl+F5同時」押下では何が違うんだろう?という事についてメモしておきます。

F5単独押下時のリロード

  • ブラウザでキャッシュされている場合、キャッシュを利用して画面を再表示します。

Ctrl+F5同時押下時のリロード

  • ブラウザのキャッシュを利用せずにサーバーにある最新の情報を読み込んで画面を再表示します。
  • スーパーリロードとも呼びます
  • ブラウザによって、Ctrl + F5以外でもスーパーリロードは可能です。

ブラウザ別のスーパーリロード方法

<Google Chrome、Microsoft Edge>

  • Ctrl + F5
  • Shift + F5
  • Ctrl + Shift + R
  • Ctrl + 更新ボタン
  • Shift + 更新ボタン

<FireFox>

  • Ctrl + F5
  • Ctrl + Shift + R
  • Shift + 更新ボタン

<Opera>

  • F5
  • Ctrl + R
  • 更新ボタン

<Safari>

  • Shift + 更新ボタン

ブラウザの更新ボタンとは

上記で説明している「更新ボタン」ですが、以下の様にブラウザのアドレスバー付近に表示されている以下のような赤枠内のボタンのことを「更新ボタン」と記載しております。

補足:キャッシュ&リロードに関する応用/注意点

  1. サーバー側制御(キャッシュ制御ヘッダー)との関係
    ブラウザの「F5」や「Ctrl+F5」によるリロードは、あくまでクライアント(ユーザー側ブラウザ)での操作です。ですが、本番環境ではサーバー側・ホスティング側で HTTP ヘッダー(例:Cache-ControlExpiresETag)を設定して「ブラウザにいつまでキャッシュを使わせるか」「変更時には必ず再取得させるか」といった制御が行われています。
    → たとえば、Cache-Control: no-cache, no-storePragma: no-cache を設定しておくと、ユーザー側が「F5」だけでも常に最新取得がされるよう促せる場合があります。
    → 逆に、長めにキャッシュを許す設定がされていると「Ctrl+F5」などをしない限り古いリソースを参照し続ける可能性があります。

  2. 開発/ステージング vs 本番環境の使い分け
    開発中は「Ctrl+F5(または Shift+更新ボタン等)」を日常的に使って「確実にサーバー最新版を取得」するのが安心です。記事にも大まかに触れられています。
    本番環境では、むしろキャッシュを上手に活用することでページ表示を高速化できますが、更新後に旧リソースが残って「見た目が変わらない」「古いCSS/JSが適用されている」というトラブルも起こりやすいです。
    → そこで「バージョニング(例:style.css?v=1.2.3)」や「ハッシュ付きファイル名(例:style.abc123.css)」などを併用すると、ユーザーにキャッシュクリアを意識させずとも確実に更新を反映させられます。
    → また、CDN(コンテンツ配信ネットワーク)を使っている場合、CDN側キャッシュのクリアやパージ(purge)が必要なケースもあります。

  3. モバイル・タブレット・複数ブラウザでの挙動差
    記事では主要なブラウザ(Chrome, Edge, Firefox, Safari, Opera)での「スーパーリロード」のキー操作をリストしています。ただし、モバイル環境(スマホ/タブレット)やブラウザ拡張機能、企業内のカスタムブラウザでは、キー操作が異なる/押してもキャッシュが残る/そもそも更新ボタンしか無いというケースもあります。
    → 例えば iOS の Safari では「更新ボタン長押し→再読み込み/キャッシュの消去」など特殊な操作になることがあります。
    → また、企業/学校環境でプロキシサーバーや内部キャッシュ(例:Squid/キャッシュサーバー)が間に入っていると、ブラウザ側で「Ctrl+F5」しても完全に最新が来ないことがあります。こういった場合は、プロキシキャッシュクリアが必要/あるいはバージョニング戦略を必ず採るべきです。

  4. リロード頻度とユーザー体験のバランス
    頻繁に「Ctrl+F5」を強制する設計(例:ボタンを押させる/ユーザーに再読み込みを案内する)をしてしまうと、ユーザー体験が損なわれる可能性があります。回線が遅い環境やモバイル回線では、「ページが一瞬消えて、再読み込みになった」印象を与えてしまうことも。
    → よって、可能であれば「差分更新」の設計(新旧CSS/JSの両方互換)や「ローディング中のUI/スピナー表示」でユーザーに待機時間を意識させない工夫も有効です。
    → また、キャッシュ切れをユーザーに知らせるインターフェイスは、必要以上に派手に表示しないことで「更新作業中なのかな…」という不安を軽減できます。

  5. ブラウザ開発者ツールの活用
    Web開発時、キー操作以外にも、ブラウザの開発者ツール(DevTools)を使って「キャッシュ無しで再読み込み」を行うことも可能です。例えば、Chrome では「デベロッパーツールを開いた状態で右クリック→再読み込み→キャッシュを無視してハード再読み込み」を選択できます。
    → これにより、ユーザー側のキー操作に頼らず「確実に最新リソースで表示をチェック」できます。
    → また、ネットワークタブで → Disable cache(キャッシュ無効化)をチェックしておくことで、開発中は毎回最新を取得させる設定にできます(ただし、タブを閉じると元に戻ります)。

  6. 結論としての注意点
    結局、「F5」はキャッシュを使ってリロード、「Ctrl+F5(または他のスーパーリロード操作)」はキャッシュを無視して最新を取得という違いがあります。しかし、現実には「キャッシュをどう制御しているか(ヘッダー/CDN/プロキシ)」「ユーザーの環境(モバイル/社内ネットワーク)」「開発運用の体制(バージョニング/キャッシュクリア運用)」という“周辺条件”が非常に重要です。これら全体を俯瞰して設計・運用することで、ユーザーにとって快適で信頼できる表示体験が実現できます。

Excel:大文字⇔小文字の変換方法

Excelで英字の「大文字⇒小文字」、「小文字⇒大文字」へ変換する方法です。

小文字⇒大文字へ変換する方法

    英字の小文字を大文字へ変換する場合は「UPPER」関数を使用します。
    以下の例ではB2セルにある内容をC2セルへ大文字で表示しています。
    C2セルへは「=UPPER(B2)」と入力します。

大文字⇒小文字へ変換する方法

    英字の大文字を小文字へ変換する場合は「LOWER」関数を使用します。
    以下の例ではB3セルにある内容をC3セルへ小文字で表示しています。
    C3セルへは「=LOWER(B3)」と入力します。

JUnit:Exceptionのテスト方法

junitでexceptionが発生した事の確認テストはどのようにすれば良いかメモしておきます。
exceptionの発生確認は@Test内に「(expected = [確認したいExceptionクラス])」を指定する事で簡単に確認する事が出来ます。

JUnitサンプル

CSVファイルの項目をダブルクォーテーションで囲む方法

CSVファイルを扱っていると項目値をダブルクォーテーションで囲まれていないケースもあり、これを項目毎にダブルクォーテーションで囲ませたい時があります。こういう場合に手っ取り早くダブルクォーテーションを付与する方法をご紹介します。基本的にはEXCELとサクラエディタなどのエディタを併用する事で実現出来ます。

使用するソフト

  • Microsoft Excel ※特にバージョンは問いません
  • サクラエディタ ※秀丸など他のエディタでも可

CSVファイルへのダブルクォーテーションの付与手順

  1. Excelで対象のCSVファイルを開きます。ここでは「sample.csv」を開いています。
    「sample.csv」の内容は以下の通りです。
  2. Excelでcsvファイルを開いたらデータの最終行の次行へ以下の数式を入力します。今回は1行空けて見やすくA5セルへ入力しています。
    ⇒「=””””&A1&””””」
  3. A5セルへダブルクォーテーション付で値が表示されましたので次にA5セルの式をA5:C7セルまでコピペします。
    ※項目数、行数によってペーストする範囲は変更して下さい。
  4. ここまで項目単位にはダブルクォーテーションが付与された状態になったのでこの内容をサクラエディタへ貼り付けます。
    ただこのままではカンマ区切りではなくタブ区切りの状態なので今度はこれをカンマ区切りへ変更します。
  5. 「Ctrl + R」で置換ダイアログを表示し、「置換前」の文字へ「\t」、「置換後」の文字へ「,」(カンマ)を入力し、正規表現へチェック後に「全て置換」を選択します。
  6. これでダブルクォーテーション付与のカンマ区切りのCSV形式の内容になったのでこの内容を元のファイルと差し替えれば完了です。

補足:CSV のダブルクォーテーション処理で注意すべき点

1. 既にダブルクォーテーションが含まれている値への対応

  • データの中にすでに "(ダブルクォーテーション)が含まれている場合、それをどう扱うかを考えておく必要があります。
    例えば、値が He said "Hello" のようになっていたとすると、ただ前後に " を付けるだけでは "He said "Hello"" のように不正な CSV になります。

  • 通常は、内部に含まれる """ のように二重化してエスケープする手法を使います(CSV 規格の慣例)。
    例:He said "Hello""He said ""Hello"""

2. 区切り文字や改行、カンマを含む値

  • 値にカンマ , や改行 \n が含まれる可能性がある場合は、必ずそのフィールドをダブルクォーテーションで囲む必要があります。
    そうしないと、カンマが「別フィールドの区切り」と誤認されてしまいます。

  • したがって、値を囲む処理を行う際には すべてのフィールド に対して囲むようにしておいたほうが安全です。

3. 文字コード・改行コードの扱い

  • CSV ファイルを扱う際には、文字コード(UTF-8, Shift_JIS, etc.)や改行コード(CRLF, LF, CR)が混在していることがあります。
    作業前に統一しておいた方がトラブルが起きにくくなります。

  • 特に Excel で読み書きする際には、Excel の仕様(Windows 版 Excel は CRLF を期待するなど)を意識しておきましょう。

4. 自動化スクリプトでの生成・変換を検討

  • Excel+エディタによる手作業の方法は簡便ですが、データ件数が多かったり繰り返し処理が必要だったりする場合は、スクリプトで一括処理できる方法を使ったほうが効率的・安全です。
    例:

    • Python(pandas や csv モジュール)

    • PowerShell / Bash スクリプト

    • あるいは Excel VBA マクロ など

    これらを使えば、囲み処理、内部の " のエスケープ、文字コード変換などもあわせて一括で処理できます。

5. 検証・動作確認を忘れずに

  • 実際に処理後の CSV を別のプログラム(Excel やデータベースのインポート機能等)で読み込んで、意図した通りにフィールドが分割されているかを確認しておきましょう。

  • 特に本番データで使う前には、サンプルデータでテストを繰り返すと安心です。

Excel:シートをコピーしようとすると「移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’xxx’が含まれています。この名前を使用しますか?」というメッセージが表示される原因

Excelを操作しているとシートをコピーする際に「移動またはコピーしようとしている数式またはシートには、移動またはコピー先のワークシートに既にある名前’xxx’が含まれています。この名前を使用しますか?」というメッセージが表示される事がたまに発生します。今回はその原因と対処方法についてメモしておきます。

原因

    一部のセル範囲に名前指定していてその指定した範囲を列削除などしていると名前指定範囲等がおかしくなってしまい、シートコピーの際にメッセージが表示されてしまいます。
    ※Office2013の場合は「名前’xxx’は既に存在します。この名前にする場合は[はい]をクリックします。移動またはコピーを行うために’xxx’の名前を変更する場合は、[いいえ]をクリックします。」というメッセージになります。

対処方法

  1. 「Ctrl + F3」もしくはメニューの「数式」タブ⇒「名前の管理」を選択します。
  2. 名前の管理画面が表示されたら表示された一覧で参照範囲か範囲の数式が「#REF!」などエラーになっている箇所を修正する。もしくは名前定義そのものを削除すれば完了です。