oinume journal

Scratchpad of what I learned

Raycastを使い始めて1年経った

Raycastを使い始めて1年経ったので、どういうことに使っているかを振り返ってみる。去年書いた AlfredからRaycastに移行した - oinume journal の記事から少し使い方が変わっているところもあるのでメモがてら。

基本的な使い方

  • Cmd + QをRaycast起動のショートカットとして割り当てている。Pro版は使っていないのでAI機能などは使ったことがない。
  • ブラウザのブックマーク検索など、よく使うけどHotKeyを割り当てるほどでもないRaycastコマンドはbmのようにAliasを設定している。
    • Cmd + QでRaycastを起動してbmと入力するとブックマークの検索ができるので楽ちん

アプリケーションランチャー機能

アプリケーションを起動するときのランチャーとして使っている。よく使うアプリにはHot Key(ショートカット)を割り当ててる。

Clipboard History

クリップボードの履歴を溜めておいて、後から検索してペーストできる機能。Ctrl + Cmd + CをHotKeyとして割り当てて瞬時に起動できるようにしている。

絵文字検索

正確にはSearch Emoji & Symbolsという機能。これが地味に便利な機能で、こんな感じで英語で絵文字を検索して選択するとクリップボードにコピーされるのですぐにペーストできる。

スクリーンショットの検索&クリップボードへのコピー&SlackやGitHubへ貼り付け

これも便利な機能で、以下のような流れで使うのだけど、スクショを貼り付けるのがキーボード操作だけでできるようになる。

  • スクリーンショットを撮った後にRaycastを起動
  • screenshotで検索して機能を起動して、スクショをサムネイルで検索して選択
  • するとクリップボードにスクショがコピーされるので、SlackやGitHubなどにペーストするとスクショが貼り付けられる。

ブラウザのブックマーク検索

正式名称はSearch Browser Bookmarks。ブラウザのブックマークを検索することができる。SafariとChromeがある場合は、Cmd + KでSelect Browsersを選ぶと対象のブラウザを選択することができる(Safari, Chromeの両方を対象にすることも可能)。

開いているウィンドウの検索・切り替え

正式名称はSwitch Windows。今開いているウィンドウをfuzzy検索できる。自分はIntelliJ IDEAを使っていてたくさんウィンドウを開いているので、これで検索してウィンドウを切り替えることが多い。

Chromeの履歴検索

「あの閉じてしまったタブをもう1回開きたいなぁ」という時に意外と重宝するのがChromeの履歴検索である。Chrome Extensionをインストールすると使えるようになる。

使わなくなった機能

最初便利だなと思っていたけど使わなくなった機能もある。

  • Quicklink: ブラウザのブックマークで十分だと感じた
  • カレンダー連携(My Schedule): ChromeでGoogleカレンダーを固定タブで開いているのでRaycastから飛べなくてもいいかなと思った。あと、MacのカレンダーとGoogle Calendarを連携するのが嫌になったというのもある。

Raycastの使いこなせていない機能

Raycast便利に使っているけど、Script CommandsやExtensionを作れるほどのレベルにはなっていないので、今年はそれらに挑戦してみたい。

HasuraをDokku上で動かす

VPS上にDokkuを構築したので、そこにHasuraを動かしてみるテスト。Hasuraとは簡単に言うとPostgreSQLのテーブルスキーマからGraphQLサーバーを構築してくれるミドルウェア。

前提として、Dokkuはすでに構築済みとする。(自分の場合はUbuntu 22.04 上にDokku 0.32.3を構築済み)

手順

まずは最初にhasuraという名前のアプリケーションを作成する

$ dokku apps:create hasura

次に、HasuraのためのPostgreSQL databaseを建てる。

$ dokku postgres:create hasura-db
       Waiting for container to be ready
       Creating container database
       Securing connection to database
=====> Postgres container created: hasura-db
=====> hasura-db postgres service information
       Config dir:          /var/lib/dokku/services/postgres/hasura-db/data
       Config options:
       Data dir:            /var/lib/dokku/services/postgres/hasura-db/data
       Dsn:                 postgres://postgres:<redacted>@dokku-postgres-hasura-db:5432/hasura_db
       Exposed ports:       -
       Id:                  272a6f8b722310887317b3d7e10821ed3cfcc88dae7911945c10590be338c09c
       Internal ip:         172.17.0.4
       Initial network:
       Links:               -
       Post create network:
       Post start network:
       Service root:        /var/lib/dokku/services/postgres/hasura-db
       Status:              running
       Version:             postgres:15.4

上で構築したhasura-dbをhasuraアプリケーションにリンクする。ただし、この時点ではまだhasuraはアプリケーションの設定がされていないのでApp image (dokku/hasura:latest) not foundのエラーが出るけどOK。

$ dokku postgres:link hasura-db hasura
-----> Setting config vars
       DATABASE_URL:  postgres://postgres:<redacted>@dokku-postgres-hasura-db:5432/hasura_db
-----> Restarting app hasura
 !     App image (dokku/hasura:latest) not found

次にhasura向けの環境変数を設定する。HASURA_GRAPHQL_DATABASE_URLで指定するDSNは上のコマンドで得られたDATABASE_URLをコピーしてくる。また、your_admin_secretはパスワードみたいなものなので、ランダム文字列にするのが良い。

$ dokku config:set hasura \
 HASURA_GRAPHQL_DATABASE_URL="postgres://postgres:<redacted>@dokku-postgres-hasura-db:5432/hasura_db" \
 HASURA_GRAPHQL_ADMIN_SECRET="your_admin_secret" \
 HASURA_GRAPHQL_ENABLE_CONSOLE="true" \
 HASURA_GRAPHQL_SERVER_PORT=5000

次にhasuraアプリケーションのためのdocker imageをpullしてくる。

$ docker pull hasura/graphql-engine:v2.36.1
FAIL

上のコマンドを実行するユーザーがdockerグループに所属していないと権限がなくてpullできないので、自分の場合はdokkuユーザーになってpullした。

$ sudo su - dokku
$ docker pull hasura/graphql-engine:v2.36.1

そして最後に dokku git:from-imageコマンドでhasuraアプリケーションにpullしてきたimageを指定してアプリケーションとしてデプロイする。

$ dokku git:from-image hasura hasura/graphql-engine:v2.36.1

これで http://hasura.<your_dokku_domain>/ のURLにアクセスするとHasura Consoleが表示されるはず。もしエラー画面が出ている場合は、/var/log/nginx/hasura-error.log を見てみると何かヒントがあるかもしれない。

ハマった点

Dokku上のコンテナのlisten portはデフォルトだと5000になるということを知らずに、環境変数HASURA_GRAPHQL_SERVER_PORTを指定していなかったため、Hasuraはデフォルトの8080でlistenしていてDokkuのNginxからDocker containerへのproxyがうまくできていなかった。

そのため

We're sorry, but something went wrong. If you are the application owner check the logs for more information.

のエラーがずっと出ていたけど(スクショ)、解決方法がなかなかググっても出てこずにハマった。

DokkuのPort Managementのドキュメントに書いてはあるのだが、正直そんなの知らんわって思った。でもおかげでDokkuのport mappingの仕組みが理解できたので良かったけど。

成功したら...

以下のような画面が出るので、HASURA_GRAPHQL_ADMIN_SECRETの環境変数で指定したシークレットを入力するとめでたくHasuraのConsoleが見れるようになる。

※この記事を書き終わってHasura on Dokkuの構築自体に満足してしまい、肝心のアプリケーションの作成はまだできていない。

squash mergeの環境でCascading PRsでコンフリクトした時

最近以下のような記事を目にすることがあり、ちょうど自分もsquash mergeの環境でひとつ問題を抱えていたので、その話を自分のメモ代わりに書きたくなった。

問題とは、上にある記事のcascading PRsの話で、feature1 -> feature2 というようにbranchを派生して作った場合に、feature1 をmainにマージした後に作業ブランチを feature2 にして git rebase main すると、必ずコンフリクトが発生するので悩んでいた、ということ。

解決策としては、以下にあるようにgit rebase --onto main <last commit on feature1> feature2 をすればいいらしい。「らしい」というのはまだ自分は試してないけど、同僚がこれで「うまくいけた」と言っていたので。

stackoverflow.com

もしくはJun Mukai's blogに書いてあるような以下の方法でもいいのかもしれない。そういえば git rebase --skip って使ったことなかったな。

PR1に由来するコンフリクトは自分にとっては自明だし、ほとんどの場合にはgit rebase –skipするだけだ。

VPSにDokkuをインストールする

VPS上にDokkuというものをインストールして、Dokku上でHello WorldするRailsアプリを動かすまでのメモ。

Why Dokku?

DokkuのWebサイトに書いてあるように、Dokkuはオープンソース版のHerokuという立ち位置のソフトウェア。かれこれ7年ぐらいHerokuを使い続けていてとても便利だと思っているのだけど、アプリケーションを1つ動かすのに$5かかるようになってしまった。昨今の円安で750円ぐらいかかるし、アプリを複数作るとなるとそれなりにお金がかかるので、VPSでDokkuを動かしその上でアプリケーションを稼働させるようにしたいと思った。

また、WebARENA IndigoのVPSだと、2vCPUでメモリ2GBで税込814円 / 月という安さなので、これを使うとかなりコスト抑えられそうだなと思ったからだった。

インストール

以下の環境にDokku 0.32.3をインストールする。

  • WebARENA IndigoのVPS(4vCPU, MEM 4GB, SSD 80GB)
  • OS: Ubuntu 22.04

インストール自体はDokkuのドキュメントの通り、aptを使ってインストールすれば特にハマることはないはず。

SSHの公開鍵の登録

アプリケーションのデプロイ時にgit push dokku ...とやる場合、sshの公開鍵が登録されていないと失敗するので、以下のコマンドで登録しておく。

$ echo 'CONTENTS_OF_ID_RSA_PUB_FILE' | sudo dokku ssh-keys:add admin

ドメインの設定

インターネット上にDokkuを使ってアプリケーションを公開するためには、当然ながらドメインが必要なので用意しておく。自分は dokku.lampetty.net をベースドメインにして、これのサブドメインでアプリケーションを公開していくつもりなので、必要な設定をした。

まず、 domains:report コマンドで現状のドメインを確認する。

$ dokku domains:report --global

=====> Global domains information
       Domains global enabled:        true
       Domains global vhosts:         i-xxxxxxxxx

Domains global vhostsはデフォルトではホストマシンのホスト名になっているので、これを以下のコマンドで変更する。

dokku domains:set-global dokku.lampetty.net

次に、dokku.lampetty.net サブドメインがこのVPSのIPアドレスになるようにDNSレコードを定義する。Aレコードの方は別になくてもいいけど、IPとのマッピングは1箇所にしたいのでこうしている。

dokku.lampetty.net A <VPSのIP>
*.dokku.lampetty.net CNAME dokku.lampetty.net

digコマンドでDNSレコードを確認して、以下のように返ってくればOK。

$ dig example.dokku.lampetty.net

example.dokku.lampetty.net. 300 IN      CNAME   dokku.lampetty.net.

これでドメインの設定は完了したので、サンプルアプリケーションをデプロイする。

アプリケーションのデプロイ

サンプルアプリケーションのデプロイはドキュメント通りにやって、最後にgit remote add dokku ...のところだけ、自分の環境に合わせて以下のようにやった。

$ cd ruby-getting-started
$ git remote add dokku dokku@dokku.lampetty.net:ruby-getting-started
$ git push dokku main

動作確認

http://ruby-getting-started.dokku.lampetty.net/ にアクセスして、以下の画面が表示されればアプリケーションがデプロイされている。(ruby-getting-started 以降のドメインは先ほど設定したドメイン)

あとはアプリケーションを https でアクセスできるようにする対応なども必要だけど、いったんこれでVPS上にアプリケーションをデプロイできるようになりましたとさ。

ししまるとしろ

最近、新しい猫を我が家に迎え入れた。名前は「しろ」。保護猫で年齢は5~6歳。岡山で多頭飼育の崩壊後ゴミ屋敷となった民家から保護された。その後、地元の預かりボランティアのお宅では他の猫と折り合いが悪く、ほぼケージ生活となったため、他に猫のいない家庭に譲渡したいということで東京に移動してきたところで、我が家で迎え入れることになった。

ウチに来て間もない頃のしろ

しろの話をする前に、このブログやTwitterにも登場していたししまるの話をしなければ、と思っている。ししまるは昨年の12月に虹の橋を渡ってしまった。昨年の夏から肺炎の症状があり投薬などで治療を続けていたが、(おそらく)間質性肺炎という難治性の病気で治ることなく他界してしまった。自分にとってはペットを飼うことが初めてで、当然その死に立ち会うのも初めてだったのでとてつもなく悲しかった。3ヶ月間は毎日ししまるの写真や動画を見ては泣いてしまうという状態が続いていたし、今でも病気で辛そうだったししまるのことを思い出すと泣いてしまう。

ししまる

その悲しさに一区切りつけられたのは、今年の4月に近所のお寺でペットの合同供養祭に参加したことだと思う。ペットを亡くした飼い主たちがお寺に集まり、お坊さんが供養のお経を唱えて線香をあげるという葬儀。人間と同じように葬儀を行うことで気持ちも少し整理された気がして、その後から「また猫を迎え入れる?」という話を妻とするようになった。そんな中で妻が保護猫のサイトで見つけたのがしろだった。色が白いところや雰囲気がなんとなくししまるに似ている...! ということで、本物を見に行ったところ、体重6.5kgの大きさがししまるっぽく、とてもビビりだけど人懐っこいということで、譲渡の申請+トライアルで2週間ほどわが家に来てもらうことになった。

うちに来た当初はずっと机の下に隠れていたけど、2,3日で家の中を探検するようになり、息子含めた全員になでなでをお願いするぐらい懐いていった。ししまるは息子にはあまり甘えなかったので、息子もとても嬉しかったらしい。

ただ、ここで一つ問題が発生。ししまるの時は全然問題なかったのに、妻と息子の猫アレルギーが発動して、薬を飲まないとアレルギーの症状が抑えられず、「これだと迎え入れるのは厳しいかも」という状況になっていた。ひとまずトライアルを延長して、猫のアレルゲンを減らすキャットフードを試したり、体をまめにふく&ブラッシングしたりして、なんとか薬を飲まなくても大丈夫な状態にまでなった。一緒に生活していると慣れてきてアレルギーがおさまったりすることもあるそうで、何が効いたのかはいまでもよくわかってないけど、問題が解決したので一旦良しとしている。

というわけで、無事に9月にしろを正式に迎え入れることができて、また家に猫がいる生活が始まった。白猫のため、黒いシャツを着ているとしろの抜け毛が目立ってしまい頻繁にコロコロをかけないといけないあの生活がまた戻ってきたと思うと、面倒くさいながらちょっとニヤニヤしてしまう。ししまるは家に知らない人がきても興味を持って挨拶していたりしたけど、しろはビビりで引きこもってしまうところなど、さまざまな違いを発見できて面白い。

ししまる、今まで本当に本当にありがとう。しろ、これからよろしくね。