week コマンドの金メダル仕様と和暦表示

[week]: https://github.com/kaz-utashiro/App-week
[optex]: https://github.com/kaz-utashiro/optex
[Getopt::EX]: https://github.com/kaz-utashiro/Getopt-EX
[Getopt::EX::i18n]: https://github.com/kaz-utashiro/Getopt-EX-i18n
[termcolor]: https://github.com/kaz-utashiro/Getopt-EX-termcolor
[Getopt::EX::Colormap]: https://metacpan.org/pod/Getopt::EX::Colormap

![スクリーンショット 2021-08-17 14.21.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/c546196d-cd7f-b243-3a4e-5b998678f5e4.png)

<!--
![スクリーンショット 2021-08-17 14.15.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/4c13256e-257c-d763-5eeb-97ad0e7371bc.png)
-->

<!--
![スクリーンショット 2021-08-17 13.10.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/15fdba86-d84d-1051-95e1-325189045814.png)
-->

# week コマンドの続き

- [ターミナルで使える色っぽいカレンダー - Qiita](https://qiita.com/kaz-utashiro/items/603f4bca39e397afc91c)
- [ライオンズカラーのカレンダーと termcolor モジュール - Qiita](https://qiita.com/kaz-utashiro/items/38cb50a4d0cd34b6cce6)
- [Tokyo2020 カレンダーと i18n モジュール - Qiita](https://qiita.com/kaz-utashiro/items/be37a4d703f9d2208ed1)

# --tokyo2020-gold オプション

東京オリンピックの金メダル獲得数は歴代最多27個だったそうだ。昨年作った `--tokyo2020` オプションには、実はゴールドバージョンも用意してあった。

![スクリーンショット 2021-08-15 18.02.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/19d76413-5cfc-3498-1ac1-76866cd7136e.png)

# 和暦表示

上の画像を見ればわかるように、2021 だけではなく「令和3」という年号が入っている。オリンピック前にこれを実装したのだが、リリースするのをすっかり忘れていた。

[Date::Japanese::Era](https://metacpan.org/pod/Date::Japanese::Era) というモジュールを見つけたから試しに和暦を表示するようにしてみたのだが、これが存外に便利である。「今年は令和何年だったっけ？」と思ったら `week` と打てばいい。デフォルトでは、1月と当月に暦年を表示する。

前回のオリンピックが開催された昭和39年は `week 昭和39`, `week 昭39`, `week S39` などで表示できる。

![スクリーンショット 2021-07-07 20.23.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/f89adfda-78bd-8386-db8f-7cfc3730da87.png)

平成元年は？

![スクリーンショット 2021-08-16 19.18.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/5e48d029-e322-1a8a-b972-5e5698058930.png)

1989年か。だけど、1月はまだ昭和だよねという時は `-P` オプションを付けると、すべての月に暦年を表示する。

![スクリーンショット 2021-08-17 8.16.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/9d4efbf9-dbe5-7c4c-0c90-4929fd6d2021.png)

1989年の1月7日に昭和天皇が崩御されているので、2月から平成表記になる。

# --colordump

`--colordump` というオプションを付けると、現在の配色をオプション形式で表示する。`--tokyo2020-gold` はこうだ。24ビット指定と12ビット指定が混じっているが問題ない。画像は iTerm2 なので24ビットモードで表示されているが、Terminal.app などでは 6x6x6 の216色にマッピングされる。

![スクリーンショット 2021-08-16 19.26.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/4be0453c-a6b3-c46a-186d-0fabab72d4cc.png)

これを編集すれば、自分で新しいデザインを作ることができるのでよかったどうぞ。

[greple]: https://github.com/kaz-utashiro/greple
[Getopt::EX::Hashed]: https://github.com/kaz-utashiro/Getopt-EX-Hashed

実際に色を見たければ、[greple] コマンドを使って、こんな風に表示することも可能だ。`--cm` は `--colormap` の省略形で色を指定するためのオプションだが、このように関数を指定することもできる。この例は、オプション指定を忘れたので、216色モードで表示されているはずだ。

![スクリーンショット 2021-08-16 19.34.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/36551/85655e3e-ab55-b62b-b88c-1a02c33a5463.png)

# [Getopt::EX::Hashed]

リリースが遅れたのは、これを作っていたからだ。コマンド行オプション処理のためのモジュールは数々あるが、定番の Getopt::Long から乗り換えようと思わせるものはなかった。だから、Getopt::EX は、Getopt::Long を前提に作られている。Moo と組み合わせて使うとなかなかイカしてる部分もあって一時期使ったが、その目的に使うには重厚すぎる。Getopt::EX::Hashed は、オプションの仕様定義と初期化を同時に行うためのもので、Getopt::Long をバックエンドにしているが、仕様を見通しよく記述できるようになっている。ここでは詳しく説明はしないので、興味のある方は week コマンドでの使用例を見て欲しい。

https://github.com/kaz-utashiro/App-week/blob/6b769ffa181edae229c9d6b446c724006ccb473f/lib/App/week.pm#L42-L107

参照にはメソッドを使いながら、更新はハッシュを直接操作しているのが対称性に欠けてやや気持ち悪いかもしれないが、実用性はこの方が高いので、少しムズムズしながら使っている。

追記：その後 `lvalue` を使ってメソッド呼び出しに対して代入することが可能になっている。

# インストール

cpan で公開しているので、cpanm (cpanminus) を使ってインストールします。

```
cpanm App::week
```