PHPをはじめからていねいに [Dockerによる環境構築・実行]

## PHPをはじめから丁寧に

### 要約
---
PHPをMac環境で書き始める事ができるように、
Dockerを用いて環境構築を行った。

Dockerを数十分で触ってみたい方や、PHPの概要を知りたい方へ向ける。

### 執筆時期
---
2023年3月-4月

### 使用環境 
---
MacBook Air

チップ:Apple 1M
メモリ:8 GB
OS:Ventura 13.3.1

Docker desktop 4.17.0
Engine 20.10.23
Compose v2.15.1
Credential Helper v0.7.0
Kubernotes v1.25.4

PHP 8.2.5

### 背景
---
バックエンドのインターンシップを「控えている」、**超初心者**学生視点で
PHP未経験から自習した内容を、まとめてこちらにて紹介する。
Dockerを利用し、一行コードを実行できるまでを記載する。

---

### PHPとは？

**動的なWebページ**を生成できる、
**サーバーサイド**の**スクリプト言語**です。

**動的なWebページ**とは、ページを開いたときに
決まったページを表示する静的なWebページと対比され、
特定の時間にはこのような記述をする、
発言に応じて画面が変化する掲示板など
様々な

**スクリプト言語**とは、
ウェブサイトの構造を記述する言語で、
PHPはスクリプト言語の中でも
**バックエンド**側の言語だと言われています。

バックエンド側の技術とは、
サーバーを扱う言語のことを言います。
使用する方が直接訪れるわけではない、
システムの裏側を整備するような技術を言います。

よく使用される言語は、
C,C++
Python,PHP,Ruby
Java
などが挙げられます。

並行して利用されるものに、
フレームワークである
Ruby on Rails
CakePHP
Express

Webサイトの情報を送受信するApache、
データベース管理のための、MySQL
などが存在します。

触ったことのないものも多いのですが、
参考文献よりできるだけ多く記載させていただきました。

### PHPの特徴

~~引用符を使ってみたい~~
大変わかりやすい文章が[こちら](https://www.kagoya.jp/howto/it-glossary/web/php/)にあり、引用させていただきます。
**かごやのサーバー研究室**様のブログよりの引用です。

>PHPの処理はWebサーバー側で行われるのに対して、JavaScriptの処理はWebページを参照するユーザー（クライアント）側のブラウザで行われます。サーバーサイドのPHPはサーバー側にあるMySQLなどのデータベースと連携することが可能です。

### 仮想環境に関する理解
---
**Anacondaによる仮想環境の構築**をお勧めします。
あまり理解は進んでいないのですが、
導入したパッケージや使用している言語のバージョン自体を管理できます。

個人で学習していてわからなかった部分の一つですが、
実際に集団で開発を経験している友人曰く、
環境が違う人達同士で同じコードを共有しても動かない場合もかなり多く
READMEに書く事項のように、「これはpython3.8.8で動きます。」を

私は初心者ながらAnaconda-Navigatorへの理解を怠り
めちゃくちゃなローカル環境を構築してしまったので、
ぜひもし学び始めたレベルの方がこの記事を見てくだされば、
環境構築ということをめちゃくちゃ勉強されるか、
環境構築までは有料の講座やコーチを課金することをお勧めいたします。

高価なPCの中身をぐちゃぐちゃにしてしまうと、大変もったいないです。

### Docker基礎
---
**Dockerをダウンロード**・
アカウント作成
（公式ドキュメントが素晴らしいです。）
https://matsuand.github.io/docs.docker.jp.onthefly/get-started/overview/

mac環境を前提にお話しします。

一度起動したもののしっかりと一度再起動し、terminalがリセットされてしまいましたので、一緒に行いましょう。

まずは**デスクトップアプリ**を起動してください。
少し時間がかかります。

全面表示していないとき、最も左のツールバーには、
- Containers
- Images
- Volumes
- Dev Environments
（その他拡張機能Extentions）

が表示されています。

imagesは数百MB前後、Volumesは数MB程度となっています。

Terminalを利用し、以下のコマンドで、dockerを操作してゆきましょう。
（Mac備え付けのソフト）
（command+spaceでspotlight検索を起動し、
terminalと打ち込んでいただくと、起動します。）

```
docker pull php
```

これは**Dockerhub**より、公式のPHPイメージをダウンロードしています。
Dockerhubとは、Dockerイメージを提供する公式リポジトリの一つであり、
特定の言語などに対応した**Dockerイメージ**がたくさん入っています。
Dockerイメージとは、**Dockerコンテナ**を立ち上げるための道具がたくさん入っているものです。

これで**Dockerコンテナ**を起動する準備ができました。

次に、適当なディレクトリを作りましょう

```
mkdir php_practice
```

などで問題ないかと思います。（センスがありません。）
ついにコンテナを起動します。

```
docker run -it -v php_practice:/var/www/html php
```

と打ち込んでください。
これでコンテナが起動しました。
確認しにゆくと、
Containersにおいて、一つだけ色がついたコンテナが増えているのがわかります。
Imagesの一番上にもphpが追加されているのではないのでしょうか？

PHPのためのイメージがあって、コンテナ起動
という流れだと理解をしています。

ここでterminalには

```
php >
```
のような表示がなされているのではないでしょうか？
これはphpを対話的に実行する環境です。
コマンドラインでPHPスクリプトを実行する環境ではありません。

試しに
```
echo "Hello World";
```
と打ち込んでいただけると、Hello Worldと出力されるのがお分かりだと思います。
あくまでPythonやRを、terminalで起動した時の状態。
ということだと思われます。

それではPackageを入れてゆきましょう、、と言いたいところですが、
PHP自体への勉強がたりず今回は参考文献の記載にとどめさせていただきます。

直接コマンドを打ち込む方法もあるようですがあまり歓迎されません。
システムパッケージマネージャーやPECLを用いると良いようです。
少々勉強する時間をください。

php >と表示されたまま動けなくなってしまっているので、
終了したい場合はexitと打ち込んでください。

コンテナも同時に停止します。

ここまでくると、逆にコンテナを起動して、
コンテナの中のシェルでPHPが実行できるようになりたいです。

```
start docker コンテナ名
```

により、コンテナが起動します。大変軽いです。

次に
コンテナをクリックしてIDを取得しても、コンテナ名を入れてもいいのですが、

```
docker exec -it IDorコンテナ名 /bin/bash
```

により、コンテナの中でシェルが起動します、
こちらで

```
php -r "実行したいコード"
```

により単体で実行することができます。

### あとがき

ご精読ありがとうございました！
記事を書き続けられるよう精進します。

/参考文献/

https://tech-blog.rakus.co.jp/entry/2018/02/20/130311

https://help.qiita.com/ja/articles/qiita-article-guideline

Progate PHP講座

https://www.kagoya.jp/howto/it-glossary/web/php/

https://qiita.com/Qiita/items/c686397e4a0f4f11683d

https://qiita.com/tk082330/items/c248d0b4df6501bcc4a9

https://qiita.com/3y9Mz/items/11012682766d135d241c

https://zenn.dev/makio/articles/69e38f5c90033e

https://zenn.dev/giba/articles/6612a5b03e2f3f