[CakePHP3.6] Deprecated Error: You no longer need to call `Plugin::routes()` after upgrading to use Http\Server.メッセージ

bakeコマンドを使っていたら以下のメッセージが出力された。

Deprecated Error: You no longer need to call `Plugin::routes()` after upgrading to use Http\Server.
See https://book.cakephp.org/3.0/en/development/application.html#adding-the-new-http-stack-to-an-existing-application for upgrade information.
– cake_project\config\routes.php, line: 85
You can disable deprecation warnings by setting `Error.errorLevel` to `E_ALL & ~E_USER_DEPRECATED` in your config/app.php.
in [cake_project\vendor\cakephp\cakephp\src\Core\functions.php, line 310]

原因はroutes.php内でPlugin::routes();を呼び出しているため。
CakePHPのバージョンアップによって呼び出す必要がなくなったようなのでコメントアウトするとメッセージは出力されなくなった。

routes.php
Plugin::routes(); → //Plugin::routes();

Python3+Scrapy1.5でCakePHPのリリース日の情報を取得してみた

Scrapyを使ってWebページから文字列を取得しようとしてみたけれど、
いい題材がなかったのでCakePHPのリリース日の情報を取得してみた。

Scrapyのページに書かれているサンプルプログラムを元に修正をした。
https://scrapy.org/

import scrapy

class BlogSpider(scrapy.Spider):
  name = 'blogspider'
  start_urls = ['https://bakery.cakephp.org/categories/release.html']
  def parse(self, response):
    for date in response.css('.post-archive'):
      print(date.css('div>h4::text').extract_first() + date.css('div>h4>span::text').extract_first() + ' ' + date.css('div>h2>a::text').extract_first())

出力結果
2018 Sep 03 CakePHP 2.10.12 Released
2018 Sep 02 CakePHP 3.6.11 Released
2018 Aug 04 CakePHP 3.6.10 Released
2018 Jul 25 CakePHP 3.6.9 Released
2018 Jul 23 CakePHP 3.6.8 Released
(略)

Chromeの標準機能でWebページ全体の画面キャプチャを取得する方法

Chromeの標準機能でWebページ全体の画面キャプチャを取得する方法を残しておく。

環境
Chrome 68

手順
デベロッパーツールを開く。
以下の4通りのうちいずれかのやり方で開くことができる。
・ショートカットキー(Ctrl+Shift+I)を使用する。
・メニューから[その他のツール]>[デベロッパーツール]を選択する。
・ページ上で右クリックをして[検証]を選択する。
・F12キーを使用する。

コマンドメニューを開く。
・ショートカットキー(Ctrl+Shift+P)を使用する。

コマンドメニュー入力欄に「full」と入力をすると、
開いているWebページ全体の画面キャプチャをした画像が
ダウンロードされる。

参照ページ
Chrome Dev Toolsの開き方
https://developers.google.com/web/tools/chrome-devtools/?hl=ja

Chrome UIの説明
https://developers.google.com/web/tools/chrome-devtools/ui

PostgreSQLで使ったコマンド

MySQLばかりでPostgreSQLのコマンドがわからなかったので使ったものを残しておく。

公式
PostgreSQL(https://www.postgresql.org/)

・環境
Windows10
PostgreSQL 9.6.10

以下はコマンドプロンプト上で実施をするコマンド。
・コマンドプロンプトからログインをする。

psql -U username -h hostname

デフォルトでインストールをしたら以下だった。

psql -U postgres -h localhost

・データベースをエクスポートする。

pg_dump -U username -h hostname database_name > ofile

・データベースをインポートする。

psql database_name postgres < ifile

以下はコマンドプロンプトでログインをしたあとのコマンド。
・バージョンを確認する。

select version();

・データベース一覧を表示する。

\l

・データベースに接続をする。

\connect database_name

・テーブル一覧を表示する。

\d

・切断する。

\q

MySQLが起動できなかったときに実施したこと「mysqld: Can’t create/write to file ‘/tmp/xxxxxxxxxx’ (Errcode: 13 – Permission denied)」エラー

MySQLを立ち上げようとしたらエラーが出て立ち上がらなかった。
systemctl start mysqld.service を実行すると以下のメッセージが出てくる。
Job for mysqld.service failed because the control process exited with error code. See “systemctl status mysqld.service” and “journalctl -xe” for details.

/var/log/mysqld.log ログを確認したところ、以下のエラーメッセージが出ていた。
mysqld: Can’t create/write to file ‘/tmp/xxxxxxxxxx’ (Errcode: 13 – Permission denied)

/tmpディレクトリの権限を変更した覚えはないけれど確認をすると775の権限になっていた。
これを777に修正したら起動することができた。

CakePHP3とPHPUnitでControllerの単体テストを実施してみた

CakePHP3とPHPUnitでの単体テストコードの勉強をするために簡単なコードを書いて実施してみた。

環境
CakePHP 3.6.3
PHPUnit 5.7.27
PHP 7.0.27

UsersController.phpにsum()を追加する。
sum()はGETまたはPOSTから渡されるパラメータa、bの値を足し算する。

//UsersController.php
public function sum()
{
    $this->request->allowMethod(['post', 'get']);
    if($this->request->is('post')) {
        $a = $this->request->getData('a');
        $b = $this->request->getData('b');
    } elseif ($this->request->is('get')) {
        $a = $this->request->getQuery('a');
        $b = $this->request->getQuery('b');
    }
    $this->set('sum', $a + $b);
}

Controllerがsum()なのでsum.ctpテンプレートを追加する。

//Template/Users/sum.ctp
<?php
echo $sum;

UsersControllerTest.phpにはGETとPOST用のコードを作成する。
viewVariable()はControllerからset()した値を取得している。

//UsersControllerTest.php
public function testSumGet()
{
    $this->get('Users/sum?a=0&b=0');
    $sum = $this->viewVariable('sum');
    $this->assertEquals(0, $sum);

    $this->get('Users/sum?a=10&b=20');
    $sum = $this->viewVariable('sum');
    $this->assertEquals(30, $sum);

    $this->get('Users/sum?a=1000000&b=2000000');
    $sum = $this->viewVariable('sum');
    $this->assertEquals(3000000, $sum);
}

public function testSumPost()
{
    $this->post('Users/sum', ['a' => 0, 'b' => 0]);
    $sum =  $this->viewVariable('sum');
    $this->assertEquals(0, $sum);

    $this->post('Users/sum', ['a' => 10, 'b' => 20]);
    $sum =  $this->viewVariable('sum');
    $this->assertEquals(30, $sum);

    $this->post('Users/sum', ['a' => 1000000, 'b' => 2000000]);
    $sum =  $this->viewVariable('sum');
    $this->assertEquals(3000000, $sum);
}

PHPUnitを実行すると以下のような成功メッセージが出力される。

> php vendor\phpunit\phpunit\phpunit --coverage-html ./report.html tests\TestCase\Controller\UsersControllerTest.php

PHPUnit 5.7.27 by Sebastian Bergmann and contributors.
.. 2 / 2 (100%)

Time: 1.91 seconds, Memory: 12.00MB

OK (2 tests, 6 assertions)

Generating code coverage report in HTML format ... done

・途中で手が止まった点
testSumGet()とtestSumPost()の2つ目以降のテストがエラーになっていた。
メッセージを見るとControllerから受け取る$sumがnullになっていた。
原因はTemplate/Users/sum.ctpを作成していなかったため。
cli-error.logにテンプレートファイルが見つからないエラーが出ていた。

・今回解決できなかった点
UsersController.phpのsum()はGETとPOST以外は許容していない。
allowMethod()で指定したメソッド以外のアクセスは
500エラーが返るのでassertResponseFailure()を使ったテストコードを作った。
その結果、テストコードは成功した。
しかし、カバレッジレポートが生成されるがテストが通過したことにならなかった。

Macを使うようになって調べたショートカットなど

Macを使うようになってWindowsと違うところがあって調べたことを残しておく。

macOS:Sierra
MacBook Pro(15-inch, 2017)

・日本語入力にする。
Shift + control + J

・英数字入力にする。
Shift + control + ;

・コピー
command + C

・ペースト
command + V

・バックスラッシュ
option + ¥

・デスクトップを表示する
トラックパッド上で親指+3本(人差し指、中指、薬指)を広げる
Mac で Multi-Touch ジェスチャを使う – Apple サポート

・範囲を選択して画面キャプチャをする。
Shift + command + 4

PHPの公式サポートの状況を調べてみた

いま、PHPは5系と7系があるのはなんとなく知っていた。
けれど、詳しいバージョンとサポート終了日を知らなかったので調べてみた。

参考にしたページ
PHP: Supported Versions

Version Latest Release Active Support Security Support
5.6 2018/04/26 (5.6.36) 2017/01/19 2018/12/31
7.0 2018/04/26 (7.0.30) 2017/12/03 2018/12/03
7.1 2018/06/22 (7.1.19) 2018/12/01 2019/12/01
7.2 2018/06/21 (7.2.7) 2019/11/30 2020/11/30

Active Supportの日付はバグやセキュリティーの問題があればその日まではサポートしてくれる締切日。
Security Supportの日付は重大なセキュリティーの問題のみその日まではサポートしてくれる締切日。

5.6と7.0は今年中で終了。7.1も来年で終了してしまう。
7.3はまだアルファ版なので、今からPHPのバージョンを変えるとすると7.2か。