PHP

インスパイヤされて掲示板を作りたくなった(1)

More than 1 year has passed since last update.

PHP+SQLite3で2ちゃんねるっぽい掲示板を作るにインスパイヤされて。そういや私、いままでの人生でスレッドフロート掲示板とか作ったことない。作ってみよう。


PHPを入れる

PHP 7をインストールしよう。それ以下のバージョンはレガシーだ。特に5.4系以下はセキュリティサポートも終了してるので相手にしてはいけない。

Macなら、こんな感じで入れるのがいいです。

brew tap homebrew/php

brew install php70 php70-gmp php70-intl php70-pcntl

WindowsでまじめにPHPやるのとか正直微妙なので、VirtualBoxVagrant入れてrlerdorf/php7devとか動かしてみるといいです。

やりかたはpixiv/intern2015wとかに書いたので、よくわからなかったらこれが動くようにしてみるのがいいですかね。

Linuxでは… まあよしなにやってください。


Composerを入れる

ComposerはPHPのパッケージの依存性を管理するツールです。php -r 'echo file_get_contents("https://getcomposer.org/composer.phar");' > ./composer; chmod +x ./composer とかでダウンロードしておくのがいいですね。


設計



  • パッケージ名: zonuexe/inspire-bbs


  • 名前空間: InspireBBS


  • OS: Windowsじゃなきゃいいや


  • Webサーバ: めんどくさいしビルトインウェブサーバーでいいや


  • RDBMS: めんどくさいしSQLiteで。手元にあったのは3.8.10.2だった。

なんかそれっぽく作っておけば後で本番にリリースするときに変更できるし良いでしょ。


じゃあ作ってみよう

はじめにディレクトリから。作る場所は自分のホームディレクトリでいいです。私は$HOME/repo/phpみたいなディレクトリに作ってるよ。

cd inspire-bbs

mkdir inspire-bbs
git init
touch README.md
echo "## inspire BBS" > README.md
touch .gitignore
edit .gitignore

git add .gitignore README.md
git commit -m "Init repository"

git remote add origin git@github.com:$USER/inspire-bbs.git
git push origin master

.gitignoreファイルはこんな感じにしとくと良い。


.gitignore

/cache

/phpunit.xml
/vendor/*
/.env
/.idea
/*.iml
/.vagrant

最初からGitHubにアップロードしていきましょうねー。この先「ここでgit commitする」とかいちいち書かないので、自分でわかりやすい範囲でやってみよう。


ディレクトリ構成を作る

わかりやすいように、こんな感じにしていきましょうか。

% tree

.
├── README.md
├── cache
│   ├── db.sq3
│   └── twig
├── public
│   └── index.php
└── src
└── functions.php

DBのファイルはcache/db.sq3にします。テンプレートエンジンはTwig - The flexible, fast, and secure PHP template engineを選ぶことにするので、そのディレクトリとかも置きますね。


PDOを作るラッパーを用意してみる

DBは一個あればいい[要出典]ので、おてがるにdb()って函数を用意しておきましょうね。


src/functions.php

<?php

/**
* @author USAMI Kenta
* @copyright 2016 USAMI Kenta
* @license WTFPL
*/

/**
* @return \PDO
*/

function db()
{
static $db;

if (!$db) {
$db = new \PDO(getenv('DB_DSN'), null, null, [PDO::ATTR_PERSISTENT => true]);
}

return $db;
}



Composerでパッケージを入れてみる

てはじめに、いくつかパッケージを置いてみますね。PHPのライブラリはPackagistから探してきます。



  • vlucas/phpdotenv: 設定ファイルをかんたんに読み込めるすごいやつだよ


  • twig/twig: いい感じに良いテンプレートエンジンだよ


  • twig/extensions: Twigの標準に入ってない機能が追加されてるパッケージだよ


  • filp/whoops: エラーをかっこよく画面表示するやつだよ

シェルでこんな感じに実行してみよう。

composer require vlucas/phpdotenv twig/twig twig/extensions

composer require --dev filp/whoops

Whoopsは開発環境用では便利だけど外部公開すると脆弱性とか個人情報漏洩みたいなことも発生しうるので気をつけてね。


index.phpをつくる

じゃ、作ってみましょうか。


public/index.php

<?php

/**
* @author USAMI Kenta
* @copyright 2016 USAMI Kenta
* @license WTFPL
*/

namespace InspireBBS;

require_once dirname(__DIR__) . '/vendor/autoload.php';

// エラーは漏らさず捕捉する
error_reporting(E_ALL | E_STRICT);

// カッコイイエラー画面を表示するための魔法の呪文
$whoops = new \Whoops\Run;
$whoops->pushHandler(new \Whoops\Handler\PrettyPageHandler);
$whoops->register();

echo "こんにちはこんにちは";


PHPのE_NOTICEを潰すやつは生かしておいてはいけないのでE_ALL | E_STRICTって書こう。長いのでerror_reporting(-1)って書いてもいいです。


サーバーを起動します

PHPを起動するにはApacheが要るんじゃないかって? お前がサーバーになるんだよ!

php -S localhost:3939 public/index.php

コマンドラインでこのコマンドを実行すると、PHPちゃんがWebサーバーになってくれます。それがビルトインウェブサーバーってやつです。ローカル開発がしたいだけならApacheとかnginxとか要らない。

ブラウザで http://localhost:3939/ を開いてみる。

スクリーンショット 2016-02-19 2.06.45.png

こんな感じになれば良いですね。


エラーを見てみる

せっかくのカッコイイエラー表示ツールを入れたので、エラーを起こしてみましょうか。

こんにちはこんにちは、の下あたりにecho $foo;って書いてみます。

スクリーンショット 2016-02-19 2.13.35.png

ちなみにデフォルトのエラー表示だと、こんな感じ。

スクリーンショット 2016-02-19 2.16.16.png

まあ、これでも事は足りるけど… って感じですね。特にエラーが発生する箇所がネストの深い場所だと、わかりやすさにかなりの差があります。


本日のまとめ


  • PHPは新鮮な7を入れよう

  • Composerを入れよう

  • ローカルで開発するならApacheとか要らないよ

  • Whoopsは良いものだよ

まだ掲示板は影も形もないし、せっかくインストールしたTwigも使ってないけど… 本日はここまで。

おやすみなさい ヾ(〃><)ノ゙ ZZz...

次スレ: インスパイヤされて掲示板を作りたくなった(2)