PHP

WSL2 DebianにLaravelインストールにあたってのComposerとartisan serveするまで

Laravelを使ってみよう!ということで公式をみながらまずはインストールを試みる。
しかし、うまくいかず。。。

ここでは最新の一つ手前の、7.xからトライしてみています。
なのでここでは復習がてら、インストール方法をなぞってみました。

システム要件

  • Windows10 WSL2 Debian
  • Laravel 7系

Laravelフレームワークを動作させるには多少のシステム要件があります。
Laravel Homestead仮想マシンでは、要求がすべて満たされています。そのため、Laravelのローカル開発環境としてHomesteadを活用されることを強く推奨します。

Laravelのインストール
LaravelはComposerを依存パッケージの管理に使用しています。ですから、Laravelを始める前に、自分の開発機にComposerを確実にインストールしておいてください。

と、あるのでComposerをインストールしてみようじゃないかと。
以前、GCPのGAEにWordpressをインストールしてみようということで、Composerの設定をトライしてみていたのでComposerは入っていました。

しかし、イマイチComposerの事もようはわからんということで、Composerについても深掘ってみたいと思います。

Composerとは?

composerとはPHPのパッケージ管理システム。
パッケージ管理システムがない環境では、メンバーがそれぞれ必要なライブラリの公式サイトにアクセスし、設定する必要がある。
パッケージ管理システムは、それらをとっても楽にしてくれるツール。

2020/10/24 にV2がリリースされたんですね。。。
https://qiita.com/KEINOS/items/86a16b06af6e936a1841

Composerをインストールする

公式にてインストールに処理として実行するように指示されている内容

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

上記の流れを見てみますとphpコマンドを実行していますよね。
まず、実行環境にphpに設定おく必要があるということですな。

こちらに各オプションの説明がありました。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"

-r は Runtimeということで、phpでcodeを処理することになると。
WindowsOSからブラウザでhttps://getcomposer.org/installer へアクセスすると、インストールファイルを保存しますか?と聞かれます。
上記コマンドは該当のURLへアクセスし、composer-setup.phpをcopy、もといダウンロードをする、ということなんでしょうね。

php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

こちらはやたら長い記述になってますね。

```php
php -r "
if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { 
        echo 'Installer verified'; 
    }
    else { 
        echo 'Installer corrupt'; unlink('composer-setup.php'); 
    } 
    echo PHP_EOL;"

ちょっとでも見やすくなればと思い改行してみました。
if文が実行されています。
hash_file()はファイルからハッシュ値を導き出す関数とのこと。
sha384はアルゴリズムのことなので、アルゴリズムsha384でcomposer-setup.phpをハッシュ化させた値がその後の文字列になるか、を比較しているんでしょう。

値が指定された文字列と等しいなら「Installer verified」(インストーラーは検証済)と出力することになるので、OKということなのでしょう。

もし、値が違うなら unlink() はファイルを削除する処理になるので、インストーラーはそのまま削除されると。
PHP_EOLは実行環境のOSに対応する改行コードを出力する定数になるので、とにかく処理がおわったら改行します、と。 
このハッシュ値は公式で配布されるcomposer-setup.phpの内容が変わったら、変更となるのでこの記事の内容を実行するのでなく、常に公式からダウンロードする必要がありますね、と。

そして、

php composer-setup.php
php -r "unlink('composer-setup.php');"

インストーラーファイルを無事ダウンロードできたらインストーラーを実行して、おわったら削除すると。
賢い!(感想)

あと、Laravelのインストール方法について紹介されている記事の通り実行していたら

Mcrypt PHP extension required. のエラーが。
調べる、

PHP 7.1.xからMcryptはdeprecated(非推奨)になり、PHP 7.2以降ではコアから削除されました。
その背景は

  • 放置されたソフトウェア

である事が大きそう。
Libmcryptの最終更新は2007年で、セキュリティ専門家によりAbandonware(放棄ウェア)の認定されたそう。

このあたりもいろいろ深いとは思いますが、それはそれでまた別のお話ですね。。

要は古いバージョンのlaravelをインストールしようとしての結果だった為。
PHPの新し目のバージョンと合わなかった模様。
とにかく実行するコードの内容をしっかり吟味しながら進めていく必要がありますね。

Laravelのcomposerをインストール
例えば、この記事だとこうだった。

$ curl -sS https://getcomposer.org/installer | php

$ sudo mv composer.phar /usr/local/bin/composer
$ sudo chmod +x /usr/local/bin/composer
$ composer --version
Laravelをインストール

$ composer global require laravel/installer

パスを通す

echo export PATH="~/.config/composer/vendor/bin:$PATH" >> ~/.bash_profile
source ~/.bash_profile

csh系とbsh系で書き方が異なるらしい。
ただ、ちょっと調べてみると現状は多くがbash系なのかな?

環境変数とは、マシンの中のメモ帳みたいなもの。
コンソール(ターミナル)のどこからでも参照することができるメモ帳。

その中でもPATH(環境変数)は実行ファイル(アプリケーション)の格納場所をメモしたもの。

exportコマンドはターミナルで打てるコマンド(Linuxコマンド)で、
環境変数を定義が出来るコマンド。

そして、composerにより、例えば blog というディレクトリをきってそこにlaravelをインストールしたいな~となったら下記コマンドでいけるよう。

$ laravel new blog

しかし、laravelコマンドがうまくいかず。。。

もしやvendor配下にpathが通っていないのか!?
ど思って 現状設定してある PATHなどの設定を確認できる

printenv

を実行してみる。
そしたら通っているみたいだけどな、、、

一旦分からず、試しにもう一つのインストール方法として紹介されていた下記で実施してみた。
そしたら、結果、artisanコマンドも無事使えるようになった。

composer create-project --prefer-dist laravel/laravel blog "6.*"

上記でもlaravelプロジェクトは動作させることができる、とのこと。
では!と思って早速実行。

ただ、実行直後は下記のようなエラーが。

Your requirements could not be resolved to an installable set of packages.

そうか、今のオススメのバージョンと違いそうだもんね。

- laravel/framework v7.29.0 requires ext-mbstring * -> the requested PHP extension mbstring is missing from your system.

こんなエラーが出てました。

sudo apt install php7.3-mbstring
~~~

Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested.

Composerのcreate-projectがどんな事をやっているのかについては上記記事が参考になりました。
### Composer project
[Composerのcreate-projectが何をやっているのか調べてみた](https://qiita.com/DQNEO/items/74f4bb8fe447e4582a97)

```bash
$ composer --version

上記で、バージョン確認できたぞ!?

そして、例えば、

$ php artisan --version
$ php artisan serve --host 0.0.0.0
Laravel development server started: http://0.0.0.0:8000

まあ、とにかく

composer create-project

したら、Laravelがうまく起動しました。

arisanコマンドは、わりと簡単に動作したな~

http://0.0.0.0:8000 だと、アクセスできなかったけど、
http://localhost:8000 だとアクセスできた。

新しいものを取り組もうとするとなんか、すぐ壁ぶつかるやん!という感じですが、これもまた勉強ですね。
基礎となる仕組みもイメージしつつ、しっかり取り組んでいきたいと思います。
よいしょ。

%d人のブロガーが「いいね」をつけました。