シェル芸をGoogle スプレッドシートで管理してみた

ご挨拶

こんにちは、奥村です!

ご存知じゃないかと思いますが、最近でもまだシェルを使って色々しています。
最近ではシェルでCGIを作ってみたりしていました。

以前の記事はこちらになります。 blog.engineer.adways.net

当ブログで奥村という人物を知った方は、恐らく
「あいつシェルしかできないんじゃない?」
と思うかもしれません。否定はしません。

「アドウェイズ シェル」

で検索すると、

f:id:AdwaysEngineerBlog:20180522222030p:plain

僕の記事が出てきます。ですが、

「アドウェイズのシェル使い = 奥村」

ではありません。シェル芸人というのはどこかしらに潜んでいるものです。

「奥村 = シェル」

は合ってます。
という無駄情報を踏まえて、以降の記事を読んで頂ければ幸いです。

本題

シェルでほしいデータを抽出するときに、自然とシェル芸を実践することありますよね。

すぐ芸が完成すると思って取り組んだのに、なかなか思うように行かないことはありませんか?
また、実行したシェル芸を「どこかに残したい!」「共有したい!」と思ったことはありませんか?

僕は思ってました。そして効率よく

  • どこかに残す
  • 共有する

を行う方法として思いついたのが「Google スプレッドシート」でした。
Google スプレッドシートにシェル芸を保存し、使いたいときに使うためのシェルコマンドも併せて作成します。

Google スプレッドシートの準備

まず、Google スプレッドシートを作ります。 後にpermissionのエラーが出るので「共有 > 共有可能なリンクを取得」をしておきます。

API Keyの準備

認証をしてAPI Keyを取得します。

Credentials page このリンクから行ないます。

ダッシュボードの 「APIとサービスの有効化」を選択し f:id:AdwaysEngineerBlog:20180522232739p:plain

「Google Sheets API」を有効化する f:id:AdwaysEngineerBlog:20180522232900p:plain

有効化できたら、 f:id:AdwaysEngineerBlog:20180522224425p:plain でAPI Keyが取得できます。

作成したAPI Keyを選択し、API制限の有効化をする。 f:id:AdwaysEngineerBlog:20180522233148p:plain

これでAPI Keyの準備は完了です。

スプレッドシートにシェル芸を書く

スプレッドシートに「シェル芸」と「どういうことをするのか」を書いていきます。 今回の例では、オプションを忘れてしまいがちなコマンド等も記載しています。

f:id:AdwaysEngineerBlog:20180522225625p:plain

こんな感じで書きます。
そしてGoogle スプレッドシートを使う上での利点を活用するため、 C列(例ではC1)に

=GOOGLETRANSLATE(B1,"ja","en")

を指定します。 f:id:AdwaysEngineerBlog:20180522230002p:plain

するとこんな感じで翻訳もされますね。
検索するときに、日本語と英語で検索できると便利ですよね。

シートIDを確認

https://docs.google.com/spreadsheets/d/<シートID>/edit#gid=0

スプレッドシートを開いたときのURLの シートID の部分がシートIDになりますので、どこかにメモをしておきます。

スクリプトを動かす上で必要なものを準備

  • jq コマンド
  • peco コマンド

を今回作成するスクリプトで使うので、使えるようにしておきます。
※当記事では具体的な方法は割愛します。

スクリプト本体

#!/bin/bash
RESPONSE=$(curl -s https://sheets.googleapis.com/v4/spreadsheets/<スプレッドシートID>/values/A:C?key=<API Key>)
ART=$(echo  "$RESPONSE" | jq .values[][0])
JA=$(echo "$RESPONSE" | jq .values[][1])
EN=$(echo "$RESPONSE" | jq .values[][2])

DATA=$(paste <(echo "$ART") <(echo "$EN") <(echo "$JA"))
SELECTED=$(echo "$DATA" | awk -F '\t' '{print $2":"$3}' | peco | awk -F ':' '{ print $1 }')
echo "$DATA" | grep "$SELECTED" | awk -F '\t' '{print $1}' | sed 's/"//g'

試してみる

このスクリプトを shart (shell art) としてパスを通します。

実行イメージ

f:id:AdwaysEngineerBlog:20180523012413g:plain

このようにpeco を使っているので、選択、検索をすることができます。
単純に選択すると、コマンドが標準出力に出力されるので、evalで実行するとそのまま実行できますね。

eval $(shart)

まとめ

大したことはしてないですが、Google スプレッドシートを使うことで、

  • 実行したシェル芸を残す
  • 共有
  • 翻訳

をすることができました。

良いのができたって時に、スプレッドシートを更新するだけなので運用もそこまでつらくないかなと思います。

僕自身、シェル力(りょく)を磨くことで業務効率が上がった実感があるので、みなさんも是非色々なシェル芸に挑戦してみてください。

参考ドキュメント

Authorize Requests  |  Sheets API  |  Google Developers