Corredor

ウェブ、プログラミングの勉強メモ。

ローカルでも GitHub でお馴染みの「使用言語割合」を表示する「github-linguist」

GitHub でリポジトリを開くと、画面上部にリポジトリ内で使われているプログラミング言語の割合が表示される。例えばこのブログのアセットを管理しているリポジトリだとこんな感じ。

このような、使用言語別の割合をローカルのディレクトリでも検査できないか調べてみたところ、GitHub がこの機能の CLI ツールを出していた。github-linguist というツールだ。

「Ruby : 67.7%」ということで Ruby 製のツール。インストールも $ gem install github-linguist で行える。

インストールに失敗した場合は

まっさらな MacOS Mojave で $ gem install github-linguist と実行したところ、Permission 関連のエラーが出てしまった。どうやら MacOS にデフォルトで入っている Ruby はシステム領域にインストールされているので、RubyGems のインストールなどでつまづくようだ。

そこで、以下の文献を参考に rbenv をインストールし、Ruby v2.6.3 をグローバルに設定した。$ which ruby で確認すると、コレまでは /usr/bin/ruby を見ていたのが、/Users/【ユーザ名】/.rbenv/shims/ruby と、rbenv でインストールしたところが見えるようになっていたら OK。

この状態で gem install をやり直したら正常にインストールできた。

使い方

インストール後、検査したいディレクトリに移動し、$ github-linguist コマンドを実行するだけ。ただし条件があって、対象のディレクトリは Git 管理されていないといけない。

github-linguist はディレクトリ配下のファイルを見ているのではなく、Git のログを見ているのだ。だから極端な話、実ファイルの有無はどうでもよく、git addgit commit された内容だけ分かれば良いのだ。

というワケで、Git 管理していないディレクトリで検査したい場合は、以下のように Git 管理を始め、全てのファイルをコミットした後でないと、割合を表示してくれない。

$ git init
$ git add .
$ git commit -m 'github-linguist'

# 正しく実行できるようになる
$ github-linguist

以上。

GitHub実践入門──Pull Requestによる開発の変革 WEB+DB PRESS plus

GitHub実践入門──Pull Requestによる開発の変革 WEB+DB PRESS plus

チーム開発実践入門──共同作業を円滑に行うツール・メソッド WEB+DB PRESS plus

チーム開発実践入門──共同作業を円滑に行うツール・メソッド WEB+DB PRESS plus

Kubernetes のオシャレな管理コンソール「k9s」

Kubernetes クラスタを管理する時に使うのが kubectl だが、この kubectl の機能を発展させ、ターミナル上でイイカンジに Pod の閲覧・操作ができる CLI ツールを見つけたので紹介。「k9s」というツールだ。

スクリーンショットを見れば、どんな感じか分かると思う。

公式スクリーンショット

インストール方法

MacOS Mojave では Homebrew を使って入れるのが簡単。

$$ brew tap derailed/k9s
$$ brew install k9s

Linux の場合、バイナリを取得して使うのが良いかも。

# TarBall をダウンロードする
$ wget https://github.com/derailed/k9s/releases/download/0.6.6/k9s_0.6.6_Linux_x86_64.tar.gz

# TarBall から k9s というファイルだけを解凍して取り出す
$ tar xvf k9s_0.6.6_Linux_x86_64.tar.gz k9s

# 実行権を付与
$ chmod +x ./k9s

# k9s ファイルを PATH が通っているところに配置する
$ mv ./k9s /usr/local/bin/

tar xvf で解凍する際、そのアーカイブの中のファイルパスを指定すれば、指定のファイルだけが解凍できる。コレ便利。

最近は Go で作られたシングルバイナリをよく見かける。便利。

使い方

インストール後は $ k9s コマンドを叩くだけ。管理画面に移動し、上段に操作方法、下段に Pod 一覧が表示される。

Pod 一覧には以下のような情報が表示されている。

  • Pod 名
  • Pod のステータス
  • CPU 使用率
  • メモリ使用率
  • その Pod が動作している Worker Node 名

さらにココから、以下のような操作が可能。

  • l : ログの確認 (kubectl logs)
  • s : Pod 内コンテナのシェルへの接続 (kubectl exec)
  • d : Pod の詳細確認 (kubectl describe)
  • Ctrl + d : Pod の破棄 (kubectl delete)

hjkl などの操作の他、: でコマンドモードになったりなど、CUI ツールって感じ。終了は Ctrl + C か、:quit など。

機能的には kubectl でできることの拡張に過ぎないが、何より開いている感じがカッコイイのでオヌヌメ。個人的にはあと k8stail を入れておけば Kubernetes の管理は十分できるなぁ〜。

Kubernetes完全ガイド (impress top gear)

Kubernetes完全ガイド (impress top gear)

Kubernetes実践ガイド

Kubernetes実践ガイド

Docker イメージの脆弱性検査ができる「Trivy」を使ってみた

Docker イメージの脆弱性診断ができる、Trivy というツールがリリースされていたのでお試し。

日本人が作成されたそうで、上の Qiita は作者本人による詳細な使い方が記載されている。GitHub リポジトリは以下。

MacOS Mojave を使っていたので、インストールは Homebrew で以下のとおり。

$ brew tap knqyf263/trivy
$ brew install knqyf263/trivy/trivy

診断するには、Docker イメージを生成して、以下のようにコマンドを実行する。

# カレントディレクトリの Dockerfile を使用してイメージをビルドする
$ docker build --tag my-image:v1 ./

# イメージ名を指定して脆弱性診断する
$ trivy my-image:v1

CentOS 7 系のイメージをベースに使って試したのだが、

Total: 645 (UNKNOWN: 0, LOW: 67, MEDIUM: 470, HIGH: 98, CRITICAL: 10)

とのことで、様々な脆弱性情報を総合的に診断してくれていることが分かる。

こういうのって脆弱性をゼロにするべきなのかな?勿論あえて脆弱性を残しておくつもりはないけど、ベースイメージの脆弱性を含めて645件って…対応しきれなくない…?とはいえ、知らないでいるよりは良いか。

Docker実践ガイド 第2版 (impress top gear)

Docker実践ガイド 第2版 (impress top gear)

Docker

Docker

OCI CLI のプロファイルからテナンシの OCID を得る Bash スクリプト

OCI (Oracle Cloud Infrastructure) の各種操作・閲覧が行える OCI CLI

OCI CLI を使う際は、接続先の環境などを記したプロファイルを用意する。$ oci setup config コマンドでプロファイルを作成すると、デフォルトでは ~/.oci/config というパスにファイルが生成される。

今回は、このプロファイルからテナンシの OCID (OCI 上の全てのリソースに割り振られる ID) を抽出してみる。テナンシの OCID が分かれば、コレを基に OCI 上の色々な情報を抽出できるようになるだろう。

参考にしたのは以下のスクリプト。

# -- Check if the PROFILE exists
grep "\[$PROFILE\]" $OCI_CONFIG_FILE > /dev/null 2>&1
if [ $? -ne 0 ]; then echo "ERROR: PROFILE $PROFILE does not exist in file $OCI_CONFIG_FILE !"; exit 2; fi

# -- get tenancy OCID from OCI PROFILE
TENANCYOCID=`egrep "^\[|ocid1.tenancy" $OCI_CONFIG_FILE|sed -n -e "/\[$PROFILE\]/,/tenancy/p"|tail -1| awk -F'=' '{ print $2 }' | sed 's/ //g'`

整理すると以下のとおり。~/.oci/config ファイルから DEV というプロファイルのテナンシ OCID を拾うサンプルだ。

grep -E '^\[|ocid1.tenancy' "${HOME}/.oci/config" | sed -n '/\[DEV\]/,/tenancy/p' | tail -1 | awk -F'=' '{ print $2 }' | sed 's/ //g'

ファイルの所在とプロファイル名を変数に切り出した場合は以下のとおり。

OCI_CONFIG_FILE="${HOME}/.oci/config"
OCI_PROFILE='DEV'
grep -E '^\[|ocid1.tenancy' "${OCI_CONFIG_FILE}" | sed -n "/\[${OCI_PROFILE}\]/,/tenancy/p" | tail -1 | awk -F'=' '{ print $2 }' | sed 's/ //g'

いくつかのコマンドがパイプで連結されているが、各コマンドでやっていることは以下のとおり。

# egrep = grep -E。行頭が `[` で始まるか、`ocid1.tenancy` を含む行を抽出する
grep -E '^\[|ocid1.tenancy' config

# sed -n : 置換できた行だけを出力する。-e は付けても付けなくても変わらない
sed -n '/\[DEV\]/,/tenancy/p'

# Profile 名とテナンシ ID の2行が抽出できるので、下1行 = テナンシ ID だけ抽出する
tail -1

# 区切り文字を `=` に設定し、2列目を取得する。先頭の `tenancy=` が削れて OCID だけになる
awk -F'=' '{ print $2 }'

# 余計なスペースがあった時のために念のため削っておく
sed 's/ //g'

sedawk の使い方がとても参考になった。

sed & awkプログラミング 改訂版 (A nutshell handbook)

sed & awkプログラミング 改訂版 (A nutshell handbook)

AWK実践入門 (Software Design plus)

AWK実践入門 (Software Design plus)

AWKを256倍使うための本 (Ascii 256倍)

AWKを256倍使うための本 (Ascii 256倍)