EclipseでJUnitやDjUnitを実行すると「junit java.lang.OutOfMemoryError: Java heap space」とメモリエラーが表示された場合は「デフォルトのVM引数」を設定する事でこの事象を回避する事が出来るのでその設定方法をご紹介します。
環境
- Eclipse 4.2
- Windows7 professional 64bit版
トラブル対応に関する記事です
EclipseでJUnitやDjUnitを実行すると「junit java.lang.OutOfMemoryError: Java heap space」とメモリエラーが表示された場合は「デフォルトのVM引数」を設定する事でこの事象を回避する事が出来るのでその設定方法をご紹介します。
TeraTerm用のマクロファイル「**.ttl」ファイルを実行すると「無効なホスト」と表示された場合の対処方法についてメモしておきます。
ttlファイル用の実行ファイルを「ttpmacro.exe」へ変更します。
TeraTermが日本語表示されない場合の対処方法についてメモしておきます。
|
1 2 3 |
; User interface language file that includes message strings. ; Tera Term uses built-in English message when the file or message is not found. UILanguageFile= |
|
1 2 3 |
; User interface language file that includes message strings. ; Tera Term uses built-in English message when the file or message is not found. UILanguageFile=lang\Japanese.lng |
Web系の開発していると画面表示確認する際に、「cssやjsは変更したのに画面を表示してみると反映されていない」という事を経験した方は少なくないと思います。
こういう場合はまず、F5もしくはctrl+F5を押下して画面を再表示(リロード)確認すると思いますが、そもそも「F5単独」押下と「ctrl+F5同時」押下では何が違うんだろう?という事についてメモしておきます。
上記で説明している「更新ボタン」ですが、以下の様にブラウザのアドレスバー付近に表示されている以下のような赤枠内のボタンのことを「更新ボタン」と記載しております。
サーバー側制御(キャッシュ制御ヘッダー)との関係
ブラウザの「F5」や「Ctrl+F5」によるリロードは、あくまでクライアント(ユーザー側ブラウザ)での操作です。ですが、本番環境ではサーバー側・ホスティング側で HTTP ヘッダー(例:Cache-Control、Expires、ETag)を設定して「ブラウザにいつまでキャッシュを使わせるか」「変更時には必ず再取得させるか」といった制御が行われています。
→ たとえば、Cache-Control: no-cache, no-store や Pragma: no-cache を設定しておくと、ユーザー側が「F5」だけでも常に最新取得がされるよう促せる場合があります。
→ 逆に、長めにキャッシュを許す設定がされていると「Ctrl+F5」などをしない限り古いリソースを参照し続ける可能性があります。
開発/ステージング vs 本番環境の使い分け
開発中は「Ctrl+F5(または Shift+更新ボタン等)」を日常的に使って「確実にサーバー最新版を取得」するのが安心です。記事にも大まかに触れられています。
本番環境では、むしろキャッシュを上手に活用することでページ表示を高速化できますが、更新後に旧リソースが残って「見た目が変わらない」「古いCSS/JSが適用されている」というトラブルも起こりやすいです。
→ そこで「バージョニング(例:style.css?v=1.2.3)」や「ハッシュ付きファイル名(例:style.abc123.css)」などを併用すると、ユーザーにキャッシュクリアを意識させずとも確実に更新を反映させられます。
→ また、CDN(コンテンツ配信ネットワーク)を使っている場合、CDN側キャッシュのクリアやパージ(purge)が必要なケースもあります。
モバイル・タブレット・複数ブラウザでの挙動差
記事では主要なブラウザ(Chrome, Edge, Firefox, Safari, Opera)での「スーパーリロード」のキー操作をリストしています。ただし、モバイル環境(スマホ/タブレット)やブラウザ拡張機能、企業内のカスタムブラウザでは、キー操作が異なる/押してもキャッシュが残る/そもそも更新ボタンしか無いというケースもあります。
→ 例えば iOS の Safari では「更新ボタン長押し→再読み込み/キャッシュの消去」など特殊な操作になることがあります。
→ また、企業/学校環境でプロキシサーバーや内部キャッシュ(例:Squid/キャッシュサーバー)が間に入っていると、ブラウザ側で「Ctrl+F5」しても完全に最新が来ないことがあります。こういった場合は、プロキシキャッシュクリアが必要/あるいはバージョニング戦略を必ず採るべきです。
リロード頻度とユーザー体験のバランス
頻繁に「Ctrl+F5」を強制する設計(例:ボタンを押させる/ユーザーに再読み込みを案内する)をしてしまうと、ユーザー体験が損なわれる可能性があります。回線が遅い環境やモバイル回線では、「ページが一瞬消えて、再読み込みになった」印象を与えてしまうことも。
→ よって、可能であれば「差分更新」の設計(新旧CSS/JSの両方互換)や「ローディング中のUI/スピナー表示」でユーザーに待機時間を意識させない工夫も有効です。
→ また、キャッシュ切れをユーザーに知らせるインターフェイスは、必要以上に派手に表示しないことで「更新作業中なのかな…」という不安を軽減できます。
ブラウザ開発者ツールの活用
Web開発時、キー操作以外にも、ブラウザの開発者ツール(DevTools)を使って「キャッシュ無しで再読み込み」を行うことも可能です。例えば、Chrome では「デベロッパーツールを開いた状態で右クリック→再読み込み→キャッシュを無視してハード再読み込み」を選択できます。
→ これにより、ユーザー側のキー操作に頼らず「確実に最新リソースで表示をチェック」できます。
→ また、ネットワークタブで → Disable cache(キャッシュ無効化)をチェックしておくことで、開発中は毎回最新を取得させる設定にできます(ただし、タブを閉じると元に戻ります)。
結論としての注意点
結局、「F5」はキャッシュを使ってリロード、「Ctrl+F5(または他のスーパーリロード操作)」はキャッシュを無視して最新を取得という違いがあります。しかし、現実には「キャッシュをどう制御しているか(ヘッダー/CDN/プロキシ)」「ユーザーの環境(モバイル/社内ネットワーク)」「開発運用の体制(バージョニング/キャッシュクリア運用)」という“周辺条件”が非常に重要です。これら全体を俯瞰して設計・運用することで、ユーザーにとって快適で信頼できる表示体験が実現できます。
CSVファイルを扱っていると項目値をダブルクォーテーションで囲まれていないケースもあり、これを項目毎にダブルクォーテーションで囲ませたい時があります。こういう場合に手っ取り早くダブルクォーテーションを付与する方法をご紹介します。基本的にはEXCELとサクラエディタなどのエディタを併用する事で実現出来ます。
|
1 2 3 |
a,b,c d,e,f g,h,i |
データの中にすでに "(ダブルクォーテーション)が含まれている場合、それをどう扱うかを考えておく必要があります。
例えば、値が He said "Hello" のようになっていたとすると、ただ前後に " を付けるだけでは "He said "Hello"" のように不正な CSV になります。
通常は、内部に含まれる " を "" のように二重化してエスケープする手法を使います(CSV 規格の慣例)。
例:He said "Hello" → "He said ""Hello"""
値にカンマ , や改行 \n が含まれる可能性がある場合は、必ずそのフィールドをダブルクォーテーションで囲む必要があります。
そうしないと、カンマが「別フィールドの区切り」と誤認されてしまいます。
したがって、値を囲む処理を行う際には すべてのフィールド に対して囲むようにしておいたほうが安全です。
CSV ファイルを扱う際には、文字コード(UTF-8, Shift_JIS, etc.)や改行コード(CRLF, LF, CR)が混在していることがあります。
作業前に統一しておいた方がトラブルが起きにくくなります。
特に Excel で読み書きする際には、Excel の仕様(Windows 版 Excel は CRLF を期待するなど)を意識しておきましょう。
Excel+エディタによる手作業の方法は簡便ですが、データ件数が多かったり繰り返し処理が必要だったりする場合は、スクリプトで一括処理できる方法を使ったほうが効率的・安全です。
例:
Python(pandas や csv モジュール)
PowerShell / Bash スクリプト
あるいは Excel VBA マクロ など
これらを使えば、囲み処理、内部の " のエスケープ、文字コード変換などもあわせて一括で処理できます。
実際に処理後の CSV を別のプログラム(Excel やデータベースのインポート機能等)で読み込んで、意図した通りにフィールドが分割されているかを確認しておきましょう。
特に本番データで使う前には、サンプルデータでテストを繰り返すと安心です。
ちょっとdjUnitで「addReturnValue」を使用しても全く効いてない?という事象に少しハマっていたので原因についてメモしておきます。
addReturnValueが効かない原因として上げられるのが概ね以下の3つになるかと思います。1と2については少し見なおせばすぐ発見出来そうですが、今回ハマった原因が3でした。。。
では「指定したメソッドが複数回実行されている」というのはどういう事かというとについて説明します。
根本的な話として以下の2つのコードは全く同じ意味という事を理解しておく必要があります。
|
1 2 |
addReturnValue(UtilClass1.class, "getStr", expected1); setReturnValueAt(UtilClass1.class, "getStr", 0, expected1); |
これだけで気づく方はハッと思うかもしれませんが、ここで重要なのはaddReturnValueでは「1回目に実行」されたメソッドのみしかaddReturnValueで指定した値が返ってこないという事です。つまり「setReturnValueAt」で1回目を指定した場合と同様の動きしかしてくれないのです。
今回私がハマったのは指定したメソッドが想定した箇所よりも手前で事前に実行されていた為、想定したいたメソッドは2回目の実行になっていたために2回目の方にはaddReturnValueが効いていなかったという事象でした。
addReturnValueをしてクラス名やメソッド名は正しいのにどうも効いていないように見える時は一度「getCallCount」でメソッドの実行回数を調査して見ると良いかもしれません。
Excelで複数ページを印刷する場合に「2 in 1」などに集約して印刷設定した後に印刷してみると1頁目だけ「2 in 1」形式で印刷され、2頁目以降は「2 in 1」形式ではなく元のまま1ページ分そのまま印刷されてしまうという事を経験した事はないでしょうか。これは印刷設定画面でプレビュー表示されている頁のみに変更した印刷設定が適用されている為に発生する事象です。解決するには大きく2通りの方法があります。
ExcelでVLOOKUP関数を使用すると「#N/A」と表示されてしまうケースを見かける事があるかと思います。この事象の発生原因と対処方法をメモしておきます。
◆設定例(C4セル):「=VLOOKUP($B4,$F$4:$G$20,2,0)」
Excelで「#N/A」が表示される原因は単純な入力ミスだけでなく、次のような要因も考えられます。
見逃しやすいポイントを整理しておきましょう。
検索値と参照範囲のデータ型(文字列/数値)が一致していないと、「#N/A」が返ることがあります。
例:検索値が "123"(文字列)で、参照範囲に 123(数値)しかない場合、一致しません。
→ 対策:VALUE 関数や TEXT 関数で型を統一しましょう。
VLOOKUP の第4引数が 1 または省略になっていると「近似一致」になります。
この場合、参照範囲が昇順ソートされていないと誤動作や「#N/A」が発生します。
→ 対策:完全一致にしたい場合は =VLOOKUP(検索値,範囲,列番号,0) と指定。
外部データをコピーしたセルには、全角スペースや改行などの見えない文字が含まれることがあります。
→ 対策:TRIM や CLEAN 関数で不要な空白を削除。
Excel標準の検索は大文字小文字を区別しませんが、記号や全角・半角の違いで一致しないことがあります。
→ 対策:EXACT 関数で文字列を比較してみると原因が分かる場合もあります。
Excel 365以降では、XLOOKUP 関数を使うことで「#N/A」時の代替値を直接指定できます。
上記のように設定すれば、該当データがないときに空白を返せます。
記事内で紹介している IF(ISERROR(VLOOKUP(...))) の代わりに、
「#N/A」だけを対象にできる IFNA 関数を使うのがおすすめです。
他のエラーはそのまま残しつつ、「#N/A」だけを空白にできます。
💡 まとめ
「#N/A」エラーは「該当データなし」だけでなく、型・スペース・一致条件など多くの要因で発生します。
原因を切り分けることで、より確実なデータ参照が可能になります。