WordPress個別サポート
スポンサーリンク

WordPressテーマ「LOTUS (TCD039)」

プログラミングは「エラーとの闘い」

PHPをマスターしようと入門書で学習を進めた方。読み終えてから次のような状況に悩んでいませんか?

  • 入門書は一通りマスターしたのにゼロから作成するとうまくいかない
  • 本のサンプルは動かせたのに修正すると動かなくなる

「こんなはずじゃなかった」とか「自分にはプログラミングの才能がない?」などと悩むかもしれませんが、これは誰もが経験することで、ある程度は仕方のないことです。PHPに限りませんが、プログラムの作成は試行錯誤の連続、つまり、エラーとの闘いです。

エラーの対処に必要な「直す力」

エラーとの闘いとは、PHPスクリプトの作成時に発生した不具合の原因を特定して、コードを修正して、修正結果を検証する作業です。入門書に載っている見本を打ち込む作業はスイスイと進められて楽しかったかもしれませんが、実際に時間がかかるのはコードの入力より、エラー原因の特定やコードの修正です。

コードの修正を乗り切るには、単に見本を入力するだけでなく、エラーメッセージの意味を解釈したり、うまくいかない原因を特定したり、正しい構文や関数、引数を選んでコードに修正するという、エラーに対処する力が求められます。

たとえば、PHPスクリプトを実行すると、次のようなメッセージが表示されることがあります。

実行時に表示されるエラーメッセージの例

実行時に表示されるエラーメッセージの例

この場合、メッセージ(Notice:Undefined variable)をキーワードにしてインターネットで検索すると、そのメッセージが表示される原因や、対処方法などの参考になるページが見つかるはずです。

自分と似たような状況について報告されたページが見つかれば、そのページのおかげでエラーを対処できます。わざわざ入門書の著者に「うまくいきません」と、すぐに答えが返って来そうもないメールを送る必要もありません。

また、エラーといっても必ずエラーメッセージが表示されるわけではありません。たとえば、次のおみくじのPHPスクリプトは、「大吉」と表示される想定でしたが、「大吉吉凶」と表示されてしまいます。実行してもエラーメッセージは表示されませんが、うまく動いていないことは確かです。

<?php
$no = 1;
switch ($no) {
    case 1:
        echo "大吉";
    case 2:
        echo "吉";
    default:
        echo "凶";
}
?>

○実行結果
大吉吉凶

この場合、switch文の各caseにbreak文を使って、「大吉」などを表示した後にswitch文から抜ける必要があるということを理解していれば、この問題に対処することができます。

<?php
$no = 1;
switch ($no) {
    case 1:
        echo "大吉";
        break;
    case 2:
        echo "吉";
        break;
    default:
        echo "凶";
}
?>

○実行結果
大吉

このように、PHPスクリプトの作成中は、さまざまなエラーと闘いながら、場合によってはエラーメッセージが表示されなくてもエラーを見過ごすことなく、正しいプログラムの完成へと作業を進めていく必要があります。

入門書から抜け落ちた「直す力の養成」

こうした問題に対処するには、PHPスクリプトを「作る力」だけでなく「直す力」が必要です。理想を言えば、入門書の「マメ知識」や「TIPS」に書いてあるような、構文や関数の細かい機能や特徴を頭に入れておけば良いのですが、そこまで短期間で到達するのは難しいかもしれません。

ただし、初心者が目にする不具合のパターンはある程度限られています。そこで、こうした定番のエラーパターンをまとめた本や、入門書の最後にでも「よくあるPHPスクリプトのエラー」などがまとめられていると初心者には役立つはずです。少しはプログラミング中の悩みを小さくできるかもしれません。

ところが、PHPに限らずプログラミング入門書では、「直す力」に焦点を当てた本やエラー対応力を養うセクションがほとんどないのが現状です。

それは、入門書の多くが「一冊を読めば何らかの成果物を完成できる」ことを主眼に置いており、その手順がわかりやすいほど、読者には好まれる傾向だからです。PHPの本を何冊も書いた私も反省しなければなりません。

「このエラーにはこのように対処しましょう」という話題が増えていくと枝葉が多くなり、本筋の「成果物を作ろう」の流れが見えづらくなります。そもそも、入門書の本筋の「…を作ろう」は、うまくいくことを前提に記載されているので、あまり「エラーが発生したら…」ばかり取り上げると読者の不安をあおります。

また、一冊を通してエラー、不具合、トラブル、、、のような話題ばかりが詰め込まれていると、ドロドロした“灰色の”本にもなりかねません。せっかく「ショッピングカートを作成しよう」と明るい希望を持って読み始めた読者のやる気をなくしてしまうかもしれません。

そのようなわけで、見本を正確に入力する力と共に初心者にとって重要な、エラーを特定して修正する力を養う本はほとんど見かけないのが現状です。

エラー対応力に意識を向ける「PHP直す力養成ドリル」

エラー対応力、PHPスクリプトを直す力は2、3日で身につくものではなく、本を読んで覚えるものでもありませんが、入門書を読み終えた方の苦労が少しでも小さくなるように、「PHP “直す力” 養成ドリル」という本にまとめました。


PHP「直す力」養成ドリル

エラー、不具合、トラブル、、、のような話題を一冊に詰め込むと雰囲気の暗い本になるかもしれないので、軽快に読み進められるように、間違っているPHPスクリプトを直すというクイズ風にアレンジしました。

PHP入門時によく起きるエラーについて、原因を特定してコードを修正して解決するシミュレーションにもなります。よく起きるエラーの“予習”にもなるので、読んでおいて損はないと思います。

また、PHPの入門書を使った学習を一通り終えた方も、基礎が身についたかチェックしていただく目的で読んでいただくことができます。研修を終えた新人のスキルチェックにもご活用ください。

本書を通して、エラー原因の特定と修正という着眼点に少しでも意識を向けていただければと思います。ぜひ、参考にしてください。

PHP「直す力」養成ドリルの構成

  • 【PART1】定番の動作不良に対処する7問
    • 【問1】変数の中身が表示されない
    • 【問2】「10円」と「10」が“一致”するif文
    • 【問3】大吉・吉・凶に分岐できないswitch文
    • 【問4】更新しても「更新前」のままの変数
    • 【問5】変数名が表示できないヒアドキュメント
    • 【問6】配列を結合すると「東京都」が「江戸」になる
    • 【問7】.htaccessに書いても機能しないPHP設定
  • 【PART2】文法エラー・入力ミスに対処する7問
    • 【問8】if文の書き間違い
    • 【問9】配列構文(array)の書き間違い
    • 【問10】3項演算子の使い間違い
    • 【問11】変数の使い間違い
    • 【問12】ユーザー定義関数の使い間違い
    • 【問13】スーパーグローバル変数の書き間違い
    • 【問14】エラーメッセージが表示されない入力ミス
  • 【PART3】定番のエラーメッセージに対処する7問
    • 【問15】Notice: Undefined variable…
    • 【問16】Notice: Undefined offset…
    • 【問17】Fatal error: Call to undefined function…
    • 【問18】Fatal error: Cannot redeclare…
    • 【問19】HTTP 500 内部サーバーエラー
    • 【問20】結合代入演算子のエラーメッセージ
    • 【問21】日付・時刻関数のエラーメッセージ
  • 【PART4】「この課題にはこの関数」の10問
    • 【問22】メールフォームで改行が反映されない
    • 【問23】メールの差出人名が文字化けする
    • 【問24】ファイルデータが文字化けする
    • 【問25】ファイルの読み込みがうまくいかない
    • 【問26】ファイルに書き込んだ内容が消えてしまう
    • 【問27】混在した全角と半角の空白を削除する
    • 【問28】2回実行すると元の文字列に戻る
    • 【問29】配列要素の重複をチェックする
    • 【問30】明日の日付を簡単に作成する
    • 【問31】うるう年を簡単にチェックする
  • 【PART5】関数の使い間違いを直す10問
    • 【問32】配列要素を見やすく表示する
    • 【問33】文字列を分割して配列を作成する
    • 【問34】フォーム入力値が数値かどうかチェックする
    • 【問35】大文字と小文字を区別しない定数
    • 【問36】計算結果を切り上げる
    • 【問37】パスからファイル名を取得する
    • 【問38】マルチバイト関数の文字コード設定
    • 【問39】printf関数を使った会員番号の作成
    • 【問40】100年後の日付を表示する
    • 【問41】日付・時刻関数の使い間違い
  • 【PART6】コード変更・コードのスリム化に対処する9問
    • 【問42】「偶数表示」を「奇数表示」に変更する
    • 【問43】一覧表示を「1行に3つずつ表示」に変更する
    • 【問44】パラメータ数が不問のユーザー定義関数
    • 【問45】「AまたはBまたはCまたはD」をスッキリ書く
    • 【問46】「今日の日付」を「月末の日付」に変更する
    • 【問47】「今日の日付」を「10日前の日付」に変更する
    • 【問48】「年月日の比較」を「年月の比較」に変更する
    • 【問49】「1」を5けたの会員番号「00001」にする
    • 【問50】if文を使わずに数値の範囲を制限する
この記事をSNSで共有する
WordPressでお困りのときはご相談を
この記事を書いた西沢直木が直接、WordPress個別サポートで対応します。
こんなときはご相談を
  • WordPressの使い方(ページやメニューの作り方を教えてほしい)
  • カスタマイズ(機能の追加やデザイン調整をお願いしたい)
  • トラブル対応(画面真っ白・「ログインできない」を解決したい)
マンツーマンなので相談内容は自由です。いただいた課題をその場で解決、CSSやPHPも目の前で修正します。気軽にご相談ください。
WordPress講座の問い合わせ先

関連記事

BizVektorのカスタマイズ

WordPressカスタマイズ

WordPressによるサイト作成のヒント

WordPressプラグイン

スポンサーリンク
西沢直木によるWordPress講座の紹介
ホームページ作成講座WordPress個別サポート