色合い的にそろそろ赤が欲しかったので、Laravel やります。Ruby でもよかったのですが、メンタル的に Laravel でした。

前提

Docker がインストールされていること

索引

  • PHP 開発の問題点
  • セキュリティの問題点
  • メンテナンスの問題点
  • 拡張性の問題点
  • フレームワークの導入
  • Laravel の特徴
  • 公式ドキュメント
  • Docker コンテナの起動
  • 各種パッケージのインストール
  • Laravel アプリケーション作成

PHP 開発の問題点

C 言語や、Java などの開発に携わっている人は、それなりにプログラムの経験を積んだ人が多いことでしょう。が、PHP などのスクリプト言語は、誰でも手軽に扱うことができるため、それほどプログラミングの経験のない人が自己流にプログラムを書いている、ということが多い様に思います。

もちろん、この「未経験でもプログラミングできる」という手軽さが、PHP をここまで普及させることになった大きな要因でもあるのですが、しかしいつまでも「あまり経験がないまま、自己流の開発をしている」という状況を放っておく訳にはいきません。なぜなら、こうした自己流の開発は、いずれ様々な問題を引き起こすことになりかねないからです。

セキュリティの問題

自己流のプログラミングの最大の問題点は、「セキュリティの甘さ」です。本格手にプログラミンの経験を積んだことがないと、セキュリティに関する認識がどうしても甘くなります。単純な静的 HTML だけのページならまだしも、データベースなどの情報をもとに動的に Web を生成する様なサイトになると、外部からの攻撃への対策を考えなければいけません。そうしたことをすべて自分で調べて解決していくのは、かなり難しいことです。

メンテナンスの問題

自己流に書いたソースコードというのは、その時はいいのですが、しばらく経ってから読み返すと、理解できない様に感じられることが多々あります。その時その時で思いついたやり方で書いている、という人が大半でしょうから、コーディングルールやデザインパターンなどのあまり考えずに書いているはずです。

何より困るのが、他人への引継ぎができない点です。何らかの理由でメンテナンスできなくなり、他の品減にメンテナンスを移行することになると、メンテナンスを任された人間はソースコードを見てかなり困惑するでしょう。

拡張性の問題

自分一人で考えて作ったものというのは、最初から拡張性や汎用性などを考えて設計することはあまりありません。何しろ、自分しかプログラミングする人間はいないのですから、自分さえわかっていればいいとつい思っていしまいます。

フレームワークの導入

こうした問題の多くは、「きちんとしたシステム設計」がなされていなければ回避できます。とはいえ、プログラミング経験が豊富でない人でない限り、この種の設計がすぐできるわけではありません。最初からセキュリティ、メンテナンス性、拡張性といったものを考えて設計されたシステム、それに基づいてプログラムを作成していけば、誰でも堅牢でわかりやすいプログラムを書くこができそうです。

Laravel の特徴

Laravel は、いわゆる「MVC フレームワーク」と呼ばれています。アプリケーションを Model-View-Controller の各機能に分けて整理し、これらのパーツを作ることで開発を行います。

MVC は、アプリケーションフレームワークで広く使われているアーキテクチャです。フレームワークを選ぶなら、MVC に準拠したものを選ぶべきです。

低い学習コスト

Laravel の最大の特徴は、その「学習コスト」にあります。Laravel は非常に多くのコードがわかりやすく、習得のために多くの時間と労力を必要としません。非常に多くの機能を持っていますが、それらの実装は非常に容易で、簡単なコードで各種機能を利用できる様になります。また簡単だけではなく、例えば、ユニットテストなどに多くの機能を用意するなど、高品質のアプリケーションを作るための機能も備わっています。

Docker コンテナの起動

任意のローカルディレクトリに移動します。ホストマシン側で Laravel アプリケーションの構築を行っていくので、Docker コンテナに任意のディレクトリをバインドさせる必要があります。

$ cd laravelapp/

Docker コンテナを作っていきます。コンテナにバインドさせるパスはフルパスでなければいけない点に注意してください。cd でバインド先に移動した場合は pwd で構いません。

$ docker container run -d --privileged --name laravelapp -p 4080:8000 --mount type=bind,source="$(pwd)",target=/home centos:8 /sbin/init
$ docker container run -d --privileged --name <コンテナの名前> -p <ホストマシンのポート>:<コンテナ内のwebサーバーのポート番号> --mount type=bind,source="<ホストマシンのフルパス>",target=<コンテナのパス> centos:8 /sbin/init

上はコマンドを一般化して記述しています。本記事は、上の例のコマンドよりコンテナを起動しています。

CentOS8 で起動したコンテナを作成できたら、そのコンテナに対して、bash を実行します。docker コンテナの作成時、-h ホスト名オプションを付与した場合、そのホスト名で bash が立ち上がります.

$ docker container exec -it laravelapp bash
$ docker container exec -it <コンテナの名前> bash

<ホスト名> / #

CentOS 8 のパッケージを更新します。

# dnf update -y

Laravel のアプリケーションをインストールするためのパッケージをインストールします。

dnf install php php-json php-cli php-xml php-pecl-zip php-pdo php-mysqlnd php-mbstring php-bcmath nodejs sqlite -y

Composer をインストールしてパスを通します。

# curl -sS https://getcomposer.org/installer | php
# mv composer.phar /usr/local/bin/composer

インストールが正しく完了したか確認する為、composer と入力てみましょう。

Composer のインストールが確認できたら、任意のディレクトリに移動した後、Composer より Laravel アプリケーションを作成します。バージョンは、5.6 です。

# composer
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
# cd /home
# composer create-project --prefer-dist "laravel/laravel=5.6" laravelapp

Laravel アプリケーションを作成したときに設定した名前でディレクトリができているので、そのディレクトリに移動します。カレントディレクトリに、composer.json があるのを確認した後、オートローダーを作成します。

# cd laravelapp/
# ls
app	 bootstrap	composer.lock  database      phpunit.xml  readme.md  routes	 storage  vendor
artisan  composer.json	config	       package.json  public	  resources  server.php  tests	  webpack.mix.js

# composer install

インストールが完了したら、以下のコマンドで、Web サーバーを起動してみます。コンテナの中では、Laravel で用意されている、artisan serve コマンドは使用しませんので注意してください。

php -S 0.0.0.0:8000 -t public

Web サーバーを起動したら、web ブラウザで、http://localhost:4080/ にアクセスします。下の様にページが表示されれば Laravel アプリケーションの作成が完了しました。

次回

  • ルーティング
  • コントローラー

林 裕大Hayashi Yuto
麻雀 / コーディング / 東方 / V-Tuber / 書道 /
  • CentOS
  • AmazonWebServices
  • SQLite
  • Docker
  • Python
  • Ruby
  • PHP
  • Laravel
  • WordPress
  • Nodejs
  • JavaScript
  • Sass
  • HTML5
  • Bootstrap
  • adobe Illustrator
  • adobe Photoshop
お問い合わせ

大変申し訳ありませんが、現在お問い合わせフォームは機能しておりません。お手数ですが、お問い合わせの際は、下記アドレスまでよろしくお願いいたします。

h3yukomah1y1k1m@gmail.com