TT Lab
はじめる
学ぶ 学習パス コース

デバッグ実戦

環境の差を絞る

TT Labで続きを見る

目標

「うちのサーバーでは動くんですが」と言われたときに、コードではなく環境を疑い、その違いを30分以内に特定できるようになります。

なぜ重要なのか

環境の問題は、コードの欠陥より見つけにくいものです。コードは読めば見えますが、環境には読むものがないからです。そのため順序が必要で、その順序をスクリプトに固めておくと、顧客企業とのやり取りが3往復から1往復に減ります。

このラボで扱う3つは、現場での頻度順です。環境変数は、設定した場所と読む場所が違うケースが大半です。エンコーディングは、ハングルの顧客データで圧倒的によく起きます。Windowsで作られたCSVはUTF-8ではなくEUC-KR(CP949)であることが多く、誤って読まれた文字列はエラーなしで黙って保存され、数週間後に「検索できない」という報告になって返ってきます。権限は、資格情報ファイルでは特に重い問題です。トークンが644で置かれていると、同じサーバーの他のユーザー全員が読めてしまい、セキュリティ点検でこれ1つでプロジェクト全体の信頼が削られます。

/opt/app/envcheck.shは、直す対象ではありません。環境をそれに合わせることが課題です。

ステップ

  1. /root/envディレクトリを作成してください。
  2. bash /opt/app/envcheck.shをそのまま実行して、失敗の出力を/root/env/fail.txtに保存してください。
  3. 失敗メッセージが指している環境変数の名前を、/root/env/missing_var.txtに書いてください。
  4. /opt/data/customers_kr.csvをUTF-8に変換して、/root/env/customers_utf8.csvとして保存してください。ハングルが正しく読める必要があります。
  5. 変換したファイルのヘッダーを除いた顧客の行数を、/root/env/kr_rows.txtに書いてください。
  6. /root/env/token.txtを作成し、権限を600に設定してください。
  7. 必要な環境変数を渡してenvcheck.shをもう一度実行し、成功の出力を/root/env/result.txtに保存してください。
  8. /root/env/report.mdに、何が違ったのかを書いてください。環境変数の名前、元のファイルのエンコーディング名、適用した権限の数字が、すべて入っている必要があります。

参考

作業ディレクトリを作る

/root/envディレクトリを作成してください。

/root/envの下に、出力物を集めます。

失敗を再現して保存する

bash /opt/app/envcheck.shをそのまま実行して、失敗の出力を/root/env/fail.txtに保存してください。

bash /opt/app/envcheck.shをそのまま実行すると失敗します。出力をそのままファイルに残してください。

欠けている環境変数の名前を書く

失敗メッセージが指している環境変数の名前を、/root/env/missing_var.txtに書いてください。

失敗メッセージが変数名を直接教えてくれます。名前だけを書いてください。

ハングルのCSVを復元する

/opt/data/customers_kr.csvをUTF-8に変換して、/root/env/customers_utf8.csvとして保存してください。ハングルが正しく読める必要があります。

/opt/data/customers_kr.csvはUTF-8では読めません。韓国語版Windowsで作られたファイルの代表的なエンコーディングを思い出して、iconvで変換してください。

顧客の行数を数える

変換したファイルのヘッダーを除いた顧客の行数を、/root/env/kr_rows.txtに書いてください。

変換したファイルから、ヘッダーを除いたデータ行の数です。

トークンファイルに最小権限を与える

/root/env/token.txtを作成し、権限を600に設定してください。

/root/env/token.txtを作成し、所有者だけが読み書きできるようにしてください。chmodの数字表記を使います。

チェックを通す

必要な環境変数を渡してenvcheck.shをもう一度実行し、成功の出力を/root/env/result.txtに保存してください。

環境変数をコマンドの前に付けると、その実行にだけ適用されます。通った出力をファイルに残してください。

環境の違いのレポートを書く

/root/env/report.mdに、何が違ったのかを書いてください。環境変数の名前、元のファイルのエンコーディング名、適用した権限の数字が、すべて入っている必要があります。

何が違ったのかを3つ書きます。変数名、元のファイルのエンコーディング名、適用した権限の数字です。