Amazon LinuxにPHP(v7.2) + Apache インストール

0. 前提 (ファイアウォールの設定)

Amazon Linux が実行されている Amazon EC2 インスタンスのセキュリティグループの設定で、80番ポートがインスタンスへの到達を許可するルールとして設定されていること。

1. PHP インストールの準備

Amazon Linux が実行されている Amazon EC2 インスタンスに対して EPEL リポジトリを有効にする

Amazon Linux 2 で EPEL rpmパッケージをインストールして有効にする

$ sudo yum install –y https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

その他の環境では以下の通り。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-enable-epel/

2. PHP, Apacheのインストール

2.1 Remi リポジトリの追加

Remi で提供されているソフトウェアをインストールするためには EPEL のリポジトリも必須要件のため、先に EPEL のリポジトリの追加を行った後に Remi のリポジトリを追加する。

$ sudo yum -y install epel-release

次に Remi のリポジトリ情報をインストールする。

$ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
2.2 PHP 7.2 & Apache httpd のインストール

Apache httpd と組合せて PHP 7.2 をインストールする。
まずは yum searchhttpdPHP 7.2のパッケージを検索して、リポジトリで提供されていることを確認。

$ sudo yum search httpd php72

存在が確認出来たらインストール。

$ sudo yum -y install httpd php72 php72-php
2.3 インストールの確認

httpdを起動

$ sudo systemctl start httpd.service

/var/www/html/info.php を作成(ドキュメントルートが異なる場合は環境に合わせて)し、下記の内容を記述してインストールされている PHP の情報を表示する。

<?php
phpinfo();

info.php にアクセス。
http://<サーバホスト名>/info.php にアクセスし、PHP の情報が表示されればOK!

参考にしました。
https://weblabo.oscasierra.net/centos7-php72-install/

上流工程のいろは

ウォーターフォール開発における上流工程には業務ではほとんど関わったことがありませんが、主に基本設計について勉強する機会があったので記録。
色々な所ですでにまとめられてはいますが、個人的に腑に落ちた言葉でまとめます。

いつものやつ

この図でいう左側について主に。 f:id:mpiman:20171220180008p:plain

要件定義

目的

  • システムで満たすべき機能や品質を定義する。
  • 開発工数を見積れるレベルまで要件を抽出する。

要件定義の作業と成果物

作業 成果物
ユースケース分析 ユースケース一覧
ビジネスルール一覧
ビジネスルール
概念モデリング 概念モデル
用語集
非機能要件定義 非機能要件定義書

機能要件と非機能要件

  • 機能要件
    システムの利用者に対して提供される具体的な価値。利用者の何らかの目的を達成するために使われ、ユースケースで定義されるもの。
  • 非機能要件
    利用者が機能を利用するために補助的に必要なシステムの特性や性能のこと。

そもそも設計を行う目的

  • 要件定義の内容をどのようにシステムで実現するかを検討する。

また以下の理由から、開発プロセスの一部でもあり、より良い開発を行うためにも必須である。
* 関係者間での情報共有
* 品質の向上
* メンテナンスのため

基本設計

目的

  • 要件定義で明確になっていない外部仕様を検討し、落とし込む。
  • システムのI/Oを明確にする。
  • 機能・非機能要件、異常系動作、制約条件をまとめる。

基本設計の作業と成果物

作業 成果物
画面設計 UI設計ポリシー定義書
画面遷移図
画面一覧
画面モックアップ
画面入力チェック仕様
画面一覧
外部システムI/F設計 外部システムI/F仕様書
バッチ設計 バッチ仕様書
帳票設計 帳票仕様書
DB論理設計 DB論理設計書
論理ER図

詳細設計

目的

  • プログラマが実際のプログラムが作れるレベルまで細かく落とし込む。(プログラム設計)

詳細設計の作業と成果物

作業 成果物
画面プログラム設計 アクション一覧
アクション設計書
画面共通部品設計書
ビジネスロジックプログラム設計 ビジネスロジックプログラム設計書
データベースプログラム設計 エンティティクラス図
DAOクラス図
データベース物理設計 物理ER図
テーブル定義書

基本設計については別の記事でもう少し詳しくまとめます。


参考にしました

www.shoeisha.co.jp

ちょっと古めの本なので例として挙げられている技術がいにしえ感あるのですが、WF開発の根幹となる部分を学習するにはよかったです。
初心者向けです。上流工程に普段から関わられている方にはおそらく物足りない。

PHP5 初級試験 [基本編]

PHP5 初級試験 [PJ0-100] 勉強中なので、基本的な内容について学んだことをつらつらと箇条書きで書いていきます。
書いて忘れないようにする作戦なので、内容にはご期待なさらず。

  • 変数名の大文字/小文字を区別する。関数は区別しない。
  • ""(ダブルコーテーション)で囲った変数は展開される。''(シングルコーテーション)は展開されない。
  • == での値の比較はデータ型を見ない。===は見る。
  • 下記の比較を行なった場合、'1abc'の後ろの文字列は削除され、trueになる。
'1abc' == 1
  • 変数と配列の違いがあっても同一変数名は使用できない。
  • 連想配列も配列の順序は保持される。
  • グローバル変数を操作するときは、明示的に指定が必要。
  • ヒアドキュメントは改行を含むような長い文字列を表すのに適する。
  • 連想配列のキーは整数値 or 文字列に変換される。(booleanのtureも文字列に、07という文字列は7という整数値に、10.5→10、null→空文字列、配列やオブジェクトはキーにできない)
  • 7!=7 と7<>7は同意義
  • <=>演算子は、左辺が右辺より小さい時には-1, 同じ時には0, 等しい時には1を返却する。
  • メモリ・リソースの開放を明示的に行う必要はない。
  • スクリプトの実行前・後に自動的に実行するスクリプトphp.iniで設定できる。
  • PHPはシステムを初期化する段階でモジュールを読み込む。
  • PHPの文字列型は文字エンコーディング情報を持たないのでバイナリ型として利用できる。
  • array_mergeで配列を連結すると添字振り直し。加算演算子で連結すると添字維持。
  • 型をチェックしなければ、0, null, false, から文字は全て等しい。
  • 配列は加算演算子に対応しているが、減算演算子には対応していない。
  • PHPはプラットフォーム間の差異を完全には吸収しない。
  • OSによってはサポートされていない関数がある。
  • シングルコーテーションを利用した方が速度は速い。ダブルをつかうと、文字列に変数が含まれるかパースが行われるため。
  • スコープレゾリューションオペレータ(::)って呼ぶ
  • Javaと違い、引数1で定義した関数の呼び出し時に引数をいくつ渡してもエラーは出ない
function say_hello($name) {
    echo "こんにちは $name さん!";
}
say_hello('やまだ', 'すずき', 'さとう');
  • Javaと違い、関数の定義時にデフォルト値を設定できる
  • include/require文で関数定義を行うファイルを2回以上読み込むと定義済み関数が再定義されるエラーが発生する。
  • require文は読み込むファイルが存在しないと致命的なエラー(E_ERROR)を発生させ、スクリプトの実行が停止する。

増えたりします。
ところでいつかPHP7の試験に切り替わるのではと待っていたのですが、それっぽい動きがないですね。


参考にしました

PlantUML 備忘録

PlantUML

PlantUMLUML図描画のためのDSL(ドメイン特化言語) です。
業務で図形を描画するには一般的に CacooGoogle図形描画などが使用されることが多いですが、バージョン管理に一苦労することはネックかと思います。
PlantUMLは指定の記述方法を利用することでテキストベースで主要なUML図を作成することができるため、バージョン管理ツールで管理しやすく、記述方法も比較的シンプルで直感的であることが強みです。

PlantUMLが対応するダイアグラム

PlantUMLが対応するダイアグラムは以下の通りです。主要なものはだいたいサポートされているかと思います。

  • シーケンス図
  • ユースケース
  • クラス図
  • アクティビティ図
  • コンポーネント
  • 状態遷移図(ステートマシン図)
  • オブジェクト図
  • 配置図
  • タイミング図

UML以外の図もサポートしてます。

PlantUML Viewer(Chrome拡張機能

テキストで記述したUML図を確認するのに個人的にオススメなのがChromeウェブストアからDLできる PlantUML Viewer です。
Eclipseプラグインなども存在しますがなんか色々インストールが必要でめんどくさかったり、そもそもEclipse起動するのも面倒だし、お手軽にブラウザで確認できるところが気に入っています。
PlantUML系のまとめを読んでいても案外Chrome拡張機能があることは記述がないので、布教程度に。

拡張機能の追加後、chrome://extensions/ にアクセスし、下記にチェックを入れることで有効となります。
f:id:mpiman:20171220125632p:plain

シーケンス図

まずは業務でも作成したことのあるシーケンス図について、簡単なウェブアプリケーションのログイン機能を想定して作成していきます。
シーケンス図については、この辺り がとても参考になりました。
簡単には、クラスやオブジェクト間のやりとりを時間軸に沿って表現している図のことです。
最終的にはこんな図を作成したいと思います。↓
f:id:mpiman:20171220170146p:plain

PlantUMLでシーケンス図

まずはおまじない。お好きな場所にテキストファイル(.txt)を作成し、下記の青字の記述を追加します。

@startuml  
    ここに記述していきます  
@enduml  

ログインするユーザを配置します。

@startuml  
    actor ユーザ  
@enduml  

この時点でchromeからシーケンス図を確認すると、ユーザの図が現れているはずです。このようにどんどんテキストでシーケンス図を書いていきます。

先ほどは分類子(棒人間の図)を表現するために actor というキーワードを使用しましたが、ほかにも下記のようなキーワードを使用することで分類子を簡単に表現できます。

  • actor
  • boundary
  • control
  • entity
  • database

これ以降、デフォルトの分類子(四角)を表現するために participant キーワードを使用していますが、省略もできますので明示的に宣言する必要はありません。

次に、処理の進む方向を -> 、戻る方向を --> もしくは <-- で表現します。
ログイン処理を行うため、ユーザ分類子からログイン分類子に処理を進めます。

@startuml  
     actor ユーザ  
     participant ログイン処理
     ユーザ -> ログイン処理 : ログイン  
@enduml  

処理の説明を : で区切った先に記述します。

また、分類子には別名をつけられます。ユーザに user 、ログイン処理に login という別名をつけてみます。シーケンス図の見た目こそ変わりませんが、別名を付与した以降は別名を使用して記述していけますので、大規模なシーケンス図になればなるほどありがたいですよね。 2byte文字を参照せずに済むという利点もあると思います。

@startuml  
    actor ユーザ as user  
    participant ログイン処理 as login
    user -> login : ログイン  
@enduml

次に、ライフラインでイベントが実行中であるということを示すため、 activatedeactivate キーワードを追加していきます。 これを追加することで、ライフライン上にイベント実行中(四角い箱)が表現されます。

@startuml  
    actor ユーザ as user 
    participant ログイン処理 as login 
    activate user
        user -> login : ログイン  
    deactivate user
@enduml

次にログイン処理がユーザの存在を確認しに行くデータベース分類子を定義し、処理を進めます。

@startuml  
    actor ユーザ as user  
    participant ログイン処理 as login
    activate user
        user -> login : ログイン  
        activate login
            database データベース as db
            activate db
                login -> db : データベース問い合わせ
            deactivate db
        deactivate login    
    deactivate user
@enduml

ここまででリクエストの定義は完了です。次のステップからレスポンスを定義していきます。

先ほども少し触れましたが、処理の戻る方向は --> もしくは <-- で表現します。
この二つに表現される内容の違いはありませんが、可読性のためにレスポンスであることがわかりやすいよう <-- の使用が推奨されているようです。
これを各分類子の間に定義していきます。

@startuml
    actor ユーザ as user
    participant ログイン処理 as login
    activate user
      user -> login : ログイン
      activate login
          database データベース
          activate データベース
              login -> データベース : データベース問い合わせ
              login <-- データベース : レスポンス
          deactivate データベース
          user <-- login : /indexにリダイレクト
      deactivate login
    deactivate user
@enduml

ログイン成功、失敗によって処理を分けます。分岐処理は一般的なシーケンス図と同様に alt キーワードを使用して記述します。
分岐処理のみでなく、複雑な処理を表現するための複合フラグメントは多種存在します。

分岐処理の構文は下記の通りです。

alt 条件1
  処理1
else 条件2
  処理2
end

ログイン成功時は/indexにリダイレクト、失敗時はエラーメッセージを表示するといった処理を上記構文で表現すると、このようになります。

@startuml
    actor ユーザ as user
    activate user
      participant ログイン処理 as login
      user -> login : ログイン
      activate login
          database データベース
          activate データベース
              login -> データベース : データベース問い合わせ
              login <-- データベース : レスポンス
          deactivate データベース
          alt 認証[成功]
              login --> user : /indexにリダイレクト
          else 認証[失敗]
              login --> user :認証失敗のメッセージを表示
          end
          deactivate login
    deactivate user
@enduml 

以上で、冒頭のシーケンス図が完成します。

PlantUMLの中でもシーケンス図に絞り、ごくごく簡単で基本的な内容にしか触れていませんが、複雑な処理を簡単に記述することができ、共有しやすく、かつバージョン管理もしやすいことは伝わったかと思います
いつかクラス図にも触れられたら、記事にします。

ぴーまんの備忘録

都内IT企業にてプログラマとして働き始めて早3年の文系女子ぴーまんが業務で学んだことや、これから勉強することをまとめていきます。
三日坊主にならないためにもゆるゆるとやっていきますので、どうぞよろしく。