話題の記事を期間・はてブ数・カテゴリなどから検索できるWebサービスです。
タグ検索の該当結果が少ないため、タイトル検索結果を表示しています。
話題の記事を期間・はてブ数・カテゴリなどから検索できるWebサービスです。
H(uman-friendly) な grep コマンド hgrep をつくりました. github.com '\w+ で検索した時の出力 ファイルを特定のパターンで検索し,マッチした箇所を構文ハイライトしたコード片で表示します.超ざっくり言うと,ripgrep で検索して bat でマッチ箇所付近を表示するような感じです. grep -C によるコンテキスト表示に似ていますが,マッチ行が近い時は1つのコード片にまとめる,周囲何行を表示するかをヒューリスティックに少し賢く決めているなど,ちょっと出力は工夫しています. 動機 手元のリポジトリでコードを検索する時は 単純に grep で検索してマッチ結果を眺める grep | fzf のように検索結果を fzf で絞り込んだりプレビューする vim $(grep -l ...) のように検索結果をエディタで開く あたりを使い分けているのですが
去年も『本番環境でやらかしちゃった人のアドベントカレンダー』は盛り上がりましたね。 知見が多く、関心しながら拝見しています。 人は必ず何かしらミスを起こすもの。 明日は我が身と思いながら、業務をこなす日々です。 そんな私も業界に入って1年目(前々職)に、本番環境の洗礼にあったことがございます。 当時は苦々しい思いをしましたが、その経験を供養するためにもここに残そうと思います。 発生当時の状況 事件当時、私はサーバのリプレイス案件にアサインしていました。 その業務の中で上司に日常的に運用されているスクリプトの調査を依頼されました。 私はまだ経験が浅かったため理解が合っているかは怪しいですが、関わっていたシステムは設計の段階で大分やっつけだったらしく、 格納場所が間違っているスクリプトやログが散見されました。 リプレイスを切っ掛けに整理をする予定だったと記憶しています。 入ったばかりのペーペー
Linuxのコマンドラインで文字列を検索する際に必要不可欠なコマンドといえば「grep」です。しかし、grepは動画ファイルやPDFファイルの文字列を検索できないのが弱点。そんなgrepの弱点を克服し、動画ファイルのメタデータやデータベースのレコード、画像ファイル内の文字列まで検索可能なコマンドが「ripgrep-all(rga)」です。 GitHub - phiresky/ripgrep-all: rga: ripgrep, but also search in PDFs, E-Books, Office documents, zip, tar.gz, etc. https://github.com/phiresky/ripgrep-all rgaはLinuxに限らずWindowsやmacOSでも利用することが可能。今回はUbuntu 20.04でrgaを利用してみます。以下のコマンドを
こんにちは、 ast-grepの作者Herringtonです。 正規表現でコードを検索したことがある方なら、複数行のマッチングや入れ子構造の処理、コメントの無視などに苦労したことがあるかもしれません。 そこで、ast-grep VSCodeという新しい拡張を紹介します。これは、構造的検索と置換(SSR)という技術を利用して、より正確で効率的な検索と置換を実現するツールです。 構造検索は? テキスト検索と置換の限界 例えば、JavaScriptコードをリファクタリングして、lodash の _.filter 関数をネイティブの Array.prototype.filter メソッド に置き換えたいとします。単純なテキスト検索と置換は次のようになります: これは一部のケースではうまくいくかもしれませんが、いくつかの問題があります。 一行の式しかマッチングできません。コードが複数行にまたがってい
特定の文字列がある行から、別の特定の文字列がある行までを抽出したいということがよくあります。 これgrep等を使うと苦労する話なんですが、flip-flop演算子を使ったPerlのone-linerで可能です。 例えば昨日の記事ではgit help commitの中から--no-edit/オプションの説明を抽出しました。 これは--no-editという文字列が出てくるところから空行までを抽出すれば良い。これは以下のようにすれば可能です。 $ git help commit | perl -nle 'print if /--no-edit/ ... /^\s*$/' 解説自体に空行が混じるケースでは以下のようにすれば良いでしょう。 この例では、--cleanupという文字列が出現してから、次のオプション(-文字列形式)が出るまでを抽出しています。 $ git help commit | pe
大きなコードベースを持ったプロジェクトでコードを書くとなった時に、書くのと同じくらい(またはそれ以上に)コードを読むことになると思います。 なので、コードの検索ツールの良し悪しは生産性に直接的に影響してくると言えるでしょう。 VSCode へのお気持ち 僕は普段はIntelliJを使っていて、その検索ツールの出来(もちろんそれ以外も)に非常に満足していますが、諸々の事情からVSCodeを使いたいという気持ちになることが多々あります。 しかし、どうしてもVSCodeの検索ツールが好きになれず移行する気持ちになれないでいました。 具体的に何が好きになれないかと言うと、Open in Editorを使用しない場合は、検索結果の周辺コードのプレビューを見るためにファイルをポコポコ開いていく必要がありツライです。Open in Editorを使用する場合は、周辺コードの情報量の調整が面倒でツライです
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? 経緯 ごく稀に、プロダクト内に書かれた文言の修正をすることってありますよね。 htmlやテンプレートファイルに文字列が記載されていれば、普通にgrepするなり、sedで一括置換できたりします。 問題は画像です・・・! 画像の中に置き換えなければいけない文字があることもあると思いますが、画像を目視で見ないと分からないですよね。 過去の経験的にも、あとから置き換えなければいけない文字を含む画像が見つかって、修正する・・・みたいなことを何度か経験したことがあります。 (本来は、画像内にあまり文字を書くのは良くないと思うのだけど・・・説明ページ
ANDPADボードチームの原田(tomtwinkle)です。 前回の記事で結構反響いただけたようで注意喚起記事としては名目は果たせたかなと思います。 tech.andpad.co.jp 個人的には過去にもQiitaの自分のブログにもこんな記事 Gormとの破局、そしてFacebook/entとの出会い - Qiita を書いてるようにGorm自体にはそこまで思い入れはなく、新規にプロダクトを作る際の選択肢で検討しているなら出来ればやめた方が良いと言いたい気持ちが強いのですが……既に採用されているプロダクトなら乗り換えは大変ですよね。 以下はそんな既にGormを利用している皆さんのための内容になります。 これは何? GormのQuery Conditions関数を用いた実装を行った際に脆弱性につながる実装があった場合Pull RequestのReviewで自動的に指摘しようというやつです。
バクラク事業部 PlatformEngineering 部 SRE グループマネージャー 兼 執行役員 CISO の @kani_b です。 タイトルからは想像しにくい書き出しですが、みなさん Devin はもうお使いでしょうか?LayerX でもエンジニア組織全体で積極的な利用が進んでいます。今回は導入当時に起きたおもしろ話を共有します。 2ヶ月くらい前、バクラク事業部で Devin を使いはじめることとなり、事業部 CTO の @yyoshiki41 が勢いよくレポジトリのセットアップを進めて、ついに Devin からの初 Pull Request が出てきました。 わ、ワイか…と思いつつ、詳細を確認していきました。 修正の内容 修正対象は、 バクラクの各サービスが集約された monorepo である layerone において、環境構築をおこなうシェルスクリプトを修正するものです。ど
git grep 便利ですよね。 私は git grep と git gsub は本当によく使います。 ところで git grep はローカルリポジトリがないと実行できません。 ローカルにリポジトリがなければ git clone して、 git grep すればいいのですが、もう少し簡単にgrepするために gh-grep を作りました。 github.com gh-grep gh-grepはGitHub APIを使ってGitHub上のリポジトリに対してgrepをするツールです。 特徴は、全てGitHub APIを通じて実行するためローカルに git clone することなくgrepできることです。 また、APIを使っている特徴を活用して複数リポジトリに対してgrepすることなども可能になっています。 あと実行が遅いです。ひたすらGitHub APIを叩いているので...*1。 インストー
これは Andrew Gallant 著 ripgrep is faster than {grep, ag, git grep, ucg, pt, sift} の翻訳です。英語版は UNLICENSE と MIT ライセンスのデュアルライセンスで公開されています。 この翻訳は UNLICENSE の許諾に基づいて公開されます。 この記事では新しいコマンドライン検索ツール ripgrep を紹介する。ripgrep は The Silver Searcher (ack クローン) の利便性と GNU grep の高い性能を併せ持つ。ripgrep は高速で、クロスプラットフォーム (Linux, Mac, Windows 用のバイナリが利用可能) で、Rust を使って書かれている。 ripgrep は Github で公開されている。 この記事では不可能なことを試みる: いくつかの有名なコ
大規模なコードベース向けの高速なASTツールとしてast-grepというものがある。これについての調査メモ。 主に以下の公式ドキュメントを読み進めて、利用方法、パターンやルールの詳細などについて理解を深める。 ast-grepとは 公式ドキュメントでは、コードの検索からLint、codemodに至るまでASTツールとして網羅的にカバーできるツールであることが以下のように表現されている。 Think ast-grep as an hybrid of grep, eslint and codemod. 結果に精度が求められる場面では、高速であるものの精密さに欠けるテキストベースではなく、ASTベースでの正確な解析の方が望ましいだろうけど、ASTでの記述は非常に面倒になりがちという側面がある。 その点においてast-grepは、テキストベースでのgrepではなく、ASTベースでのgrepというよ
はじめに: 弊社のとあるEDI(電子商取引)関連のプロダクトでは、Ruby on Railsを利用してGraphQL APIを提供しています。 その開発活動の中で最近、コードの品質と整合性を維持するためのツールとして rubocop-grep を利用し始めました。 この記事ではその具体的な活用事例についてお話しします。 目次 rubocop-grepとは 最初のユースケースと、基本的な使い方の説明 複数のルールをディレクトリごとに設定するための工夫 ほかにどのようなユースケースがありそうか まとめ rubocop-grepとは rubocop-grep は、rubocop の拡張ツールです。 プロジェクト独自のコーディングルールを、正規表現を用いて簡単に定義することができます。 この手の問題は、今までもカスタムCopを書くことで解決することはできましたが、カスタムCopはASTの知識やRu
コーディングエージェント(ClineやCursorなど)を使っている人は、うまくいくときは少ないプロンプトでさくっとやってくれるのに、あるタスクではそうじゃないという経験をしたことがあると思います。 「高速目grep」は、コーディングエージェントの途中経過を目で確認して、「待て、それはあかん!」って止めた上で、指示を出したり、作業をなかったことにしたりするものです。 これが必要になるケースを分類すると、筆者の理解では次の通りです: 使うべきじゃないテクニックを使ってしまう 使うべきじゃないライブラリなどを使ってしまう 場当たりなことをやらかす 設計ミスをやらかす 現行世代のLLMは、コーディングエージェントでは圧倒的にノウハウが確立された3.5/3.7-sonnetや、世界最高峰の頭脳であるGemini 2.5 Proですら、こういう「やらかし」は日常茶飯事です。 やらかしに対処するために
こんにちは。正規表現でかんたんにCopを書けるRuboCop拡張を作ってみたので紹介します。 github.com 使い方 まず、ほかのRuboCop拡張と同様にgemをインストールし、.rubocop.ymlのrequireにこのgemを指定してください。 この拡張は設定をしないと何も動きません。次のように.rubocop.ymlに設定をします。 Grep/Grep: Rules: # シンプルな例。正規表現にマッチした場合に、このCopが警告をします。 - Pattern: '\bENV\b' Message: Do not refer ENV directly. # パターンはArrayにして複数の正規表現を含めることができます。 - Pattern: - 'binding\.irb' - 'binding\.pry' Message: 'Debug code remains' #
AST-GREPFind Code by Syntax ast-grep(sg) is a fast and polyglot tool for code structural search, lint, rewriting at large scale. Search and Rewrite ast-grep is a code tool for structural search and replace. It is like syntax-aware grep/sed! You can write code patterns to locate and modify code, based on AST, in thousands of files, interactively. ast-grep -p '$A && $A()' -r '$A?.()' Scan as Linter
grep is the ultimate text search tool available on virtually all Linux machines. While there are now better alternatives (such as ripgrep), you will still often find yourself on a server where grep is the only search tool available. So it's nice to have a working knowledge of it. That's why is I've created this interactive step-by-step guide to grep operations. You can read it from start to finish
今年も『本番環境でやらかしちゃった人のアドベントカレンダー』の季節がやってきましたね。 知見が多く、関心しながら拝見しています。 人は必ず何かしらミスを起こすもの。 明日は我が身と思いながら、業務をこなす日々です。 そんな私も業界に入って1年目に、本番環境の洗礼にあったことがございます。 当時は苦々しい思いをしましたが、その経験を供養するためにもここに残そうと思います。 発生当時の状況 事件当時、私はサーバのリプレイス案件にアサインしていました。 その業務の中で上司に日常的に運用されているスクリプトの調査を依頼されました。 私はまだ経験が浅かったため理解が合っているかは怪しいですが、関わっていたシステムは設計の段階で大分やっつけだったらしく、 格納場所が間違っているスクリプトやログが散見されました。 リプレイスを切っ掛けに整理をする予定だったと記憶しています。 入ったばかりのペーペーの私が
まずは結論から SpringのDIコンテナに管理してもらいたいクラスが、自分で作成しているクラスなのか、それとも外部のライブラリ(サードパーティのライブラリ)のクラスなのかによって、@Componentを使うか@Beanを使うか変わる。 @Componentとは @Compnentは、Spring BootでWebのMVCアプリを作成するときに使用する@Controller, @Service, @Repositoryと同様に、SpringのDIコンテナに管理させて@AutowireなどでDIできるようにしたいクラスにつける。 @Controller等はMVCの文脈上で特化したクラスにつけられるのに対して、@Componentはそれら以外の特化していないクラス全般に付与するだけで、基本的には同じ。 @Beanとは @Beanも同様にSpringのDIコンテナに管理させたいものにつける点は同
はじめに こんにちは、ast-grepの作者ヘリントンです。 Reactバージョン19のリリースに伴い、新機能と改善が追加されました。 しかし、この新バージョンへのアップグレードには、ソースコードの一部を修正する必要があります。特に大規模なコードベースでは、このプロセスはかなり手間がかかり、繰り返し行う必要があります。 本記事では、ast-grepというツールの使用方法を説明します。このツールは、コードベース内でパターンを見つけて置き換えることを目的として設計されており、React 19への移行を容易にします。 以下の3つの主要なcodemodsに焦点を当てます。 <Context>をプロバイダとして使用する 暗黙のrefコールバックリターンを削除する refをpropsとして使用し、forwardRefを削除する 前提条件: ast-grepのセットアップ まず、ast-grepをセット
これはゲームボーイの起動時に、カセットがきれいに差さっていないとよく表示されるバグったロゴ。 ゲームボーイ世代の方にはお馴染みの現象です。 参考動画: https://www.youtube.com/watch?v=tc3vYosDTRo (こちらはソフトを差していないようで、ロゴが真っ黒になっています)私自身懐かしいなと思ったのですが、ふと疑問に思うことがありました。 なぜ、このようなバグったロゴを表示する機能があるのだろう? ゲームボーイより前に発売されたファミリーコンピューターでは、このような機能はなく、カセットが上手く差さっていないとゲームがそもそも起動しません。 上手く差さっていないことを遊ぶ人に伝えるだけであれば、わざわざバグったロゴを表示しなくとも、それが分かる表示をすれば済む話です。 前述のツイートのように、多種多様なバグったロゴは必要ないはずです。 「これは何か理由がある
sedコマンド sed(Stream Editor)は、テキストストリームの編集に特化した強力なツールです。以下にsedコマンドの基本的な構文を示します。 オプション: sedコマンドの挙動を制御するための指定です。例えば、置換を行う場合には-eオプションを使用します。 スクリプト: 実行したいsedコマンドの操作を指定します。置換や削除、追加など、様々な編集操作が可能です。 ファイル名: 処理を行いたいテキストファイルのパスを指定します。省略した場合は標準入力から読み込みます。 以下でもう少し詳しく解説します。 コマンド どういう処理をしたいかをコマンドで指定します。 処理内容の出力、削除、文字列の追加、置換などの処理を行えるコマンドが用意されています。 コマンド説明
(正規表現)のように正規表現を()で括ると、マッチした値を参照できるようになる。捕捉グループ、capturing groupと呼ばれ、大体のプログラミング言語の正規表現ライブラリで対応している。 sedだと、\1, \2, ... という記法で後方参照できる。 Rubyだと、正規表現内では \1, \2, ... という記法で後方参照でき、マッチ処理が終わったあとであれば$1, $2, ... という特殊変数によって n 番目の括弧にマッチした文字列を参照できる。 Javaだと、String#replaceAllで置換するなど $1, $2, ... という記法で後方参照でき、Matcherでマッチ処理をする場合はマッチ処理が終わったあとにMatcher#group(int n)で n 番目の括弧にマッチした文字列を参照できる。 Awkでは以下のようにマッチした値を参照する。 awk 'm
作りました。 Go製です。 何で作ったのか、どういう機能があるのか簡単に紹介します。 これまでの課題 sedやgrepには以下の問題があります。 正規表現の記法がPerl互換ではなく、使いにくい sedはmacとLinuxで互換性がなく(BSDとGNUで互換性がない)、OS依存のコードになりやすい これまでその問題を避けるために私はPerlのワンライナーを利用してきました。Perlは正規表現が使いやすく、柔軟な指定もできます。OS依存にもなりにくいです。しかしPerlには以下の問題がありました。 最近のmacやLinuxにはデフォルトでinstallされていないので使いにくい 特にDockerのようなコンテナ環境は顕著 最近は利用例が減っているので敬遠されがち ワンライナー専用ツールではないのでオプション名がわかりにくい そこで以下のツールを求められていると思います。 Perl互換の使いや
Elasticsearchで全文検索する際にmatchとmatch_phraseの違いがはっきり身についていないのでまとめてみる。 version: Elasticsearch 7.5 matchクエリ matchクエリを使うといわゆる曖昧検索ができる。matchクエリに渡した文字列はanalyzeされてから検索に使用される。 例えばtitleというフィールドに「2021年春に発売される新着本の特集!!NEW!!」という文字を保存していたとして、「2021春」で検索できるかどうかを考えてみる。 GET sample-index/_search { "query": { "match": { "title": "2021春" } } } 解析されたクエリはORで検索される indexをkuromojiで形態素解析されるように設定したので、「2021春」は「2021」と「春」に形態素解析される
PowerShellでgrepするには、Select-String (sls) コマンドレットを使います。 grep -r (ディレクトリ下を再帰的に検索) Linux でディレクトリ下を再帰的ファイル内から文字列を検索するときは grep -r 'REGEX' . を実行しますが、同じことを PowerShell で実行したい場合は Get-ChildItem (dir) と Select-String を組み合わせて検索します。 Get-ChildItem -Recurse | Select-String -Pattern "REGEX" PowerShellで再帰的に検索するときに、特定のファイル形式のみを抽出するには -Filter オプションを使用します。 Get-ChildItem -Recurse -Filter "*.java" | Select-String -Patte
Webサービスやアプリ開発の現場では必須のバージョン管理システム「Git(ギット)」。Gitは、専用のソフトを使えばクリックで直感的に操作することもできますが、いざというときにコマンドが使えると便利です。 前回の 第11話 では、編集中のファイルを一時退避することができる「stash」について学びました。 ・スタッシュを保存する $ git stash save ・保存したリストを見る $ git stash list ・スタッシュの復活と削除を同時に行う $ git stash pop [スタッシュ名] 今回の第12話では、リポジトリ内の検索ができる「git grep(グレップ)」の使い方を学びます。このマンガを通して、わかばちゃんと一緒にGitの知識を身につけていきましょう! 【筆者】湊川 あいさん フリーランスのWebデザイナー・漫画家・イラストレーター。マンガと図解で、技術をわかり
It's Past Time To Stop Using egrep & fgrep Commands, Per GNU grep 3.8 Written by Michael Larabel in GNU on 3 September 2022 at 07:25 PM EDT. 88 Comments GNU Grep 3.8 was released today for this commonly-used command-line utility for search plain text data. With the GNU Grep 3.8 it's now made more clear that if you are still relying on the egrep and fgrep commands, it's past due for switching to ju
grep is broken on Sonoma: printf '%s' '3.2.57(1)-release' | grep -o '[0-9.]*' Assertion failed: (advance > 0), function procline, file util.c, line 732. zsh: done printf '%s' '3.2.57(1)-release' | zsh: abort grep -o '[0-9.]*' For minimal reproducers, see: # fails printf '%s' 'a' | grep -o 'b*' # works printf '%s' 'a' | grep -o 'b' # also works (note: without -o flag) printf '%s' 'a' | grep 'b*' Th
簡単な解説 grep の -v オプションは除外を意味します。 正規表現で ^ は行頭を表します。 正規表現の \s は空白文字を表し、^\s* は行頭から0回以上繰り返しの空白を意味します。 そのため、\s*# と書くと # から始まるコメント行(#より前には空白がいくつあっても良い)にマッチします。 正規表現の $ は行末を表します。^\s*$ だと空白のみの行にマッチします。 実行例 #========================= # ここのコメントは除去されます #========================= class Hoge # このコメントも除去されます def hello puts "Hello, World!" # ここのコメントは除去されません end end # このコメントは除去されます hoge = Hoge.new hoge.hello #=> H
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く