fortune で遊んでみよう

この記事は [一分で読める小ネタのカレンダー | Advent Calendar 2023 - Qiita](https://qiita.com/advent-calendar/2023/raki) の１２日目

# fortune

- 恋しないｗ
- [fortune (UNIX) - Wikipedia](https://ja.wikipedia.org/wiki/Fortune_(UNIX))
- brew が使えれば `brew install fortune` で入る
- [fortune コマンドについて](https://loneb.net/archives/746)
- 実行して遊べ、ではなくて、テーマファイルを自作して、コマンドラインツールで遊ぶのもなかなか楽しい、と思ってもらいたい

本文はここまで。以下は時間外ｗ

# なぜ

- ジョークプログラムなので、知ってる人は知っているし、知らない人はずっと知らないで終わる
- 簡単に遊べて学べるのに知らないままなのはもったいない
- アドカレ記事の閑話休題的にちょうどよかったｗ

# 遊び方

- 遊ぶ時だけ `alias f="fortune"` しておくと楽
- ひとしきり `f` を叩いて遊ぶ
- `man fortune` して man の見方を勉強するのもよい
- オプションを付けて遊ぶ
- ひとしきり遊んだら自作テーマの作成に移る

# テーマの自作

## 何をテーマにするか

- 要はランダムにデータを表示するだけなので、それに向いた何かを書けばいい
- お題.com とか診断メーカーとか、その辺と同じことをローカルで自分用に作ると思えばいい
- おみくじ、じゃんけん、小説のお題、今日のランチなど、思いつくまま考える。この手のアイデア出しでは数がものをいうので１００個ほど挙げてみよう（マジ

<details><summary>試しに挙げてみた</summary>

- 好きな[アニメ|漫画|小説|ドラマ]の
    - 今日見直すタイトル
    - 名言集
    - 言わせたいセリフ（セリフは自分で考えるんやで）
    - これで４ｘ３で１２って数えてもいいよ（アイデアの数を増やす基本。あと映画とかラジオとか動画サイトのチャンネルとか増やせばいくらでも増える）
- 技術書の
    - 再読リスト
    - 積読消化リスト
    - 大事なところ
        - 例えばリーダブルコードの章タイトルを１データに
    - コマンド抽出
    - これも技術書に限らず、ビジネス書や雑誌の類を増やしてもいい
- リストを拝借
    - [The Twelve-Factor App （日本語訳）](https://12factor.net/ja/)
    - [リーダーシップ・プリンシプル - About Amazon | Japan](https://www.aboutamazon.jp/about-us/leadership-principles)
    - [松下幸之助創業者の「革新の心得十カ条」 | パナソニック松愛会 奈良西支部](https://www.shoai.ne.jp/nara-w/2020/12/11/napokun-mail-2/)
    - こういう他人の知見を手軽に拝借できることに感謝しつつ、どんなリストがあるのかなどを別で調べる作業も勉強の一環だと思うな
    - もちろん自分用の自分のためのリストを作るのも楽しい
    - 全然別の話だけど、[*ListFreak – 美しい箇条書き](https://listfreak.com/) はおすすめ
- 定番
    - 自作おみくじは何を書くかが勝負
        - ポジティブオンリーにするとか
        - 普段注意したいと思っていることだけにして毎日再確認とか
    - じゃんけんだって、普通のグーチョキパーだけではなくて、変わり種（ローカル？）を混ぜてみるとか
    - ダイス（サイコロ）も１から６で済まさないで、ダイスを２個振る（2D）を表現するとか
    - 挨拶文は（ただのテキストだから）好きな人（キャラ）に好きなことを言わせられるぞｗ
        - ASMRとか一般的には与えられるものでしかないけど、fortune なら好きに作れるんだｗ
        - おはようからおやすみまでシーンに合わせてつくるもよし、キャラに分けてつくるもよし
- 習慣化補助リストは、次に何かをさせるための命令のリスト
    - ワークアウトリスト
        - リモートワークで体がなまっちゃうので、手軽なワークアウトをリストにする
        - 腹筋X回とかスクワットX回みたいに決め打ちしておくと `terraform plan` の待ち時間にちょうどいい
    - １０秒でやることリスト
        - 後回しグセをなくす系の書籍でよく書かれている、まずちょっとやってみる、を実現する
        - １０秒だからちょっとやって終わらないといけない
    - ４０秒でやることリスト
        - ドーラになったつもりで自分にやらせたいことを書いておくリスト
        - ちょっとやる気がでないって時にもやらねば！ってなる（かもしれない）
    - １分でやることリスト
        - １分あると思考する余裕があるので、何かを更新することに使える
        - 次にやることリストを更新するとかでもいいね
    - 次にやることリスト
        - 手が止まった時に、次に何するんだっけを思い出すためのリスト
        - 日々のTODOは別の管理にするべき
        - 中長期的なものが望ましい
            - 英語の勉強をするためにほったらかしになってるワークブックを開くとか
            - やるやる詐欺になってる何かをするとか
    - 常に思い返すリスト
        - 反省とか自己改善とか常に自分を戒めるリスト
        - 笑顔とかポジティブとか常に心に留めておきたいリスト
    - 勉強するリスト
        - 仕掛中の対象を入れておいて、何からやろうか迷った時に使う
        - エンジニアなら新しい言語やフレームワーク、ツール類が入るはず
        - 国語辞典を引く、とかを入れておくと本棚の肥やしになりがちな辞典が活きる
        - [wikipedia ランダム](https://ja.wikipedia.org/wiki/特別:おまかせ表示) を引く、を入れておくと自動で勉強できる
- 生活
    - 食事
        - 近くのお店をリストアップしておけば今日のランチも迷わない
        - レシピのレパートリーを入れておけば今日の夕飯も迷わない
        - 新規開拓とか入れておくとブラッシュアップができる
    - 家事
        - 掃除洗濯食事の支度、家事は誰かがやらないと生活が成立しない
        - 引いたらそれをやるんだっていう強い意志を持つ
        - 今日はお休み、を忍ばせておくと心に余裕ができる（馬鹿なこと言ってないで家事くらいやれやｗ）
    - デート
        - いや、デートなんて何年もしてないですけれどもｗｗｗ
        - 定番のデートコースや行きたいところをリストしておく（使うかは別）
    - 寝る前のワーク
        - 寝る前にすることは人それぞれだけど、具体的にコレってものを入れておくと（これ以上いけない

疲れた。。。全然１００個も書いてないじゃんｗ
自分でやる時は説明とか要らないので、どんなテーマが作れるか、じゃんじゃん挙げてみよう。

</details>

## サンプル

- 最初にやってみたおみくじ
- ファイル名は `fortune/jp_omikuji` 

```text:fortune/jp_omikuji
おみくじ： 大凶
%
おみくじ： 凶
%
おみくじ： 末吉
%
おみくじ： 吉
%
おみくじ： 小吉
%
おみくじ： 中吉
%
おみくじ： 大吉

```

## コマンド

- 個別のコマンドは先のページに書いてあるのでそっち見て

```bash:fortune/build.sh
#!/usr/bin/env bash

set -ue
export LC_ALL=C

while read -r f; do

    echo "file: $f"
    strfile $f

done < <(find . -not -name "*.dat" -name "jp_*")

# データディレクトリを自動取得
fortunes_data_dir=`fortune -f 2>&1 | head -n 1 | awk '{print $2}'`
echo "${fortunes_data_dir}/"

# テキストファイルと生成した .dat ファイルをデータディレクトリに送る
cp jp_* ${fortunes_data_dir}/

# 確認
fortune -f 2>&1 | grep jp_

```

- my-til 辺りに fortune ディレクトリを作って放り込んでおけば、ちょっと書いてしゅっと登録できる（はず）
- `fortune 100% jp_greeting` みたいに毎回打つの面倒なので alias しておくと楽

# 改善依頼

- こんなテーマ作るといいぜとか
- build.sh が動かねぇとか