質問の返答速度をagでXcode起動速度より速くする

質問の返答速度をagでXcode起動速度より速くする

Table of Contents

「◯◯って使ってますか?」の返答速度を爆速にします。

esaのドキュメント更新中や会議など「Xcodeちょっとお休み😇」と Xcode立ち上げてないときに限って
「◯◯の変更対応進めたいですが、ハードコーディングしてる箇所何個ありますか?」
…モニター監視でもしてるの?と疑うくらい、この2つのセット率は無駄に高いです。

この記事は、iOSエンジニアが会議中にXcodeを起動せず
「これ使ってますか?」攻撃に「(タカタカターンッ)使ってないですね」とその場で質問形式の調べ物タスクを解決し、できるiOSエンジニアを演じるためのロードマップです。
ag(The Silver Searcher)のインストール解説はついでです。

Xcode起動とロードと検索の間にシェルコマンドを叩く

XcodeはGUIのなかでも起動とロードが遅いです。
しかもロード後に全文検索も始めたら更に時間がかかります。

実は単純検索で目的である質問の返答が返せる場合は、
シェルコマンドで高速検索したほうが短時間で目的を達成できるパターンが存在します。

シェルコマンドを勧める理由

シェルコマンドは土台がCUIつまり文字です。その分余計なデータ処理は発生しないのでGUIより軽く大抵が速いです。

そしてiOSエンジニアはMac使いです。
ターミナルにも色気を出して丁度よい「iTerm2」あたりで「option+space氏便利〜」とミサワってます。
つまりこれは、Xcodeでロード後の状態が整っていると同義です。

grepは遅い

しかしシェルコマンドと言えど全文検索はCPUパワーに依存する機能です。 検索対象ファイルが多いければ多いほど時間がかかるのも事実です。

純粋なgrepは止めましょう。grepと交際してはいけません。

大抵バトル漫画では、日の呼吸や魔人ブーなどオリジナルや現祖や純粋なキャラほど強いのが定番ですが、IT世界ではそんなことはなく後発ほど強いです。現代社会の若い人ほどIT環境や勉学に恵まれて育ち、新卒なのに中堅より戦闘力が高いのと同じです。

The Silver Searcherは速い

グレップ オソイ…オレ アイツ ヨリ ハヤイ

後発の全文検索では高速の部類に入るツールです。 ggreer/the_silver_searcherでソースコードを公開しており、 「あいつより速いコード検索ツール」という謳い文句で人気を得てます。

実際に質問に答える

では実際にありそうな質問に対して答えて見ようと思います。
執筆時点で少しトレンドな質問を用意しました。
「UIWebViewが非推奨になりWKWebView移行しないとリジェクトされるようになりました。iOSプロジェクトでUIWebViewは使ってますか?」

iTerm+ag操作

「AFNetworkingで使ってます(キリッ」

ちなみに検索ボリュームをそれっぽい規模にするため、実際に実務で使ってるレポジトリ(ファイル数約5.4万個の約2Gバイト)に対して検索してます。

2Gバイトをagで高速検索

The Silver Searcher(ag)の特徴

  • 並列による高速検索
  • .gitフォルダを検索しない
  • .gitignoreの内容も検索しない
  • 隠しファイルやフォルダは検索しない
  • バイナリは検索しない
  • 検索ファイルのタイプ指定可能
  • 正規表現検索
  • 再帰検索する
  • 独自の検索除外ファイル

なぜag?

the silver searcher→silver→銀→ag

The Silver Searcher(ag)のインストール方法

MacなのでHomebrewで簡単インストールできます。

$ brew install the_silver_searcher

Homebrewの使い方に関しては「MacのHomebrewとは?仕組み・使い方と用語整理 」でまとめてあります。

ag(The Silver Searcher)を使う

agはデフォルト設定が既にコード検索に適しておりあまり弄ることはないですが、少し詳しく知りたくなったらここを思い出してください。

検索オプション

カレントディレクトリ以下を検索

$ ag UIWebView

指定ディレクトリ以下を検索

$ ag UIWebView Pods

検索ファイルを指定: (--filetype)

$ ag --cpp UIWebView

指定可能なファイル・タイプを確認

$ ag --list-file-types

ここにない拡張子は1つ上の--filetypeオプションは使えません。
その場合は-Gオプションで検索対象ファイル名を正規表現で指定する。

大文字小文字を区別する(-s)

$ ag -s UIWebView

大文字小文字を区別しない(デフォルト)

$ ag -S uiwebview

検索文字を正規表現で指定(デフォルト

$ ag '..WebView'

検索文字で正規表現を無効化

$ ag -Q 'UIWebView+'

ファイル名やディレクトリ名を正規表現で指定(-G pattern

$ ag -G '\.(c|h|swift)' UIWebView

ファイルを検索(-g pattern)

UIWebViewというファイル名を検索する。

$ ag -g UIWebView

隠しファイルも検索(--hidden)

$ ag --hidden UIWebView

全ファイル検索(-u)

$ ag -u UIWebView

再帰ディレクトリの深さ指定(--depth n)

$ ag --depth 1 UIWebView

デフォルトは25。無制限ではないので注意。無制限は-1

出力オプション

ファイル名だけ表示(-l)

$ ag -l UIWebView

マッチしないファイル名だけ表示(L)

$ ag -L UIWebView

検索除外

.agingnoreファイルをホームディレクトリに配置して、   中身に検索対象から外したいパターンを列挙することで検索対象から除外されます。

agに拘らずXcodeを使う

agをインストールしてiTermをスタンバイさせましょう。 これで会議で急に質問されてもカッコよくできるエンジニアっぽく返せます。

でもXcodeが立ち上がってるなら素直にXcodeで検索しましょう。 Xcodeで開発中にagを使うとか「IDEなにそれ美味しいの」的な動きはせず素直に検索したほうがいいです。

agは検索こそ速けれど、その次のステップがないからです。
つまり、検索結果から次ステップが面倒です。どのみちXcode開くと思います。

agより早いツール

あります。でもまだ速度差によるアドバンテージは低いので好みの問題です。 今よりもでかい環境で調べた時に重くなったら考えるとかで十分です。

grepで十分

今よりもでかい環境で調べた時に重くなったら考えるとかで十分です。

このエントリーをはてなブックマークに追加