PHP7とLaravel 5でFacebookアカウントでログインできるTODOアプリをつくる 1日目(環境構築編)

昨年、PHP7がリリースされたので、PHP7で動作するTODOアプリを作ってみます。

ただのTODOアプリでは少し色気がないので、Facebookアカウントでログインできるようなアプリにしてみようと思います。

環境について

TODOアプリの開発に使用する環境は以下とします。

バージョン番号は記載していませんが、基本的に最新版を使っているものと考えてください。

Vagrantを採用している理由はいくつかありますが、ローカル環境をよごさずに開発したいのと、Win/Mac/Linux問わず動くようにしたいからという2点が大きいです。

また、各ソフトウェア、フレームワーク等についての説明は割愛します。

環境構築

Vagrantで環境構築をしていきます。

まずはVagrantfileを用意して、vagrant upvagrant sshVMにログインします。

# -*- mode: ruby -*-
# vi: set ft=ruby :

Vagrant.configure(2) do |config|
  config.vm.box = "ubuntu/trusty64"
  config.vm.network "private_network", ip: "192.168.33.10"
end
$ vagrant up
$ vagrant ssh

VMにログインできたら、PHP7をインストールするため、PPAのリポジトリを追加します。

PHPといえばondrejさんですね。いつもお世話になってます。

launchpad.net

$ LC_ALL=en_US.UTF-8 sudo add-apt-repository -y ppa:ondrej/php

ここでLC_ALLを指定していますが、ondrejことOndřej Surýさんはチェコの方らしく、名前に含まれる文字がASCII外なのでLC_ALLを指定しないと以下のようなエラーが起きてしまいます。

$ sudo add-apt-repository -y ppa:ondrej/php
gpg: keyring `/tmp/tmp4mtd1r5u/secring.gpg' created
gpg: keyring `/tmp/tmp4mtd1r5u/pubring.gpg' created
gpg: requesting key E5267A6C from hkp server keyserver.ubuntu.com
gpg: /tmp/tmp4mtd1r5u/trustdb.gpg: trustdb created
gpg: key E5267A6C: public key "Launchpad PPA for Ond\xc5\x99ej Sur�" imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
Exception in thread Thread-1:
Traceback (most recent call last):
  File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 687, in addkey_func
    func(**kwargs)
  File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 370, in add_key
    return apsk.add_ppa_signing_key()
  File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 261, in add_ppa_signing_key
    tmp_export_keyring, signing_key_fingerprint, tmp_keyring_dir):
  File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 210, in _verify_fingerprint
    got_fingerprints = self._get_fingerprints(keyring, keyring_dir)
  File "/usr/lib/python3/dist-packages/softwareproperties/ppa.py", line 202, in _get_fingerprints
    output = subprocess.check_output(cmd, universal_newlines=True)
  File "/usr/lib/python3.4/subprocess.py", line 609, in check_output
    output, unused_err = process.communicate(inputdata, timeout=timeout)
  File "/usr/lib/python3.4/subprocess.py", line 947, in communicate
    stdout = _eintr_retry_call(self.stdout.read)
  File "/usr/lib/python3.4/subprocess.py", line 491, in _eintr_retry_call
    return func(*args)
  File "/usr/lib/python3.4/encodings/ascii.py", line 26, in decode
    return codecs.ascii_decode(input, self.errors)[0]
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc5 in position 92: ordinal not in range(128)

このエラーが出てもリポジトリは追加されているようなのですが、ondrejさんに敬意をはらってLC_ALLを指定しておきましょう。

リポジトリを追加したら、以下の手順でPHP7などをインストールしていきます。

$ sudo sed -i s/archive.ubuntu.com/ftp.jaist.ac.jp/ /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get install apache2 php7.0 php7.0-sqlite3 git curl language-pack-ja

1行目はUbuntu標準のリポジトリを国内のミラーサーバーに切り替えるためのコマンドです。この記事を読まれているかたは日本にお住まいの方が圧倒的に多いと思いますので、日本のミラーサーバーにしました。

Gitやcurlなどは後々必要になるかもしれないということでインストールしています。他にも足りないパッケージがあるかもしれませんが、必要になったときに改めてインストールすることとします。

この時点でPHP7がインストールされているか、以下のコマンドで確認してみます。

$ php -v
PHP 7.0.2-1+deb.sury.org~trusty+1 (cli) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

PHP7がインストールできているようですね。あわせてSQLite3の拡張が有効になっていることも確認しておきましょう。

$ php -i | grep sqlite
/etc/php/7.0/cli/conf.d/20-pdo_sqlite.ini,
/etc/php/7.0/cli/conf.d/20-sqlite3.ini
PDO drivers => sqlite
pdo_sqlite
sqlite3
sqlite3.extension_dir => no value => no value

こちらも問題なさそうです。

最後に、phpinfo()を表示するスクリプトApacheのドキュメントルート配下においてみます。

/var/www/htmlがドキュメントルートとなりますが、オーナー、グループがrootになっているので、vagrantユーザーに所有者を変更してからファイルを追加することとします。

$ sudo chown vagrant.vagrant /var/www/html
$ echo '<?php phpinfo();?>' > /var/www/html/phpinfo.php

上記のコマンドを実行したあとに、以下のURLにアクセスすると、phpinfo()の結果が表示されると思います。

http://192.168.33.10/phpinfo.php

本日はここまでです。

ここまでの作業がvagrant up一発で完了するようなVagrantfileも用意しておきました。よろしければお使いください。

github.com