待ち遠しい次の祝日がコマンドラインでわかる!‐cal‐ 端末にカレンダーを表示しよう

  • このエントリーをはてなブックマークに追加

   

これは“コマンドライン・マンデー”シリーズの最初の投稿です。このシリーズでは、毎週月曜日に使えるコマンドラインツールを簡単に紹介していこうと思っています。

calは、統一UNIX仕様において重要な要素なので、全てのUNIX系OSにインストールされているはずです。

統一UNIX仕様のcal公式マニュアルで定義されているコマンドは3つだけです。

$ cal
      May 2016
Su Mo Tu We Th Fr Sa
 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
$ cal 2015
                             2015

      January               February               March
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
             1  2  3   1  2  3  4  5  6  7   1  2  3  4  5  6  7
 4  5  6  7  8  9 10   8  9 10 11 12 13 14   8  9 10 11 12 13 14
11 12 13 14 15 16 17  15 16 17 18 19 20 21  15 16 17 18 19 20 21
18 19 20 21 22 23 24  22 23 24 25 26 27 28  22 23 24 25 26 27 28
25 26 27 28 29 30 31                        29 30 31

       April                  May                   June
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
          1  2  3  4                  1  2      1  2  3  4  5  6
 5  6  7  8  9 10 11   3  4  5  6  7  8  9   7  8  9 10 11 12 13
12 13 14 15 16 17 18  10 11 12 13 14 15 16  14 15 16 17 18 19 20
19 20 21 22 23 24 25  17 18 19 20 21 22 23  21 22 23 24 25 26 27
26 27 28 29 30        24 25 26 27 28 29 30  28 29 30
                      31
        July                 August              September
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
          1  2  3  4                     1         1  2  3  4  5
 5  6  7  8  9 10 11   2  3  4  5  6  7  8   6  7  8  9 10 11 12
12 13 14 15 16 17 18   9 10 11 12 13 14 15  13 14 15 16 17 18 19
19 20 21 22 23 24 25  16 17 18 19 20 21 22  20 21 22 23 24 25 26
26 27 28 29 30 31     23 24 25 26 27 28 29  27 28 29 30
                      30 31
      October               November              December
Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa  Su Mo Tu We Th Fr Sa
             1  2  3   1  2  3  4  5  6  7         1  2  3  4  5
 4  5  6  7  8  9 10   8  9 10 11 12 13 14   6  7  8  9 10 11 12
11 12 13 14 15 16 17  15 16 17 18 19 20 21  13 14 15 16 17 18 19
18 19 20 21 22 23 24  22 23 24 25 26 27 28  20 21 22 23 24 25 26
25 26 27 28 29 30 31  29 30                 27 28 29 30 31
$ cal 9 2015
   September 2015
Su Mo Tu We Th Fr Sa
       1  2  3  4  5
 6  7  8  9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30

簡単で便利。それが、UNIXが皆に愛される所以です。

しかし、Mac OS、BSD、そしてもちろんGNU/Linux上で実際に見られる実装には、さらに強力で気の利いた追加機能がついています。今回は、gcalとも呼ばれるGNUバージョンを詳しく見ていきます。Ubuntuにはデフォルトでインストールされており、Mac OSのHomebrewbrew install gcalでインストールすることができます。

例えば、とても便利なコマンドの一つが
gcal --holiday-list --cc-holiday=[location-code]
または短縮形の
gcal -n -q [location-code]
です。
[location-code]には2文字の国コードに加え、(時折)2文字の地域コードが入ります。

出力例:(訳注: 原文ではカナダの祝日でしたが、出力例を日本の祝日に変更しています)

$ gcal --holiday-list --cc-holidays=jp

Eternal holiday list:                      The year 2017 is NO leap year

New Year's Day (JP)                      + Su,   1 Jan 2017 =  -66 days
Bank Holiday (JP)                        * Mo,   2 Jan 2017 =  -65 days
Bank Holiday (JP)                        * Tu,   3 Jan 2017 =  -64 days
Coming of Age Day (JP)                   + Mo,  16 Jan 2017 =  -51 days
Sapporo Snow Festival (JP)               - Th,   2 Feb 2017 =  -34 days
Spring Festival (JP)                     - Th,   2 Feb 2017 =  -34 days
Season Change/Bean-Festival (JP)         - Fr,   3 Feb 2017 =  -33 days
National Foundation Day (JP)             + Sa,  11 Feb 2017 =  -25 days
St Valentine's Day (JP)                  - Tu,  14 Feb 2017 =  -22 days
Peach Festival (JP)                      - Fr,   3 Mar 2017 =   -5 days
Equinox Day (JP)                         + Mo,  20 Mar 2017 =  +12 days
Buddha's Birthday (JP)                   - Sa,   8 Apr 2017 =  +31 days
Greenery Day (JP)                        + Sa,  29 Apr 2017 =  +52 days
Constitution Anniversary (JP)            + We,   3 May 2017 =  +56 days
National Holiday (JP)                    + Th,   4 May 2017 =  +57 days
Children's Day (JP)                      + Fr,   5 May 2017 =  +58 days
Star Festival (JP)                       - Fr,   7 Jul 2017 = +121 days
Marine Day (JP)                          + Th,  20 Jul 2017 = +134 days
Feast of Fortune (JP)                    - Mo,  14 Aug 2017 = +159 days
Feast of Fortune (JP)                    - Tu,  15 Aug 2017 = +160 days
Feast of Fortune (JP)                    - We,  16 Aug 2017 = +161 days
Feast of Fortune (JP)                    - Th,  17 Aug 2017 = +162 days
Chrysanthenum Day (JP)                   - Sa,   9 Sep 2017 = +185 days
Respect for the Aged Day (JP)            + Fr,  15 Sep 2017 = +191 days
Equinox Day (JP)                         + Sa,  23 Sep 2017 = +199 days
Health and Sport's Day (JP)              + Tu,  10 Oct 2017 = +216 days
Culture Day (JP)                         + Fr,   3 Nov 2017 = +240 days
7-5-3 Festival (JP)                      - We,  15 Nov 2017 = +252 days
Labour Thanksgiving Day (JP)             + Th,  23 Nov 2017 = +260 days
Soot-Sweeping Day (JP)                   - We,  13 Dec 2017 = +280 days
Japanese New Year's Day (JP)             - Fr,  22 Dec 2017 = +289 days
Emperor's Birthday (JP)                  + Sa,  23 Dec 2017 = +290 days
Bank Holiday (JP)                        * Su,  31 Dec 2017 = +298 days

表示範囲と出力書式設定を変更するための選択肢は、数えきれないほどあります。

  • gcal . : 先月、今月、来月を表示
  • gcal -j : 月の日数ではなく、年の日数を表示(例:7ではなく342)
  • gcal 3-7 : 3月から7月までの日付を表示

時間範囲とフィルタリングオプションも、もちろん組み合わせることができます。

もう一つの面白い機能は、いわゆるリソース・ファイルから、予定表の項目をロードすることができるgcalの機能です。基本的には、日付と、対応するテキストのリストになります。これを試すには、次の内容の~/.gcalrcファイルを作成します。

20160428 1. Write your first "Command Line Monday" post!
00000428 It's John's %B1987  Birthday

0 Today is %>1*K , %>02&*D  %U  %Y !
0 It's the %>03&*N  day of the year.
0 The week number is: %k
0 It's %t*  o'clock, Mr. %-USER
0 Hurry up with your work,\
 sunrise is at %o+5158+00738+61,2: .
0 Moon phase %>03*O ~Text %Z

今、
gcal --today
を実行すると今日は2016-04-28でした。
また、
gcal --list-of-fixed-dates %20160428(省略形:gcal -c %20160428
を使って日付を特定すれば、次の結果を得られます。

$ gcal --list-of-fixed-dates %20160428

Fixed date list:

Thu,  Apr<28th>2016: 1. Write your first "Command Line Monday" post!
Thu,  Apr<28th>2016: Hurry up with your work, sunrise is at 06:03.
Thu,  Apr<28th>2016: It's 09:56am o'clock, Mr. adrian
Thu,  Apr<28th>2016: It's John's 29 Birthday
Thu,  Apr<28th>2016: It's the 119th day of the year.
Thu,  Apr<28th>2016: Moon phase 066%-
                     Text
                                @@@@@@@@@@   )
                           @@@@@@@@@@@@@@@@@@     )
                         @@@@@@@@@@@@@@@@@@@@@      )
                       @@@@@@@@@@@@@@@@@@@@@@@@       )
                      @@@@@@@@@@@@@@@@@@@@@@@@@        )
                     @@@@@@@@@@@@@@@@@@@@@@@@@@@        )
                     @@@@@@@@@@@@@@@@@@@@@@@@@@@        )
                      @@@@@@@@@@@@@@@@@@@@@@@@@        )
                       @@@@@@@@@@@@@@@@@@@@@@@@       )
                        @@@@@@@@@@@@@@@@@@@@@@       )
                           @@@@@@@@@@@@@@@@@@     )
                               @@@@@@@@@@@@   )
Thu,  Apr<28th>2016: The week number is: 17
Thu,  Apr<28th>2016: Today is Thursday, 28th April 2016!

ご覧の通り、gcalにはすごい機能がたくさんあります。そして、現在の日の出・日の入りの時刻の計算や、月相の表示などはまだ序の口です。現在の大気圧を特定することで、日の出時刻を調節する機能すらあります。でもこれについては、この投稿の趣旨から完全に外れてしまいますね。もしもっと深く掘り下げたいのなら、公式gcalマニュアルを調べてみることをお勧めします。このマニュアルは、かなり読み応えがありますよ。

gcalの使用事例を思いつく限り全て聞いたらワクワクするでしょうね。TODOリストの管理や、誕生日をもう二度と忘れないようにするのに本当にピッタリだと思います。全従業員が自分のリソース・ファイルを持っていて、sshで同期されている会社の共有カレンダーアプリとしても良さそうです。

これについて、あなたの意見をぜひ聞かせてください!

”コマンドライン・マンデー”シリーズの最初の投稿を楽しんで頂けたでしょうか。来週月曜日の次の投稿もお見逃しなく!もし見逃さないか心配であれば、ランディングページでニュースレターを申し込めば、リマインダーを受け取ることができますよ!

2016年05月16日 更新

この投稿が思いがけずHacker Newsで取り挙げられました😁 それもあって、コメント欄で何人かが触れてくれた面白いトピックについて注目してみたいと思います。

週の始まりが月曜日だと思っている人が多いですが、僕もそれに全く賛成です!どのみち、月曜始まりが公式のISO8601規格です。(ここ「Germany — You have failed the metric system」に書いてある通り、僕にとって規格はとても大事なんです!)

便宜上、僕は自分のmacでcalのエイリアスに次のスクリプトを使っています。

#! /usr/bin/env bash

gcal --starting-day=1 "$1"

これは、月曜を週の始まりとして使っています。一件落着です😊

Bushra8さんも、月の満ち欠けの周期を表示するすごいフラグについて触れていました。次の満月や次の月食などですね。

$ gcal --holiday-list --astronomical-holidays

Eternal holiday list:                      The year 2016 is A leap year

New Moon 01:30 (Ast)                     - Sun,  Jan 10th 2016 = -127 days
Waxing Half Moon 23:26 (Ast)             - Sat,  Jan 16th 2016 = -121 days
Full Moon 01:46 (Ast)                    - Sun,  Jan 24th 2016 = -113 days
Waning Half Moon 03:28 (Ast)             - Mon,  Feb  1st 2016 = -105 days
New Moon 14:39 (Ast)                     - Mon,  Feb  8th 2016 =  -98 days
Waxing Half Moon 07:46 (Ast)             - Mon,  Feb 15th 2016 =  -91 days
Full Moon 18:20 (Ast)                    - Mon,  Feb 22nd 2016 =  -84 days
Waning Half Moon 23:11 (Ast)             - Tue,  Mar  1st 2016 =  -76 days
New Moon 01:54 (Ast)                     - Wed,  Mar  9th 2016 =  -68 days
Solar Eclipse/Total 01:57 (Ast)          - Wed,  Mar  9th 2016 =  -68 days
Waxing Half Moon 17:03 (Ast)             - Tue,  Mar 15th 2016 =  -62 days
Equinox Day 04:30 (Ast)                  - Sun,  Mar 20th 2016 =  -57 days
Full Moon 12:01 (Ast)                    - Wed,  Mar 23rd 2016 =  -54 days
Lunar Eclipse/Penumbral 11:47 (Ast)      - Wed,  Mar 23rd 2016 =  -54 days
Waning Half Moon 15:17 (Ast)             - Thu,  Mar 31st 2016 =  -46 days
…

コメント、感想、その他意見などは、遠慮なく僕@AdrianSieberにツイートして下さいね。加えて、GitHubissueをオープンしたり、改善や修正のプルリクエストを送ったりして頂いても構いません。ご協力ありがとう!😊

原文:https://adriansieber.com/cal-display-calendar-in-terminal/(2017-2-28)
※元記事の筆者には直接翻訳の許可を頂いて、翻訳・公開しております。

 -Tech

FAworksではプロのコンサルタントが案件をお探しします

  関連記事

React/Fluxにおける問題とReducerが切り開く道

私がReact/Fluxアプリケーションを書いてきて、もう1年になる。Flux開発の1年を振り返って

Linux OSのジッタを体系的に削減する黒魔術

Linux OSのジッタを体系的に削減する黒魔術

低遅延性の求められるトレードシステムにおいて、ジッタの原因をどのように体系的に発見してひとつずつ削除

ダメなアプリを作るための10の優れたルール パート1:技術編

素晴らしいアプリのアイデアが浮かんで、フィードバックを集めて、なんとかチームすらも作って、app s

エンジニアなら絶対ワクワクしちゃうコンピュータ映画7選

こんにちは!皆さん、映画観てますか?今回は人よりちょっぴり多く映画を観ていると勝手に自負している僕が

Dockerコンテナとイメージの仕組みを視覚化してみた

この記事は、Docker 102レベルを意図して書かれている。Dockerが何か分からない、または仮

継続的デリバリがもたらす効果と価値とは~ソフトウェア業界全体の「対応力を高める」トレンドを追え~

継続的デリバリがもたらす効果と価値 ~ソフトウェア業界全体のトレンド “React” を追え~

あなたが「リリース」という言葉を聞いた時、どのような感情が呼び起こされるだろうか?安堵?高揚感?ある

もう二度と、絶対にMongoDBを使うべきじゃない理由

もう二度と、絶対にMongoDBを使うべきじゃない理由

MongoDBは悪だ。なぜならそれは… …データを無くす(ソース:1、2)。 …実際、長期間、デフォ

Crystalの紹介:Cのように速く、Rubyのように滑らか

Crystalの紹介:Cのように速く、Rubyのように滑らか

僕は、Rubyistだ。Rubyと、そのコミュニティ、その生産性など、Rubyにまつわる多くのものが

【比較表あり】非エンジニアの人にも知ってほしい。エンジニアに優しいチャット・コミュニケーションツールまとめ

エンジニアに合ったコミュニケーションツール プロジェクトを円滑に進行させるためにも、チームでのコミュ

なぜあなたのインターネットは遅いのか?問題を切り分けて特定するトラブルシューティング

はじめに 家庭、コーヒーショップ、またはオフィスでの作業中に「インターネット(インフラ)にまつわる問