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と入力してインストールされたことを確認。

 

PHP – php.iniの設定

php.iniの場所

普通は/etc/php.ini

文字コード

もし必要なら変更。

mbstringをインストールしている場合、mbstring.internal_encodingは非推奨となっていて、internal_encodingdefault_charsetが使われるようだ。

internal_encodingの方も、指定していなければdefault_charsetが使われるとのこと。

タイムゾーン

コメントアウトを外し”Asia/Tokyo”を追記。

ブラウザーへのエラー表示

ブラウザーへのエラー表示を有効化のためoff→onに変更。ただし運用時はoffに。

 

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のインスタンスの初期化ブロック実行