はじめに
次世代デジタル基盤開発事業部の植木です。
主に、Web3領域のNFT関連のアプリの開発を行っております。
自作のPHPのパッケージを作成しようと思った経緯について
以前、電子申請のシステムに携わることがありました。その際、生年月日を和暦から西暦、西暦から和暦に変換する処理を実装する箇所が多々ありました。
それなら、ライブラリーにしたらと思い、PHPのパッケージ制作を思い立ちました。
パッケージの機能について
日付を和暦から西暦、西暦から和暦に変換する機能です。
パッケージの構造は、以下となります。
// パッケージの構造
├── .gitignore ├── .php-cs-fixer.cache ├── composer.json ├── composer.lock ├── src │ └── JapaneseNengoGenerator.php ├── tests │ └── JapaneseNengoGeneratorTest.php └── vendor └── LICENSE
実際の日付を和暦から西暦、西暦から和暦にする処理の結果は、連想配列で返すようにしています。
// 日付を和暦から西暦、西暦から和暦にする処理
/**
* 西暦→和暦変換
*
* @param string $time 変換対象となる日付(西暦)
* @return array $result 変換後の日付(和暦)
*
*/
public function toWareki($time = 'now')
{
// 元号一覧
$eraNameList = [
// 令和(2019年5月1日〜)
[
'jp' => '令和',
'time' => '20190501'
],
// 平成(1989年1月8日〜)
[
'jp' => '平成',
'time' => '19890108'
],
// 昭和(1926年12月25日〜)
[
'jp' => '昭和',
'time' => '19261225'
],
// 大正(1912年7月30日〜)
[
'jp' => '大正',
'time' => '19120730'
],
];
$date = '';
try {
$date = new \DateTime($time);
} catch (\Exception $e) {
// 日付型の指定でない
echo $e->getMessage();
}
$result = [
'wareki' => '',
'year' => '',
'month' => sprintf('%02d', $date->format('m')),
'day' => sprintf('%02d', $date->format('d'))
];
foreach ($eraNameList as $el) {
$dateEraName = new \DateTime($el['time']);
if ($date->format('Ymd') >= $dateEraName->format('Ymd')) {
$result['year'] = sprintf('%02d', $date->format('Y') - $dateEraName->format('Y') + 1);
if ($result['year'] == '01') {
$result['year'] = '元年';
}
$result['wareki'] = $el['jp'];
break;
}
}
return $result;
}
/**
* 和暦→西暦変換
*
* @param string $time 変換対象となる日付(和暦)
* @return array $result 変換後の日付(西暦)
*
*/
public function toSeireki($time)
{
$time = str_replace('元年', '1年', mb_convert_kana($time, 'n'));
if (preg_match('!^(大正|昭和|平成|令和)([0-9]+)年([0-9]+)月([0-9]+)日$!', $time, $matches)) {
$eraName = $matches[1];
$year = intval($matches[2]);
$month = intval($matches[3]);
$day = intval($matches[4]);
if ($eraName === '大正') {
$year += 1911;
} elseif ($eraName === '昭和') {
$year += 1925;
} elseif ($eraName === '平成') {
$year += 1988;
} elseif ($eraName === '令和') {
$year += 2018;
}
return [
'year' => sprintf('%04d', $year),
'month' => sprintf('%02d', $month),
'day' => sprintf('%02d', $day)
];
}
return [];
}
パッケージの公開方法
まず、GitHubに向けて、tagをつけてプッシュします。
git tag 1.0.0 git push origin 1.0.0
PackagistにパッケージのGithubのリポジトリを登録する。(赤枠の部分)

PackagistからPayload URLを取得する。
PackagistよりAPI トークンを取得する。
Payload URLとAPI トークンを利用して、GitHubとPackagistをウェブフックで連動させる設定を行う。
これで公開は完了です!
パッケージの利用方法
<?php
require 'vendor/autoload.php';
use hoge\nengo\JapaneseNengoGenerator;
$nengo = new JapaneseNengoGenerator();
var_dump($nengo->toWareki(20220112));
// array(4) {
// ["wareki"]=>
// string(6) "令和"
// ["year"]=>
// string(2) "04"
// ["month"]=>
// string(2) "01"
// ["day"]=>
// string(2) "12"
// }
まとめ
パッケージの作成方法や公開方法の流れを紹介させていただきました。
自作したパッケージに対して、どのようなテストを行なったか。(ユニットテスト)や LICENSE(基本MIT)やREADMEにパッケージの利用方法を記載したので、お時間ある方はぜひご覧になってください。
採用リンク tecotec.co.jp