Laravel – プロジェクトの開始

プロジェクトの生成

composer create-project laravel/laravel laravel_test --prefer-dist 6.*

--prefer-distオプションはライブラリーの安定バージョンを指定。

コマンドを実行したディレクトリー下にプロジェクトディレクトリーが作成され、必要なディレクトリーとファイルが配置される。

タイムゾーンとロケール

config/app.phpの以下を変更する。

  • timezoneUTCからAsia/Tokyo
  • localeenからja

データベースの設定

.envファイル設定

.envファイルを修正し、DBMSやDB名などのパラメーターを設定する。

データベース作成

まずmysqlにログイン。

CREATE DATABASE.envで設定したデータベースを作成。

データベースが作成されているか確認。

mysqlから出て、アプリケーションディレクトリー下でマイグレーションを実行。”Migration table created successfully.”を確認。

mysqlでマイグレーションの結果生成されたテーブルを確認できる。

開発用サーバーの起動

普通の場合

以下のように指定して、ブラウザーでlocalhost:8000でアクセス。

Vagrantの場合

Vagrant仮想環境の場合はホストとポート番号を確認して指定する必要がある。

 

Vagrant – Laravelの開発用サーバー

VagrantでLaravelのサーバーを稼働させる場合、Vagrantで設定したホストとポートを指定する必要がある。

たとえばポートフォワーディングでポート3000を指定している場合。

ゲスト側のIPアドレスを確認。

これらのIPアドレスとポート番号を使ってサーバーを起動。

そしてホスト側のブラウザーからlocalhost:3000でアクセス。

 

Linux – Composerのインストール

概要

Vagrant上のCentOS7仮想環境にComposerをグローバルインストールした記録。

PHPを使ってダウンロード、インストールするのでLinuxの種類には依存しない。

手順の確認

実行スクリプト

ComposerのサイトDownloadの内容を確認。シンプルに進めるなら以下のスクリプトをターミナルで実行するよう書かれている。

それぞれphpのスクリプトを-rオプションで直接実行している。

  • 1行目はインストールファイルのダウンロード
  • 2行目はファイルの確認
  • 3行目でセットアップ実行
  • セットアップファイルの削除

オプション

composer-setup.phpを実行するときのオプションに以下が説明されている。

–install-dir
実行ファイルをインストールするディレクトリーを指定する。
php composer-setup.php --install-dir=bin
–filename
インストールする実行ファイル名を指定する。デフォルトはcomposer.phar
php composer-setup.php --filename=composer

その他に--version--helpも説明あり。

グローバルインストール

指定したファイルにローカルインストールする方法もあるが、ここでは/usr/local/binにグローバルインストールする。

セットアップ実行の際に、/usr/local/binに書き込むためroot権限で実行し、セットアップするディレクトリーとファイル名(composer)を指定している。

プロンプトにcomposerと入力してインストールされたことを確認。

 

Vagrant – ネットワーク設定

ホストオンリー

概要

  • ホスト~ゲスト間のみ通信が可能
  • 仮想環境起動時にゲスト側のプライベートアドレス(固定IP)を指定
  • 指定したIPでゲスト側に新たなインターフェイス(eth)が加わる
  • ゲスト側のサーバーでポートを指定して開き、ホスト側から固定IPとそのポートで接続

設定

Vagrantfileの以下のコメントアウトを外す。

設定状況の確認。指定したIPアドレスでeth1が設定されていてる。

  • ゲスト側のサーバーでeth1のIPアドレス(192.168.33.10)と任意のポート指定
  • ホスト側からそのIPアドレスポートで接続

接続例

たとえばPHPのビルトインサーバーを以下のように起動し、ホストのブラウザーのURLに192.168.33.10:8080/test.phpなどと指定。

ポート番号8080は任意の値を設定でき、ゲスト側のサーバーで指定した番号と同じものをホスト側のブラウザー等でも指定。

ポートフォワーディング

概要

  • ゲストとホストそれぞれのポート番号を指定する
  • ゲスト側ではeth0のIPアドレスとゲストに指定されたポート番号でサーバを起動
  • ホスト側ではlocalhost(127.0.0.1)とホストに指定されたポート番号でゲスト側に接続

設定

Vagrantfileの以下のコメントアウトを外す。

設定状況の確認。

  • ゲスト側ではeth0のIPアドレス(10.0.2.15)とVagrantfileのguestで指定したポート(3000)でサーバーを起動
  • ホスト側からはlocalhost(または127.0.0.1)とVagrantfileのhostで指定したポートで接続

接続例

たとえばPHPのビルトインサーバーを以下のように起動し、ホストのブラウザーのURLにlocalhost:3000/test.phpあるいは127.0.0.1:3000/test.phpなどと指定。

異なるポート番号の場合

ホスト側とゲスト側のポート番号は異なってもよい。たとえばVagrantfileの先ほどの1行上の方をコメントアウトする。

この場合はゲスト側でサーバーを起動する場合にポート80で起動する(注:ポート80を使う場合はroot権限が必要)。たとえばPHPのビルトインサーバーの場合は以下のとおり。

そしてホスト側のブラウザーからは以下で接続する。

localhost:8080/test.phpまたは127.0.0.1:8080/test.php

 

Linux – curl

概要

curlコマンドはcURL (see URL)から名付けられたコマンドで、URLを通したファイル転送を行うコマンドラインツール。

Vagrantのbento/CentOS7にはcurlがインストール済みで、以下のようにバージョンを確認できる。

GET

curl URLでHTTPのGETメソッドをコマンドラインで実行し、転送されたファイルはコンソールに表示される。

-s, -S

curl -s URLはプログレス表示を抑制。ただしエラーメッセージも表示されなくなる。

curl -S URLはエラーメッセージを出力。

curl -sS URLはプログラス表示を抑制しながらエラーは表示させる。

-I, -i

curl -I URLでレスポンスヘッダー表示。

curl -i URLでボディーを含むレスポンス表示。

-v

リクエストを含むヘッダーとボディーを表示。

POST

-X

-XオプションでPOSTを指定してPOSTメソッドでリクエスト。

-d

-dオプションでパラメーターを指定。

 

Vagrant – PHPインストール – CentOS7

概要

CentOS7へのPHPのインストールはyumを使うが、公式のリポジトリ―ではバージョン5まででPHP7系がインストールできない。

PHP7をインストールするのに、sudo yum install php73 php73-php ...とすると、起動コマンドがphp73になる。これをphpで起動できるようにするのにRemi Repositoryを使わせてもらう。Remi Repositoryをインストールするに当たってはEPEL (Extra Packages for Enterprise Linux)が必要になる。

Remi RepositoryのサイトにあるConfiguration Wizardで条件を指定して、必要な情報を得ておく。設定条件は、

  • Operating system: CentOS7 (maintained until June 2024)
  • Wanted PHP version: 7.3.28 (security only support until December 2021)
  • Type of installation: Default / Single version (simplest way)

Wizard answerとして以下を含む情報が得られる。

  • Command to install the EPEL repository configuration package:
    yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
  • Command to install the Remi repository configuration package:
    yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
  • PHP version 7.3 packages are available for CentOS 7 in remi-php73 repository
  • Command to upgrade (the repository only provides PHP):
    yum update
  • Command to install additional packages:
    yum install php-xxx

yumのアップデート

念のため。

EPELのインストール

yumアップデートでEPELがインストール済みとわかる。インストール済みのリストをとってみると

EPELをインストールする手順の覚え書き。

Remiリポジトリーのインストール

PHP73リポジトリーの有効化

/etc/yum.repos.d/remi-php73.repoを編集。

PHP本体のインストール

インストールの確認。

この時点でインストールされているパッケージの確認。

必要なパッケージのインストール

php-devel php拡張を構築するのに必要なファイル
php-opcache バイトコード化アクセラレーター
php-intl 国際化関数
php-mbstring マルチバイト文字関連
php-mysqlnd MySQLネイティブドライバー
php-pdo PDO
php-xml XML利用
php-xmlrpc XMLデータ交換
php-gd 画像処理関連

基本的な機能

国際化・マルチバイト

データベース関係

XML関係

画像関係

 

Java – キーボード入力

InputStream

標準入力(System.in)を引数に渡して入力ストリームを生成する。

実行するとプロンプト(>)が表示されて入力待ちになり、文字列を入力してEnterを押すとその内容がオウム返しに表示される。

Scanner

java.util.Scannerの引数に標準入力(System.in)を渡してインスタンスを生成し、next()などのメソッドでキーボードからの入力を得る。

next()

以下のコードは、文字列”end”が入力されるまで、入力された文字列をオウム返しに表示し続ける。

実行例。

nextInt()

実行例。

全角数字も扱える。

3桁ごとのカンマ区切りは通る。

仕様ではInteger正規表現にマッチし、かつ範囲内である必要がある。数値と認識されない文字列に対しては、例外が投げられる。

以下は数値として扱えない。

  • 3桁区切りでないカンマ区切り
  • 全角の漢数字

closeするとSystem.inが使えなくなる

先のコードで、new Scanner(System.in)でインスタンスを生成している行に警告が出る(リソース・リーク: 'scanner' が閉じられることはありません)。

そこで、Scannerインスタンス使用後にいったんclose()してみると、再度インスタンスを生成しようとしたときに例外が投げられる。scannerをクローズしたときに標準入力System.inが閉じられてしまうため。

実行結果。

 

Java – ブロックスコープ

ブロック内でのみ有効

ブロック内で宣言された変数はそのブロック内でのみ有効で、ブロックを出るときに破棄される。

ブロック内で宣言された変数は、ブロック外では存在していない。

ブロック外で宣言可能

ブロック内スコープの変数はブロック外では存在しないので、ブロック外で同じ名前で宣言できる。

ブロック外宣言はブロック内で有効

ブロックの前で宣言された変数は、その後のブロック内で使用可能。以下の例では、ブロックの前で宣言された変数sがその後のブロックの中で書き換えられている。

したがって、ブロックの前で宣言された変数をブロック内ローカル変数として定義することはできない。定義しようとすると重複定義エラーになる。

 

Java – 初期化ブロック

staticブロックはクラスの読み込み時に実行されるが、初期化ブロックはクラスのインスタンス生成時に実行される。

上記のコードの実行結果は以下のとおり。

実行時の流れは以下のとおり。

  1. MainClassが読み込まれる
  2. MainClassmain()メソッド(static)実行
  3. main()メソッド内で
    1. MainClassと同じソース内のClass1のインスタンス生成
      Class1のインスタンスの初期化ブロック実行
    2. 別のソースのOuterClassのインスタンス生成
      OuterClassのインスタンスの初期化ブロック実行
    3. MainClassのインスタンス生成
      MainClassのインスタンスの初期化ブロック実行
    4. MainClassのインスタンスのmethod()メソッド実行
    5. method()メソッド内で
      1. MainClassのインナークラスInnerClassのインスタンス生成
        InnerClassのインスタンスの初期化ブロック実行
      2. MainClassと同じソース内のClass2のインスタンス生成
        Class2のインスタンスの初期化ブロック実行

 

Java – staticブロック

staticブロックは、クラスが呼ばれるタイミング、コードが実行される前に実行される。インスタンス生成時に実行される初期化ブロックよりも早いタイミングで、クラススコープの変数の初期化などに用いることができる。

上記のコードの実行結果は以下のとおり。

実行時の流れは以下のとおり。

  1. MainClassが読み込まれる
    MainClassstaticブロック実行
  2. MainClassmain()メソッド(static)実行
  3. main()メソッド内で
    1. MainClassと同じソース内のClass1のインスタンス生成
      Class1staticブロック実行
    2. 別のソースのOuterClassのインスタンス生成
      OuterClassstaticブロック実行
    3. MainClassのインスタンス生成
    4. MainClassのインスタンスのmethod()メソッド(public)実行
    5. method()メソッド内で
      1. MainClassと同じソース内のClass2のインスタンス生成
        Class2staticブロック実行

MainClassの動作を見ると、staticブロックが実行されるのはインスタンス生成時ではなく、クラスが読み込まれるタイミングとなっている。

その他のクラスはインスタンス生成時にクラスが呼ばれ、staticブロックが実行されている(宣言のみではstaticブロックは実行されない)。

インナークラスではstaticブロックは書けない(コンパイルエラー)。