Alpine LinuxのDockerコンテナ内で使うjqをインストールする方法


※ 当ページには【広告/PR】を含む場合があります。
2020/04/22
2022/09/30
【jqコマンド応用編】xargsをwhile/forループの代わりとして使う場合の勘所

設定ファイルのいくつかはjson形式で書かれている場合に、nodejsをインストールされている環境であれば、便利なnpmユーティリティパッケージを使って、jsスクリプトで設定jsonを操作することもあるかなと思います。

でも手元にシェルしかないとか、使ってたnpmパッケージが古くて謹製のnodeスクリプトのメンテナンスが面倒になってきたなど、制限された開発環境下や流行り廃りな状況では、やはりシェルスクリプトで操作できたらなーというのは、時たま思うところがあります。

シェルコマンドでjsonをテキストを読み込んで直に操作するのはなかなか骨の折れる作業かと思います。

そんな場合、お世話になるのが、
『jq』というコマンドラインプロセッサーユーティリティです。

jq is a lightweight and flexible command-line JSON processor

今回は、
jqDockerコンテナ上のAlpine Linuxにインストールする方法と軽い動作手順を解説します。


合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集

TL;DR

この記事は、

            
            + Dockerコンテナ内でアプリケーション開発している人
+ Alpine linuxでjqを導入したい人
+ Alpine linuxのシェルスクリプトでjsonファイルを操作したい人
        
向けの内容です。

Docker Alpineイメージへの導入方法は至って簡単で、公式のパッケージ版
jq - alpine linexを利用するだけで解決です。


合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集

jqコマンドの導入手順

では作業を具体的にやってみます。

Dockerfile

では、Dockerfileを書いて、Dockerイメージをビルドしてみます。

今回はベースイメージは
alpine:3.11(※現在執筆中での最新の安定バーション)でpullしてきて動くな〜程度の動作確認ですので、ご自分の環境で動くかお試しください。

            
            FROM alpine:3.11

#Install package of jq
RUN apk update && \
    apk upgrade && \
    apk add --no-cache \
    jq
        
なお、公式のgithubレポジトリよりプロジェクトごとクローンして、ソースビルドしても同じ模様です。

詳細は
参考の方に貼ったリンクの記事に言及されているようです。

コマンドをテスト

インストールが完了したら、そのままローカルでjqコマンドをゴリゴリと叩き込んでいっても良いのですが、jqが遊べるというオンラインのプレイグラウンドを使ってjsonファイルを操作するコマンドを学習するやり方を紹介します。

合同会社タコスキングダム|蛸壺の技術ブログ

まずはプレイグラウンドのコンソール画面ですが、以下のような4つの窓枠で構成されています。

            
            + Filter:
    jpコマンドに続けるjsonをパースするためのフィルター文字列を入力
+ JSON:
    リソースとなるjsonファイルの中身
+ Result:
    jqでパース後にシリアライズされたObjectの出力
+ Command Line:
    結果として提案されるjqコマンド
        
利用者は、リソースとなるjsonファイルの中身をJSONテキストボックスの中に貼り付けて、Filterで好みのObjectが出力できるまで実験できます。

また、コンソールの下部に
Cheatsheetがあり、特に自動でexmapleを生成してくれる機能を搭載しており学習する人向けにコレがかなり役立ちます。

例えば、
Cheatsheet一番最初のUnchanged inputを試してみましょう。

リスト右端のアイコンをクリックします。

合同会社タコスキングダム|蛸壺の技術ブログ

すると、選択したフィルター文字列に対応した一例が表示されます。

合同会社タコスキングダム|蛸壺の技術ブログ

Unchanged inputはjsonファイル入力をそのままシリアライズするもっとも単純な例ですが、特に重要なパイプライン処理(|)や、mapなんかの一例も具に表示してくれます。

この記事で全部の例を紹介するのも野暮ですので、一度プレイグラウンドをご自身の手で触ってみて、
jqの奥深さに触れてみてください。


合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集

参考にしたサイト

jq 公式 | jq is a lightweight and flexible command-line JSON processor

jq play

jqだけ含むコンテナの作成

※ソースビルドの方からインストールされているようです。
記事を書いた人

記事の担当:taconocat

ナンデモ系エンジニア

主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。

合同会社タコスキングダム|蛸壺の技術ブログ【効果的学習法レポート】シェルスクリプトをこれから学びたい人のためのオススメ書籍&教材特集