ユニファ開発者ブログ

ユニファ株式会社プロダクトデベロップメント本部メンバーによるブログです。

そのコマンドにロマンはあるか

こんにちは。ICT開発の柿本です。

全てのエンジニアに声を大にして問いたいのですが、 コマンドを覚えるのってツラくないですか?

自分の記憶力の問題なのか、この世にコマンドが多すぎるのかわかりませんが、『あのコマンドってどうやって使うんだっけ?』と思ってググると、検索結果のほとんどがアクセス済みだったりして、『そういえば最近調べたなぁ』となります。

しかも、Googleはご丁寧に『〇〇/〇〇/〇〇 にこのページにアクセスしました。』と表示してくれますが、『あれ?これ今日じゃない?』となるとパソコンを閉じたくなります。(そもそもあの表示に何の意味があるんだろう。。)

そんなこんなで私の作業メモにはつらつらと色々なコマンドが書いてあるわけですが、今日はその中の一部を恥を忍んで紹介します。

環境

OS: Mac OS 10.14  
シェル: zsh

『シェルは何を使ってますか?』
『zshです。』
『すごいですね!!』

はエンジニアトークあるあるですが、zshは補完機能が優れているのでどちらかというと すごくない人 こそ使うべきだと思います。

そして 適度にすごい人.zshrc をGitHubから拝借すれば、労せずに楽できます。
超絶すごい人.zshrc は逆に混乱するので避けたほうが良いです。

ただ、ネットで見つけたコマンドがなぜか動かなくて4時間くらい潰した結果『パラメータ文字列の をエスケープしないとダメだった〜!!』みたいなことはままあるので、その辺は気をつけたほうがいいです。

まあその4時間の学びが大事だったりしますが。

それではさっそく紹介していきます!!

curlしたい

% curl -X POST -H 'Content-Type:application/json' http://localhost:3000/api/v1/users -d '{"name":"Taro"}'

APIサーバーの動作確認をする時によく使います。

『これを覚えるのがツラいの?』てレベルですが、 Content-Type だったか ContentType だったかいつも間違えるので、メモしておくことにしました。

認証を通しつつcurlしたい

% curl http://localhost:3000/api/v1/users/1 -H "Authorization:Bearer token_string"

これもAPIサーバーの動作確認をする時によく使います。

これは Authorization だったか Authenticate だったか Authentication だったか混乱するので、メモしておくことにしました。

『AuthorizationとAuthenticationの違いを学び直してこいよ!』というツッコミもありそうですが、そもそもそれが頭に入るのであればこのコマンドはとっくに覚えられています。

データをたくさん作りたい

% i=0; while [ $i -le 9 ]; do curl -X POST -H 'Content-Type:application/json' http://localhost:3000/api/v1/users -d '{"name":"Taro_0'"$i"'"}'; i=$(expr $i + 1);done

API経由でデータをたくさん作る時のワンライナーです。

単純にダミーデータが欲しかったり、負荷をかけてみたかったり、データをたくさん欲しいことがあったので、メモしました。

大量に投入したい時はDBに直接入れたほうがパフォーマンスはいいですが、リレーションなども気にしながら入れるのであれば、API経由が一番気が楽だったりします。

nginxのaccess.logを解析したい

% find . -name 'access.log.201901011[0-3]_0.log' | xargs grep -h -o '\turi:/\S*' | sed -e 's/[0-9]\{1,\}/*/g' | sort | uniq -c | sort -r

ログを1時間でローテーションしていて『4時間分のログを解析したい!』といった時に、複数ファイルをまたがってややこしくなるので、メモしました。

やっていることは、

  1. 対象のログファイルをfind(ここでは10時から13時まで)
  2. uri: xxx の部分だけgrepで抽出
  3. /users/1 /users/2 は同じuriとして扱いたいので数字を * にsedで置換
  4. uniq -c するために sort
  5. 最後にもう1回降順ソートしてアクセスランキング的な並びにする

これはエンドポイントごとのアクセス数を見たい時でしたが、 grep の対象を変えればいろいろな切り口の解析ができます。

ログファイルを解析するツールもあるのでしょうが、大事なのはロマンなのです。

RailsアプリをDockerでサクッと動かしたい

% docker run --name ruby-tmp -it -v `pwd`:/var/ruby -w /var/ruby -p 3000:3000 ruby:2.6.1 /bin/bash
# bundle install
# apt-get update && apt-get install -y nodejs
# rails db:migrate
# rails s

ちょっとこのRailsアプリを動かしてみたいな、という時に使います。
PostgreSQLなど使っているともう少し工夫が必要ですが、SQLiteなら大丈夫です。

普段の開発でdocker-composeを使っていると、 docker-compose updocker-compose down くらいしか使わず、 docker コマンドは忘れ去ってしまうのでメモしました。

弊社ではサーバーサイドエンジニアの採用時に簡単なRailsアプリを課題(これが結構面白い)として作っていただくのですが、それを動かしてみる時に便利です。

終わりに

私のメモにはもっとたくさんコマンドが書いてあって、

『それくらい覚えろよ』

もしくは

『わざわざコマンドでやる必要ないよね』

のどちらかに分類できるのですが、コマンドにはロマンがあると信じてこれからもどんどんメモしていこうと思います。

おしまい