LoginSignup
0

More than 3 years have passed since last update.

lolcommitsで開発の思い出を記録する

Last updated at Posted at 2019-12-06

Ateam Finergy Inc. Advent Calendar 2019、7日目はlolcommitsについてご紹介します。

はじめに

lolcommitsは、git commit時に自動でノートPCのインカメラなどで写真を撮影するツールです。

公式サイトのサンプルを見ると雰囲気がよく分かると思います。

本記事では、lolcommitsのセットアップ手順や使い方などについて紹介していきます。

以下の環境を前提に記述しています。

  • macOS Catalina
  • Ruby 2.6.5

lolcommitsはLinux環境でも使えるようです。
Windows環境については「Here be dragons!」だそうです。…よくわかりませんが大変なようですね:pensive:

インストール

lolcommitsはRuby gemとして提供されているので、gemコマンドでインストールします:

$ gem install lolcommits

動作にImageMagickが必要なのであわせてインストールします。
ここではhomebrewを使います:

$ brew install imagemagick

これでlolcommitsコマンドが使えるようになっているはずなので、確認してみます:

$ lolcommits --version
0.16.0

OKですね。

試し撮り

本格的に導入する前に、きちんと撮影できるか試し撮りをしておきます。
以下のコマンドで撮影できます:

$ lolcommits --test --capture --debug

デバッグメッセージがつらつらと出力されたあと、撮影した写真が表示されます。

ちなみに撮影した写真は~/.lolcommits/test/に保存されています。

トラブル事例: 写真が真っ暗

筆者が遭遇したトラブルなのですが、撮影した写真が真っ暗になってしまいました。

test-3665618437.jpg

これはカメラの明度調節が終わる前に写真を保存してしまっているのが原因です。
対策として--delayオプションが用意されています:

$ lolcommits --test --capture --debug --delay 1

test-4561996553.jpg

うまくいきました。

もしまだきれいに撮れなければ--delayのあとの数字を増やしてみるといいかもしれません。
数字はカメラを起動してから撮影するまでの秒数です。

そのほかのトラブルはFAQを確認してみてください。

lolcommitsの導入

準備が整ったので、本格的にlolcommitsを導入します。

といってもいきなり既存の開発リポジトリにつっこむのは不安なので、まずはおためしのgitリポジトリを作ります:

$ mkdir lolcommits-sandbox
$ cd lolcommits-sandbox
$ git init

次に、今作ったリポジトリでlolcommitsを有効化します。
lolcommits --enableで有効化します:

$ lolcommits --enable --delay 1 --fork
installed lolcommit hook to:
  -> /Users/okonomi/src/local/lolcommits-sandbox/.git/hooks/post-commit
(to remove later, you can use: lolcommits --disable)

lolcommits --enableのうしろに試し撮りで追加した--delay 1と、新たに--forkオプションを追加しています。これは撮影時にプロセスをforkするようにするオプションです。
これを付けない場合、lolcommitsの撮影完了までgit commitが終了しなくなってしまいます。--forkを付けるとlolcommitsの撮影を待たずにgit commitが終了するため、開発の邪魔になりません。

コミットしてみます:

$ git commit --allow-empty -m "hello lolcommits!"
[master 8048f6c] hello lolcommits!
*** Preserving this moment in history.

*** Preserving this moment in history.のメッセージが出ればlolcommitsが有効になっています。

撮影写真は~/.lolcommits/[リポジトリ名]/に保存されています。確認してみてください。

lolcommitsを外したくなったら

もしlolcommitsを外したくなったら、lolcommits --disableで簡単に無効化できます:

$ lolcommits --disable
uninstalled lolcommits hook (from .git/hooks/post-commit)

無効化した状態でコミットしてみます:

$ git commit --allow-empty -m "goodbye lolcommits!"
[master 1277786] goodbye lolcommits!

*** Preserving this moment in history. のメッセージがなくなりました。

オマケ: プラグインで遊ぶ

これまでの説明でlolcommitsの導入は完了です。
ここではオマケとして、プラグインで遊んでみます。

lolcommitsはプラグインで動作をカスタマイズできるようになっています。
初期状態でloltextプラグインがインストールされています:

$ lolcommits --plugins
Installed plugins: (* enabled)
 [*] loltext

loltextプラグイン

loltextは写真にのせるテキストのフォントや位置、サイズをカスタマイズできるプラグインです。
これもサンプルを見るとわかりやすいです。

loltextプラグインのセットアップ

それではloltextをセットアップしてみます。

プラグインの設定の前に、まずはloltextに指定するフォントをインストールします。
フォントのインストール方法はなんでもいいのですが、ここではhomebrew-cask-fontsを使います:

$ brew cask install font-noto-sans-cjk-jp
Updating Homebrew...
==> Downloading https://noto-website-2.storage.googleapis.com/pkgs/NotoSansCJKjp-hinted.zip
######################################################################## 100.0%
==> No SHA-256 checksum defined for Cask 'font-noto-sans-cjk-jp', skipping verification.
==> Installing Cask font-noto-sans-cjk-jp
==> Moving Font 'NotoSansMonoCJKjp-Regular.otf' to '/Users/okonomi/Library/Fonts/NotoSansMonoCJKjp-Regular.otf'.
==> Moving Font 'NotoSansCJKjp-Bold.otf' to '/Users/okonomi/Library/Fonts/NotoSansCJKjp-Bold.otf'.
==> Moving Font 'NotoSansCJKjp-DemiLight.otf' to '/Users/okonomi/Library/Fonts/NotoSansCJKjp-DemiLight.otf'.
==> Moving Font 'NotoSansCJKjp-Light.otf' to '/Users/okonomi/Library/Fonts/NotoSansCJKjp-Light.otf'.
==> Moving Font 'NotoSansCJKjp-Medium.otf' to '/Users/okonomi/Library/Fonts/NotoSansCJKjp-Medium.otf'.
==> Moving Font 'NotoSansCJKjp-Regular.otf' to '/Users/okonomi/Library/Fonts/NotoSansCJKjp-Regular.otf'.
==> Moving Font 'NotoSansCJKjp-Thin.otf' to '/Users/okonomi/Library/Fonts/NotoSansCJKjp-Thin.otf'.
==> Moving Font 'NotoSansMonoCJKjp-Bold.otf' to '/Users/okonomi/Library/Fonts/NotoSansMonoCJKjp-Bold.otf'.
==> Moving Font 'NotoSansCJKjp-Black.otf' to '/Users/okonomi/Library/Fonts/NotoSansCJKjp-Black.otf'.
🍺  font-noto-sans-cjk-jp was successfully installed!

フォントも好みで、Notoフォントにしました。

では改めてloltextを設定します:

$ lolcommits --config -p loltext

対話形式で設定を進めます。
設定内容は~/.lolcommits/[リポジトリ名]/config.ymlに保存されます。こんなふうになりました:

~/.lolcommits/lolcommits-sandbox/config.yml
---
loltext:
  :enabled: true
  :message:
    :color: 
    :font: "/Users/okonomi/Library/Fonts/NotoSansCJKjp-Thin.otf"
    :position: C
    :size: 30
    :stroke_color: none
    :uppercase: 
  :sha:
    :color: 
    :font: "/Users/okonomi/Library/Fonts/NotoSansCJKjp-Thin.otf"
    :position: S
    :size: 20
    :stroke_color: none
    :uppercase: 
  :overlay:
    :enabled: true
    :overlay_colors: 
    :overlay_percent: 
  :border:
    :enabled: false

この状態で撮影するとこうなります。

4d534dc2126.jpg

いいですね:thumbsup:

loltextの設定を調整するとき、いちいち対話形式で入力するのが面倒な場合は設定ファイルを直接編集してもいいです。
設定項目の詳細はREADMEを確認してみてください。

その他のプラグイン

loltextのほかにもいくつかプラグインが公開されています。

Slackに写真を投稿するプラグインなんかもあるようです。チーム内で導入すると面白いかもしれないですね。

もちろん自分でプラグインを作ることもできます:muscle:

注意点

lolcommitsを使用する際の注意点としては、情報漏洩の危険があるかもしれない、ということです。

lolcommitsの性質上、あまり意識しない間に写真が撮影されます。おかげで気の抜けた不意の表情が撮れたりするのもlolcommitsを使う面白さのひとつです。
しかし気をつけないと、例えば画像アップロード系プラグインをお試しで導入したことを忘れていて公開領域(Twitterなど)に顔写真とコミットメッセージが垂れ流しになってた、なんてことになりかねません。
それが個人開発のOSSなら恥ずかしい思いをするだけで済むでしょうが、社内のプロジェクトで非公開情報を扱っていたりするとまずい状況になります。

そういった事故を未然に防ぐ対策として、lolcommitsを全面的に無効化する方法があります。

LOLCOMMITS_CAPTURE_DISABLED環境変数を設定しておくと、git commit時にlolcommitsが作動しなくなります:

export LOLCOMMITS_CAPTURE_DISABLED=true

必要に応じて設定してください。

まとめ

lolcommitsのセットアップ方法とプラグインの使い方をご紹介しました。

筆者はかれこれ6年以上lolcommitsを使っています。本記事を書くにあたり久しぶりに.~/lolcommits/を覗いたところ、昔の写真がたくさん出てきて懐かしさでしみじみしてしまいました。
この壁は過去に住んでいたマンションかな、とか、これは実家かな、年末に帰省したときかな、ていうか6年前の自分痩せてるな…とか。
記事のタイトルに「思い出」と付けたのはそのためです。ぜひ皆さんもlolcommitsで開発の思い出を記録してみてください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0