Laravel9でLaravel Duskを動かすまで

 

Laravel9にLaravel Duskを入れたが、なかなか思うように動かず、稼働するまでなかなか手間取ったので、その設定過程を紹介したいと思います。

既にLaravel9及びLaravel Duskのインストールは終わっている前提で話を進めます。

環境

  • Laravel9
  • Amazon Linux2
  • php8.0

経緯

Webサーバー上でWebサイトの動作確認を行う必要があり、以前は、Laravel6の環境上で動かしていて、PuPHPeteerを使用していました。

https://github.com/rialto-php/puphpeteer

今回、Laravel9にするにあたり、同じ環境を作成しようとPuPHPeteerのサイトを訪れたところ、困った事態となりました。サポート終了となっており、今後の開発予定もないとのこと、Laravel9上では稼働しなさそうです。

This project is not maintained anymore

As I write these lines, it's been nearly two years since the latest release of PuPHPeteer. Despite the enthusiasm around this project, I no longer have the motivation to support its development, mainly because it never really had any use to me. So its time to be honest with you, PuPHPeteer is no longer maintained.

If you create a fork and plan to maintain it, let me know and I will link it here.

https://github.com/rialto-php/puphpeteer

簡単にGoogle翻訳の内容を記載すると

このプロジェクトはもう維持されていません

これらの行を書いている時点で、PuPHPeteer の最新リリースからほぼ 2 年が経過しています。このプロジェクトに対する熱意にもかかわらず、私にはもはやその開発をサポートする動機がありません。正直に言うと、PuPHPeteer はもはやメンテナンスされていません。

フォークを作成し、それを維持する予定がある場合は、お知らせください。ここにリンクします。

と書いてありました。README.mdの更新も10月となっていて、この決定も最近のことだったと知り、PHPからJSで動作するpuppeterを操作できる、非常に便利なライブラリだっただけにとても残念です。

結果、代替を探す必要があり、chromiumをベースとしたPHPから操作できるライブラリとしてLaravel Duskに行きつきました。

Laravel Duskの実行環境の作成

Linux用Chromeドライバのインストール

Laravel Duskをインストールした時点で、Chromeドライバは入っていますが、Linux版は入っていませんので、下記を実行します。

$ php artisan dusk:chrome-driver --all

Linuxバージョンのみでよいところですが、一応全OS用のを入れてしまいました。

そして、laravel duskを実行してみます。

$ php artisan dusk
PHPUnit 9.5.26 by Sebastian Bergmann and contributors.

EW                                                                  2 / 2 (100%)

Time: 00:00.329, Memory: 22.00 MB

There was 1 error:

1) Tests\Browser\ExampleTest::testBasicExample
Facebook\WebDriver\Exception\WebDriverCurlException: Curl error thrown for http POST to /session with params: {"capabilities":{"firstMatch":[{"browserName":"chrome","goog:chromeOptions":{"args":["--window-size=1920,1080","--disable-gpu","--headless","--no-sandbox"]}}]},"desiredCapabilities":{"browserName":"chrome","platform":"ANY","chromeOptions":{"args":["--window-size=1920,1080","--disable-gpu","--headless","--no-sandbox"]}}}

Failed to connect to localhost port 9515 after 0 ms: Connection refused
・・・
ERRORS!
Tests: 2, Assertions: 0, Errors: 1, Warnings: 1.

「Failed to connect to localhost port 9515 after 0 ms: Connection refused」ということでポート9515番での接続ができない状況のようです。

Chromeドライバのパーミッション変更

Chromeドライバの動作確認をしてみます。

$ /var/www/laravel/vendor/laravel/dusk/bin/chromedriver-linux -v
-bash: /var/www/laravel/vendor/laravel/dusk/bin/chromedriver-linux: Permission denied

「Permission denied」ということで、実行権限がないようです。パーミッションを「775」に変更し、Chromeドライバの動作確認をしてみます。

$ chmod 775 /var/www/laravel/vendor/laravel/dusk/bin/chromedriver-linux
$ /var/www/laravel/vendor/laravel/dusk/bin/chromedriver-linux -v
/var/www/laravel/vendor/laravel/dusk/bin/chromedriver-linux: error while loading shared libraries: libxcb.so.1: cannot open shared object file: No such file or directory

今度は、「libxcb.so.1」ライブラリが無いというエラーが出ています。

libxcbパッケージのインストール

libxcbパーッケージについて簡単に触れます。

libxcb パッケージは、X ウィンドウシステムプロトコルへのインターフェースを提供します。 これは Xlib インターフェースに代わるものとなります。 Xlib はトランスポート層として XCB も利用します。 これによりソフトウェアによるリクエストとレスポンスの双方を可能とします。

http://lfsbookja.osdn.jp/BLFS/git-sysdja/x/libxcb.html

では、インストールします。

$ sudo yum install libxcb
・・・
==================================================================================================
 Package            アーキテクチャー   バージョン                       リポジトリー            容量
==================================================================================================
インストール中:
 libxcb             x86_64             1.12-1.amzn2.0.2                 amzn2-core          216 k
依存性関連でのインストールをします:
 libXau             x86_64             1.0.8-2.1.amzn2.0.2              amzn2-core          29 k

トランザクションの要約
==================================================================================================
インストール  1 パッケージ (+1 個の依存関係のパッケージ)
・・・

Chromeドライバの実行状況を確認するため、バージョンの確認をしてみます。

$ /var/www/laravel/vendor/laravel/dusk/bin/chromedriver-linux -v
ChromeDriver 107.0.5304.62 (1eec40d3a5764881c92085aaee66d25075c159aa-refs/branch-heads/5304@{#942})

無事表示されました。

改めてLaravel Duskを実行してみます。

$ php artisan dusk
・・・
1) Tests\Browser\ExampleTest::testBasicExample
Facebook\WebDriver\Exception\UnknownErrorException: unknown error: cannot find Chrome binary
・・・

今度は「Chrome binary」が無いとのことです。Chromeの本体ファイルです。

Chromeのインストール

Chromeをインストールします。いくつか方法に出会いましたが、下記がシンプルでしたので、curlでインストールをします。

$ curl https://intoli.com/install-google-chrome.sh | bash

インストールされている長いログが表示されます。ちなみにyumのインストール済みの一覧にも入ってきて、なんとなく安心です。

$ yum list installed | grep chrome
google-chrome-stable.x86_64         107.0.5304.110-1                 @google-chrome

では、改めてLaravel Duskを実行します。

$ php artisan dusk
PHPUnit 9.5.26 by Sebastian Bergmann and contributors.

F                                                                   1 / 1 (100%)

Time: 00:00.776, Memory: 22.00 MB

There was 1 failure:

1) Tests\Browser\ExampleTest::testBasicExample
Did not see expected text [Laravel] within element [body].
Failed asserting that false is true.
・・・・

しかし、うまく動きません。ここで少し迷走しました。

「.env.dusk.local」ファイルを設定してみたり、「ExampleTest」を調整してみたり、しかし、何をやってもうまくいきません。

そのうちに下記のコマンドに行き当たりました。Chromeドライバの詳細情報を確認します。

$ vendor/laravel/dusk/bin/chromedriver-linux --verbose
Starting ChromeDriver 107.0.5304.62 (1eec40d3a5764881c92085aaee66d25075c159aa-refs/branch-heads/5304@{#942}) on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.

Only local connections are allowed.

Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.

ここでは、ローカルからの接続だけが可能で、Chromeドライバを安全に使用する方法がURLにあるという記載がありました。

上記ページでは、Chromeドライバに「--allowed-ips」スイッチをつけることで、接続を許可するIPアドレスを設定できると書いてありましたが、これについても色々調べましたが、どこに設定すればよいか結局わかりませんでした。

結論:「ローカル」からの接続だけが可能

ただ、一つわかったことがあります。「ローカル」からの接続だけが可能ということです。

つまり、Laravelのscheduleでコマンドを実行するようにすれば、ローカルからの実行となります。コマンドラインからの実行は、外部からのリモートによる実行となり、うまく動作しないということです。

商用サーバーなどでは、モジュールの追加などができない場合が多いので、結局は専用サーバーなどが必要になるかと思いますが、Laravel Duskを利用する道筋が見えました。

文責:フライング・ハイ・ワークス代表 松田 治人(まつだ はるひと)
会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによるWebアプリケーションやWebサイトを構築しています。
エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。

WEBサイト制作のお問い合わせ、お見積り依頼、ご質問は
こちらのお問い合わせフォームよりお願いいたします

メールお問い合わせはこちら

フライング・ハイ・ワークスの紹介

フライング・ハイ・ワークスは、東京都渋谷区にある2000年3月創業のシステム開発にも対応できるデザインも強いWeb制作・ホームページ制作会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。

実績

デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステムの構築を始め、WordPressのカスタマイズを得意としております。

また、SEOやランディングページ(LP)、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。

500点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください!

採用

FHWでWebディレクター、Webデザイナー、Webプログラマーやシステム開発者として働いてみたいと思っていただける方は、下記にて定期的に募集をしておりますので、ぜひ、ご応募ください。

WEBサイト制作のお問い合わせ、お見積り依頼、ご質問は
こちらのお問い合わせフォームよりお願いいたします

メールお問い合わせはこちら