Laravelで Oracleに接続する環境を構築する

2022年7月9日土曜日

Laravel PHP

t f B! P L

enter image description here

Laravel + Dockerで Oracle Databaseに接続する方法を紹介します。

スポンサーリンク

前提

今回紹介する記事では、以下の環境・バージョンを使用して検証しています。

  • PHP 8.0
  • Laravel 9
  • Oracle Instant Client 12.1
  • Docker

※ Oracle Database本体の用意はしません。(すでに別のサーバーにある前提)

Dockerfile

Oracle Instant Client をダウンロードする

まず、Oracle公式から、Linux用の Instant Clientをダウンロードする。

ダウンロードするのは「instantclient-basic-linux.x64-12.1.0.2.0.zip」と「instantclient-sdk-linux.x64-12.1.0.2.0.zip」の2つのファイルである。

enter image description here

ダウンロードしたファイルは、↓で作る Dockerfile と同じディレクトリに置いておくこと。

Dockerfileの作成

PHPコンテナ用の Dockerファイルを作成する。 内容は次のとおり。

FROM php:8.0-fpm
COPY php.ini /usr/local/etc/php/

ENV LD_LIBRARY_PATH /usr/local/instantclient/
ENV TNS_ADMIN /usr/local/instantclient/

COPY instantclient-basic-linux.x64-12.1.0.2.0.zip /tmp
COPY instantclient-sdk-linux.x64-12.1.0.2.0.zip /tmp

RUN apt-get update \
  && apt-get install -y git openssh-client zlib1g-dev mariadb-client vim libzip-dev libpq-dev libonig-dev libpng-dev libjpeg-dev zip unzip \
  && docker-php-ext-configure gd --with-jpeg \
  && docker-php-ext-install -j$(nproc) gd \
  && docker-php-ext-install zip pdo_pgsql mbstring bcmath

#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer

#Oracle Client
RUN apt-get install -y libaio1 wget && \
    unzip /tmp/instantclient-basic-linux.x64-12.1.0.2.0.zip -d /usr/local/ && \
    unzip /tmp/instantclient-sdk-linux.x64-12.1.0.2.0.zip -d /usr/local/ && \
    ln -s /usr/local/instantclient_12_1 /usr/local/instantclient && \
    ln -s /usr/local/instantclient_12_1/libclntsh.so.12.1 /usr/local/instantclient/libclntsh.so && \
    export LD_LIBRARY_PATH=/usr/local/instantclient && \
    docker-php-ext-configure oci8 --with-oci8=instantclient,/usr/local/instantclient && \
	docker-php-ext-install oci8 && \ 
	docker-php-ext-configure pdo_oci --with-pdo-oci=instantclient,/usr/local/instantclient,12.1 && \
	docker-php-ext-install pdo_oci && \
    rm -rf /usr/local/*.zip

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin

#WORKDIR /var/www
WORKDIR /workspace

RUN composer global require "laravel/installer"

ポイントは、Dockerfile の中でダウンロードした Oracle Instant Clientを解凍し、コンテナイメージの /usr/local/ の下にインストールしている箇所だろう。

スポンサーリンク

「Laravel-oci8」のインストール

Oracleに接続するために必要な「Laravel-OCI8」をインストールする。「Laravel-OCI8」は、Laravel用のOracleデータベースドライバである。

composer.jsonrequire に次の内容を足す。

    "require": {
        "yajra/laravel-oci8": "^9"
    },

追加したら、次のコマンドでインストール。

composer update

config/app.php

config/app.phpproviders に、Oracle接続用のプロバイダを追加する。

'providers' => [
    Yajra\Oci8\Oci8ServiceProvider::class,
],

config/oracle.phpの作成

次のコマンドを実行して、config/oracle.php を作成する。

php artisan vendor:publish --tag=oracle

.envに接続先を設定する

.env を編集して、DB接続先の設定を行う。

DB_CONNECTION=oracle
DB_HOST=ホスト名
DB_PORT=1521
DB_DATABASE=データベース名(サービス名)
DB_USERNAME=ユーザ名
DB_PASSWORD=パスワード

ここまでの手順で、Laravelから Oracleに接続する設定は完了である。

適当なSQLを実行して、正常に接続できるか試してみよう!

$results = DB::select("select * from EMP");

スポンサーリンク

まとめ

Laravelで Oracle Databaseに接続する方法について解説してきました。

PostgreSQLや MySQLであれば、デフォルトでドライバが組み込まれていますが、Oracleの場合は、この記事で紹介したように最初にドライバのセットアップをする必要があります。

スポンサーリンク
スポンサーリンク

このブログを検索

Profile

自分の写真
Webアプリエンジニア。 日々新しい技術を追い求めてブログでアウトプットしています。
プロフィール画像は、猫村ゆゆこ様に書いてもらいました。

仕事募集もしていたり、していなかったり。

QooQ