開発を進めていると、しょうもないところで間違えていたせいでハマる…
なんてこと多いですよね(´・ω・`)
今回は、そんなありがちなミスをまとめてみます。
何かよく分からないけどうまくいかない時に、確認する観点集になる…はず。
自分が変なミスするたびに更新していきます(-_-;)
1.文字コードは正しいか?
UTF-8にすべきところを、SJISになっているなど…。
ありがち。。
2.改行コードは正しいか?
Windowsで開発をしているとCRLFなのに、
Linuxサーバを使うからLFにすべき…、でも変え忘れていた、なんてことよくありそうです。
3.言語やライブラリなどバージョンは正しいか?
バージョンが違うことで動かない、なんてこともあります。
新しいバージョンの場合、古いバージョンの機能(クラス、メソッドetc)のサポートさえも行っておらず、
古いバージョンで出来ていたことができなくなることもあります。
もちろん逆もしかり。
ありがちなのが、ググった例と全く同じライブラリでコード書いてるのに、
なぜか自分の環境では動かない…って時。
1年前、ググって出てきたコードが使っているバージョンが古くて、
自分の使っているバージョンでは動作しない、なんてことがこないだありました。
あとは、Java1.6を使わないといけないのに、
Eclipseのデフォルトが最新(2020年5月時点で1.8)を設定するようになっており、
デフォルト変えてなくてエラー出まくり…ってこともありました汗
4.権限は正しいか?
実行権限やアクセス権限がなくて処理が落ちる、というのもありがち…。
ファイルやディレクトリの権限は、linuxなら「ls -l」コマンドで簡単に確認できるので、
新しくファイルを置いたときなどには必ずチェックする癖をつけましょう。
5.ファイル名は正しいか?
プログラム上で動作する、正しいファイル名になっているかを確認することも大事です。
ファイル名に余計な文字がくっついていたせいで、
うまくファイルを読み込めずに落ちる…といった事件が先日ありました。
6.設定ファイルの内容は正しいか?
「C:\test」ディレクトリに、アウトプットファイルが出力されるはずなのに出てこない…
といった時に、設定内容的に実は「D:\testdir」に正しく出力されていた、
なんてこともありえる話だと思います。
最近私は、ビルド対象のプロジェクトのディレクトリを間違えて、
修正前のソースが入ったディレクトリを指してビルドするといったこともやらかしました。
いくらテストしても修正内容が通らないという謎現象に頭を悩ませ、
最終的にディレクトリ設定間違いだったことが分かって脱力しました。
今回の場合は、実は間違えたというより、
私が正しい設定方法を知らなかったことが原因でしたが…(^-^;
どちらにせよ、ビルド後に、きちんと差分比較をしていれば、
もう少し早く解決できたはずでした。
差分比較は忘れず行う必要もありますね。。
7.変数名やメソッド名、変数に代入する値などのスペルミスはないか?
変数名やメソッド名は、適切なエディタを使っていれば基本的に防げますが、
変数に何かしらの文字列を代入する時などに、
そのスペルを間違えることもなくはないです。(以前1回やらかしました(^-^;)
8.処理タイミングは問題ないか?
A→B→Cという流れの既存処理があり、
「test」という処理をAとBの間に入れないといけないのに、
Aの前に入れてしまったことで動作が狂う…、なんてこともあるかもしれません。
A、B、Cと、testという各処理の内容自体は正しいからこそ、
間違いになかなか気づけないことにつながります。
人から聞いた話ですが、以下のような例があったらしいです。
仕様:
UTF-8で書かれたファイルAについて、
文字コードを別のものに変換後、データとして取り込む。
変換後の文字コードには、一部禁則文字があるため、
文字コード変換時に、禁則文字を一律で別の文字に置き換える処理が必要だった。
実際に起きたミス(本番環境で発覚したらしい…汗):
ファイルAを取得→禁則文字置き換え→文字コードを変換→取り込み
という処理の流れにしていたが、
正しくは、
ファイルAを取得→文字コードを変換→禁則文字置き換え→取り込み
という順番。
文字コード変換前に、変換後の文字コードの禁則文字を置き換えてしまったため、
データ内容が悲惨なことになったようです…
まとめ
こうやって書き出すと、なんでもないようなことにやたら悩んでいるように感じますが、
実際ハマるときは視野が狭まり、案外初歩的なところのつまずきも見えなくなってしまうことがあります。
詰まったときの対処法として大事なことは、
・日々のミスを蓄積して活かし、詰まったときの対処観点を増やす
・「間違っているはずはない」という謎の先入観を排除し、初歩から客観的に見返す
・どのあたりでミスっているかの切り分けをつけていく(環境の問題、ソースの問題、など)
の3つかなあと思います。
今回の記事は、その1つ目・2つ目の部分にあたるもの。
多分これからもどんどん失敗するので(開発は失敗のほうが多いと思ってる←)
それらをこの記事に蓄積して、活用していけたらなとおもいます。