20190203のPHPに関する記事は17件です。

Laravelのサービスコンテナについて

サービスコンテナとは?

  • Laravelの中のDIコンテナ
  • クラスのインスタンスを管理する
  • サービスコンテナに登録することでそのクラスをアプリケーションのどこからでも使用することができる

そもそもDIコンテナとは?

  • インスタンスの生成を全て別の場所で一括で管理すること
  • 単純なDIだけの場合、引数が鬼のような数になる可能性がある
  • 上記を解決するのがDIコンテナ

DIとDIコンテナは異なる

DIとは?

  • Dependency Injectionの略
  • 依存性の注入と言われるが、オブジェクト注入のこと
  • constructorで引数を元に外部からオブジェクトを注入すること。普通は、newを使う
  • Interfaceを使って外部注入したほうがより変更に強くなる
  • constructor以外にもsetter,methodなどから注入する方法も存在する
  • DIとDIじゃない場合の比較をした際のDIのメリット
    • newしないので、引数のクラスが実装されていなくても動かすことが可能
    • 外部注入したクラスに変更があっても、呼び出し元だけを変更すればよい
  • 参考記事

サービスコンテナ詳細

bind/binding(バインド)

  • サービスコンテナに対してインスタンスの生成方法を登録すること
  • バインドの定義場所はServiceProviderクラス
  • バインドの方法種類
    • bind
      • 常に新しいインスタンスを生成
      • 最も利用される
    • bindif
      • 引数で指定された文字列に対するバインドが存在しない場合のみインスタンスを生成
      • 既に存在していれば何もしない
    • singleton
      • インスタンスを1つのみにする場合に利用する
      • 最初インスタンスを生成して、次からはキャッシュされたインスタンスを返す
    • instance
      • 既に生成したインスタンスを返す
      • singleton同様にサービスコンテナにキャッシュされ、生成では同じインスタンスを返す

resolve/resolving(解決する)

  • サービスコンテナが指定されたインスタンスを生成して返すこと
  • 解決方法
    • makeメソッド
    • appヘルパ関数
    • 両方同じ挙動で、指定された文字列にバインドされた処理を実行してインスタンスを返す
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

役にたつか立たないかわからないInteliJIDEの話 【随時更新していくよ!!】

はじめに

勢いでIntelliJ All Products Pack買いました!
衝動買い楽しい。
せっかくだしちゃんと勉強しながら色々と使いこなせるようにメモします。
この機能の紹介をぜひー!とかこれ忘れてないなどあればどんどんお教えいただけますと幸いです。追記していきます!!
あと、サムライズムさんとかIntelliJとかお金もらってかいているわけではないです。

色々あるけど・・・

いろんな機能があって色々と扱えるものも違ってきます。
ちなみに最強はIntelliJ IDEA Ultimate Editionです。
plugin で追加さえすればめちゃめちゃ捗ります。

僕がweb開発とアプリする人間なので、それ以外にどうするべきなのかはわからないです。
値段は年間ですが、3年目まで毎年安くなっていきます。

JavaScripter

webStormで要件を満たせます。
年間6300円で、三年目だと3700円です。

webStormは、HTML/CSS、js, ts, coffe scriptを扱うことができます。なので、フロントエンドだろうが、バックエンド(nodeでの話)だろうがこれ一個で大丈夫です。
goに関してはプラグインでなんとかできるけど辛いみたい・・・。
そして、WebStormはかなり安いです。

ただし、こいつでDBを覗き見たりするのはpluginでできなくもないですが、Data Gripを買った方がいいかと。
二郎を食べたことない人が二郎の美味しさがわからないてきな感じでData Gripを触らない限りは他のフリーツールでも満足してやっていけます。
ただし、free trialでもData Grip触ろうものなら、もう戻ってこれなくなります。

pythoner

pyCharm professional Edition(PE)で要件を満たせます。
年間9600円で三年目だと5700円です**

pythonはCommunity Edition(CE)って無償のバージョンがありますが、これは基本的にはデータサイエンス向けでweb開発用に転用していくのは結構無理がでます。データサイエンスだけのためならCEでよいです!jupyterも動かせます!
そして、こいつはなんとHTML/CSS, js, ts, CoffeScriptも扱うことができます!
なのでこれを買えば、フロンエンドだろうが、バックエンド(python or node)だろうがこれ一個で大丈夫です。
ただし、値段はちょっと高いです。

phper

phpStormです。
年間9600円で三年目だと5700円です
webStormの上位互換ににあたります。
そして、こいつもなんとHTML/CSS, js, ts, CoffeScriptも扱うことができます!
なのでこれを買えば、フロンエンドだろうが、バックエンド(php or node)だろうがこれ一個で大丈夫です。
上位互換なので値段はやっぱちょっと高いです。

Rubyer

RubyMineです。
年間9600円で三年目だと5700円です**
僕はあんまりRubyに関して明るくないです・・・。
が、Rubyを扱うことができ、こいつもなんとHTML/CSS, js, ts, CoffeScriptも扱うことができます!
ということでこれもフロンエンドだろうが、バックエンド(ruby or node)だろうがこれ一個で大丈夫です。

go langer

go landです。
年間9600円で三年目だと5700円です

かっこいいですね。
これはHTML/CSS, js, tsを扱うことができます!

javer

IntelliJ IDEA ultimate Edition(UE)を使うことができます。
年間16100円で三年目だと9600円です

一応無償のCommunity Edition(UE)もありますが、で開店としてはHTML/CSS, js, markdownとかに対応していない点です。
java, kotolin, androidとかならCEで十分ですが、フロント周りをやろうとするならこれだとできないです。
pulanginをいれることで、多少python、Goなどに対して耐性をつけることもできます。
これだけ機能がたくさんあるためややお高い値段設定になっています。

swifter Objective-Cer

AppCodeがあります。
年間9600円で三年目だと5700円です

いままでXCode使ってきたので使用感はちょっと不明です・・・。というかReact Nativeエンジニアなので、そこまで必要なものでもない。
これは、swift, Objective-C/C++のほか、HTML/CSS、JavaScriptを扱えますが、ts、Coffieはできません。
なのでReact Nativeやる人からしてみてもAppCode買うかは微妙なところですね。

SQLer

Data Gripがあります。
年間9600円で三年目だと5700円です
これはめっちゃ良くてかなり重宝しています。

All Product Packは買いなの?

はっきし言ってAll Product Packは結構たかいです。
年間26900円で三年目だと16100円です

普通に開発しててもなんだかんだで2言語ぐらいできたら結構十分かと思います。
基本的に元を取ろうと思ったら3製品はちゃんと使わないともったいないです。
ですが、js系のものはだいたいどれもあつかえるので3製品使おうとするのは結構難しいです。

たとえば、僕の場合、

  • フロントエンドやる
  • アプリやるけどReact Nativeなのでswift、javaはそんなに触らない
  • バックエンド node or python
  • データサイエンスやる
  • データベースみる

とかになってくると、pyCharmとDataGripあれば十分かなと言ったところです。
それと、基本的にアップデートの速さは固有の製品の方が早いみたいなので、前線をいく人は前線をいけるような製品チョイスを心がけた方がいいかもしれません。
なので中なかなかに絶妙な値段設定をしている感じがしますね・・・。

値段のまとめ

26900円コース

All Product Pack

16100円コース

IntelliJ IDEA Ultimate Edition

9600円コース

phpStorm, RubyMine, PyCharm, DataGrip, Goland, AppCode

6300円コース

webStorm

と言った感じです。なので、ここから自分に何が必要なのかを吟味して選んでいくといいかと思います!
あと、僕みたいに心配性だったり考えるのめんどくさ買ったりする人はAll Product Packを買うといいと思います。

intention Actions

option + enter
いろんなことができます。
例えば、勢いでコード書いたけどファイルつくってなかった時とか、ここからさささっと作ることができます。

nazo2.gif

post completion

あと出しでコードを書く機能。
みてもらったほうが早い機能。そんなにいらないんじゃないって思うかもですが、なんだかんだ言って覚えれば便利な機能です。

nazo2.gif

一覧はpreference > editor > general > Postfix Completionからみれます。

スクリーンショット 2019-02-05 14.41.30.png

独自定義もできます。

スクリーンショット 2019-02-05 14.48.19.png

割と便利な

console.log({
  a,
  b,
});

を作りました。
nazo2.gif

live template

色々な機能がある。アロー関数をfarrowとして追加してみた。
こちらを参考にした。

タブを押すたびに引数、処理と言ったことができる。

nazo2.gif

スクリーンショット 2019-02-03 13.56.22.png

こんな感じで追加する。ワーニングっぽいのでてたらどの言語でできているかわからないっていっているので、どの言語で使えるかを設定してあげましょう。

($PARAMS$) => ({
    $BODY$
})$END$;

こんな感じで定義すると、param -> body -> endにtabを押すたびに遷移する。
一応、テンプレート的なのは、範囲を選択 -> tools -> save as livetemplateっていうのを押すと、選択範囲のコードが入った状態で始められる親切設計。

expand selection

いい感じに選択範囲をする機能です。
option + ↑で回数に応じて範囲が広がります。逆に戻したい場合はoption + ↓です。

nazo2.gif

変数化とインライン化

名前的に変数化したかったり、戻したりを一瞬でできます。

cmd + option + v 変数化します。
cmd + option + n で戻します。

nazo2.gif

parameter hint name

若干物議をかもすこの機能。
スクリーンショット 2019-02-05 15.14.10.png

こんな形でパラーメーター名を表示できます。

設定はここで切り替えられます。

スクリーンショット 2019-02-05 15.13.44.png

ショートカット

効果 コマンド
Undo cmd + z
Redo cmd + shift + z
検索 cmd + f or cmd + shift + f (プロジェクト全体)
置換 cmd + r or cmd + shift + r (プロジェクト全体)
複製 cmd + d
プロジェクトにwindowを開く閉じる cmd + 1
ファイル作成 cmd + n
コードの折りみと展開 cmd + .
preferenceを開く cmd + ,
help or Action cmd + shift + a
expand selection option + ↑ (回数で変わる)
予測補完を出す(macだとデフォで行けないので後述。ここに書いたのは自分用メモ) cmd + 4
smart補完を出す(macだとデフォで行けないので後述。ここに書いたのは自分用メモ) cmd + 5
intention Actions option + enter
変数化 cmd + option + v
インライン化 cmd + option + n
パラメーターヒント cmd + p
定義元ジャンプ(とにかく素晴らしい) cmd + b
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vagrant + VirtualBoxでMac OS上に仮想環境を構築してPHP を動かす

背景

PHPの開発環境はXAMPPで手っ取り早く構築できますが、今回初めて仮想環境を準備してみてたので備忘録がてらにメモしておきます。

実現したいこと

VagrantとVirtualBoxで仮想環境を構築し、PHPの実装内容をブラウザで確認してみたいと思います。
イメージとしてはこんな感じです。

環境

  • Mac OS Mojave Version 10.14

仮想環境とは

自分のPC内(物理マシン)に、コンピュータ(仮想マシン)を作成して、そこにPHPやRuby、Mysqlといった開発に必要なソフトウェアなどをインストールして動かしたりすることができる環境のことです。

要は、自分のPC上に仮想的に作り上げた本番・テスト環境だと思って下さい。

仮想環境は、ハイパーバイザ型ホスト型コンテナ型の3つに分類されます。
今回VargrantとVirtualBoxで準備するのは、ホスト型と呼ばれる仮想環境です。それぞれの特徴や違いについては、別途まとめたいと思います。とりあえずここでは割愛します。

なぜ仮想環境?

結論としては、環境の差異をミニマイズすることができるからです。

例えば、チームで開発・運用を行う場合、一般的には以下のステップで進めていくと思います。

  1. 開発環境(Development Environment)
  2. 検証(テスト)環境(Testing Environment)
  3. ステージング環境(Staging Environment)
  4. 本番環境(Production Environment)

しかし、各々がこれらの環境構築を手作業で行った場合、環境に差異が生まれることがあり、開発環境では動くのに本番環境では動かないといった問題が生じる可能性があります。
仮想環境による開発では、こうした問題をミニマイズすることができます。

仮想環境のメリット

仮想環境による開発のメリットはたくさんあります。要は、効率的に開発を行うことができます。

  • 実働・本番環境に合わせたOSが選択できる
  • Vagrantコマンド一発で環境の構築・停止・削除・再構築ができる
  • ホストマシン(自分のPC)とは独立しているので、ソフトやパッケージのインストールなどを仮想環境で気軽に試せる
  • chefなどの設定管理ソフトを導入すれば必要なソフトやライブラリが追加された状態の環境をすぐに作れる
  • 設定を共有すれば開発者間で共通の開発環境を構築できる

Vagrantとは

一言でいうと、仮想マシンをコマンドラインで簡単に扱えるようにするツールです。

image.png

VirtualBoxとは

Vagrant自体には仮想化の機能はないため、VirtualBoxと呼ばれる仮想環境を構築するためのツール(他にもありますが)を使用します。

セットアップ

まず、VagrantとVirtualBoxを自分のPCにインストールします。インストール自体はそこまで難しくないので、サクッとやっちゃいましょう。

VirtualBoxのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.virtualbox.org/wiki/Downloads

OS X hostsを選択して、あとはダイアログに指示に従って進めて下さい。

image.png

VirtualBoxのバージョン確認

インストールできたかどうか、バージョンを確認します。

$ VBoxManage -v
6.0.4r128413

バージョンが表示されていれば、インストール成功です。

VirtualBox Extension Packのインストール

Vagrantを操作するために必要なVirtualBoxの拡張パックををインストールします。

公式サイトのAll supported platformsからインストールします。

image.png

こちらもダイアログの指示に従って進めましょう。以下のような状態になっていればインストール成功です。

Vagrantのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.vagrantup.com/downloads.html

image.png

インストール先のマシンのOSとビット数に応じたインストーラが出てくるので、Mac OS X, 64-bit」を選びます。

Vagrantのバージョンの確認

インストールできたかどうか、バージョンを確認します。

$ vagrant --version
Vagrant 2.2.3

バージョンが表示されていれば、インストール成功です。

仮想環境構築

VagrantとVirtualBoxのセットアップが完了したら、開発環境の構築に移ります。

Vagrant Boxを検索

まず、Vagrant Cloudと呼ばれるVagrantで使えるBoxのクラウドサービスから、仮想環境のベースとなるVagrant Boxを検索します。
https://app.vagrantup.com/boxes/search

Vagrant Boxは、仮想マシンのテンプレート(ひな形、ベース)となるファイルです。
例えば、CentOSのBoxをインストールすれば、簡単にCentOS環境を構築することができます。
image.png

Vagrant Boxをインストール

以下コマンドでインストール出来ます。

$ vagrant box add [Box名またはURL]

実際にインストールしてみましょう。

$ vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 

Enter your choice:と言うメッセージが表示されるので、今回の場合だとVirtualBoxを利用しているので 3)を選択します。
実行するとBoxファイルのダウンロードが始まります。OSイメージなのでサイズもそれなりに大きく、ちょっと時間がかかリます。

==> box: Adding box 'centos/7' (v1812.01) for provider: virtualbox
    box: Downloading: 
https://vagrantcloud.com/centos/boxes/7/versions/1812.01/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1812.01) for 'virtualbox'!

Successfully〜と言うメッセージが表示されればOKです。

Vagrant Boxのインストール確認

インストールできたかどうか、以下コマンドで確認します。

$ vagrant box list
centos/7 (virtualbox, 1812.01)

作業ディレクトリ作成

centos7という作業ディレクトリを作成し、そこに仮想環境を作りたいと思います。要は下準備です。

$ mkdir centos7
$ cd centos7
$ pwd
/Users/Username/vagrant/centos7

Vagrantfileの作成

下準備ができたら、Vagrantfileを作成します。

Vagrantfileは、仮想マシンを立ち上げる際のconfigやprovision(立ち上げ時自動実行)を記述するファイル です。要は仮想環境の設計図みたいなもので、これを元にどんなPCでも同じような仮想環境を構築できます。

$ vagrant init centos/7

Vagrantfileの確認

コマンドを実行すると、Vagrantfileが作成されています。中身はコメントがたくさんあるのですが以下のようになっているはずです。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

仮想マシンを起動

以下コマンドで仮想マシンを起動させることができます。

$ vagrant up

仮想マシンにSSHで接続

仮想マシンの起動が終わると、SSHでシェル接続が可能になります。

$vagrant ssh

通常、SSHでの接続にはサーバアドレスやユーザIDの指定などが必要ですが、Vagrantによって立ち上げられた仮想マシンには、vagrant sshコマンドを使って簡単にSSH接続できるようになっています。

Last login: Sun Feb  3 10:17:25 2019 from 10.0.2.2
[vagrant@localhost ~]$ 

このような状態になっていれば、接続完了です。

サーバー構築@仮想環境

仮想環境の構築が完了した所で、実際に仮想環境上(CentOS)にサーバーを構築していきます。
PHPファイルをブラウザに表示するには、WEBサーバーが必要な為です。ポイントは、VagrantにSSHで接続した状態で実行することです。

PHPとApacheのインストール

PHPとApacheをインストールします。
Apacheは、WEBサーバーを構築するWebサーバーソフトウェアというもので、世界中で最も使われているんだとか。

$ sudo yum install php
$ sudo yum install httpd

Apacheを入れたら以下のようなディレクトリが作成されます。

  • /var/www/
  • /etc/httpd/
  • /var/log/httpd/

無事にインストールが完了したら、以下のコマンドを入力します。

$ cd /var/www/html 
$ sudo vi index.html 

viエディターが開くので、とりあえずindex.htmlの中にHello Worldを入力します。

<h1>Hello World</h1>

Escapeキーでエディタを閉じて、:wqと打ちます。
wは保存、qは終了を意味します。(もしエラーになる場合は:wq!と打つと確実に終了ができます)

Vagrantfileの再設定

exitコマンドで仮想マシンから出て、Vagrantfile(※vagrant initした時作成されたファイル)のネットワークの設定を行い、ローカルから仮想マシンを見れるようにします。

$ exit
$ vim Vagrantfile
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10" 

27行目あたりにある、config.vm.network "private_network", ip: "192.168.33.10"のコメントを外します。(キーボードのxを押して、#を削除したら、Escapeキーでエディタを閉じて、:wqと打ちます)

Vagrandを再起動

設定を変えたので、再起動します。

$ vagrant reload

Apacheの起動

$ sudo service httpd start

192.168.33.10にアクセスして、Hello Worldが表示されていればOKです。

Apacheの設定ファイル編集

本記事のゴールとなる、PHPを表示させるための作業です。(あと一息)
まず、Apacheの設定ファイルを編集します。

$ sudo vi /etc/httpd/conf/httpd.conf

以下のような記述を探します。

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

上の記述の下に以下の2つを追記します。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

これで、Apacheは拡張子がPHPのファイルをPHPプログラムとして処理をしてくれます。

PHPファイルの作成

$ cd /var/www/html 
$ sudo vi test.php
test.php
<html>
<body>
<?php
        echo('Hello PHP');
?>
</body>
</html>

http://192.168.33.10/test.phpにアクセスし、Hello PHPと表示されたら成功です。

image.png

おわりに

今回は、PHPの実装内容をブラウザで確認するまでという簡単な内容でしたが、Chefを使った自動構築だったり、Vagrant上のファイルをVScodeで編集することもできるみたいなので、今後色々調べて試してみたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Mac】Vagrant+VirtualboxでApache+PHP開発環境構築

背景

PHPの開発環境はXAMPPで手っ取り早く構築できますが、今回初めて仮想環境を準備してみてたので備忘録がてらにメモしておきます。

実現したいこと

VagrantとVirtualBoxで仮想環境を構築し、PHPの実装内容をブラウザで確認してみたいと思います。
イメージとしてはこんな感じです。(今回MySQLは触れません)

環境

  • Mac OS Mojave Version 10.14

仮想環境とは

自分のPC内(物理マシン)に、コンピュータ(仮想マシン)を作成して、そこにPHPやRuby、Mysqlといった開発に必要なソフトウェアなどをインストールして動かしたりすることができる環境のことです。

要は、自分のPC上に仮想的に作り上げた本番・テスト環境だと思って下さい。

仮想環境は、ハイパーバイザ型ホスト型コンテナ型の3つに分類されます。
今回VargrantとVirtualBoxで準備するのは、ホスト型と呼ばれる仮想環境です。それぞれの特徴や違いについては、別途まとめたいと思います。とりあえずここでは割愛します。

なぜ仮想環境?

結論としては、環境の差異をミニマイズすることができるからです。

例えば、チームで開発・運用を行う場合、一般的には以下のステップで進めていくと思います。

  1. 開発環境(Development Environment)
  2. 検証(テスト)環境(Testing Environment)
  3. ステージング環境(Staging Environment)
  4. 本番環境(Production Environment)

しかし、各々がこれらの環境構築を手作業で行った場合、環境に差異が生まれることがあり、開発環境では動くのに本番環境では動かないといった問題が生じる可能性があります。
仮想環境による開発では、こうした問題をミニマイズすることができます。

仮想環境のメリット

仮想環境による開発のメリットはたくさんあります。要は、効率的に開発を行うことができます。

  • 実働・本番環境に合わせたOSが選択できる
  • Vagrantコマンド一発で環境の構築・停止・削除・再構築ができる
  • ホストマシン(自分のPC)とは独立しているので、ソフトやパッケージのインストールなどを仮想環境で気軽に試せる
  • chefなどの設定管理ソフトを導入すれば必要なソフトやライブラリが追加された状態の環境をすぐに作れる
  • 設定を共有すれば開発者間で共通の開発環境を構築できる

Vagrantとは

一言でいうと、仮想マシンをコマンドラインで簡単に扱えるようにするツールです。

image.png

VirtualBoxとは

Vagrant自体には仮想化の機能はないため、VirtualBoxと呼ばれる仮想環境を構築するためのツール(他にもありますが)を使用します。

セットアップ

まず、VagrantとVirtualBoxを自分のPCにインストールします。インストール自体はそこまで難しくないので、サクッとやっちゃいましょう。

VirtualBoxのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.virtualbox.org/wiki/Downloads

OS X hostsを選択して、あとはダイアログに指示に従って進めて下さい。

image.png

VirtualBoxのバージョン確認

インストールできたかどうか、バージョンを確認します。

$ VBoxManage -v
6.0.4r128413

バージョンが表示されていれば、インストール成功です。

VirtualBox Extension Packのインストール

Vagrantを操作するために必要なVirtualBoxの拡張パックををインストールします。

公式サイトのAll supported platformsからインストールします。

image.png

こちらもダイアログの指示に従って進めましょう。以下のような状態になっていればインストール成功です。

Vagrantのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.vagrantup.com/downloads.html

image.png

インストール先のマシンのOSとビット数に応じたインストーラが出てくるので、Mac OS X, 64-bit」を選びます。

Vagrantのバージョンの確認

インストールできたかどうか、バージョンを確認します。

$ vagrant --version
Vagrant 2.2.3

バージョンが表示されていれば、インストール成功です。

仮想環境構築

VagrantとVirtualBoxのセットアップが完了したら、開発環境の構築に移ります。

Vagrant Boxを検索

まず、Vagrant Cloudと呼ばれるVagrantで使えるBoxのクラウドサービスから、仮想環境のベースとなるVagrant Boxを検索します。
https://app.vagrantup.com/boxes/search

Vagrant Boxは、仮想マシンのテンプレート(ひな形、ベース)となるファイルです。
例えば、CentOSのBoxをインストールすれば、簡単にCentOS環境を構築することができます。
image.png

Vagrant Boxをインストール

以下コマンドでインストール出来ます。

$ vagrant box add [Box名またはURL]

実際にインストールしてみましょう。

$ vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 

Enter your choice:と言うメッセージが表示されるので、今回の場合だとVirtualBoxを利用しているので 3)を選択します。
実行するとBoxファイルのダウンロードが始まります。OSイメージなのでサイズもそれなりに大きく、ちょっと時間がかかリます。

==> box: Adding box 'centos/7' (v1812.01) for provider: virtualbox
    box: Downloading: 
https://vagrantcloud.com/centos/boxes/7/versions/1812.01/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1812.01) for 'virtualbox'!

Successfully〜と言うメッセージが表示されればOKです。

Vagrant Boxのインストール確認

インストールできたかどうか、以下コマンドで確認します。

$ vagrant box list
centos/7 (virtualbox, 1812.01)

作業ディレクトリ作成

centos7という作業ディレクトリを作成し、そこに仮想環境を作りたいと思います。要は下準備です。

$ mkdir centos7
$ cd centos7
$ pwd
/Users/Username/vagrant/centos7

Vagrantfileの作成

下準備ができたら、Vagrantfileを作成します。

Vagrantfileは、仮想マシンを立ち上げる際のconfigやprovision(立ち上げ時自動実行)を記述するファイル です。要は仮想環境の設計図みたいなもので、これを元にどんなPCでも同じような仮想環境を構築できます。

$ vagrant init centos/7

Vagrantfileの確認

コマンドを実行すると、Vagrantfileが作成されています。中身はコメントがたくさんあるのですが以下のようになっているはずです。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

仮想マシンを起動

以下コマンドで仮想マシンを起動させることができます。

$ vagrant up

仮想マシンにSSHで接続

仮想マシンの起動が終わると、SSHでシェル接続が可能になります。

$vagrant ssh

通常、SSHでの接続にはサーバアドレスやユーザIDの指定などが必要ですが、Vagrantによって立ち上げられた仮想マシンには、vagrant sshコマンドを使って簡単にSSH接続できるようになっています。

Last login: Sun Feb  3 10:17:25 2019 from 10.0.2.2
[vagrant@localhost ~]$ 

このような状態になっていれば、接続完了です。

サーバー構築@仮想環境

仮想環境の構築が完了した所で、実際に仮想環境上(CentOS)にサーバーを構築していきます。
PHPファイルをブラウザに表示するには、WEBサーバーが必要な為です。ポイントは、VagrantにSSHで接続した状態で実行することです。

PHPとApacheのインストール

PHPとApacheをインストールします。
Apacheは、WEBサーバーを構築するWebサーバーソフトウェアというもので、世界中で最も使われているんだとか。

$ sudo yum install php
$ sudo yum install httpd

Apacheを入れたら以下のようなディレクトリが作成されます。

  • /var/www/
  • /etc/httpd/
  • /var/log/httpd/

無事にインストールが完了したら、以下のコマンドを入力します。

$ cd /var/www/html 
$ sudo vi index.html 

viエディターが開くので、とりあえずindex.htmlの中にHello Worldを入力します。

<h1>Hello World</h1>

Escapeキーでエディタを閉じて、:wqと打ちます。
wは保存、qは終了を意味します。(もしエラーになる場合は:wq!と打つと確実に終了ができます)

Vagrantfileの再設定

exitコマンドで仮想マシンから出て、Vagrantfile(※vagrant initした時作成されたファイル)のネットワークの設定を行い、ローカルから仮想マシンを見れるようにします。

$ exit
$ vim Vagrantfile
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10" 

27行目あたりにある、config.vm.network "private_network", ip: "192.168.33.10"のコメントを外します。(キーボードのxを押して、#を削除したら、Escapeキーでエディタを閉じて、:wqと打ちます)

Vagrandを再起動

設定を変えたので、再起動します。

$ vagrant reload

Apacheの起動

$ sudo service httpd start

192.168.33.10にアクセスして、Hello Worldが表示されていればOKです。

Apacheの設定ファイル編集

本記事のゴールとなる、PHPを表示させるための作業です。(あと一息)
まず、Apacheの設定ファイルを編集します。

$ sudo vi /etc/httpd/conf/httpd.conf

以下のような記述を探します。

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

上の記述の下に以下の2つを追記します。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

これで、Apacheは拡張子がPHPのファイルをPHPプログラムとして処理をしてくれます。

PHPファイルの作成

$ cd /var/www/html 
$ sudo vi test.php
test.php
<html>
<body>
<?php
        echo('Hello PHP');
?>
</body>
</html>

http://192.168.33.10/test.phpにアクセスし、Hello PHPと表示されたら成功です。

image.png

おわりに

今回は、PHPの実装内容をブラウザで確認するまでという簡単な内容でしたが、Chefを使った自動構築だったり、Vagrant上のファイルをVScodeで編集することもできるみたいなので、今後色々調べて試してみたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vagrant + VirtualBoxでMac OS上に仮想環境を構築してPHPを動かす

背景

PHPの開発環境はXAMPPで手っ取り早く構築できますが、今回初めて仮想環境を準備してみてたので備忘録がてらにメモしておきます。

実現したいこと

VagrantとVirtualBoxで仮想環境を構築し、PHPの実装内容をブラウザで確認してみたいと思います。
イメージとしてはこんな感じです。(今回MySQLは触れません)

環境

  • Mac OS Mojave Version 10.14

仮想環境とは

自分のPC内(物理マシン)に、コンピュータ(仮想マシン)を作成して、そこにPHPやRuby、Mysqlといった開発に必要なソフトウェアなどをインストールして動かしたりすることができる環境のことです。

要は、自分のPC上に仮想的に作り上げた本番・テスト環境だと思って下さい。

仮想環境は、ハイパーバイザ型ホスト型コンテナ型の3つに分類されます。
今回VargrantとVirtualBoxで準備するのは、ホスト型と呼ばれる仮想環境です。それぞれの特徴や違いについては、別途まとめたいと思います。とりあえずここでは割愛します。

なぜ仮想環境?

結論としては、環境の差異をミニマイズすることができるからです。

例えば、チームで開発・運用を行う場合、一般的には以下のステップで進めていくと思います。

  1. 開発環境(Development Environment)
  2. 検証(テスト)環境(Testing Environment)
  3. ステージング環境(Staging Environment)
  4. 本番環境(Production Environment)

しかし、各々がこれらの環境構築を手作業で行った場合、環境に差異が生まれることがあり、開発環境では動くのに本番環境では動かないといった問題が生じる可能性があります。
仮想環境による開発では、こうした問題をミニマイズすることができます。

仮想環境のメリット

仮想環境による開発のメリットはたくさんあります。要は、効率的に開発を行うことができます。

  • 実働・本番環境に合わせたOSが選択できる
  • Vagrantコマンド一発で環境の構築・停止・削除・再構築ができる
  • ホストマシン(自分のPC)とは独立しているので、ソフトやパッケージのインストールなどを仮想環境で気軽に試せる
  • chefなどの設定管理ソフトを導入すれば必要なソフトやライブラリが追加された状態の環境をすぐに作れる
  • 設定を共有すれば開発者間で共通の開発環境を構築できる

Vagrantとは

一言でいうと、仮想マシンをコマンドラインで簡単に扱えるようにするツールです。

image.png

VirtualBoxとは

Vagrant自体には仮想化の機能はないため、VirtualBoxと呼ばれる仮想環境を構築するためのツール(他にもありますが)を使用します。

セットアップ

まず、VagrantとVirtualBoxを自分のPCにインストールします。インストール自体はそこまで難しくないので、サクッとやっちゃいましょう。

VirtualBoxのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.virtualbox.org/wiki/Downloads

OS X hostsを選択して、あとはダイアログに指示に従って進めて下さい。

image.png

VirtualBoxのバージョン確認

インストールできたかどうか、バージョンを確認します。

$ VBoxManage -v
6.0.4r128413

バージョンが表示されていれば、インストール成功です。

VirtualBox Extension Packのインストール

Vagrantを操作するために必要なVirtualBoxの拡張パックををインストールします。

公式サイトのAll supported platformsからインストールします。

image.png

こちらもダイアログの指示に従って進めましょう。以下のような状態になっていればインストール成功です。

Vagrantのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.vagrantup.com/downloads.html

image.png

インストール先のマシンのOSとビット数に応じたインストーラが出てくるので、Mac OS X, 64-bit」を選びます。

Vagrantのバージョンの確認

インストールできたかどうか、バージョンを確認します。

$ vagrant --version
Vagrant 2.2.3

バージョンが表示されていれば、インストール成功です。

仮想環境構築

VagrantとVirtualBoxのセットアップが完了したら、開発環境の構築に移ります。

Vagrant Boxを検索

まず、Vagrant Cloudと呼ばれるVagrantで使えるBoxのクラウドサービスから、仮想環境のベースとなるVagrant Boxを検索します。
https://app.vagrantup.com/boxes/search

Vagrant Boxは、仮想マシンのテンプレート(ひな形、ベース)となるファイルです。
例えば、CentOSのBoxをインストールすれば、簡単にCentOS環境を構築することができます。
image.png

Vagrant Boxをインストール

以下コマンドでインストール出来ます。

$ vagrant box add [Box名またはURL]

実際にインストールしてみましょう。

$ vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 

Enter your choice:と言うメッセージが表示されるので、今回の場合だとVirtualBoxを利用しているので 3)を選択します。
実行するとBoxファイルのダウンロードが始まります。OSイメージなのでサイズもそれなりに大きく、ちょっと時間がかかリます。

==> box: Adding box 'centos/7' (v1812.01) for provider: virtualbox
    box: Downloading: 
https://vagrantcloud.com/centos/boxes/7/versions/1812.01/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1812.01) for 'virtualbox'!

Successfully〜と言うメッセージが表示されればOKです。

Vagrant Boxのインストール確認

インストールできたかどうか、以下コマンドで確認します。

$ vagrant box list
centos/7 (virtualbox, 1812.01)

作業ディレクトリ作成

centos7という作業ディレクトリを作成し、そこに仮想環境を作りたいと思います。要は下準備です。

$ mkdir centos7
$ cd centos7
$ pwd
/Users/Username/vagrant/centos7

Vagrantfileの作成

下準備ができたら、Vagrantfileを作成します。

Vagrantfileは、仮想マシンを立ち上げる際のconfigやprovision(立ち上げ時自動実行)を記述するファイル です。要は仮想環境の設計図みたいなもので、これを元にどんなPCでも同じような仮想環境を構築できます。

$ vagrant init centos/7

Vagrantfileの確認

コマンドを実行すると、Vagrantfileが作成されています。中身はコメントがたくさんあるのですが以下のようになっているはずです。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

仮想マシンを起動

以下コマンドで仮想マシンを起動させることができます。

$ vagrant up

仮想マシンにSSHで接続

仮想マシンの起動が終わると、SSHでシェル接続が可能になります。

$vagrant ssh

通常、SSHでの接続にはサーバアドレスやユーザIDの指定などが必要ですが、Vagrantによって立ち上げられた仮想マシンには、vagrant sshコマンドを使って簡単にSSH接続できるようになっています。

Last login: Sun Feb  3 10:17:25 2019 from 10.0.2.2
[vagrant@localhost ~]$ 

このような状態になっていれば、接続完了です。

サーバー構築@仮想環境

仮想環境の構築が完了した所で、実際に仮想環境上(CentOS)にサーバーを構築していきます。
PHPファイルをブラウザに表示するには、WEBサーバーが必要な為です。ポイントは、VagrantにSSHで接続した状態で実行することです。

PHPとApacheのインストール

PHPとApacheをインストールします。
Apacheは、WEBサーバーを構築するWebサーバーソフトウェアというもので、世界中で最も使われているんだとか。

$ sudo yum install php
$ sudo yum install httpd

Apacheを入れたら以下のようなディレクトリが作成されます。

  • /var/www/
  • /etc/httpd/
  • /var/log/httpd/

無事にインストールが完了したら、以下のコマンドを入力します。

$ cd /var/www/html 
$ sudo vi index.html 

viエディターが開くので、とりあえずindex.htmlの中にHello Worldを入力します。

<h1>Hello World</h1>

Escapeキーでエディタを閉じて、:wqと打ちます。
wは保存、qは終了を意味します。(もしエラーになる場合は:wq!と打つと確実に終了ができます)

Vagrantfileの再設定

exitコマンドで仮想マシンから出て、Vagrantfile(※vagrant initした時作成されたファイル)のネットワークの設定を行い、ローカルから仮想マシンを見れるようにします。

$ exit
$ vim Vagrantfile
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10" 

27行目あたりにある、config.vm.network "private_network", ip: "192.168.33.10"のコメントを外します。(キーボードのxを押して、#を削除したら、Escapeキーでエディタを閉じて、:wqと打ちます)

Vagrandを再起動

設定を変えたので、再起動します。

$ vagrant reload

Apacheの起動

$ sudo service httpd start

192.168.33.10にアクセスして、Hello Worldが表示されていればOKです。

Apacheの設定ファイル編集

本記事のゴールとなる、PHPを表示させるための作業です。(あと一息)
まず、Apacheの設定ファイルを編集します。

$ sudo vi /etc/httpd/conf/httpd.conf

以下のような記述を探します。

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

上の記述の下に以下の2つを追記します。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

これで、Apacheは拡張子がPHPのファイルをPHPプログラムとして処理をしてくれます。

PHPファイルの作成

$ cd /var/www/html 
$ sudo vi test.php
test.php
<html>
<body>
<?php
        echo('Hello PHP');
?>
</body>
</html>

http://192.168.33.10/test.phpにアクセスし、Hello PHPと表示されたら成功です。

image.png

おわりに

今回は、PHPの実装内容をブラウザで確認するまでという簡単な内容でしたが、Chefを使った自動構築だったり、Vagrant上のファイルをVScodeで編集することもできるみたいなので、今後色々調べて試してみたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vagrant+VirtualboxでApache+PHP開発環境構築

はじめに

世の中のトレンドはDockerですが、ホストOS型の環境構築も勉強してみたので、備忘録がてらにメモしておきます。

実現したいこと

VagrantとVirtualBoxで仮想環境を構築し、PHPの実装内容をブラウザで確認してみたいと思います。
イメージとしてはこんな感じです。(今回MySQLは触れません)

環境

  • Mac OS Mojave Version 10.14

仮想環境とは

自分のPC内(物理マシン)に、コンピュータ(仮想マシン)を作成して、そこにPHPやmySQLといった開発に必要なソフトウェアなどをインストールして動かしたりすることができる環境のことです。

要は、自分のPC上に仮想的に作り上げた本番・テスト環境だと思って下さい。

仮想環境は、ハイパーバイザ型ホスト型コンテナ型の3つに分類されます。
今回VargrantとVirtualBoxで準備するのは、ホスト型と呼ばれる仮想環境です。それぞれの特徴や違いについては、別途まとめたいと思います。とりあえずここでは割愛します。

なぜ仮想環境?

結論としては、環境の差異をミニマイズすることができるからです。

例えば、チームで開発・運用を行う場合、一般的には以下のステップで進めていくと思います。

  1. 開発環境(Development Environment)
  2. 検証(テスト)環境(Testing Environment)
  3. ステージング環境(Staging Environment)
  4. 本番環境(Production Environment)

しかし、各々がこれらの環境構築を手作業で行った場合、環境に差異が生まれることがあり、開発環境では動くのに本番環境では動かないといった問題が生じる可能性があります。
仮想環境による開発では、こうした問題をミニマイズすることができます。

仮想環境のメリット

仮想環境による開発のメリットはたくさんあります。要は、効率的に開発を行うことができます。

  • 実働・本番環境に合わせたOSが選択できる
  • Vagrantコマンド一発で環境の構築・停止・削除・再構築ができる
  • ホストマシン(自分のPC)とは独立しているので、ソフトやパッケージのインストールなどを仮想環境で気軽に試せる
  • chefなどの設定管理ソフトを導入すれば必要なソフトやライブラリが追加された状態の環境をすぐに作れる
  • 設定を共有すれば開発者間で共通の開発環境を構築できる

Vagrantとは

一言でいうと、仮想マシンをコマンドラインで簡単に扱えるようにするツールです。

image.png

VirtualBoxとは

Vagrant自体には仮想化の機能はないため、VirtualBoxと呼ばれる仮想環境を構築するためのツール(他にもありますが)を使用します。

セットアップ

まず、VagrantとVirtualBoxを自分のPCにインストールします。インストール自体はそこまで難しくないので、サクッとやっちゃいましょう。

VirtualBoxのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.virtualbox.org/wiki/Downloads

OS X hostsを選択して、あとはダイアログに指示に従って進めて下さい。

image.png

VirtualBoxのバージョン確認

インストールできたかどうか、バージョンを確認します。

$ VBoxManage -v
6.0.4r128413

バージョンが表示されていれば、インストール成功です。

VirtualBox Extension Packのインストール

Vagrantを操作するために必要なVirtualBoxの拡張パックををインストールします。

公式サイトのAll supported platformsからインストールします。

image.png

こちらもダイアログの指示に従って進めましょう。以下のような状態になっていればインストール成功です。

Vagrantのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.vagrantup.com/downloads.html

image.png

インストール先のマシンのOSとビット数に応じたインストーラが出てくるので、Mac OS X, 64-bit」を選びます。

Vagrantのバージョンの確認

インストールできたかどうか、バージョンを確認します。

$ vagrant --version
Vagrant 2.2.3

バージョンが表示されていれば、インストール成功です。

仮想環境構築

VagrantとVirtualBoxのセットアップが完了したら、開発環境の構築に移ります。

Vagrant Boxを検索

まず、Vagrant Cloudと呼ばれるVagrantで使えるBoxのクラウドサービスから、仮想環境のベースとなるVagrant Boxを検索します。
https://app.vagrantup.com/boxes/search

Vagrant Boxは、仮想マシンのテンプレート(ひな形、ベース)となるファイルです。
例えば、CentOSのBoxをインストールすれば、簡単にCentOS環境を構築することができます。
image.png

Vagrant Boxをインストール

以下コマンドでインストール出来ます。

$ vagrant box add [Box名またはURL]

実際にインストールしてみましょう。

$ vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 

Enter your choice:と言うメッセージが表示されるので、今回の場合だとVirtualBoxを利用しているので 3)を選択します。
実行するとBoxファイルのダウンロードが始まります。OSイメージなのでサイズもそれなりに大きく、ちょっと時間がかかリます。

==> box: Adding box 'centos/7' (v1812.01) for provider: virtualbox
    box: Downloading: 
https://vagrantcloud.com/centos/boxes/7/versions/1812.01/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1812.01) for 'virtualbox'!

Successfully〜と言うメッセージが表示されればOKです。

Vagrant Boxのインストール確認

インストールできたかどうか、以下コマンドで確認します。

$ vagrant box list
centos/7 (virtualbox, 1812.01)

作業ディレクトリ作成

centos7という作業ディレクトリを作成し、そこに仮想環境を作りたいと思います。要は下準備です。

$ mkdir centos7
$ cd centos7
$ pwd
/Users/Username/vagrant/centos7

Vagrantfileの作成

下準備ができたら、Vagrantfileを作成します。

Vagrantfileは、仮想マシンを立ち上げる際のconfigやprovision(立ち上げ時自動実行)を記述するファイル です。要は仮想環境の設計図みたいなもので、これを元にどんなPCでも同じような仮想環境を構築できます。

$ vagrant init centos/7

Vagrantfileの確認

コマンドを実行すると、Vagrantfileが作成されています。中身はコメントがたくさんあるのですが以下のようになっているはずです。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

仮想マシンを起動

以下コマンドで仮想マシンを起動させることができます。

$ vagrant up

仮想マシンにSSHで接続

仮想マシンの起動が終わると、SSHでシェル接続が可能になります。

$vagrant ssh

通常、SSHでの接続にはサーバアドレスやユーザIDの指定などが必要ですが、Vagrantによって立ち上げられた仮想マシンには、vagrant sshコマンドを使って簡単にSSH接続できるようになっています。

Last login: Sun Feb  3 10:17:25 2019 from 10.0.2.2
[vagrant@localhost ~]$ 

このような状態になっていれば、接続完了です。

サーバー構築@仮想環境

仮想環境の構築が完了した所で、実際に仮想環境上(CentOS)にサーバーを構築していきます。
PHPファイルをブラウザに表示するには、WEBサーバーが必要な為です。ポイントは、VagrantにSSHで接続した状態で実行することです。

PHPとApacheのインストール

PHPとApacheをインストールします。
Apacheは、WEBサーバーを構築するWebサーバーソフトウェアというもので、世界中で最も使われているんだとか。

$ sudo yum install php
$ sudo yum install httpd

Apacheを入れたら以下のようなディレクトリが作成されます。

  • /var/www/
  • /etc/httpd/
  • /var/log/httpd/

無事にインストールが完了したら、以下のコマンドを入力します。

$ cd /var/www/html 
$ sudo vi index.html 

viエディターが開くので、とりあえずindex.htmlの中にHello Worldを入力します。

<h1>Hello World</h1>

Escapeキーでエディタを閉じて、:wqと打ちます。
wは保存、qは終了を意味します。(もしエラーになる場合は:wq!と打つと確実に終了ができます)

Vagrantfileの再設定

exitコマンドで仮想マシンから出て、Vagrantfile(※vagrant initした時作成されたファイル)のネットワークの設定を行い、ローカルから仮想マシンを見れるようにします。

$ exit
$ vim Vagrantfile
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10" 

27行目あたりにある、config.vm.network "private_network", ip: "192.168.33.10"のコメントを外します。(キーボードのxを押して、#を削除したら、Escapeキーでエディタを閉じて、:wqと打ちます)

Vagrandを再起動

設定を変えたので、再起動します。

$ vagrant reload

Apacheの起動

$ sudo service httpd start

192.168.33.10にアクセスして、Hello Worldが表示されていればOKです。

Apacheの設定ファイル編集

本記事のゴールとなる、PHPを表示させるための作業です。(あと一息)
まず、Apacheの設定ファイルを編集します。

$ sudo vi /etc/httpd/conf/httpd.conf

以下のような記述を探します。

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

上の記述の下に以下の2つを追記します。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

これで、Apacheは拡張子がPHPのファイルをPHPプログラムとして処理をしてくれます。

PHPファイルの作成

$ cd /var/www/html 
$ sudo vi test.php
test.php
<html>
<body>
<?php
        echo('Hello PHP');
?>
</body>
</html>

http://192.168.33.10/test.phpにアクセスし、Hello PHPと表示されたら成功です。

image.png

おわりに

今回は、PHPの実装内容をブラウザで確認するまでという簡単な内容でしたが、Chefを使った自動構築だったり、Vagrant上のファイルをVScodeで編集することもできるみたいなので、今後色々調べて試してみたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Vagrant + VirtualBoxでMac OS上にPHP仮想環境を構築する

背景

PHPの開発環境はXAMPPで手っ取り早く構築できますが、今回初めて仮想環境を準備してみてたので備忘録がてらにメモしておきます。

実現したいこと

VagrantとVirtualBoxで仮想環境を構築し、PHPの実装内容をブラウザで確認してみたいと思います。
イメージとしてはこんな感じ。

環境

  • Mac OS Mojave Version 10.14

仮想環境とは

自分のPC内(物理マシン)に、コンピュータ(仮想マシン)を作成して、そこにPHPやRuby、Mysqlといった開発に必要なソフトウェアなどをインストールして動かしたりすることができる環境のことです。

要は、自分のPC上に仮想的に作り上げた本番・テスト環境だと思って下さい。

仮想環境は、ハイパーバイザ型ホスト型コンテナ型の3つに分類されます。
今回VargrantとVirtualBoxで準備するのは、ホスト型と呼ばれる仮想環境です。それぞれの特徴や違いについては、別途まとめたいと思います。とりあえずここでは割愛します。

なぜ仮想環境?

結論としては、環境の差異をミニマイズすることができるからです。

例えば、チームで開発・運用を行う場合、一般的には以下のステップで進めていくと思います。

  1. 開発環境(Development Environment)
  2. 検証(テスト)環境(Testing Environment)
  3. ステージング環境(Staging Environment)
  4. 本番環境(Production Environment)

しかし、各々がこれらの環境構築を手作業で行った場合、環境に差異が生まれることがあり、開発環境では動くのに本番環境では動かないといった問題が生じる可能性があります。
仮想環境による開発では、こうした問題をミニマイズすることができます。

仮想環境のメリット

仮想環境による開発のメリットはたくさんあります。要は、効率的に開発を行うことができます。

  • 実働・本番環境に合わせたOSが選択できる
  • Vagrantコマンド一発で環境の構築・停止・削除・再構築ができる
  • ホストマシン(自分のPC)とは独立しているので、ソフトやパッケージのインストールなどを仮想環境で気軽に試せる
  • chefなどの設定管理ソフトを導入すれば必要なソフトやライブラリが追加された状態の環境をすぐに作れる
  • 設定を共有すれば開発者間で共通の開発環境を構築できる

Vagrantとは

一言でいうと、仮想マシンをコマンドラインで簡単に扱えるようにするツールです。

image.png

VirtualBoxとは

Vagrant自体には仮想化の機能はないため、VirtualBoxと呼ばれる仮想環境を構築するためのツール(他にもありますが)を使用します。

セットアップ

まず、VagrantとVirtualBoxを自分のPCにインストールします。インストール自体はそこまで難しくないので、サクッとやっちゃいましょう。

VirtualBoxのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.virtualbox.org/wiki/Downloads

OS X hostsを選択して、あとはダイアログに指示に従って進めて下さい。

image.png

VirtualBoxのバージョン確認

インストールできたかどうか、バージョンを確認します。

$ VBoxManage -v
6.0.4r128413

バージョンが表示されていれば、インストール成功です。

VirtualBox Extension Packのインストール

Vagrantを操作するために必要なVirtualBoxの拡張パックををインストールします。

公式サイトのAll supported platformsからインストールします。

image.png

こちらもダイアログの指示に従って進めましょう。以下のような状態になっていればインストール成功です。

Vagrantのインストール

公式サイトからインストーラをダウンロードして実行します。
https://www.vagrantup.com/downloads.html

image.png

インストール先のマシンのOSとビット数に応じたインストーラが出てくるので、Mac OS X, 64-bit」を選びます。

Vagrantのバージョンの確認

インストールできたかどうか、バージョンを確認します。

$ vagrant --version
Vagrant 2.2.3

バージョンが表示されていれば、インストール成功です。

仮想環境構築

VagrantとVirtualBoxのセットアップが完了したら、開発環境の構築に移ります。

Vagrant Boxを検索

まず、Vagrant Cloudと呼ばれるVagrantで使えるBoxのクラウドサービスから、仮想環境のベースとなるVagrant Boxを検索します。
https://app.vagrantup.com/boxes/search

Vagrant Boxは、仮想マシンのテンプレート(ひな形、ベース)となるファイルです。
例えば、CentOSのBoxをインストールすれば、簡単にCentOS環境を構築することができます。
image.png

Vagrant Boxをインストール

以下コマンドでインストール出来ます。

$ vagrant box add [Box名またはURL]

実際にインストールしてみましょう。

$ vagrant box add centos/7
==> box: Loading metadata for box 'centos/7'
    box: URL: https://vagrantcloud.com/centos/7
This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) libvirt
3) virtualbox
4) vmware_desktop

Enter your choice: 

Enter your choice:と言うメッセージが表示されるので、今回の場合だとVirtualBoxを利用しているので 3)を選択します。
実行するとBoxファイルのダウンロードが始まります。OSイメージなのでサイズもそれなりに大きく、ちょっと時間がかかリます。

==> box: Adding box 'centos/7' (v1812.01) for provider: virtualbox
    box: Downloading: 
https://vagrantcloud.com/centos/boxes/7/versions/1812.01/providers/virtualbox.box
    box: Download redirected to host: cloud.centos.org
==> box: Successfully added box 'centos/7' (v1812.01) for 'virtualbox'!

Successfully〜と言うメッセージが表示されればOKです。

Vagrant Boxのインストール確認

インストールできたかどうか、以下コマンドで確認します。

$ vagrant box list
centos/7 (virtualbox, 1812.01)

作業ディレクトリ作成

centos7という作業ディレクトリを作成し、そこに仮想環境を作りたいと思います。要は下準備です。

$ mkdir centos7
$ cd centos7
$ pwd
/Users/Username/vagrant/centos7

Vagrantfileの作成

下準備ができたら、Vagrantfileを作成します。

Vagrantfileは、仮想マシンを立ち上げる際のconfigやprovision(立ち上げ時自動実行)を記述するファイル です。要は仮想環境の設計図みたいなもので、これを元にどんなPCでも同じような仮想環境を構築できます。

$ vagrant init centos/7

Vagrantfileの確認

コマンドを実行すると、Vagrantfileが作成されています。中身はコメントがたくさんあるのですが以下のようになっているはずです。

Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
end

仮想マシンを起動

以下コマンドで仮想マシンを起動させることができます。

$ vagrant up

仮想マシンにSSHで接続

仮想マシンの起動が終わると、SSHでシェル接続が可能になります。

$vagrant ssh

通常、SSHでの接続にはサーバアドレスやユーザIDの指定などが必要ですが、Vagrantによって立ち上げられた仮想マシンには、vagrant sshコマンドを使って簡単にSSH接続できるようになっています。

Last login: Sun Feb  3 10:17:25 2019 from 10.0.2.2
[vagrant@localhost ~]$ 

このような状態になっていれば、接続完了です。

サーバー構築@仮想環境

仮想環境の構築が完了した所で、実際に仮想環境上(CentOS)にサーバーを構築していきます。
PHPファイルをブラウザに表示するには、WEBサーバーが必要な為です。ポイントは、VagrantにSSHで接続した状態で実行することです。

PHPとApacheのインストール

PHPとApacheをインストールします。
Apacheは、WEBサーバーを構築するWebサーバーソフトウェアというもので、世界中で最も使われているんだとか。

$ sudo yum install php
$ sudo yum install httpd

Apacheを入れたら以下のようなディレクトリが作成されます。

  • /var/www/
  • /etc/httpd/
  • /var/log/httpd/

無事にインストールが完了したら、以下のコマンドを入力します。

$ cd /var/www/html 
$ sudo vi index.html 

viエディターが開くので、とりあえずindex.htmlの中にHello Worldを入力します。

<h1>Hello World</h1>

Escapeキーでエディタを閉じて、:wqと打ちます。
wは保存、qは終了を意味します。(もしエラーになる場合は:wq!と打つと確実に終了ができます)

Vagrantfileの再設定

exitコマンドで仮想マシンから出て、Vagrantfile(※vagrant initした時作成されたファイル)のネットワークの設定を行い、ローカルから仮想マシンを見れるようにします。

$ exit
$ vim Vagrantfile
# Create a private network, which allows host-only access to the machine
# using a specific IP.
config.vm.network "private_network", ip: "192.168.33.10" 

27行目あたりにある、config.vm.network "private_network", ip: "192.168.33.10"のコメントを外します。(キーボードのxを押して、#を削除したら、Escapeキーでエディタを閉じて、:wqと打ちます)

Vagrandを再起動

設定を変えたので、再起動します。

$ vagrant reload

Apacheの起動

$ sudo service httpd start

192.168.33.10にアクセスして、Hello Worldが表示されていればOKです。

Apacheの設定ファイル編集

本記事のゴールとなる、PHPを表示させるための作業です。(あと一息)
まず、Apacheの設定ファイルを編集します。

$ sudo vi /etc/httpd/conf/httpd.conf

以下のような記述を探します。

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

上の記述の下に以下の2つを追記します。

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

これで、Apacheは拡張子がPHPのファイルをPHPプログラムとして処理をしてくれます。

PHPファイルの作成

$ cd /var/www/html 
$ sudo vi test.php
test.php
<html>
<body>
<?php
        echo('Hello PHP');
?>
</body>
</html>

http://192.168.33.10/test.phpにアクセスし、Hello PHPと表示されたら成功です。

image.png

おわりに

今回は、PHPの実装内容をブラウザで確認するまでという簡単な内容でしたが、Chefを使った自動構築だったり、Vagrant上のファイルをVScodeで編集することもできるみたいなので、今後色々調べて試してみたいと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ラズパイをいじる ~LAMP環境編~

前書き

前回のOSインストール編からの続きです。
Teratermでつないだ状態から始めます。

■LAMP環境構築編

□参考記事

インストール内容

  • Apache2.4
  • PHP7.0
  • MySQL

手順

1.Apache

インストール

sudo apt-get install apache2

バージョン確認

apache2 -v
Server version: Apache/2.4.25 (Raspbian)

デフォルトのドキュメントルート

/var/www/html

Apacheの自動起動確認

sudo ls /etc/rc2.d/

2. PHP7

インストール

sudo apt-get install php7.0 libapache2-mod-php7.0 php7.0-mbstring php7.0-gettext php7.0-mysql

バージョン確認

php -v

php.iniを2か所編集

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8

3. MySQL

インストール

sudo apt-get install mysql-serever

文字コードの設定

sudo vi /etc/mysql/my.conf

# 設定ファイルに以下を追加
[mysqld]
character-set-server=utf8 # デフォルトの文字コードをutf-8
skip-character-set-client-handshake # クライアントのリクエストが何であれutf-8で返す

あとがき

ラズパイならではの情報が特にあるわけではなく、
debianのサーバー立てるみたいになってしまってますね。
途中省略しましたがvim入れたり、rootにパスワードを設定したりしてます。
次回はUSBからbootとストレージの拡張とかやろうかと思います。

補足・修正等ございましたらお知らせください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのMigrationでカラムの追加

Laravelのデータベース設計を更新したい

最近、Laravelで新規のWebアプリケーションを製作しております。
MySQLを選択してMigrationでデータベースの設計をやっており、データの挿入をしていましたが、
追加したいカラムが出てきました。

mysql> desc stadium_posts;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| stadium    | varchar(255)     | NO   |     | NULL    |                |
| latitude   | double           | NO   |     | NULL    |                |
| longitude  | double           | NO   |     | NULL    |                |
| league     | varchar(255)     | NO   |     | NULL    |                |
| address    | varchar(255)     | NO   |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
8 rows in set (0.03 sec)


$ php artisan tinker
>>> App\StadiumPost::all()->toArray();
=> [
     [
       "id" => 1,
       "stadium" => "阪神甲子園球場",
       "latitude" => 34.721394,
       "longitude" => 135.361594,
       "league" => "プロ野球",
       "address" => "兵庫県西宮市甲子園町1番82号",
       "created_at" => "2019-02-02 10:37:56",
       "updated_at" => "2019-02-02 10:45:26",
     ],
     [
       "id" => 2,
       "stadium" => "東京ドーム",
       "latitude" => 35.703667,
       "longitude" => 139.753393,
       "league" => "プロ野球",
       "address" => "東京都文京区後楽1丁目3-61",
       "created_at" => "2019-02-02 10:52:41",
       "updated_at" => "2019-02-02 10:52:41",
     ],
     [
       "id" => 3,
       "stadium" => "ナゴヤドーム",
       "latitude" => 35.170915,
       "longitude" => 136.881537,
       "league" => "プロ野球",
       "address" => "愛知県名古屋市東区大幸南1丁目1-1",
       "created_at" => "2019-02-02 11:05:36",
       "updated_at" => "2019-02-02 11:05:36",
     ],
     [
       "id" => 6,
       "stadium" => "明治神宮野球場",
       "latitude" => 35.674572,
       "longitude" => 139.717136,
       "league" => "プロ野球",
       "address" => "東京都新宿区霞ヶ丘町3番1号",
       "created_at" => "2019-02-02 11:09:29",
       "updated_at" => "2019-02-02 11:09:29",
     ],
     [
       "id" => 8,
       "stadium" => "横浜スタジアム",
       "latitude" => 35.443428,
       "longitude" => 139.6401,
       "league" => "プロ野球",
       "address" => "神奈川県横浜市中区横浜公園",
       "created_at" => "2019-02-02 11:11:30",
       "updated_at" => "2019-02-02 11:11:30",
     ],
     [
       "id" => 9,
       "stadium" => "MAZDA Zoom-Zoom スタジアム広島",
       "latitude" => 34.392938,
       "longitude" => 132.458942,
       "league" => "プロ野球",
       "address" => "広島県広島市中区本通8−24",
       "created_at" => "2019-02-02 11:14:15",
       "updated_at" => "2019-02-02 11:14:15",
     ],
   ]

今のデータベースのカラムに以下のことをやりたいと思います。

  • カラムにスタジアムのある国のcountryを追加

 Migrationファイルの作成・実行

参考にしたサイト
https://laraweb.net/knowledge/2251/

artisanコマンドでデータベース更新用のMigrationファイルを作成します

$ php artisan make:migration update_stadiumpost_table --table=StadiumPost
Created Migration: 2019_02_03_190732_update_stadiumpost_table

Migrationファイルを以下のように編集しました

2019_02_03_190732_update_stadiumpost_table.php
<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class UpdateStadiumpostTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('stadium_posts', function (Blueprint $table) {
            // countryカラム追加
            $table->string('country');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('stadium_posts', function (Blueprint $table) {
            //
        });
    }
}

php artisan migrateでマイグレーションが実行され、以下の通りカラムが追加されました。

mysql> desc stadium_posts;
+------------+------------------+------+-----+---------+----------------+
| Field      | Type             | Null | Key | Default | Extra          |
+------------+------------------+------+-----+---------+----------------+
| id         | int(10) unsigned | NO   | PRI | NULL    | auto_increment |
| stadium    | varchar(255)     | NO   |     | NULL    |                |
| latitude   | double           | NO   |     | NULL    |                |
| longitude  | double           | NO   |     | NULL    |                |
| league     | varchar(255)     | NO   |     | NULL    |                |
| address    | varchar(255)     | NO   |     | NULL    |                |
| created_at | timestamp        | YES  |     | NULL    |                |
| updated_at | timestamp        | YES  |     | NULL    |                |
| country    | varchar(255)     | NO   |     | NULL    |                |
+------------+------------------+------+-----+---------+----------------+
9 rows in set (0.01 sec)

$ php artisan tinker
>>> App\StadiumPost::all()->toArray();
=> [
     [
       "id" => 1,
       "stadium" => "阪神甲子園球場",
       "latitude" => "34.721394",
       "longitude" => "135.361594",
       "league" => "プロ野球",
       "address" => "兵庫県西宮市甲子園町1番82号",
       "created_at" => "2019-02-02 10:37:56",
       "updated_at" => "2019-02-02 10:45:26",
       "country" => "",
     ],
     [
       "id" => 2,
       "stadium" => "東京ドーム",
       "latitude" => "35.703667",
       "longitude" => "139.753393",
       "league" => "プロ野球",
       "address" => "東京都文京区後楽1丁目3-61",
       "created_at" => "2019-02-02 10:52:41",
       "updated_at" => "2019-02-02 10:52:41",
       "country" => "",
     ],
     [
       "id" => 3,
       "stadium" => "ナゴヤドーム",
       "latitude" => "35.170915",
       "longitude" => "136.881537",
       "league" => "プロ野球",
       "address" => "愛知県名古屋市東区大幸南1丁目1-1",
       "created_at" => "2019-02-02 11:05:36",
       "updated_at" => "2019-02-02 11:05:36",
       "country" => "",
     ],
     [
       "id" => 6,
       "stadium" => "明治神宮野球場",
       "latitude" => "35.674572",
       "longitude" => "139.717136",
       "league" => "プロ野球",
       "address" => "東京都新宿区霞ヶ丘町3番1号",
       "created_at" => "2019-02-02 11:09:29",
       "updated_at" => "2019-02-02 11:09:29",
       "country" => "",
     ],
     [
       "id" => 8,
       "stadium" => "横浜スタジアム",
       "latitude" => "35.443428",
       "longitude" => "139.6401",
       "league" => "プロ野球",
       "address" => "神奈川県横浜市中区横浜公園",
       "created_at" => "2019-02-02 11:11:30",
       "updated_at" => "2019-02-02 11:11:30",
       "country" => "",
     ],
     [
       "id" => 9,
       "stadium" => "MAZDA Zoom-Zoom スタジアム広島",
       "latitude" => "34.392938",
       "longitude" => "132.458942",
       "league" => "プロ野球",
       "address" => "広島県広島市中区本通8−24",
       "created_at" => "2019-02-02 11:14:15",
       "updated_at" => "2019-02-02 11:14:15",
       "country" => "",
     ],
   ]
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP progate学習コースⅠ

未来電子テクノロジーでインターンをしているnkn_021314です。

PHPの基礎をprogateで学んだので、大まかにアウトプット。

・PHPとは
PHPはお問い合わせフォームのようなものを作成することができる。
見る人の状況によって表示できる情報を変更できることが多くな特徴である。

・PHPを書く前に
PHPはHTMLの中に書くことが多い。
よってPHPを書く際は
<? php
?>
の中にプログラムする。

・出力
echo ●●;

・変数
変数はデータを格納するもの。
$●●のように標記する

・代入
=は等式ではなく代入を示す

・文字列の結合
.←これを使う
例 echo $x.$y;
みたいな感じ

・様々な文
if文、switch文、for文、foreach文、while文など様々な文がある。

・配列
変数が一つの箱であるとすると、配列は棚のイメージ
配列の棚の順番は01234・・・のように0から始まることに注意。

・戻り値
関数が計算した結果を伝える仕組み

以上が学習した内容である。

Rubyと似た部分が多かったので理解しやすかった。
progateを理解する際は紙にメモりながら取り組むと見直しが楽だった。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP Laravel ログイン実装

PHP Laravel ログイン実装

今回はサーバ側にも手を出そうと思い、PHPフレームワークのLaravelというのを使用して、ログイン機能を実装してみました。
※実に簡単でした。。。(Laravel便利ですね)

環境

Ubuntu 18.04.1(AWS)
PHP 7.2.14
Laravel 5.7
Mysql 5.7.25

前提

本記事ではPHP、Laravelのインストールは既に終わっている程で話を進めますので、もしまだインストールが終わっていない場合は別記事などで終わらせてください。

Laravelプロジェクトの作成

ターミナルで下記を打ち込みます。
laravel new loginProject

もしこれでできない場合は下記を試してください。
composer create-project --prefer-dist laravel/laravel blog

色々とファイルとディレクトリが作られますが、とりあえずはおいといてください。
(僕もあまり全貌を理解してはいません....)

Auth作成

ターミナルで下記を打ち込みます。
php artisan make:auth

これはauthというライブラリ?のようなものが自動的にログインに必要なもの(登録、ログイン、リマインダーなど)を作成してくれるコマンドになります。
違ってたらすいません。。。

php artisan migrate

DB設定

プロジェクト直下の.envというファイルを開いてください。
下記の[]内の部分を変更してください。

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=[your database name]
DB_USERNAME=[your mysql username(etc root)]
DB_PASSWORD=[your username's password]

SMTP設定

DB設定の中の.envというファイルで、下記の[]内の部分を変更してください。
今回はgmailを使用しました。

MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=465
MAIL_FROM_ADDRESS=[your gmail address]
MAIL_FROM_NAME=[your name]
MAIL_USERNAME=[your gmail address]
MAIL_PASSWORD=[your gmail password]
MAIL_ENCRYPTION=SSL

※GithubなどにPushする場合は、この.envファイルというのはPushしてはいけません。

サーバ起動

ターミナルで下記を打ち込みます。
php artisan serve

下記にアクセスして登録、ログイン、リマインダーが動いていれば成功です。
http://localhost:8000

AWSの場合

AWSなどでグローバルIPを使用している場合はリマインダーのパスワード再設定のリンクがひらけないかもしれません。
これはURLにlocalhostが代入されているからなので、.evnファイルを開いて下記の[]部分を変更しましょう。

APP_URL=[your ip address or DNS(etc http://gmail.com)]

以上です。
まだ始めたばっかでわからないことが多いので、もし間違っていたらご指定頂けると幸いです。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelウルトラ超入門 Mac環境構築(Vagrant+Virtualbox+Homestead+Composer)から入門アプリケーション、複数アプリケーションの管理(DB等)まで

書くに至った経緯

はじめまして!
ruby,Railsを一通り終えて(そんなに出来ない、、)次は案件多くて名前かっこいいPHPをやってみようと適当な理由で学習し、フレームワークは『今はLaravelだろ!!』という声もあり(これも理由はふわっとしてますww)
フレームワークはLaravelを用いてやってみようと思ったのですが、初心者なんで環境構築でも詰まるわ、複数管理するのはどうしたらいいの??次何からやったらいいか分かんない!!
って事でそこまでの最短と最初に作ってよかったなと思ったデモアプリまで書いていこうと思います。
やっぱりこれから何個もプロジェクト作れるようになるところまでが環境構築ですよね!
初心者の自分が困った箇所も色々書いていこうと思います。
対象としてはVagrant,Virtualboxで一回は環境構築した事あるよって人向けですが、初心者にも分かりやすく必要以上に丁寧に書こうと思うので温かい目で見てやってください

おまけ:Homesteadで複数のアプリケーションを動かす
参考:PHPフレームワークLaravel Webアプリケーション開発「現場で使えるプロのテクニック」
   初めてのLaravelチュートリアル
   https://paiza.hatenablog.com/entry/2018/02/16/paizacloud_laravel

前提

Vagrant
Virtualbox
Git
ここまでは記事も多いので頑張って来てください!!

手順

Homesteadのダウンロード

Homesteadの設定

Vagrantの起動

入門アプリケーション

おまけ

ざっくりこんな感じで進めていきます。
ではやっていきましょう!!

Homesteadのダウンロード

ホームディレクトリかデスクトップでも(おそらくどこでも大丈夫)いいので下記のコマンドで仮想環境のセットをダウンロードしましょう。

$ vagrant box add laravel/homestead

下みたいに仮想環境ソフトウェアを聞かれるのでvirtualboxを選択してください。

This box can work with multiple providers! The providers that it
can work with are listed below. Please review the list and choose
the provider you will be working with.

1) hyperv
2) virtualbox
3) vmware_desktop

Enter you choice: 2  ←この場合はvirtualboxが『2』なので2を選択

結構長いので辛抱強く待っててください。

box: Successfully added box .....(略) for 'virtualbox'!

上が出たら正常に終了してます。

ホームディレクトリに移動(「〜」←このディレクトリです)
$ cd

git cloneでダウンロード
$git clone https://github.com/laravel/homestead.git Homestead

これはサクッと終わります。

Homesteadの設定

Homesteadの初期化をしていきます。

Homesteadディレクトリに移動して
$ cd ~/Homestead

初期化
$ bash init.sh

ここからはVimの操作が入ってきます(説明するので分からない方は気にしないでください)

Homesteadディレクトリで
$ vi Homestead.yaml

すると

Homestead.yaml
---
  ip: "192.168.10.10"
  memory: 2048
  cpus: 1
  provider: virtualbox

  authorize: ~/.ssh/id_rsa.pub

  keys:
      - ~/.ssh/id_rsa

  folders:
      - map: ~/code
        to: /home/vagrant/code

  sites:
      - map: homestead.test
        to: /home/vagrant/code/public

  databases:
      - homestead

  # ports:
  #     - send: 50000
  #       to: 5000
  #     - send: 7777
  #       to: 777
  #       protocol: udp

  # blackfire:
  #     - id: foo
  #       token: bar
  #       client-id: foo
  #       client-token: bar

  # zray:
  #  If you've already freely registered Z-Ray, you can place the token here.
  #     - email: foo@bar.com
  #       token: foo
  #  Don't forget to ensure that you have 'zray: "true"' for your site.

上のようにデフォルトの状態になっていると思います
この

sites:
    - map: homestead.test
      to: /home/vagrant/code/public

の部分を

sites:
    - map: homestead.test
      to: /home/vagrant/code/sampleapp/public

に変えてください。(sampleappはこれから作るデモアプリの名前)

vimには特別な操作が必要なのでここではとりあえずファイルを開いたら『i』を押してください、そこからは方向キーを使って移動して上のように変更してください。
変更したら『esc』キーを押してください、その後、『:wq』を押してエンターキーを押してくださいそうしたら保存され、元の画面に戻るはずです。
vimの操作を習得したい方は他で練習してください、、
ちなみにvim使えるようになると開発速度も上がりますし、便利でおすすめです。

共有ディレクトリ、hostsの設定

上が上手くいったら、

ホームディレクトリに移動して
$ cd

codeというディレクトリを作ります。
$ mkdir code

そうしたら

etcディレクトリに移動して
$ cd /etc

管理者権限でhostsファイルを開きます。
$ sudo vi hosts

passwordを聞かれますがmacのパスワードでOKです。

##
  # Host Database
  #
  # localhost is used to configure the loopback interface
  # when the system is booting.  Do not change this entry.
  ##
  127.0.0.1 localhost
  255.255.255.255 broadcasthost
  ::1             localhost

こうなってると思うので一番下に上のvimの操作の通り

192.168.10.10 homestead.test

を追加してあげてください。

Vagrantの起動

ここまでくれば環境構築は後少しで終わりです。
頑張りましょう!!

Homesteadディレクトリに移動
$ cd ~/Homestead

Vagrantを起動
$ vagrant up

だけです!!笑

Laravelのデモアプリ

ではサンプルアプリを作って環境構築出来ているか確認しましょう。

Homesteadディレクトリで
$ vagrant ssh

ssh接続した後に
$ cd ~/code

laravelプロジェクトの作成
$ composer create-project laravel/laravel sampleapp --prefer-dist "5.5.*"

上の方法だとlaravelのバージョン指定が可能です。

しなくて大丈夫です。
$ laravel new sampleapp

このコマンドだと最新のバージョンで作成されます。
学習段階であるなら、適時バージョン指定して学習を進める事をお勧めします。(変なところで詰まるから)

これでプロジェクトも作成されたので

http://homestead.test

にアクセスしてみましょう

スクリーンショット 2019-02-03 17.09.07.png

この画面になれば環境構築は成功しています。
お疲れ様でした!!!

環境構築のみの方はここまでで問題ありません頑張ってください。(おまけは読むことをお勧めします、、)

ではデモアプリに入っていきましょう!!

デモアプリケーション

先ほど作成したsampleappを好みのエディタで開きましょう
ホームディレクトリのcodeの中にあるのでfinderを開いて画面左上の移動を押してそこからホームを選択して移動してcodeの中のsampleappを丸ごとエディタで開きましょう

スクリーンショット 2019-02-03 17.13.56.png

ディレクトリの説明等は他の記事で勉強してください。
今回は投稿、削除機能、一覧機能を実装するデモアプリです。

ではssh接続した状態で

ディレクトリに移動
$ cd ~/code/sampleapp
その後
$ php artisan make:model Task -m -c -r

このコマンドでマイグレーションファイル、コントローラ、モデルが作られます。便利ですね、

ではまず、マイグレーションファイルをいじってみましょう。

database/migrationsの中にあります。

function upの中を

2018_xx_xx_xxxxxxxx_create_tasks_table.php
public function up()
    {
        Schema::create('tasks', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->timestamps();
        });
    }

のようにnameカラムを足してください。これはrailsでも見慣れた光景ですね
その後はもちろんマイグレーションです
laravelではこのコマンドになります。

$ php artisan migrate

これでtasksテーブルが作られました。
念の為mysqlを確認しましょう。

$ mysql --host=localhost --user=homestead --password=secret homestead

mysqlに繋ぐコマンドなので頻発するので.bash_profileに入れてもいいかも知れませんね!

mysqlに入ったら
$ show tables;
$ desc tasks;

これでtasksテーブルがあるのを確認してください
ちなみにshow databases; で確認できるhomesteadをデータベースで使っています。
これはおまけで説明します。

ルーティング設定

laravelのルーティングはroutes/web.phpで管理しています。(多分、、)

web.phpを開いたら

web.php
Route::get('/', function(){return redirect('/tasks');});
Route::get('/tasks', 'TaskController@index');
Route::post('/tasks', 'TaskController@store');
Route::delete('/tasks/{id}', 'TaskController@destroy');

を追加します。
デフォルトの記述は消して下さい。

コントローラー

MVCのCに当たるコントローラーの設定です。
場所はapp/Http/Controllers/にあります。先ほど作成したTaskController.phpを開いて下さい。

TaskController.php
<?php

namespace App\Http\Controllers;

use App\Task;
use Illuminate\Http\Request;

class TaskController extends Controller
{
    public function index()
    {
        $tasks = Task::all();
        return view('tasks', ['tasks' => $tasks]);
    }

    public function store(Request $request)
    {
        $task = new Task;

        $task->name = request('name');
        $task->save();
        return redirect('/tasks');
    }

    public function destroy(Request $request, $id, Task $task)
    {
        $task = Task::find($id);
        $task->delete();
        return redirect('/tasks'); 
    }
}

中身をこのように変更して下さい。
他のcreate等のメソッドはそのままで大丈夫です。

use文がキモだったりします、、

ビューの作成

MVCのVに当たるものです。
viewはresources/views/の中にあります。ここに新たにlayout.blade.phpを作成して下さい。
.bladeはphpの記述をサッパリさせるものと覚えといて下さい。
これはrailsでいう application.html.erbです@yieldに他のビューが埋め込まれます。

layout.blade.php
<!DOCTYPE html>
<html>
    <head>
        <title>Task List</title>
        <!-- CSS And JavaScript -->
        <link rel="stylesheet" href="//fonts.googleapis.com/css?family=Roboto:300,300italic,700,700italic">
        <link rel="stylesheet" href="//cdn.rawgit.com/necolas/normalize.css/master/normalize.css">
        <link rel="stylesheet" href="//cdn.rawgit.com/milligram/milligram/master/dist/milligram.min.css">
    </head>
    <body>
        <div class="container">
            @yield('content')
        </div>
    </body>
</html>

の部分はMIlligramというある程度見た目を整えてくれるものを使用しています。
(見た目は今回はどうでもいいので、、)

後は一覧表示させるtasks.blade.phpをまたresources/views/の中に作成します。

tasks.blade.php
@extends('layout')

@section('content')
    <h1>Task List</h1>
    <form action="/tasks" method="POST" class="form-horizontal">
        {{ csrf_field() }}
        <!-- Task Name -->
        <div class="form-group">
            <label for="task" class="col-sm-3 control-label">Task</label>
            <div class="col-sm-6">
                <input type="text" name="name" id="task-name" class="form-control">
            </div>
        </div>

        <!-- Add Task Button -->
        <div class="form-group">
            <div class="col-sm-offset-3 col-sm-6">
                <button type="submit" class="btn btn-default">
                    <i class="fa fa-plus"></i> Add Task
                </button>
            </div>
        </div>
    </form>

    <!-- Current Tasks -->
    <h2>Current Tasks</h2>
    <table class="table table-striped task-table">
        <thead>
            <th>Task</th><th>&nbsp;</th>
        </thead>

        <tbody>
            @foreach ($tasks as $task)
                <tr>
                    <!-- Task Name -->
                    <td>
                        <div>{{ $task->name }}</div>
                    </td>
                    <td>
                        <form action="/tasks/{{ $task->id }}" method="POST">
                            {{ csrf_field() }}
                            {{ method_field('DELETE') }}                    
                            <button>Delete Task</button>
                        </form>
                    </td>
                </tr>
            @endforeach
        </tbody>
    </table>
@endsection

駆け足ですがこれでデモアプリケーションは完成しています。
これでhttp://homestead.test/tasks/ 
アクセスすると動きが見れます。

コードの詳しい説明は
参考にさせて頂いた
https://paiza.hatenablog.com/entry/2018/02/16/paizacloud_laravel
に丁寧に分かりやすく書かれてあるので読んで置いてください(少し内容をlocal環境に合わせるために変更しています。)

お疲れ様でした!!!
後は作りたいものがある方はそれを実現させれるように頑張って、とりあえず勉強したい方はlaravel 入門などでググって色々作って見る事をおすすします!

おまけ(複数のアプリケーションを管理する)

このままではこのデモアプリケーションしか動作しません
それでは困るので2つ目以降の時の変更点を紹介します。(ここで自分は詰まりました、、)
実際にsampleapp_twoというプロジェクトを作ると想定して説明します。

ssh接続した状態で先ほどのようにプロジェクトを作成します。
ディレクトリは~/codeで実行して下さい。

$ composer create-project laravel/laravel sampleapp_two --prefer-dist "5.5.*"

そうしたらssh接続を抜けて(必要あるかは?)~/Homesteadに移動してください

ssh接続を抜ける
$ exit

移動
$ cd ~/Homestead

で先ほど開いたHomestead.yamlをviで編集します。

$ vi Homestead.yaml
Homestead.yaml
sites:
    - map: homestead.test
      to: /home/vagrant/code/sampleapp/public

    - map: sampleapptwo.app     ←追加
      to: /home/vagrant/code/sampleapp_two/public     ←追加

この2行を追加してください(インデントは合わせてください)
さらに

Homestead.yaml
databases:
    - homestead
    - app   ←追加(データーベース名なんでもいい)

を追加して

etcに移動
$ cd /etc

hostsファイルを開く
$ sudo vi hosts

一番下に

192.168.10.10 sampleapptwo.app

を追加してください。

sampleapp_twoに移動します
$ cd ~/code/sampleapp_two

.envファイルを開きます。
$ vi .env

そしてDB_DATABASEを以下のように変更してください。
DB_USERNAMEはそのままで大丈夫です。(ここでハマりました)

DB_DATABASE=app

これで設定はOKです

Homesteadに移動
$ cd ~/Homestead

vagrant停止
$ vagrant halt

vagrant起動 
$ vagrant up --provision

これで
http://sampleapptwo.app
にアクセスすると二つ目のアプリケーションにアクセスできます。

ちなみに

ssh接続した後
$ mysql --host=localhost --user=homestead --password=secret homestead

$ show databases;

これでappデータベースが作成されているかと思います。

3つ目以降も同じ方法で大丈夫かと思います!

最後に

ここまでお付き合いしていただきありがとうございます。
自分自身もコマンド一つ一つの説明ができる程ではありませんが書かせてもらいました。
知識がある方には無駄な記述が多いかと思いますがこれで初心者の方が早くアプリケーション開発に進んでくれればと思います。
うる覚えなのでもしかしたら抜けているところがあるかも知れませんが、この後進めない!って箇所があればコメント下されば適時対応します。

アプリケーション開発の勉強したいのに環境構築で詰まるとやる気無くなっちゃいますよね、、
自分自身もこれからゴリゴリlaravelで開発していきたいと思います!!

お疲れ様でした!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

php-master-changes 2019-02-02

今日は session_cache_expire() の引数型指定の修正、テストの修正があった!

2019-02-02

nikic: Make session_cache_expire() arg an integer

nikic: Try to fix serialization_miscTypes_001.phpt

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPを用いた入力フォームの「ファイルアップロードサイズ制限」にまつわる覚書

初Qiita...ども...
俺みたいなエンジニア三年目間近でこんな戒め記事書く人間、他にいますかっていねーか、はは

backlogで来ていたこの前のクライアントの依頼
「フォームにサイズ制限を超えた添付をしてきた奴はエラーメッセージ出したフォームに戻してほしい」とか
ま、それが普通ですわな

かたや俺は電子の砂漠で技術記事みて、電話返すんすわ。「割とすぐいけると思います」
It's a death flag.
猪突猛進? それ、褒め言葉ね。

適当に添付したファイルのサイズ: 2GB
var_dumpで見たPOSTデータの中身: array(0) { }

大容量添付送ったらPOSTが空になって他の入力値も消失っすよ(笑)
(この上"どの画面に飛ぶか"も$_POSTに持たせる処理がありフォームに戻すことすらできない)
あーあ、未熟エンジニアの辛いとこね。これ。


アップロード処理にまつわるサイズ制限

人間、食べられる量に限界があるように
Webサーバも想定した程よいサイズのリクエストしか食べることができない。
よほど専用に設計されたサービスでもない限り
100GBの添付が入ったPOSTデータ投げつけられて正常に処理できるものは少ないだろう。

このため、Webサーバ側で「明らかに胃袋のサイズを超えるリクエストは突き返してしまおう」と設定がされることがある

Apache

デフォルトでは特に制限無くpostデータを投げることができるApacheだが
body長を制限することができるディレクティブが存在する
https://httpd.apache.org/docs/2.2/ja/mod/core.html#limitrequestbody

このディレクティブが設定されている場合、Webサーバはbody長とこのディレクティブの挿入値を比較する
もし流れて来たリクエストが大きすぎる場合は、アプリケーションに引き渡すことなく413(Request Entity Too Large)画面へ弾いてしまうことで、大量に処理時間を要し、サービスに負荷をかけることを防ぐことができる
スクリーンショット 2019-02-03 17.20.00.png

Nginx

Apacheに対し、こちらはデフォルト値があり、「1MB」とかなりタイトな制限が適用されている。
https://qiita.com/n-oshiro/items/4816ad71b90a9967fa18
こちらもApacheと同様、リクエスト到着時点でサイズ長の比較を行い
リクエストが大きすぎた場合は、413画面に遷移させアプリケーションに処理を引き渡さず棄却する
スクリーンショット 2019-02-03 17.23.04.png

php.iniが持つサイズ制限

Webサーバの制限とは別に、php.iniもまた以下のようなサイズ制限のプロパティを持っている

  • post_max_size
post_max_size integer
POSTデータに許可される最大サイズを設定します。この設定は、ファ イルアップロードにも影響します。
大きなファイルをアップロード するには、この値を upload_max_filesize より大きく設定する必要があります。 
一般的に memory_limit は、 post_max_sizeよりも大きく する必要があります。 
integerを使用する際、 その値はバイト単位で測られます。 
この FAQ に記載された 短縮表記を使用することも可能です。 
POSTデータの大きさが、post_max_sizeより大きい場合、 $_POST と $_FILES superglobals は
空になります。この事象は、いくつかの方法で検出することができます。 
例えば、$_GET 変数をデータを <form action="edit.php?processed=1">のように 
処理するスクリプトに渡し、 $_GET['processed'] が設定されているかどうかを 確認する方法があります。
  • upload_max_filesize
upload_max_filesize integer
アップロードされるファイルの最大サイズ。

(http://php.net/manual/ja/ini.core.php  より抜粋)

まず、冒頭でも触れ、php.net中のpost_max_sizeにも記載のあった

POSTデータの大きさが、post_max_sizeより大きい場合、 $_POST と $_FILES superglobals は
空になります。この事象は、いくつかの方法で検出することができます。 

の文言。
この動きを実際に見てみよう。
ファイルをアップロードする為だけに生まれた適当なHTMLを作る

test.html
<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>サンプルフォーム</title>
</head>
<body>
  <form method="post" action="res.php" enctype="multipart/form-data">
    ファイル:<input type="file" name="up_file"><br>
    テキスト1:<input type=“text” name =“text1“><br/>
    テキスト2:<input type=“text” name =“text2“><br/>
    <input type="submit" value="upload">
  </form>
</body>
</html>


ここで流したpostデータをこのPHPで受ける

res.php
<?php
  var_dump($_POST);
  var_dump($_FILES);
?>

仮に、2つのパラメータの制限が下記の通りだったとして

$ php -i | grep 'post_max_size'
post_max_size => 8M => 8M
$ php -i | grep 'upload_max_filesize'
upload_max_filesize => 2M => 2M

両方の制限内に収まっていた場合

スクリーンショット 2019-02-03 15.40.25.png

array(2) { ["“text1“"]=> string(4) "hoge" ["“text2“"]=> string(4) "huga" } 
array(1) { ["up_file"]=> array(5) { ["name"]=> string(12) "test.txt.zip"
 ["type"]=> string(15) "application/zip" ["tmp_name"]=> string(26) 
"/private/var/tmp/php62WqN2" ["error"]=> int(0) ["size"]=> int(142) } }

当然ながら、パラメータが出現する。

では、制限を超過させてみた場合はどうだろう

スクリーンショット 2019-02-03 15.49.21.png

array(0) { } array(0) { }

なんということでしょう。
匠の技によって、本当に他のパラメータもろともPOSTデータが死滅してしまいました。

翻ってupload_max_filesize。
こちらは超過した場合の記述がないが、一体どうなるのだろうか?
upload_max_filesize <= ファイルサイズ <= post_max_size
となるファイルを添付してsubmitしてみよう。

array(2) { ["“text1“"]=> string(4) "hoge" ["“text2“"]=> string(4) "huga" } 
array(1) { ["up_file"]=> array(5) { ["name"]=> string(15) "Medium.zip" 
["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(1) ["size"]
=>int(0) } }

一見正常な場合と変哲がないように見える。
が、よく見ると

["type"]=> string(0) ""
["error"]=> int(1)
["size"]=>int(0)

と、挿入されるパラメータに変化が見られる。
要はサイズが大きいのでエラーが発生し、正しくパラメータが入りませんでしたよ。ということだ。
挿入されているエラーコードは、いくつかパターンがある
http://php.net/manual/ja/features.file-upload.errors.php

成功は0で、この「1」は

UPLOAD_ERR_INI_SIZE
値: 1; アップロードされたファイルは、php.ini の upload_max_filesize ディレクティブの値を超えています。

という意味合いになる。

結局どうエラー処理すればいいんじゃ

実装前提や要件によるところが大きい為、あくまで一例として提示
でも

こういう制限は開発者ツールで簡単に騙せるからやるなよ!絶対だぞ!

<input type="hidden" name="MAX_FILE_SIZE" value="1000">
  • オリジナル
    スクリーンショット 2019-02-03 16.12.59.png

  • 改竄後
    スクリーンショット 2019-02-03 16.13.12.png

  • 簡単に欺けました(本来はエラーコード2が挿入される)
    スクリーンショット 2019-02-03 16.13.21.png

upload_max_filesizeを超過するが、post_max_sizeには収まる場合

FILES変数に詳細が記載されるので、errorの値によって処理をスイッチさせるようにしよう

post_max_sizeを超過する場合

そもそもFILESどころかPOSTすら死滅しているので、できるだけ前段で例外処理を行う必要がある。
FILES変数からサイズを受け取ることはできないが、SERVER変数にパケット長が受け渡されるので
ここをpost_max_sizeで比べるのが基本的な方法になるだろう

<?php
  if ($_SERVER['CONTENT_LENGTH'] >= return_bytes(ini_get('post_max_size'))) {
    print("over!");
  } else {
    print("not over");
  }

  function return_bytes($val) {
    $val = trim($val);
    $last = strtolower($val[strlen($val)-1]);
    switch($last) {
        case 'g':
            $val *= 1024;
        case 'm':
            $val *= 1024;
        case 'k':
            $val *= 1024;
    }
    return $val;
}
?>

別途エラー処理を行っていて、入力値が全て入れられていないと
確認画面に飛べない。といったような実装がある場合単に

if (empty($_POST)) {
...
}

という検知を行ってもいいかもしれない。

戒め

(初学者向けの教材等を除いて)自身の相対しているプロダクトと何もかも同じ背景・前提を持って
何かのエラーに悩んでいる人間はほぼ存在しない。
「あれ?$_FILESだけでいけるんじゃね?」みたいな時こそ一歩下がろう
何かの要件を見積もる際は、自身の思いつく範囲の設定・プロパティはもちろん
その関連事項もきちんと調べ上げよう
プロジェクトが走って死ぬのは自分だ

リスペクト

端的ながら流れが掴みやすい記事でした。ありがとうございます。

ファイルのPOSTに立ちはだかる壁(PHP編)
https://qiita.com/jkr_2255/items/188200cafb869ca9c622

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP ちょいとした応用

PHPだけで少し動的に書いてみました。

例えば簡単な入力場面を作るとして、このような項目がある場合。
Screenshot from Gyazo
これだと項目が増えた場合だといちいち加える感じになります。
なのでマスターデータ風なのを作って。。。
Screenshot from Gyazo
inputは、、、
Screenshot from Gyazo
Screenshot from Gyazo
confirmで、、、
Screenshot from Gyazo

分岐や配列、関数の勉強になりました。

分岐と配列、カプセル化は需要だよと聞いているのでこれからも頑張ります!( ∵)
※array_pushって遅いからあんまり使わない方がいいんだっけ??

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHP3 オブジェクト指向をさらに詳しく

未来電子テクノロジーでインターンをしている高見です。
Progateを使って勉強中で、PHPのオブジェクト指向をまとめます。

クラスプロパティ

何かクラス全体で処理する必要があるもの(exインスタンスの数など)のために、
インスタンスではなくクラスそのものにプロパティを付ける。
staticを付けるとクラスプロパティ

// ex)インスタンスが何個あるか。
class University{

  private static $count = 0;   // =0は初期値
  public function__construct(){
    self::$count++;     //インスタンスが作られるたびにクラス自身のプロパティ$countを+1
  }                   //インスタンスの数と$countが一致する。
  public static function getCount(){
    return self::$count ;    //ゲッター
  }
}
$TokyoUniv = new University('東京大学');
$OsakaUniv = new university('大阪大学');

継承

プロパティ、メソッドを他のクラスに引き継ぐ。
ex)
全国の大学

西日本、東日本。
で分けようと思うが、正直「全国の大学」に共通なプロパティとメソッドをもとに「地域」追加すればいいから継承しよう。

class EastUniversity extends University     //書き方。
  private $area;  //子クラスには独自プロパティを追加できる。
  public function getType(){
    return $this->area;
  }
  public function setType($type){
    $this->type = $type;
  }
}


オーバーライド
//親クラスと同じ名前のメソッドを小クラスで使うと、上書きされる。
//親クラスと同じ名前のメソッドを使いたいとき時(__constructなど)は、
parent::__construct(){
}
parent::を使う


子クラスが親クラスのプロパティを操作したいとき

private      クラスの中
protected    クラスの中/子クラスの中                           で操作可能範囲
public       クラスの中/子クラスの中/外部からも

クラス条件

「インスタンスが○○のクラスであるとき」は

if($TokyoUniv instanceof EastUniv){        //EastUnivクラスにいるならば(true or false)
  echo $TokyoUniv.'は西日本の大学です。';    //今回はfalseなので何も起こらない。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

CakePHPをインストール

Cakephpを使う際にインストールするものなどの設定を忘れないように簡単にメモ。

Composerをインストール

WINDOWS10の場合 ctrl + r でコマンドプロンプトを起動

下記のコードを入力しcomposerをインストール。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

composerのDLページ
https://getcomposer.org/download/

プロジェクトを作る

まずコマンドプロンプトでデスクトップに移動

cd desktop

その後、書きを入力。プロジェクト名は任意。

php composer.phar create-project --prefer-dist cakephp/app[プロジェクト名]

エラーが出た場合はphp.iniを修正

;を削除。記述がない場合は記述すること。

;extension=php_intl.dll
↓
extension=php_intl.dll

以上。随時追記していく予定。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む