PHP技術者認定試験上級に合格するためにやったことをご紹介!

この度、PHP技術者認定試験の上級に合格しました。 私はPHPは未経験で、勉強の為に触った程度で実務経験はありません。 そんな状態の私では、流石に上級は難易度が高く、初級に合格したのが2017年4月だったのですが、上級に合格したのは1年以上経過した2018年5月でした。 約1年の間、私がどんな勉強を行い 「はじめからこうしておけばよかった」 「これはやらなくてよかったな」 ということ紹介しようと思います。

合格するためにやったこと

試験問題集

この一冊に終始します。1年の間にいろいろと試みてきましたが、この本の理解を深めるためにやってきたと言えます。 この本の内容を完璧に理解していれば、確実に合格できます。100%完璧に理解すれば。

余談ですが、私の実体験として問題集がまぁまぁ解けるようになった思い、実際に受験してみると「こんな問題なかったやろ!」と感じるような見覚えのない問題がでてきたりします。 「絶対問題集にかいてないわ!」っと憤りながら問題集を探してみると、回答の解説のちょっとした一文で「○○の場合は××になります」という余談のような形で記載されているのを見つけました。

つまり、問題集に書いてあることは全部大事!

本サイトをPureなPHPで構築

上級の勉強を開始してしばらく、試験問題集を解ていてもどうにも頭に残らず、何度も同じ個所を間違えている状況でした。 流石に、「実際にコーディングして動作を見ないとイメージが掴めない!」と思い立ち、本サイトをPHPで生成するようにしようと試みました。

まず、本サイトは、静的なHTMLで作成していました。 一部でPHPを使っていましたが、ヘッダー・フッター・右カラムの共通な部分だけ、静的なHTMLをPHPで読み込むようにしてありました。

そこで、記事の情報をデータベースに登録して、その情報を使い、トップ画面、各カテゴリ、アーカイブ、サイトマップ、などを動的に生成することを目標にしました。

ローカルで作業を行い、ローカルサーバーには仮の情報を入れて、PHPで各一覧画面内のリンクを動的に生成する仕組みが完成しました。 これを作るのに約2ヶ月程掛かりました。

折角作ったので、これを本番環境に適用してみようかと思ったのですが「ん?これはもしやセキュリティが危ういのでは?」と思い直し、セキュリティ面を調べました。 この当時は調べてもよくわかったいなかったのですが「うん。なんかよくわからないけど、このままだとマズイっぽいな!」という認識はできました。

そこで、改めて試験問題集のセキュリティの解説を読んでみたのですが「~~といった攻撃手法があります」という具合に概念的な説明ばかりで、具体的にどういう場所でどういう記述を行って攻撃されるのかがイメージできませんでした。 というわけで、セキュリティに関する書籍を購入して、セキュリティについて掘り下げて勉強することにしました。

この本はオススメです。

この本は、発売日が2005年11月とかなり古い本です。 ですが、攻撃方法の根本的な部分を理解するには良い本です。 また、PHP技術者認定試験はPHP5が対象で、PHP5が2004年7月にリリースされたことを考えると、試験問題との乖離はそこまで大きくはない思われます。

本サイトをCakePHPで構築

セキュリティについて掘り下げて勉強した結果、PureなPHPで自作するよりもフレームワークを使った方が安心できると思い至りました。 日本ではシェアの高いCakePHPを使って構築することにしました。 なにかに困っても検索すれば日本語の情報がでてきやすいですからね。

フレームワークを使う前は一覧画面内のリンクを動的に生成することだけを行っていましたが、今度は画面自体を動的に生成することを目標としました。 CakePHPを使うことで、ルーティングを簡単に行えるようになるので、実装のハードルを下がったためです。

初心者としてはまず制作の流れを知りたいのと、ベストプラクティスな書き方を知りたい、という2点の問題があります。 とりわけ後者はベストプラクティスについて検索する時間がバカにならないため、本を買いました。

この本のおかげで、制作における一連の流れや、フォルダ構成、CakePHPのbakeコマンド、などがスムーズに理解できました。

スムーズに理解できたものの、CakePHPでサイト構築するのに約2ヶ月程度は掛かりました。

また、サイト構築と並行して、ブログの各画面自体を動的に生成するという、ルーティングについては、フレームワークが内部でどういう仕組みで行っているか、ということを理解するために、別の書籍を購入しました。

パーフェクトPHPは、どのフレームワークでも共通して行う機能について、フレームワーク内部ではどのように処理されているかが解説されています。 特定のフレームワークに依存しない内容となっており、フレームワークがどういう思想で作られるかが理解できます。 実際にPHPでサイトを作成する際には一読しておきたい良書です。

架空の店舗管理システムを作成

ブログサイトの構築だけだと、フォーム系のセキュリティ対策のコーディングができなかったので、架空の店舗管理システムを作成したりもしました。 下記の機能を作成しました。

  • 会員登録
  • 会員登録完了メール送信
  • ログイン、ログアウト
  • パスワードリマインダー
  • 店舗登録
  • 店舗検索
  • 店舗削除

架空の店舗管理システムを作成するのに、約3ヶ月程度は掛かりました。 (本サイトをCakePHPで構築する作業と並行していた時期もあったので、正確な期間ではありませんが)

CakePHPでサイト構築する必要なし

CakePHPでコーディングして思ったことは、「受験対策としてはやらなくてもよかったな」ということです。 セキュリティの部分を掘り下げて勉強するだけなら「PHPサイバーテロの技法―攻撃と防御の実際」だけで十分です。 CakePHPの理解と癖の把握を行うのにかなりの時間を要しましたので、純粋な試験対策としてはやらなくてもよかったと思います。

私は、問題集を解くよりも物を作る方が楽しく、ついついそちらに時間を割いてしまいました。 本番環境で動作するように作れると自信がつくので、時間に余裕があるのであれば作ってみてもよいかと思います。

単語カードで暗記

「本番環境で動作させられると自信がつく」と前述しましたとおり、自信をつけて調子に乗り、2017年12月に上級試験に挑戦してみました。 結果は55点で上級不合格 50点~69点までは準上級認定なので、準上級には合格したといえます。

セキュリティやサイト構築の部分は理解できていましたが、そこ以外のPDF、グラフィック、XML、PHPの拡張、等々の理解が及びませんでした。 加えて、関数、文字列、配列、オブジェクト、などの基本的な部分も意外と失点している状況でした。

基本的な部分の失点で感じたのは「メソッドは暗記しないとだめ」ということでした。 私は、サイト構築をしていた時はその都度ネットで調べてコーディングしていたので、メソッドについては頭に残っていなかったようです。 概念や考え方という大枠は理解できていましたが、掘り下げた詳細なこととなると、途端に正解率が下がっていました。

そこで、以下のことを暗記することにしました。

  • メソッド名とその作用
  • メソッドの各引数に指定する値とその作用
  • メソッドの各引数を省略した場合のデフォルト値

暗記するためには反復が必要なので、単語カードを購入して、ひたすらに写経していきました。

平日のお昼休みや土日の時間を使って単語カードに記入し、記入したものは電車などの移動時間にひたすら反復しました。

ただ単語カードに記入するだけでも相当な時間がかかってしまいます。 既にサイト構築などで半年近く時間を使ってしまっていたので、時間は惜しいところです。

そこで、単語カードに記入する章をリストアップすることにしました。 出題割合を調べたところ、PHP技術者認定機構 上級試験/準上級試験概要では、出題割合が明記されていませんでした。

他にも調べてみたところ、@IT自分戦略研究所 資格辞典:PHP技術者認定試験に出題割合が記載されていました。

目次 出題割合(目安)
1章 PHPについて 0
2章 PHP言語の基本 0
3章 関数 0.02
4章 文字列 0.02
5章 配列 0.04
6章 オブジェクト 0.1
7章 ウェブに関するテクニック 0.12
8章 データベース 0.08
9章 グラフィック 0.04
10章 PDF 0.06
11章 XML(&XML系で追加された関数) 0.04
12章 セキュリティ 0.12
13章 アプリケーションに関するテクニック 0.08
14章 PHPの拡張 0.04
15章 WindowsでのPHP 0.02
SPL(Standard PHP Library) 日付クラス PEAR(管理系のコマンドなど) 日付クラス
PEAR(管理系のコマンドなど) 0.04
名前空間 クロージャー リフレクションLate Static Binding 0.04
JSON 0.02
PDOとネイティブモジュールの違い mysqlndドライバについて 0.04
正規表現(pcre, posix, mbstring) 0.02
APD/Xdebug memcache 0.04
フィルター 0.02
引用元: @IT自分戦略研究所 資格辞典:PHP技術者認定試験

の記事ということで、情報が古い可能性があるのが不安材料ではありますが、目安にはなります。

出題割合をみると、3章~13章までで全体の7割が出題されることがわかります。 3章~13章を100%暗記すれば、それだけで合格できますね。計算上は。 時間が惜しかったため、14章~は単語カードでの暗記はせずに、練習問題を解く程度で済ませることにしました。

単語カードを初めから使っていればよかった

単語カードを使って良かったと思える点は、問題集の解答を自分なりに噛み砕く必要があったことです。 単語カードという限られたスペースに記述できる文章量はほんの少しです。 そうなると、殆どが一問一答の形式になります。

一問一答の場合、質問も回答も一言で断定するような内容にしないといけません。 すると、問題を作成するときに「これは、本当に断言できるのか?」と疑問に思う機会が増えていきます。 「もしかしたら、こういうパターンがあるかも・・・」と疑問に思ったらネットで調べたり、他の書籍を調べました。 そうやって、自分が納得してから、自分の言葉で噛み砕いた一問一答を作成すると、記憶の定着率がよかったという印象があります。

この作業に約5カ月ほど掛かかってしまいました。 思い返してみると、私は問題集を解いた後にノートに不明点をまとめたりしていたのですが、単語カードに書いていた内容は、結局ノートの内容とほぼ同じになりました。 「初めからノートに書かずに単語カードに書いておけば効率的だったのに…」と強く思いました。

上級合格!

そんなこんなで遠回りもしましたが、なんとか上級に合格することができました。 点数は70点。滑り込みセーフですね。ギリギリです。 ギリギリでも、合格は合格です。はい。

改めてどの程度の時間が掛かったのかを書き出してみると、自分でも「時間掛かり過ぎでは?」と思います。 でも、平日は残業があるとほぼ勉強はできませんし、土日も必ずしも勉強に時間を割けるわけでもありません。 そういう時間のない中で、一番効果があったのは、単語カードでした。

モノを作るのは楽しいですが、試験は暗記が肝要です。 毎日、行きと帰りの電車の中で決まった時間に反復することで、効果的に覚えられたという実感があります。 単語カードなら満員電車でも読める手のひらサイズで、持ち運びに困ることはありませんしね。

人気記事すべて表示

WEBすべて表示