はじめに
次世代デジタル基盤開発事業部の植木です。
主に、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