LaravelでIBM iに接続（１）【環境構築】

Laravelは、データベース処理を自動化する仕組みが含まれているPHPフレームワークのひとつです。

Laravelの拡張パッケージである[DB2 for IBM iSeries Laravel Driver](https://github.com/BWICompanies/db2-driver)をインストールすることで、Laravelのデータベース機能をIBM iのDB2環境でも最大限に活用できるようになります。

今回は、[DB2 for IBM iSeries Laravel Driver](https://github.com/BWICompanies/db2-driver)のインストール方法など、環境構築に関する手順をご紹介します。

## 必要なもの

* PHP の PDO_ODBC拡張機能
* [IBM i Access ODBC Driver](https://ibmi-oss-docs.readthedocs.io/en/latest/odbc/installation.html)
* PHP 8.1以上

## 検証環境

* PC環境：Windows10 日本語
* ODBCドライバー：ACS 1.1.9.5 Windows用ドライバー
* PHP：PHP 8.1 Windows版
* laravel/framework：10.10
* bwicompanies/db2-driver：1.3

## インストール方法

[composer](https://getcomposer.org/)を使用してパッケージをインストールします。
以下のコマンドを実行してください。

`composer require bwicompanies/db2-driver`

## 接続先の追加

「config/database.php」ファイルに接続先を追加します。

各設定は、開発環境に合わせて適宜変更してください。
**ただし、'driver'オプションは必ず'db2'にしてください。**

```php:database.php
'default' => env('DB_CONNECTION', 'myDB2Connection'),

'myDB2Connection' => [
    'driver'        => 'db2',
    'driverName'    => '{IBM i Access ODBC Driver}',
    'host'          => env('DB_HOST'),
    'username'      => env('DB_USERNAME'),
    'password'      => env('DB_PASSWORD'),
    'database'      => env('DB_DATABASE'),
    'prefix'        => '',
    'schema'        => env('DB_SCHEMA'),
    'port'          => env('DB_PORT', 50000),
    'date_format'   => 'Y-m-d H:i:s', // or 'Y-m-d H:i:s.u' / 'Y-m-d-H.i.s.u'
    'odbc_keywords' => [
        'SIGNON'                => 3,
        'SSL'                   => 0,
        'CommitMode'            => 0,
        'ConnectionType'        => 0,
        'DefaultLibraries'      => '',
        'Naming'                => 1,
        'UNICODESQL'            => 0,
        'DateFormat'            => 5,
        'DateSeperator'         => 0,
        'Decimal'               => 0,
        'TimeFormat'            => 0,
        'TimeSeparator'         => 0,
        'TimestampFormat'       => 0,
        'ConvertDateTimeToChar' => 0,
        'BLOCKFETCH'            => 1,
        'BlockSizeKB'           => 32,
        'AllowDataCompression'  => 1,
        'CONCURRENCY'           => 0,
        'LAZYCLOSE'             => 0,
        'MaxFieldLength'        => 15360,
        'PREFETCH'              => 0,
        'QUERYTIMEOUT'          => 1,
        'DefaultPkgLibrary'     => 'QGPL',
        'DefaultPackage'        => 'A /DEFAULT(IBM),2,0,1,0',
        'ExtendedDynamic'       => 1,
        'QAQQINILibrary'        => '',
        'SQDIAGCODE'            => '',
        'LANGUAGEID'            => 'JPN',
        'SORTTABLE'             => '',
        'SortSequence'          => 0,
        'SORTWEIGHT'            => 0,
        'AllowUnsupportedChar'  => 0,
        'CCSID'                 => 1208,
        'GRAPHIC'               => 0,
        'ForceTranslation'      => 0,
        'ALLOWPROCCALLS'        => 0,
        'DB2SQLSTATES'          => 0,
        'DEBUG'                 => 0,
        'TRUEAUTOCOMMIT'        => 0,
        'CATALOGOPTIONS'        => 3,
        'LibraryView'           => 0,
        'ODBCRemarks'           => 0,
        'SEARCHPATTERN'         => 1,
        'TranslationDLL'        => '',
        'TranslationOption'     => 0,
        'MAXTRACESIZE'          => 0,
        'MultipleTraceFiles'    => 1,
        'TRACE'                 => 0,
        'TRACEFILENAME'         => '',
        'ExtendedColInfo'       => 0,
    ],
    'options' => [
        PDO::ATTR_CASE             => PDO::CASE_LOWER,
        PDO::ATTR_EMULATE_PREPARES => false,
        PDO::ATTR_PERSISTENT       => false,
    ]
],
```

## 接続先の設定

「.env」ファイルを編集して、接続先の情報を追加します。

```php:.env

DB_HOST=       // IPアドレス
DB_DATABASE=   // DSN名
DB_USERNAME=   // ユーザー
DB_PASSWORD=   // パスワード
DB_SCHEMA=     // 一つのライブラリのみを使用する場合（任意項目）

```

設定は以上で完了です。
次回は、IBM iに接続してデータを取得する方法について紹介します。

ご参考になれば幸いです。最後までお読み頂きありがとうございます。