LaradockでPhalconに入門する


TL;DR

Phalcon触ってみたかったので、Laradockで環境作ってWebアプリの雛形作ってみた

対象

  • Laravelとか知ってるけどPhalconは触ったことないPHPer(私)
  • サクッとPhalconお触りしてみたい人

準備

  • macOS 10.14.5
  • docker 18.09.2

ディレクトリ構成

以下のようになる想定です

/path/to
├── phalcon-sample
└── laradock

phalcon-sampleのところはプロジェクト名等で適宜読み替えてください

手順

Laradockworkspaceコンテナ経由でPhalconプロジェクトを作成します

Laradock導入

$ cd /path/to
$ git clone https://github.com/laradock/laradock.git
Cloning into 'laradock'...
...
Resolving deltas: 100% (4755/4755), done.

Laradockについて詳細は割愛するので、必要な方はこのへん見てください

.env作成

$ cd /path/to/laradock
$ cp env-example .env
$ vi .env
$ diff -u env-example .env
...
-WORKSPACE_INSTALL_PHALCON=false
+WORKSPACE_INSTALL_PHALCON=true
...
-PHP_FPM_INSTALL_PHALCON=false
+PHP_FPM_INSTALL_PHALCON=true
...
-MYSQL_VERSION=latest
+MYSQL_VERSION=5.7

.envの変更は上記3箇所です

MYSQL_VERSIONについては本題とあまり関係ないのでこのへん参考に「ふーん」ぐらいで大丈夫です

dockerコンテナ起動

workspaceコンテナのみ指定して起動します

$ docker-compose up -d workspace
Creating network "laradock_frontend" with driver "bridge"
Creating network "laradock_backend" with driver "bridge"
Creating network "laradock_default" with the default driver
Creating laradock_docker-in-docker_1 ... done
Creating laradock_workspace_1        ... done
$ docker-compose ps
           Name                      Command          State          Ports        
----------------------------------------------------------------------------------
laradock_docker-in-docker_1   dockerd-entrypoint.sh   Up      2375/tcp            
laradock_workspace_1          /sbin/my_init           Up      0.0.0.0:2222->22/tcp

phalcon/devtoolsのインストールとPhalconプロジェクト作成

起動したworkspaceコンテナ内でphalcon-devtoolsをインストールします

phalcon-devtoolsPhalcon公式から提供されている便利スクリプト集らしいです

Laravelで言うところのartisanみたいなやつでしょうか?(よくわかってない)

公式の手順とはちょっと異なりますが、一度コンテナ内のグローバルにインストールしてプロジェクト作成します(※ 後でプロジェクト内でインストールし直します)

$ docker-compose exec --user=laradock workspace bash
# ここから コンテナ内での作業です
$ composer global require phalcon/devtools
Changed current directory to /home/laradock/.composer
Using version ^3.4 for phalcon/devtools
./composer.json has been updated
...
Writing lock file
Generating autoload files
$ php ~/.composer/vendor/bin/phalcon.php project phalcon-sample

Phalcon DevTools (3.4.0)


  Success: Controller "index" was successfully created.  

/var/www/phalcon-sample/app/controllers/IndexController.php

  Success: Project 'phalcon-sample' was successfully created.
Please choose a password and username to use Database connection.Used default:'root' without password.  

$ exit
exit
# ここまで コンテナ内での作業です
$ docker-compose down
Stopping laradock_workspace_1        ... done
Stopping laradock_docker-in-docker_1 ... done
Removing laradock_workspace_1        ... done
Removing laradock_docker-in-docker_1 ... done
Removing network laradock_frontend
Removing network laradock_backend
Removing network laradock_default

phalcon-devtoolsでプロジェクト作成したら、コンテナは一度抜けて破棄します

ローカル動作確認

/path/to/phalcon-sampleディレクトリがホスト側にも出来上がっているはずなので、Laradockのマウント設定を少し変更します

$ vi .env
$ diff -u env-example .env
...
-APP_CODE_PATH_HOST=../
+APP_CODE_PATH_HOST=../phalcon-sample
...
-WORKSPACE_INSTALL_PHALCON=false
+WORKSPACE_INSTALL_PHALCON=true
...
-PHP_FPM_INSTALL_PHALCON=false
+PHP_FPM_INSTALL_PHALCON=true
...
-MYSQL_VERSION=latest
+MYSQL_VERSION=5.7

先ほどの3箇所に加え、APP_CODE_PATH_HOSTを変更しています

デフォルトでは/path/toをコンテナにマウントしていたのに対し、/path/to/phalcon-sampleをマウントするようにしています

.envを変更したら、今度はworkspace以外にnginxmysqlも一緒に起動します

$ docker-compose up -d workspace nginx mysql
Creating network "laradock_frontend" with driver "bridge"
Creating network "laradock_backend" with driver "bridge"
Creating network "laradock_default" with the default driver
Creating laradock_mysql_1            ... done
Creating laradock_docker-in-docker_1 ... done
Creating laradock_workspace_1        ... done
Creating laradock_php-fpm_1          ... done
Creating laradock_nginx_1            ... done

無事に立ち上がったら、この時点でlocalhostで動作確認できると思います

phalcon-devtoolsはこの後も使うと思うので、プロジェクト内に改めてインストールしておきます

$ docker-compose exec --user=laradock workspace bash
# ここから コンテナ内での作業です
$ composer require --dev phalcon/devtools
Using version ^3.4 for phalcon/devtools
./composer.json has been created
...
Writing lock file
Generating autoload files
$ exit
exit

最終的に中身はこんな感じになっていると思います

$ ll phalcon-sample/
total 72
drwxr-xr-x   8 user  group    256  6 21 12:22 app/
drwxr-xr-x   2 user  group     64  6 21 12:22 cache/
-rw-r--r--   1 user  group     66  6 21 12:33 composer.json
-rw-r--r--   1 user  group  26968  6 21 12:33 composer.lock
-rw-r--r--   1 user  group    123  6 21 12:22 index.html
drwxr-xr-x   9 user  group    288  6 21 12:22 public/
drwxr-xr-x  12 user  group    384  6 21 12:33 vendor/

まとめ

phalcon-devtools周りでちょっとぐだつきましたが、とりあえず最終形はきれいな形に収まったと思います…