66
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

プログラムのネーミングに迷ったとき Alfred Workflows を使って、もっと手軽に GitHub でコード検索する

Posted at

素晴らしい記事を見つけました。

プログラムのネーミングに迷ったら GitHub でコード検索すると参考になる説 - Qiita

みなさん、コードを書いていて変数やメソッド名のネーミングって迷いますね。

こんな時に自分たちはチームを横断して「こういう名前考えたんだけど、これってどうかな?」という確認を Slack 上で行っています。先日、この Slack チャンネルを見ていて考えました。

「GitHub で検索すれば世の中のコードでどのぐらい使われているかざっくり分かるので参考になるのでは?説」

というアイデアを実現するため、CLIでサクッとキーワードの件数を検索できるツール ghkw を作られたとのこと。

% ghkw ninja samurai bushi sensei senpai kohai

RANK KEYWORD TOTAL
1 ninja 3,374,938
2 samurai 730,748
3 sensei 213,917
4 senpai 26,786
5 bushi 25,493
6 kohai 2,195

うん。良いですね。
ただ…ターミナル立ち上げるのも時々億劫なんだよなあ…。

# Alfredと連携させてみよう

さて、Macのランチャーアプリ Alfred には、強力なコマンド呼び出し機能「Workflows」があります。(有料)
[Alfred Workflows - Extend Alfred and Boost Your Productivity](https://www.alfredapp.com/workflows/)
これを使って、ランチャー内で結果を確認できたら最高なのでは?

ということで、ターミナルを使わなくてもいいようにしてみました。

## 手順

簡単です。

### 1. Alfred の Preference で、①Workflowsを表示し、②新規作成し、③を配置して開く

![image.png](https://qiita-image-store.s3.amazonaws.com/0/34405/7aa178b4-d91d-f419-d367-d4d72fdee8c3.png)

### 2. スクリプトを書く

![image.png](https://qiita-image-store.s3.amazonaws.com/0/34405/3b4c57be-cc58-32eb-f03b-66f0db88c85e.png)

zsh の知識もあまりないですが、ほかの Workflow や参考サイト[^1][^2][^3]を見ながら、見よう見まねでなんとかなりました。

[^1]: [Alfred Workflowのシェルで追加コマンドが利用できない理由とその対策 | 豆腐メンタルは崩れない](http://wbtmiu.herokuapp.com/2014/10/30/b6a2f20af2e75e89c1a52ccde3b182ec/)
[^2]: [zsh の配列操作の基本から応用まで - Qiita](https://qiita.com/mollifier/items/f897b3fddd2d10369333)
[^3]: [Split string with zsh as in Python - Stack Overflow](https://stackoverflow.com/questions/2930238/split-string-with-zsh-as-in-python)

```zsh
PATH=$PATH:/usr/local/bin  # 環境変数を設定しないと brew でインストールしたコマンドが使えない
zmodload zsh/regex  # zsh で正規表現を使うために必要

result=$(ghkw {query})  # {query} でユーザー入力値が取得できる
arr=( ${(@f)result} )  # ghkw の出力結果を行ごとの配列へと変換

cat<<EOB
<?xml version="1.0"?>
<items>
EOB

for i in $arr; do
	cols=("${(@s/|/)i}")  # 結果が `|` で区切られているので分割。ちなみに index は 1 始まり
	keyword=$(echo $cols[3] | tr -d '[:space:]')
	population=$(echo $cols[4] | tr -d '[:space:]')

	if [[ $cols[2] -regex-match "[0-9]" ]]; then  # 結果(= cols[2] が数字) 以外の行を雑にフィルタ
		cat<<EOB
		<item uid="$population" arg="$keyword">  # item は uid の順にソートされる
		<title>$keyword</title>
		<subtitle> hits: $population</subtitle>
		<icon>icon.png</icon>
		</item>
EOB
	fi
done

cat<<EOB
</items>
EOB

3. (Optional) 選択時に GitHub の検索結果を開くようにする

image.png

ブロックをつなげて…

image.png

https://github.com/search?utf8=%E2%9C%93&q={query}&type= と設定。

できた!

image.png

いいでしょー。

66
45
0

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
66
45

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?