【2019年版】パーフェクトPHP解説その３ 6章 掲示板フォーム作成と初コミット

ものすごく時間が空いてしまいました
パーフェクトPHPは班が古いため、データベースとPHPの接続方法がすでに廃止された方法となっておりました。
その部分の情報を学習するのに時間がかかってしまいました。
今回はその前に書き溜めていた部分です。一応79日目分としておきます。

# 6.2.4 【改善】アプリケーションを配置するディレクトリの作成
ここはすでに「~/environment/git_repositories/php_section_6」を作っているので不要かと思います。

# 6.2.5 コメント投稿フォームの作成
## 6.2.5-1フォームの作成
早速フォームを作成します。
~/environment/git_repositories/php_section_6配下に「bbs.php」というファイルを作成します。

```
~/environment/git_repositories/php_section_6[master] $ touch bbs.php
```

htmlにphpを埋め込んで作成します。
ここから下、記法が古いかどうかは判断できないので、動けば気にしない方向で進めます。
また、ディレクトリの作り方や設定など、不足があるかもしれないのですが、エラーになるまでは気にせず進めます。

```php:bbs.php
<! DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
         <title>ひとこと掲示板</title>
</head>
<body>
         <h1>ひとこと掲示板</h1>

         <form action="bbs.php" method="post">
              名前: <input type="text" name="name" /><br />
              ひとこと: <input type="text" name="comment" size="60" /><br />
              <input type="submit" name="submit" value="送信" />
         </form>
</body>
</html>
```

正しく表示されるかを確認します。
ブラウザのアドレスバーに「http://IPアドレス/git_repositories/php_section_6/bbs.php」と入力して検索します。

ちなみに少しURLの仕組みについて説明します。
IPアドレスを入力すると、ドキュメントルートにアクセスするのと同じになります。
つまり今回の設定であれば、「IPアドレス = /home/ec2-user/environment」 です。
今回 bbs.php はドキュメントルート配下の /git_repositories/php_section_6/ にあるため、合わせて「IPアドレス/git_repositories/php_section_6/ bbs.php」で目的のファイルのサーバ上の位置を適切に示せる、というわけです。

## 6.2.5-2 Gitへのコミット
初めてリポジトリ内にファイルを作成しましたので、コミットします。

### 6.2.5-2.1 ローカルリポジトリでの作業
まずはローカルリポジトリ内の状態を確認します。

```
~/php_section_6[master] $ git status
On branch master

No commits yet

Untracked files:
(use "git add <file>..." to include in what will be committed)

bbs.php

nothing added to commit but untracked files present (use "git add" to track)
```

次にbbs.phpをステージ領域（インデックス）に登録します。

```php_section_6[master]
$ git add bbs.php
```

もう一度statusで確認するとこのように変わっているはずです。

```
$ git status
On branch master

No commits yet

Changes to be committed:
(use "git rm --cached <file>..." to unstage)

new file: bbs.php
```

次にローカルリポジトリにコミットします。

```

$ git commit -m "コメント投稿フォームの作成"
[master (root-commit) 065a355] コメント投稿フォームの作成
 1 file changed, 15 insertions(+)
 create mode 100644 bbs.php
```

改めてstatusで確認すると、このようになります。

```
$ git status
On branch master
nothing to commit, working tree clean
```

これでワーキングツリーは綺麗になったと教えてくれていますので、ローカルへのコミットが完了しました。

## 6.2.5-2.2 リモートリポジトリ（GitHub）での設定作業
次にリモートリポジトリへプッシュしますが、その前に通信の設定が必要です。
リモートリポジトリにはGitHubを使いますので、[公式](https://github.com/join)からアカウントを作成してください。

### 6.2.5-2.2.1 プロジェクトの作成
ボタン「start a project」から新規作成します。
以下設定項目です。

Repository Nameは「PerfectPHP」とします。Descriptionはご自由に。
公開範囲は私はPublicにしようと思いますが、Privateでも問題ありません。
ReadMeでの初期化はしません。
git ignoreは今のところ使用しないのでnone。
Licenceについても第三者の使用を前提としてはいないので、noneとします。

### 6.2.5-2.2.2 SSH keyの設定
ブラウザとWebアプリケーションがHTTPプロトコルで通信するように、GitHubとcloud9はSSHという方式で通信します。

パスワードよりもセキュリティが高い公開鍵認証という方法で、GitHub側に公開鍵を配置し、ローカルリポジトリに秘密鍵を配置します。

まず
```
$ ssh-keygen -t rsa -b 4096 -C "GitHubアカウントのメールアドレス"[
```

-t rsaで暗号方式をRSAとしています。
-b 4096でbit数を指定します。指定しないと2048bitになります。
-Cはコメントです。

で自分のアカウントの鍵を作成します。

```
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa): 
```

と公開鍵を入れるファイル名をつけられますが、デフォルトのままにするのでEnterします。

```
Enter passphrase (empty for no passphrase): 
Enter same passphrase again:
```

鍵を取り出すためのパスフレーズを設定します。
入力すると処理が流れ、鍵が作成されます。

鍵は

```
$ ls ~/.ssh
authorized_keys  id_rsa  id_rsa.pub
```

で確認できます。右のpubが公開鍵です。

```
$ cat ~/.ssh/id_rsa.pub
```

で中身を確認して鍵（ながーい文字列）をコピーしておきます。
ちなみにcatはファイルを結合するためのコマンドですが、中身をさっとみたいときによく使います。

### 6.2.5-2.2.3 公開鍵の登録とローカル側での認証

GitHubの一番右上のプロフィールのアイコンからsettingを選択し、左側のカラムの「SSH and GPG keys」に進みます。

「New SSH key」を開き、titleをつけてkeyに貼り付けて、「Add SSH key」を押下します。
登録メールアドレスに通知が来ます。

SSHkeyは複数登録できるので、開発環境ごとに異なる鍵を使えます。


次にcloud9ターミナルで

```
$ ssh -T git@github.com
```

と入力します。

```
The authenticity of host 'github.com (140.82.114.3)' can't be established.
RSA key fingerprint is XXXXXXX
RSA key fingerprint is XXXXXXX
Are you sure you want to continue connecting (yes/no)?  yes # yesと入力
Warning: Permanently added 'github.com,140.82.113.3' (RSA) to the list of known hosts.
Enter passphrase for key '/home/ec2-user/.ssh/id_rsa': # パスフレーズを入力
Hi アカウント名! You've successfully authenticated, but GitHub does not provide shell access.
```

と聞かれるので、yesとして接続を継続し、パスフレーズを入力して登録完了です。

## 6.5.2-2.3 リモートリポジトリへのプッシュ
プッシュしたいローカルリポジトリで

```
$ git remote add origin 追加先のリモートリポジトリのURL
```

と入力します。

リモートリポジトリのURLはGitHubのホームから取得することができます。
これによって、今後は「origin」という識別子でリモートリポジトリのURLを指すようになります。

```
$ git push -u origin リモートリポジトリのブランチ名
Enter passphrase for key '/home/ec2-user/.ssh/id_rsa': 
```

でプッシュできます。
今はブランチを切っていないので、master です。

```
Counting objects: 3, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 560 bytes | 560.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To github.com:untrustworth/PerfectPHP.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
```

でプッシュ完了です。
GitHubでリモートリポジトリ内を確認すれば、ファイルがコメント付きで確認できるはずです。