これから始めるPHP基礎 – 動的なサイトを作るためのエッセンス ーー「非エンジニアの起業家が知っておくべきプログラミングの知識 #07」【ゲスト寄稿】

SHARE:

TechAcademy__テックアカデミー____ITに特化したスクール編集部注:本稿は初心者向けにプログラミングやWebデザインの講座を開催している TechAcademy(テックアカデミー)による連載企画。「非エンジニアの起業家が知っておくべきプログラミングの知識」というテーマで数回に分けて極めて基礎的なプログラミングの基礎知識をお伝えする。全連載はこちらから

bd97d9310eda701130716c41291ac190

photo credit: nyuhuhuu via photopin cc

「非エンジニアが知っておくべきプログラミングの知識」というテーマで、10回に分けてお届けする連載企画。第7回目のテーマは「これから始めるPHP基礎 – 動的なサイトを作るためのエッセンス」です。

前回は「これから始めるJavaScriptの基礎と全体像」というテーマでお送りしました。今回は、より具体的にプログラミングを学んでいただくために、PHPについて紹介していきます。本連載は、インターネット業界で、これまで技術的なバックグラウンドを持たないまま起業した方や、これから独立・起業しようと思い立った方をサポートするための、連載記事です。

PHPの基礎

これまでの連載記事の中で、マークアップ言語のHTMLと、スタイルに関する情報を記述していくCSS、そしてそれらの要素に対して操作や制御を行うための、JavaScriptについて解説しました。

  • HTMLとは、HyperText Markup Language(ハイパーテキスト・マークアップ・ランゲージ)の略称で、Web上の文書を記述し、またブラウザがそれを解釈するためのマークアップ言語(構造化言語)。
  • CSSとは、HTMLタグや独自で定義した要素に対して、大きさ・配置(余白)・レイアウト/色・タイポグラフィ(フォント) の指定など、スタイルに関する情報を、連続して記述していくもの。
  • Javascriptとは、ボタンをクリックした時にアラートを出す、文書の情報を書き換えるなど、HTMLやCSSを制御し視覚的な動きをつけていくもの。

そして今回解説する「PHP」は、これらのプログラミング言語で書かれた静的なウェブページに埋め込み・併用することにより、検索ができるデータベースサイト、ユーザーログイン/会員登録を想定したコンテンツ投稿型のWebサービスなど動的なウェブページを実現することを主な目的とした、サーバーサイドのスクリプト言語です。

一般的な通称として「PHP(ピー・エイチ・ピー)」が浸透しているため、なかなか聴いたことがありませんが、正式名称は「Hypertext Preprocessor」と呼ばれています。正式名称からも分かるように、Web上の「ハイパーテキスト」に対して処理を行うという設計思想が、予想できます。

初期のFacebookは、PHPで書かれていた

一般的にあまり知られていないかもしれませんが、Facebookは今から約10年前、PHPで記述されたウェブサービスとしてスタートを切りました。Facebookは、開発言語としてPHPを採用した理由について「シンプルな言語で学びやすいから。書くのも簡単だし、読むのもデバッグも簡単であるからだ」と公式に説明しています。

このことからもPHPがいかにシンプルで導入が簡単なのか、初心者にとっていかに敷居が低い言語かがうかがえます。2013年には、PHPで書かれていたコードのほぼ全体を社内で独自開発している「Hack」と呼ばれる新しい言語に移行させて運用しているものの、いまや12億人のユーザーを抱えるまでに成長したサービスのはじまりが、私たちに馴染み深いPHPだった事実を知っておくと、学習のモチベーションにつながるかもしれません。

静的サイトと動的サイトの違いについて

私たちが普段、何気なく使っている、FacebookやTwitter、YoutubeなどのWebサービスやWebアプリケーションのほとんどが、HTMLやCSSやJavascriptに加えて、PHPや次回で解説するRubyというサーバーサイドで動くプログラミング言語が使われて、設計・運営されています。ユーザーがマイページを持ちコンテンツを投稿したり、ログイン機能を持つものは「動的サイト」という位置づけになります。

一方で、「静的サイト」とはどのようなものでしょうか。個人のウェブサイトや学校、公的機関のウェブサイトは、HTMLやCSSだけで書かれているものが数多く存在します。このような静的サイトでは、すべてのユーザーに対して全てのページで全く同じコンテンツを表示させることしかできません。

PHPベースの「WordPress」は、世界のトップ1,000万サイト中、22.6%で採用

静的サイトは、PHPやRubyのようなサーバーで動作するプログラム言語を用いることよって、動的ページにすることも可能です。ブログツールとして有名なWordPressもまた、PHPとデータベース(MySQL)で作られた「コンテンツ・マネジメント・システム(CMS) 」です。

WordPressは2003年、Facebook創業者のマーク・ザッカーバーグ氏と同じ1984年生まれのソフトウェアエンジニア、Matt Mullenweg氏(現Automattic社 CEO)が当時19歳のときに開発したオープンソースのソフトウェアで、2014年7月現在、世界中のトップ1,000万サイトのうち、22.6%はWordPressで構築されていると統計データがあります(CMSの中でのシェアは60.4%)。

HTMLやCSS、そしてJavascriptを「クライアントサイド・スクリプト」と呼ぶのに対し、PHPはユーザーからのリクエストを受けてサーバーと通信をしながらページを表示するため、一般的に「サーバーサイド・スクリプト」と呼ばれています。RubyやPerl、そしてPhythonといった言語もこの中に分類されます。これらは、第2回「インターネットとブラウザ」でも少し解説しましたが、もう一度ここでポイントを押さえておくと良いでしょう。

PHPにおける環境構築

前述しているように、PHPはブラウザからアクセスし、サーバーとやり取りしながらリクエスト(結果)をユーザーに返すため、「サーバー」を構築する必要があります。JavaScriptはブラウザベースで動作するため環境構築は不要でしたが、PHPの場合は、実行するための「環境」をつくる必要があります。

ですが、現在のPHP(バーション5.4以降)は開発用のWebサーバーを内蔵しており、PHPのみをインストールするだけで利用できるようになりました。PHPの詳しい導入手順については本記事では割愛させていただきます(Macユーザーの方は「MAMP」、Windowsユーザーの方は「XAMPP」などで検索してみてください)。

まずは「Hello world」してみよう

43c1bda9b39a75cc0aa8d16e118ffad7

手始めに、最も簡単なPHPプログラムを書いて、動かし方を覚えましょう。プログラミング言語を学ぶ際にお決まりなのが「Hello, World」という文言を出力することです。PHPはサーバーで動作する言語として広く知られており、HTMLファイルのタグ の中に記述して、簡単なスクリプトを動かすことが出来ます。

<html>
<head>
  <meta charset="utf-8">
  <title>PHPでHello,world</title>
</head>
<?php
  echo "Hello World";
?>
</body>
</html>

続いて、少し応用してみます。以下は、簡単なおみくじを実装したものです。ランダムな数値を生成する「rand」という関数を使って、0か1かを生成し、$numという変数に代入しています。もしランダムで生成された数値が0なら「大吉」を表示し、それ以外なら「吉」を表示させるといった処理を、PHPを組み込んで書いています。これにより、HTMLやCSSだけでは実現できなかった動的な処理を行うことができます。

<html>
<head>
  <meta charset="utf-8">
  <title>PHPで簡単なおみくじ</title>
</head>
<?php
$num = rand(0, 1);
if ($num == 0) {
echo "今日の運勢は大吉です。";
} else {
echo "今日の運勢は吉です。";
}
?>
</body>
</html>

通常の静的Webページ(omikuji.htmlなどで保存するHTMLページ)に上記のソースコードを書き加えて、omikuji.php と、拡張子を変えて保存してみましょう。それをレンタルサーバーや、自分で用意したサーバー上でアクセスすると、PHPの処理が実行されます。

PHPの特徴は、これまでHTMLやCSSを用いて開発していたページから特に変更を加えることなく、そのまま部分的にプログラムの構文を記述することが出来ることです。初心者にとって敷居が低く学習しやすい反面で、コードが膨大になってしまいメンテナンス性が損なわれてしまうデメリットもあります。こうした問題を解決し、大規模なアプリケーションを構築したり、チーム開発を効率的に行うために考え出されたものが「フレームワーク」と呼ばれる概念です。PHPやRubyには、多くのフレームワーク(WAF)が存在します。

充実したフレームワークやライブラリ

簡単なPHPプログラムを書いてみたところで、目的に応じてPHPをより便利に扱えるようにした、有名なフレームワークをいくつか紹介してみましょう。

Webアプリケーションフレームワークとは、ユーザーの登録・編集・削除・ログイン機能といった、Webアプリケーションで汎用的に用いられる機能について、あらかじめ決め事(=フレームワーク)をもとに、簡単に実装することを目的としています。これにより、開発者は必要最低限の実装をするだけで目的の処理をスピーディに実装することができるようになります。

ただ簡単だったり、高速に開発できるようになるだけではありません。ファイル名の付け方、ディレクトリ構成といった、細部における命名規則など厳密に定められているフレームワークも存在します。プログラムを書く上でのスキーム、設計思想などが作りやすく、結果としてセキュリティ対策にも一定の効果があります。

CakePHP

日本国内に限らず、海外でもっとも人気のあるフレームワークです。もともとは「Ruby on Rails(Rubyのフレームワーク)」のPHPクローンを目指して設計されていましたが、現在は独自の進化を遂げており、手軽にWebアプリケーションが開発できるようになっています。

CakePHPでは、アプリケーション開発に必要な機能はすべて一つのパッケージにまとめられており、公式サイトからダウンロードした本体をWebサーバーにアップロードして、簡単な設定を行うだけで動作させることができるのが特徴です。このような設計思想は「フルスタック型」と呼ばれています。

また、CakePHPには独自のコーディング規約が存在します。データベースのテーブル名・ファイル名・クラス名などを規約通りに定義することで、もっとも簡単かつ、最短の手続きで目的の処理を実現できるように設計されています。規約が存在することで、どこの誰が見ても直感的に理解がしやすいコーディング目指すことができるため人気があります。

FuelPHP

PHP5で書かれたオープンソースのHMVCパターンを用いるフレームワークで、MITライセンスで提供されています。PHP5.3で書かれているため、開発に用いるにはPHP5.3.3以上のバージョンが必須になります。MongoDBやMySQLなどの「RDBMS(リレーショナルデータベースを管理、運用するためのシステム)」を標準でサポートしており、RESTfulなコントローラーもすぐに作成できるという点と、後述するCodeIgniteと同様のマイクロフレームを採用しているため軽量で高速に動作する点が特徴となっています。

CodeIgniter

CakePHPやFuelPHPに次いで最近人気のあるフレームワークです。CakePHPのフルスタック型のような、必要のない機能まではじめに全部パッケージに入れてしまうのとは本質的に異なり、必要な機能をその都度追加していく設計になっているために大変軽量に動作させることが出来る点が特徴です。またコーディング規約などに縛られないため自由にコーディングすることが可能ですがその反面、大人数でのチーム開発にはあまり向いていないという側面を持ち合わせます。

Symfony

Sensio Labsというフランスの会社が中心となって開発している、オープンソースのフレームワークです。最近では日本語の参考文献が徐々に増えてきたこともあり、人気が出ているフレームワークの一つになっています。メジャーなバージョンとして1.4系と2.0系があり、より柔軟な開発ができるように改良が重ねられています。またSymfony2.0から派生した「Silex」と呼ばれるマイクロフレームワークも存在します。

Zend Framework

PHPのコアエンジンを開発しているZend社がオープンソースとして公開しているフレームワークです。非常に柔軟に設計されており、各機能が独立しているためZend Framework単体で用いたりすることが容易にできるのが特徴的です。またAdobe Dreamwerverで直接コードを扱えるのも、このフレームワークの特徴です。

特にCakePHP、CodeIgniterは日本でも海外でも人気があり、大きなシェアを占めています。本記事では触れられないものの、他にも数多くの有志によるフレームワークが公開されており、日々アップデートされています。日本ではまだあまり主流ではありませんが、最近ではLaravelというフレームワークも登場し国外を中心に人気を集めています。PHPで開発されているWebサービスは非常に多いため、開発スキルを身につけることで、クラウドソーシングサービスを使って開発受託などのフリーランス活動も始められることでしょう。

3f1aa9af419a6043eb8cd9338bdceb31

photo credit: ryanoshea via photopin cc

PHPの効率的な学習方法

本記事で、PHPをとりまく周辺環境やコミュニティ、最初のスタートを切る上での教養知識について、少しでもエッセンスとなったとは思います。では今日からPHPを学習するとして、何をすればいいのでしょうか。「HTMLの設計思想と、2014年に最適な学び方」で紹介した内容と重なるところもありますが、ここでは3つだけご紹介します。

1. PHPの解説書やリファレンスを買って読む

Web上に無料で学習リソースが溢れている中、あまり今風の勉強法ではないかもしれませんが、書籍あると学びやすいという方もいるでしょう。「PHPによるWebアプリケーションスーパーサンプル 第2版」のような逆引きリファレンスを1冊購入しておくと重宝するでしょう。

2. 動画で学べる学習サイトでPHPの文法・知識を身に付ける

中でもドットインストールやCODEPREP、Codecademyなどの無料の学習サイトがお勧めです。 最近はどんどん初心者に優しい環境が整ってきましたので積極的にこれを活用するようにしましょう。

3. 実際につくってみながらトライ&エラーを繰り返す

まずは、自分が作りたい or 使いたいと思える「小さなWebアプリケーション」を構想してみます。「完成図(ワイヤーフレーム)」を手書きで描いてみて、ユーザーに提供する機能(「◯◯の価値のために、◯◯ができる」という形のユーザーストーリー)を箇条書きにしてみましょう。全体像から逆算して覚えるべき知識を整理することが重要です。

挫折しそうな自分を繋ぎ止めるモチベーションの源には「小さな成功体験(書いたコードが動いた!という実感)」の繰り返しが、重要な秘訣としてあります。知識を吸収するのはすごく大切ですが、インプットに集中して満足してしまっては本末転倒です。実際に自分でコードを書き、エラーが出たらその度にエラーコードの意味を調べる習慣をつけるようにします。

どんな優秀なエンジニアでも、必ずエラーは起こっており、試行錯誤を繰り返しています。大切なのは、どういう手順でエラーが起こっている原因を探り、トライ&エラーを繰り返しながら解決していく、というプロセスなのです。

以上、連載企画7回目では、PHPに関連するコラム記事をお届けしました。次回の第8回では、最近のスタートアップの多くで採用されている「Ruby」や、Webアプリケーションフレームワークである「Ruby on Rails」の話題に触れてみます。