2020年07月24日

業務で日報を書くことになったので org-ql を使ってみた

日報に org-ql を使うことにした経緯

部署内では朝会夕会で進捗の共有等はやってるのだけど それとは別に業務命令で日報を書くことになった。

日報、いちいちその日に何をしたか思い出して書くのもだるいし、 最近めっきりコーディングをしてない身分としては GitHub の PR から日報を起こすこともできない。

Trello でカンバン運用しているからそっちから引っ張れないこともないが、 会議とかはそこには入ってないし、 結構突発作業もしているので、そういうのも Trello には乗って来ないという状態。

なんだけど個人的に org-mode で org-clock を使ったりして記録はしているので それを引っ張り出せばいいかってことで org-ql を使って日報用のデータ出力をすることにした。

org-ql で試したこと

単純に org-ql-search を使ってみた

まずは org-ql-search から適当にクエリを作ってブチ込んで試してた

M-x org-ql-search で起動すると 検索対象を org-agenda-files や org-directory などから選べる。 ただしデフォルトだとディレクトリを再帰的に検索とかしてくれないので「マジか」ってなった

設定を弄る

上で「デフォルトでは」と書いてるように、 設定を弄れば再帰的な検索とかもできるってことに、ソースを読んでて気付いた。

多分、customize を起動して確認するのがもっと賢い見つけ方だけど、まあいい。

というわけで設定的には org-ql-search-directories-files-recursive を有効にていると再帰的に検索するし おー-search-directories-files-regexp を弄ってると .org 以外のファイルも検索してくれる。例えば org_archive とか。 他にも何かある気がするけど試してないので知らん。

というわけでそのあたりの設定でクエリを試してたんだけど org-agenda-files には登録してないやつも検索したいけど 同じ階層にある別ファイルは検索したくないというワガママの結果、 直で org-ql-search を叩くのは一旦諦めることにした。

日報用に関数を自作

特定のファイルだけ指定したいのであれば デフォルトに任せずに指定してあげればいいじゃない、ということで関数を用意した

(defun my/nippou-query ()
  (interactive)
  (org-ql-search
    (my/org-nippou-targets)
    "todo:TODO,DOING,WAIT,DONE ts:on=today"
    :title "日報"
    :super-groups '((:auto-group))))

org-ql-search の第一引数がファイルのリストで、 第二引数が検索クエリなのがわかったので、とりあえずそれを突っ込んで欲しいデータは取れるようになった その後のところは色々とキーワード引数が指定できるみたい

https://github.com/alphapapa/org-ql/blob/6633dbb276d51767c3f401d0f68ef99e7b9364b6/org-ql-search.el#L108-L109

title はまあタイトルなのでいいとして super-groups は org-super-agenda の定義を見ないといけない。

https://github.com/alphapapa/org-super-agenda#special-selectors

で auto-category とか便利に使えそうなのがあるんだけど、 ファイル名を基準にしたりするのでちょっと違うかな〜ってなったりしてて とりあえず auto-group を使うことにした

auto-group は各ツリーにproperty として agenda-group を設定してればそれを使い、 設定されてないやつは自動的に Other Items というグループに分類される感じ。

クエリ的には TODO keywords として TODO,DOING,WAIT,DONE のやつを対象にするのと その日の timestamp のやつを対象にする感じにしている。 (けど今試しに動かしてみたら何故か22日の作業分が表示されて謎なのでバグがあるっぽい)

という流れで https://github.com/mugijiru/.emacs.d/pull/156 の設定を放り込んだ。

今後やりたいこと

  • 日報は Slack に送ってるのでコマンドからそのまま Slack に送信したい
    • その場合確認画面も欲しいよね
    • 投稿後に Slack の画面も開くとさらに良い気がする
  • 「Group: 00_開発」みたいになってるのでそのあたりは見た目を調整したい
    • org-ql-search ではなく org-ql-select などを叩いた結果を自前で加工するのがいいかもしれない
  • 業務内容以外にもフリーテキストを書き込んで投稿するのでそれもやりたい
  • あとそこまで頑張ったらちゃんとしたパッケージにしたい
タグ:org-mode org-ql
posted by 麦汁 at 12:16 | Comment(0) | emacs | このブログの読者になる | 更新情報をチェックする

Emacs のパッケージを少しずつアップデートした

やったこと

これまで Emacs を使ってる中で 「動いてれば良し」の精神でパッケージ更新は基本的にやってなかったけど それもまあ健全じゃないよな〜ってことで腹を括ってアップデート祭を行った

前提

パッケージ管理には el-get を使っていて さらに el-get-lock で lock も掛けられる状態にしていた。 もちろん lock できるのは el-get-lock の制限を超えられないが、 それでも多くのパッケージは lock がかけられる状態になっていた

方針

  • できるだけ1つずつアップデートを掛けていく
    • 全部まとめてアップデート案もあったけど、色々なものが動かなくなってわけわからんって状態になりそうだった & やってみたらやっぱりそうなったのでそれは諦めた
    • もちろんパッケージによっては1つだけ更新ってわけにもいかないので、そういうやつはまとめて対応
      • Magit 周りとかね
  • アップデート時には差分か CHANGELOG を極力チェックする
    • 差分が大き過ぎてつらいやつはその限りではない
  • アップデートかけて Emacs を再起動して影響がありそうな機能を触ってみて問題がないかのチェックを毎度する
    • 少しずつ更新する中でこれが結構しんどかった。差分チェックもだけど。

事前準備

el-get-lock で lock も掛けられる状態にしていた。

という前提のために、一旦できる限り lock をかけていった。 その過程で誤って最新化されたのもあるけど、まあしょうがないってことで許容してたりする。

あたりで諸々 lock をかけていってる。 PR の途中の番号で抜けてるところでも関連する作業をしている。

実施作業

https://github.com/mugijiru/.emacs.d/pull/91 から https://github.com/mugijiru/.emacs.d/pull/149 までの PR が ほとんどアップデート作業の記録。

Magit 関連は https://github.com/mugijiru/.emacs.d/pull/116 でまとめて更新している 差分を見て「わからん」としている部分が多いがあまり更新してなかったので仕方ない

作業した感想など

  • lock から考えると3週間費したので疲れた
    • ほぼ週末しか作業してないけどね
  • 更新時の差分チェックは結構楽しかった
    • チェックした内容ほとんど覚えてないけどなっ
  • そもそも lock が Emacs のパッケージシステムと相性が良くはないのでちょっと考え直したいところはある
    • とはいえ更新した時に元からどれだけ変わったのかが分かるのは便利

その後

とりあえず全体最新化できたので 毎週アップデートしていける状態にもっていけた。 現時点で既に2回の週次アップデートを実施していて良さげな感覚を抱いている。

ただ、週次でも差分チェックがだるいなとは感じてるので、 毎日アップデートでも良いかもしれない。

posted by 麦汁 at 02:24 | Comment(1) | emacs | このブログの読者になる | 更新情報をチェックする

2020年06月28日

Emacs のパッケージをできるだけ el-get-lock で lock した

el-get-lock を入れて lock していこうと思ってたけど、 週に1つも lock されていかない感じだったのと 新しい PC を購入してそっちに Emacs を入れる時にバージョンが異なると嫌だなってことで まとめて lock することにした。

途中でちょっと力尽きているので、 何をやったか情報を残すことにした。

力尽き始めてから記録を残すことにしたので 結構記憶頼りである……。

https://github.com/mugijiru/.emacs.d/pull/84 あとでこれを見ながら lock 対応を進めていく。

最初はこのブログ記事に残そうと思ってたけど、 後から個人的に見返る分には GitHub の PR の方が楽な気もしたので 情報の本体はあっちに譲ることにした。

結果、ここの情報量がほぼゼロである。うける〜。

というのもアレなので、 実際にどういう作業をしたかを書くか。

作業内容

Git から取得しているパッケージの hash 値の取得

まず ~.emacs.d/el-get/* について el-get.lock の保持する形式と同じような感じで雑に HEAD の hash 値を取得した

#!/bin/sh

cd ~/.emacs.d/el-get
dirs=$(ls -d *)

for dir in $dirs
do
    checksum=$(cd $dir && git rev-parse HEAD)
    echo "($dir :checksum \"$checksum\")"
done
Git 管理下じゃなかったやつの確認

これで取得されたやつの中には Git リポジトリから拾って来たやつじゃないのも混じってた。 その場合は .emacs.d の HEAD の値が取られてたので そいつらはとりあえず無視することにした

Git 管理下っぽいものを1つずつ lock

残ったやつ1つずつに対し M-x el-get-find-recipe-file でレシピを確認し、 GitHub や Git から取得しているようであれば、 el-get.lock に手で追加した上で M-x el-get-lock-checkout を実行して 指定したバージョンでの再インストールされることを確認していった。

最初は各フォルダで git rev-parse HEAD をして確認もしてたけど 何個かやってからは、el-get-lock を信用できそうということでそれはやめた。

request.el については取得した hash 値が消えてたのか、取得できなかったので 諦めて最新にした。

という感じで 90 個ぐらい lock した。しんどかった。

実は、最初はまとめてそれをやったんだけど、 それをすると実は Git 管理下じゃないのかなんかの理由で失敗するやつがたまにいて lock ファイルがおかしくなったりとかしていたので、 諦めて1個1個丁寧な作業をしたのであった……。

残りのものを1つずつチェック
emacswiki から入ってたやつ

そのまま el-get-lock-checkout すると最新が入る。 で、大体更新されてないので、そのまま入れちゃえ〜で済ませるパターンが多かった

CVS から入ってたやつ

emacs-w3m ですね。 とりあえず lock するのを一旦諦めた

http で入ってるやつ

diminish ですね。 諦めたけど、これも emacswiki と同様に Partial support なので 割り切って lock しても良かったかもしれない。

ただ Partial support で el-get-lock-checkout しても最新が入るようなので あまり意味がないかもしれない

MELPA から入ってたやつ
  • lock を諦めたパターン
    • どうせ活用してないってことで削除したパターン

      csv-mode が該当。 ただ、最近使おうとしてたので後で入れ直したいですね

    • lock したかったけど躊躇したパターン

      molokai-theme とかが該当。 動かなくなったら困るから下手なことはしないでおこう……ってやつ。 個別対応としたい。

  • lock したパターン

    基本的に MELPA 経由だったのを GitHub から取得するようにしたやつ。 MELPA 経由と GitHub から取得するのが混じってると 時々同じパッケージがそれぞれからインストールされるという厄介なことになるので……。

    • ファイル内のバージョン番号などから hash を特定したパターン

      dumb-jump などが該当。 バージョン固定しないと心配だったのでそうしたけど ここに該当するパターンのやつは、割と最新にしても良さそうな雰囲気があったな……

      vue-mode とかはこれのために recipe まで書いた……。 (el-get-bundle AdamNiederer/vue-mode) だけだと依存関係をどう解決するか不明だったので それなら自分で recipe 書いた方がいいや〜って。

    • 最新化しちゃったパターン

      最新入れても問題なさそうとか、使ってるのが最新だったからってのが大体こっち。 helm に関しては多分色々ミスって事故で最新になった。

ELPA から入ってたやつ

rainbow-mode などが該当。 こいつらは lock もできないわ、Git からも取りにくいわでちょっと諦めた。 けど、el-get-lock が emacsmirror をサポートしているので、 そっちを使うようにしたら解決しそう。

結果

100個以上のパッケージが lock 対象になった。 https://github.com/mugijiru/.emacs.d/pull/84/files#diff-8e0ba40dc55379d834acec2b2ae92e67

あとは今回対象外となったパッケージを倒したい

タグ:el-get
posted by 麦汁 at 18:50 | Comment(0) | emacs | このブログの読者になる | 更新情報をチェックする