動作環境の違いが開発したプログラムにもたらす影響について解説します。
プログラムの動作に必要なもの
動作環境の要素としては、次のようなことがあります:
動作環境の要素 | 例 |
---|---|
OS | Windows, Mac, Linux, 他 |
プログラム言語の実行環境 | Java, PHP, Ruby, Python, Go, JavaScript, 他 |
アプリケーション, ライブラリー, パッケージ, など | Web サーバー, データベース, 他 |
他 |
更に各要素ごとにバージョンの違いがあります。
環境構築ではこれらの要素を組み合わせてプログラムの動作環境を作ります。
動作環境が違うとどんなことが起こるの?
動作環境が違うと、開発したプログラムが意図した通りに動かないことがよくあります。
これは、次のようなことが原因です:
- OS の違いがプログラムに与える影響
- バージョンの違いがプログラムに与える影響
OS の違いがプログラムに与える影響
OS ごとの次のような違いがプログラムの動作に影響を与えます:
- ファイルシステムと権限
- 文字コード
- 改行コード
バージョンの違いがプログラムに与える影響
言語やアプリケーション、パッケージ、ライブラリーなどのバージョンが異なると
たとえそれらの提供者が振る舞いを変えないように工夫していたとしても、
振る舞いが変わることがあります。
言語のマイナーバージョンアップで Web サービスが利用不能になることも
筆者の経験で最も影響が大きかった事例は、
言語のマイナーバージョンを上げただけで Web サービスに不具合が発生し
利用不能になったことです。
当時 Java を使った開発をしており、
Webサイトのフォームに入力必須の日付入力欄がありました。
ユーザーが文字列として入力した日付を
サーバー側で日付時刻型に変換して処理していました。
このサーバーの Java のマイナーバージョンアップを行ったところ、
ユーザーが入力した日付は不正な日付として認識され
それ以上画面を進めることができなくなりました。
Java の「文字列を日付時刻型に変換する処理」が認識する書式が
マイナーバージョンアップを境に変わっていたことが原因でした。
動作環境の違いから起こるトラブルを減らすにはどうしたらいいの?
Docker などの仮想化技術を使うと、
実行環境をイメージとしてまとめて保存しておくことができます。
保存したイメージを開発時にも最終的な実行時にも使うことで
動作環境の違いから起こるトラブルをほぼ無くすことができます。