カテゴリー
SugiBlog Webエンジニアのためのお役立ちTips

Docker + Laravel9 開発環境構築

Dockerを使ってLaravel9の開発環境を構築してみたいと思います。
XAMPPやレンタルサーバーを使うよりお手軽に出来るので是非試してみてください。

OS等の環境は以下の通りです。

OS: Windows10
Docker Desktop: v4.14.1
Visual Studio Code: v1.74.0

Dockerで環境構築

予め必要なファイル等を準備します。
Laravelのプロジェクト名は「laravel-app」と仮定します。

docker/app/000-default.conf
<VirtualHost *:80>
       ServerAdmin webmaster@localhost
       DocumentRoot /var/www/html/laravel-app/public
       ErrorLog ${APACHE_LOG_DIR}/error.log
       CustomLog ${APACHE_LOG_DIR}/access.log combined
       <Directory /var/www/html/laravel-app/public>
           AllowOverride All
       </Directory>
</VirtualHost>
docker/app/Dockerfile
# dockerイメージの選択
# 予めPHPとApacheがインストールされているイメージをDocker Hubからダウンロード
FROM php:8.0-apache

# 設定ファイルをdockerコンテナ内のPHP、Apacheに読み込ませる
# ADD:ローカルのファイルをDockerコンテナ内にコピーする
ADD php.ini /usr/local/etc/php/
ADD 000-default.conf /etc/apache2/sites-enabled/

# Composerのインストール
# RUN:コンテナ内でコマンド実行する
RUN cd /usr/bin && curl -s http://getcomposer.org/installer | php && ln -s /usr/bin/composer.phar /usr/bin/composer

# Node.jsをインストール
RUN curl -sL https://deb.nodesource.com/setup_16.x | bash -
RUN apt-get install -y nodejs

# ミドルウェアのインストール
RUN apt-get update \
&& apt-get install -y \
git \
zip \
unzip \
vim \
libpng-dev \
libpq-dev \
&& docker-php-ext-install pdo_mysql

# Laravelで必要になるmodRewriteを有効化する
RUN mv /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled
RUN /bin/sh -c a2enmod rewrite

続きを読む…»

3,480 views

Docker環境構築初期の落とし穴 localhost/tutorial

Dockerで作成した環境で開発を始めようとしたときに少しハマってしまったので原因と解決法を書いておきたいと思います。
環境は次の通りです。

Windows10 Home
Docker Desktop v4.14.1

大抵の場合、Dockerをインストールして最初にやってみるコマンドは以下だと思います。

docker run -d -p 80:80 docker/getting-started

このコマンドを実行してコンテナが作成され、http://localhostにアクセスするとGetting Started画面が表示されます。
ここがポイントなのですが、http://localhostにアクセスするとhttp://localhost/tutorialにリダイレクトされます。
このリダイレクトが曲者で、キャッシュに残ってしまうのです。

Dockerの導入が終わったので、いざ開発を始めた際に、一通り環境構築が終わった後、http://localhostにアクセスして出来ているか確認しますが、キャッシュが残っていることが原因でhttp://localhost/tutorialにリダイレクトされてしまいます。
表示したいのはhttp://localhostなのに・・・。

Windowsのhostsファイルが原因なのかと思いましたがどうも違うよう。
結局、原因はブラウザのキャッシュでした。

キャッシュをクリアするとリダイレクトされなくなりました。

1,178 views

指定した文字列が最初に出現する位置を調べるLOCATE関数

LOCATE関数を使うと指定した文字列が最初に出現する位置を調べることができます。

【書式】
LOCATE(substr, str)
LOCATE(substr, str, pos)

【引数】
substr:検索文字列
str:検索対象文字列
pos:オフセット

posは何文字目以降を検索するかを数値で指定します。

例)

mysql> SELECT LOCATE('bar', 'foobarbar');
        -> 4
mysql> SELECT LOCATE('xbar', 'foobar');
        -> 0
mysql> SELECT LOCATE('bar', 'foobarbar', 5);
        -> 7

INSTR関数も同様の動作をしますが、引数の順序が逆なのと、第3引数がないのでご注意ください。

mysql> SELECT INSTR('foobarbar', 'bar');
        -> 4
mysql> SELECT INSTR('xbar', 'foobar');
        -> 0
2,364 views

MySQL Safe Updatesモード

MySQLのSafe UpdatesモードがONのとき、UPDATEやDELETEを実行しようとすると以下のような警告が出てエラーになることがあります。

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect.

これはUPDATEやDELETEでWHERE句を付けなかったり、WHERE句でキーとなるカラムに条件指定をしなかったときに、間違って大量のデータを更新・削除してしまうことを防ぐための機能が働いているためです。

この機能は非常に有り難いものではあるんですが、開発をしているとどうしてもそういった処理をしたい場合があると思います。
そんなときは一時的にSafe UpdatesモードをOFFにして作業しましょう。

Safe UpdatesモードをOFFにするには以下のコードを実行します。

SET SQL_SAFE_UPDATES = 0;

処理が終わったら、必ず元に戻しましょう。

SET SQL_SAFE_UPDATES = 1;
1,288 views

MySQLのチューニング(クエリ実行速度の改善)

MySQLのクエリ実行速度が遅いので調査・改善する機会がありましたので、それについて書いておきたいと思います。

チェックポイントは以下の通りです。

  • 適切なインデックスが貼られているか確認
  • EXPLAINで実際に使用されたインデックスの確認

適切なインデックスが貼られているか確認

まずは適切なインデックスが貼られているかを確認します。
ここをチェックしないと始まらないのでしっかりと確認します。
適切なインデックスが貼られていない場合は追加します。

EXPLAINで実際に使用されたインデックスの確認

インデックスを追加して、それでも実行速度に改善が見られない場合は、そのインデックスが実際に使われているかを調べます。
SQL文の前にEXPLAINを付加して実行します。

EXPLAINは、クエリー実行計画(MySQLがクエリーをどのように実行するかの説明)を取得するために使用されます。

EXPLAIN SELECT ...

表示された結果の内容を抜粋してご説明します。

possible_keys

利用可能なインデックスの一覧(候補)
続きを読む…»

1,050 views