PHP で Dotenv を使う

結論

vlucas/phpdotenv を使いましょう。

具体的な使い方

composer.json に書いて composer install して、コード内で require する場合を書きます。ほぼ公式ドキュメントどおりですが……。

composer.json を書く

{
    "require": {
        "vlucas/phpdotenv": "dev-master"
    }
}

実際に使うコードを書く

Dotenv を実際に使うコードを以下のように書きます。ここで、ファイル名は sample.php とします。composer install はすでに済んでいるものとします。

<?php
require './vendor/autoload.php';

$dotenv = new Dotenv\Dotenv(__DIR__);
$dotenv->load();

echo getenv('FOO');

.env ファイルは以下のようにしました。

FOO="BAR"

実行する

sample.php を実行すると以下のようになります。

$ php sample.php
BAR

Composer でインストールしたバイナリを実行する方法

composer install

とりあえずまずは composer install するとします。composer.json は以下のようにします。

{
  "require": {
    "deployer/deployer": "^3.0"
  }
}

このファイルを作った後に composer install します。

dep コマンドを実行したい

composer install が終わると vendor/ 配下にもろもろインストールされています。今回インストールした deployerrequire したりして使うものではなく、直接実行するバイナリです。

このバイナリがある場所*1vendor/bin/dep です。Composer でインストールされたバイナリは vendor/bin 配下に置かれます。

dep コマンドを実行する場合、単純な方法としては ./vendor/bin/dep と実行すればよいです。ただ毎回こうするのは面倒です。場所が確定しているので、シェルの設定ファイルに以下のように書き加えましょう。

export PATH="$PATH:./vendor/bin"

これで、composer install をしたディレクトリ(プロジェクトのルートのディレクトリ)から、Composer でインストールしたバイナリをコマンド名だけで実行することができます。

$ dep # プロジェクトのルートがカレントディレクトリとします
Deployer master

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
(以下省略)

補足

PHPはど素人なので、Node でいう npx のようなものがあるかもしれません*2

*1:エイリアス

*2:きっとあると思います

DBeaver でタイムゾーンを設定しなかったので 3時間 ハマった話

概要

データベース*1に UTC で日時を入れて、コマンドラインからもちゃんと UTC の日時として見えているのに、DBeaver だと +0900 されて見えてしまい、誤ってデータが格納されてしまったと勘違いしてハマった。

結論

dbeaver.ini にタイムゾーンを明示していなかったため、「見え方」として +0900 されていた。以下の Issue を参考にして設定をしたら正しく表示された*2

f:id:gregminster:20181018140854p:plain

実例

使用前

f:id:gregminster:20181018140917p:plain

使用後

f:id:gregminster:20181018140935p:plain

*1:MySQL

*2:もちろん元データには何ら影響はなし

Embulk の MySQL output plugin で UTC で書き込めずにハマった

概要

  • MySQL のあるカラムに UTC でデータを放り込みたい
  • そのカラムの値は embulk preview では UTC で表示されている
  • しかし MySQL output plugin で MySQL に放り込むと JST換算 に変わってしまっている
  • なので MySQL output plugin の設定がおかしい

結論

out:options: { useLegacyDatetimeCode: false, serverTimezone: UTC } を追加する。

out:
  type: mysql
  (省略)
  options: { useLegacyDatetimeCode: false, serverTimezone: UTC }
  (省略)

補足

これがよい解決方法なのかは分かりません。

環境

mysql> SHOW variables LIKE '%time_zone%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| system_time_zone | UTC   |
| time_zone        | UTC   |
+------------------+-------+
2 rows in set (0.01 sec)
$ mysql --version
mysql  Ver 8.0.12 for osx10.14 on x86_64 (Homebrew)

参考

Powered by はてなブログ