今日の学び
OOZOUチームによる短く実践的なメモ。日々のエンジニアリングとデザインの仕事から得た小さな学びを紹介します。
YOLOエイリアスでClaude Codeを完全自律で実行する
--dangerously-skip-permissions フラグを使うと、Claude Codeは確認プロンプトなしでコマンドの実行やファイルの編集ができます。ただ、毎回入力するのはすぐに面倒になります。
GNU/LinuxのNVIDIA専用GPUでコマンドを実行する(例:ollama)
コマンド(CLI)がGNU/LinuxでNVIDIA GPUを確実に使うようにするには、コマンドの前に環境変数 \\NV\PRIME\RENDER\OFFLOAD=1 と \\GLX\VENDOR\LIBRARY\NAME=nvidia を付けます。
Punditポリシーで許可パラメータをデフォルトとアクション別に管理する
許可パラメータを管理するには、ポリシーに permitted\attributes と permitted\attributes\for\#{action} を追加します。例:
Turboでのフォーム送信には `requestSubmit` を使う
Turboはformのsubmitイベントをリッスンします。そのため、JSでフォームを送信するときは必ず requestSubmit を使いましょう。
GitHub Actions で Rubocop と ESLint にバンドルされた gem を無視させる
Rails プロジェクトでは、GitHub Actions で gem を vendor ディレクトリにインストールして、以降の実行でキャッシュできるようにすることがよくあります。
「部分」スクリーンキャプチャやプレーンな枠線の画像に macOS 風のドロップシャドウを追加する
好むと好まざるとにかかわらず、macOS でアプリ画面全体をキャプチャするキーストローク (⇧- ⌘- 5) は、デフォルトで保存される画像の周囲に控えめなドロップシャドウを追加します。これにより…
色相塗りつぶし効果を重ねたオーバーレイレイヤーでモノクロ画面を作る
色相塗りつぶし効果を重ねたオーバーレイレイヤーでモノクロ画面を作る
⌥option を押しながら入力フィールド上をクリック&ドラッグしてサイズを調整する
⌥option を押しながら入力フィールド上をクリック&ドラッグしてサイズを調整する
git check-ignore
このコマンドを使うと、特定のファイルやパスが ignore されているかどうかをデバッグできます。さらに -v フラグを付けると、マッチした除外パターンも表示してくれます(ドキュメント)。
先頭ドット記法を使った複数行の Ruby ブロックを Pry に貼り付けられるようにする
最近は先頭ドット記法をよく使います。例:
Rails 6、Ruby 3、Bootstrap 5 と Hotwire
Bootrails のブログ記事を Hotwire で拡張します: この TIL を書いている時点での最新のあれこれ:
Figma でテキストオブジェクトをタイトルケースに変換する
テキストボックスのプロパティを設定すると、すべてを自動的にタイトルケースに変換できます (他の一般的なテキストケースにも対応しています)
Heroku の Slug サイズを削減する
まず、Heroku Repo プラグインをインストールします:
BashとZshでシークレット(プライベート)なコマンドを実行する
コマンドの前にスペースを1つ入れるだけで、~/.bash\_history に保存されなくなります。例: qrencode -o out.png "Some secret text"
SVG を PNG に変換する
MacOS では、(brew で) inkscape をインストールして、次のように使います:
Figma での CMD+クリックの挙動
デザイナーモードで ⌘CMD を押しながら左クリックすると、そのフレーム/グループ内にある最も深いレイヤーが選択されます。一方、インスペクター/開発者モードで同じ操作をすると、選択範囲内の最も外側のオブジェクト/フレーム/グループ…
Rails の Cache-Control
Heroku で静的アセットの cache-control ヘッダーを設定し、CDN を使えるようにするには:
Homebrewでpostgresデータベースをアップグレードする
postgresをアップグレードするには次を実行します
Heroku の rails console での入力を修正する
Heroku (やその他の環境) の rails console にたくさんの行を貼り付けると、行同士が「にじんで」混ざってしまう問題が起きることがあります。
式展開なしの Heredoc
Ruby の Heredoc を式展開('#{....}')なしで使いたいことがあります。キーワードの前後にシングルダッシュを追加することで実現できます:
RailsでDOM用の一意なIDを生成する
Railsには優れたビューヘルパーが数多くあり、そのひとつが dom\id:* です
Rails 5 の attributes API に新しい型を追加する
Rails 5 の attributes API を使うと、フォームオブジェクトをとても簡単に作れます。
macOS の Dock にスペーサーを追加してアプリをグループ分けする
term (または同等のターミナル) を開き、次のワンライナーを貼り付けます:
Amazon AWS S3 CLI で権限を指定してコピーする
term (または同等のターミナル) を開き、次を貼り付けます:
怒りの Docker パージ
Docker で No Space left エラーが出たときの力技の解決策がこちらです:
HTTP を介さずに ActiveStorage にファイルを添付する
ディスク上に生成したファイルや、ユーザーが送信した URL からダウンロードしたファイルを添付したい場合は、次のようにできます。
Ruby で中間階層のハッシュテーブルを自動生成する
すべての中間階層のハッシュテーブルが自動的に作成されます
同じ名前 + 接尾辞でファイルをバックアップする
NOTE: 実際には !#:1 はどのコマンドでも使えます。コマンドに渡された最後の引数を指すからです。
Bash のエイリアスと魔法
ユーザーフォルダに ~/.aliases という別ファイルを置いています。ここにすべての bash エイリアスを保存しています。エイリアスをよく使い、新しいものを定期的に追加するので、その場で新しいエイリアスを追加できる…
Elixir でアナグラムを計算する
例:
rbenv で単一コマンドだけ Ruby のバージョンを変更する
rbenv local で Ruby のバージョンを一時的に切り替えられます
macOS でシステム名を変更する
term (または同等のターミナル) から、次をコピーペーストします:
VS Code の Go to definition を Cmd+Click に変更する
ユーザー設定の JSON ファイルを開いて、このオプションを使うだけです:
IKEA の商品在庫を確認する
IKEA の商品の再入荷を待っているなら、自動で最新情報を把握できる実用的な解決策があります。このガイドでは、シェルスクリプトを使って IKEA の在庫状況を確認し…
シェルスクリプトでコマンドの存在を確認する
シェルスクリプトでコマンドの存在を確認する
Chrome のタブ操作
同じページを開いたまま、直前に見ていたページに戻りたいことがあります。ショートカットを使えばとても簡単に実現できます
brew の古いフォーミュラをクリーンアップする
brew cleanup で空き容量を取り戻しましょう!
Enumerable から Hash を作成する (Rails 6.0)
Enumerable から Hash を作成できる新しいメソッドです:
冪等なマイグレーションを作成する
破壊的なマイグレーションを書くときは、テーブルを削除する場合には if\exists: true を使い、カラムを追加または削除する場合にはテーブルの存在を確認してください…
独自の git コマンド (エイリアス) を作る
git コマンドを短くしたいと思ったことはありませんか?もちろんシェルのエイリアスでも実現できますが、それぞれのエイリアスが何を表すか忘れないように常にコンテキストを含める必要があります。実は git では独自の…
Git でマージ済みのブランチを削除する
egrep -v 'master|develop|foo|bar' のようにして、除外するブランチを増やせます
マージ済みの git ブランチを削除する
マージ済みのローカル git ブランチをすべて削除する便利な git コマンドです git branch --merged | egrep -v "(^\\|master|dev)" | xargs git branch -d*
JS の分割代入
シンプルな例 javascript const [a, b, ...c] = [10, 20, 100,200] // a= 10, b=20, c=[100,200] const { first, second } = { first: 1, second: 2 } // first = 1, second = 2
Git でローカルファイルをリモートのバージョンと diff する
以下のコマンドを実行するだけで、リモートとの差分を簡単に取得できます
コミットからブランチを見つける
c198bb715 Make default expired description logic pretty `
以前のコミットをリポジトリに強制プッシュする
コードをプッシュした後で、以前のコミットを強制プッシュしたい場合は次のように実行できます shell git push origin +commit\sha^:branch\name
現在の git ブランチ名を取得する
現在の git ブランチ名を取得する
接続中の Wi-Fi のパスワードを取得する
password: "!forHackers" `
ファイルの Git 履歴を追う(GUI)
ファイルの Git 履歴を追う(GUI)
JavaScript で属性付きの HTML 要素を 1 行で作成する方法
JavaScript のプロジェクトでは、HTML 要素を動的に作成することがよくあります。従来のやり方では、何行ものコードを使って要素を作成し、複数の属性を 1 つずつ設定していたかもしれません…
プロジェクト内の god object を見つける方法(Rails)
プロジェクトルートに移動し、app/models へ cd して(もちろん CLI で)、wc -lw \ | sort -u* を実行します
Vim の終了方法
1. 最新版の Vim をインストールする 2. Vim でファイルを開く 3. ⌘-Q を押してターミナルを閉じる 4. ターミナルを再度開く
本当に!! vim を終了する方法
ターミナルで
VIM で sudo を使ってファイルを保存する方法
VIM で sudo を使ってファイルを保存する方法
別のアクションに送信する HTML フォーム
送信ボタンに値を持たせて送信すれば、どのボタンでフォームが送信されたかを追跡できることは以前から知っていました。例:
以前に設定した order を上書きしたい場合
以前に設定した order を(default\_scope 経由のものでも)上書きしたい場合は、代わりに reorder() を使いましょう。
Bundler のパフォーマンスを改善する
bundler のタスクを jobs で並列実行して、bundler のパフォーマンスをレベルアップしましょう:
固まった rails を kill する
特定のポートで動いている rails を kill したい。(私のラップトップでは複数の rails サーバーが動いています。)
応答しなくなった SSH セッションを kill する
SSH セッションはたまに応答しなくなることがあります。私の場合、ラップトップをスリープさせるとかなり頻繁に起きます。タブごと閉じるのではなく、SSH のエスケープ文字を使ってセッションを kill できます
数を制限した has_many 関連
数を制限した has_many 関連
特定のディレクトリを除いてディレクトリ構造を一覧表示する
1 つか 2 つのディレクトリを除いて、カレントディレクトリの構造を表示したいと思ったことはありませんか?
モデル名を一覧表示する
注意: RUBYOPT=-W0 は rails コマンド実行時の冗長な出力を抑え、警告を非表示にします。
hub を使ってコマンドラインから PR を作成する
まず brew で hub をインストールします: brew install hub 次に、以下の例のようなシンプルなコマンドを使います: hub pull-request -m "best pr ever" -b oozou:develop -h feature/awesome-improvements
私がよく使う Slack ショートカット
⌘-K(または T)でチャンネルスイッチャーを開きます(私はこのショートカットだけでチャンネルを移動していて、新着メッセージのないチャンネルはすべて非表示にする設定にしています)
optional なリレーション + RSpec w/shoulda-matchers
User 1 - 0..1 Laptop
Postgres の関数と Non-sargable なクエリ
postgres の関数を where 句の中で使うと、クエリが non-sargable になることがあります。
PostgreSQL の UPDATE Join
このクエリは、PostgreSQL の UPDATE join 構文を使って、別のテーブルの値をもとにテーブルのデータを更新する方法を示しています。たとえば:
どの Vim モードでも行を素早く上下に移動する
vim で行を移動することが多いので、簡単にできるようマッピングを作りました。⌘-j で下へ、⌘-k で上へ移動します。ノーマル、インサート、ビジュアルの各モードで動きます。 vim nnoremap <D-j> :m…
ruby 2.6 に同梱された bundler を削除する
bundler v2 をインストールした状態で ruby 2.6+ を使って rails 6 アプリを生成すると、使えない binstub が作られます。You must use Bundler 2 or greater with this lockfile. というエラーが表示される場合は、削除する…
ブランチから不要なコミットを削除する
ブランチから不要なコミットを削除する
VIMでファイル名を変更する
VIMでファイル名を変更するために私が使っている便利な関数を紹介します(MacVIMとNeovimでも動作します)
DELETE後にPostgresのテーブルシーケンスをリセットする
テーブルから直近のレコードを削除したとき、自動採番フィールドの連続性が重要であれば、シーケンスカウンターをリセットできます。次のテーブル users に対する操作を考えてみましょう。
Gitで削除したファイルを復元する
Gitで削除したファイルを復元する
現在のブランチに対してrubocopを実行する
現在のブランチに対してrubocopを実行する
コミット前にrubocopを実行する
GitフックはGitリポジトリでのタスク自動化やコーディング規約の徹底に非常に強力です。よくあるユースケースのひとつが、コミットを許可する前に自動テストやコード解析ツールを実行することです…
同じコマンドを異なる入力に対して実行する
同じコマンドを異なる入力(複数の入力)に対して繰り返し実行しなければならない場合の方法です。
RailsでscopeとscopeをORで組み合わせる
scope :human, -> { user.or(author) } scope :terminator, -> { admin.or(robot) } `
過去のコミットで削除されたファイルを確認する [git]
過去のコミットで削除されたファイルを確認する [git]
cURLでSlackにメッセージを送信する
Slackでは、Webhooksサービス経由でメッセージを送信できます
古いリポジトリをshallow cloneする
作業するリポジトリでGitの全履歴が必要ない場合は、クローンの深さを指定して、リポジトリの直近x個のリビジョンだけをクローンできます。
RailsアプリのTODOやその他のノートを表示する
rails notes を使うと、RailsアプリのすべてのTODO/OPTIMIZE/FIXMEを表示できるのをご存じですか?
Vue.jsで実現するシンプルなFluxアーキテクチャ
シンプルな状態管理パターンだけで十分な小規模アプリの場合、私はいつもアプリの状態を保持するコンポーネント、つまりコンテナをひとつ用意します。これはアプリが自身の状態を参照するための単一の信頼できる情報源として機能します…
rspecの警告を抑制する
$ RUBYOPT=W0 bundle exec rspec spec/ ...
Railsのログに有用な情報をタグ付けする
Railsのタグ付きロギングについて最近学びました。次のようにしてログにタグを付けられるのをご存じですか
VIMのマッピングで大文字を使う
注意:@joe これで君の問題は解決するはず :D
FFmpegとApple Scriptで動画を圧縮する
動画をドラッグ&ドロップするだけで大幅に圧縮できるアプリケーションを作りましょう。
`host` でドメインの詳細情報を取得する
DNSサーバーからドメインのA/CNAME/MXなどのレコードを調べるのに dig を使っているかもしれません。しかし、手早く概要を知りたいだけなら host を使いましょう。
コレクションのJSONスキーマでminItems/maxItemsを使う
コレクションのJSONスキーマの信頼性を高めるには、minItems と maxItems を使いましょう。そうすればAPIを信頼できるようになります。
Neovimをgitのdifftoolとして使う
これを ~/.gitconfig に貼り付けるだけです
Gitのエイリアス機能を使う
Gitでは、configを通じて内部的にエイリアスを作成できます。グローバルconfigは ~/.gitconfig にあるはずです
GithubのCIステータスを監視する
Githubの hub をインストールしていれば、現在のブランチの ci-status を次のように取得できます。
FactoryBotはActiveRecord以外のモデルにも使える
FactoryBotの initialize\with* メソッドを使うと、オブジェクトを好きな方法で初期化でき、任意のオブジェクトを自在にファクトリー化できます
ファイルツリーを一覧表示するZsh関数
コマンドラインでディレクトリを移動していると、ディレクトリとサブディレクトリの構造を「ツリー」形式で確認できると便利なことがよくあります。treeのようなツールは数多くありますが…