シェルコマンドに関して、昨日は 2 つの記事が目につきました。

これらはそんなに難しい処理ではないものの、この辺の技量は普段どれぐらい黒い画面上で生活しているかによって大分違ってくる気がします。
こういうのを効率的に学習できツールがあれば便利なんじゃないかと思ったので、shellfish というツールを作りました。

yuya-takeyama/shellfish

Shellfish とは

与えられた問題を、コマンドを駆使して解決していくゲームです。
Shellfish のシェル上でコマンドを実行し、出力が問題ごとの期待結果に一致すれば正解です。

言ってみればターミナル上で動作する、ワンライナー専用の Anarchy Golf みたいなものです。

問題ファイルは DSL で定義できます。

インストール

GitHub 上の README.md で確認できるので詳細は割愛しますが、gem install でも bundle install でもインストールできます。

遊んでみる

遊ぶには問題ファイルが必要ですが、引数無しで実行すると標準添付の FizzBuzz 問題に挑戦できます。

Shellfish で FizzBuzz 問題に挑戦

Shellfish で FizzBuzz 問題に挑戦

問題のタイトル、説明文 (あれば)、期待結果が表示されます。
後は出力が一致するまでコマンドを組み立てて、実行していきます。

間違えると diff が表示されます。

FizzBuzz 問題に挑戦 (間違い)

FizzBuzz 問題に挑戦 (間違い)

少し直して、出力が一致すればクリアです。

FizzBuzz 問題に挑戦 (正解)

FizzBuzz 問題に挑戦 (正解)

もっと問題を解いてみる

先に紹介した id:Yamashiro0217 さんの記事の問題を、そのまま Shellfix 用の問題ファイルにしてみました。
(勝手にやってるので問題あればご連絡ください)

yuya-takeyama/learn-shell-commands-with-shellfish

こんな感じで問題だけをリポジトリにして配布するのも簡単なので、興味のある方は是非やってみてください。
エンジニアの新人教育とかにも使えるといいですね。

Shellfish の改善点

  • 現状だと完全一致のチェックしかできないけど、問題によっては diff コマンドでいうところの –ignore-all-space とか –ignore-eol-style とかできるようにしたい。 (そういうライブラリが必要)
  • モチベーションを保てるようにゲーム性を持たせたい。

Web エンジニアであれば, Apache のアクセスログを tail -f で流しながら確認することは多いのでは無いでしょうか.
通常は白黒で非常に見づらいと思いますが, 以下の記事を参考に, カラフルにしてみました.

RubyでANSIカラーシーケンスを学ぼう! (hp12)

今回用意したコードはこちら.

shebang を合わせてもたった 4 行です.
こちらはログフォーマットに依存するので, ご注意ください.
combinedvhost_combined といったログフォーマットを前提としています.

以下のようにして使用します.

$ tail -f /var/log/apache/path_to_access_log | ./colorize.rb

実際の使用例は, 右の画像の通りです.
(このブログのアクセスログです. IP 等は枠外にはみ出させました.)
tail -f なので, このようなログがずっと流れてきます.

私の場合は, リクエストメソッド, リクエストパス, ステータスコードに色付けしています.

上記の記事では HighLineTermColor といった gem を利用していますが, 私の場合はこのワンライナーの正規表現で十分だったので, それで済ませてしまいました.
それぞれの用途によっては, さらなるカスタマイズや, より一般化されたツール化なども考えられると思いますが, とりあえず一例として.

あとはこれを, 以下のような less の使い方に対応させる方法があればいいのですが, 私がやった限りはわかりませんでした…

less の tail -f モード的な何か (YoshioriのBlog)

どなたか, いい方法があれば是非教えてください…
それでは今日はここまで.

これまでは XREA の有料ホスティングを利用していましたが、さくら VPS に移行しました。

この移転にあたって、大体以下のような作業を行っています。

  • さくら VPS 契約
  • OS は Ubuntu 10.04 (32bit) をインストール
  • ログインを公開鍵方式に限定して sshd を起動
  • ufw でファイアウォールの構築
  • aptitude や tasksel などで LAMP 環境の構築
  • WordPress 最新版をインストールし、テスト環境に
  • Git をインストール
  • テスト環境を Git リポジトリにチェックイン
  • RVM をインストール
  • WordPress 用とは別に Redmine 用ユーザーを作成し
  • Redmine 用ユーザーに RVM で Ruby 1.8.7 をインストール
  • Redmine 用ユーザーに Redmine をインストール
  • Redmine にブログ用のプロジェクトを作成
  • Redmine に、ブログ移転のために必要なタスクをチケットとして登録
  • Git リポジトリを Redmine と連携
  • Postfix をインストール
  • Redmine の更新が、Postfix を通じてメール通知されるように変更
  • 必要そうな WordPress プラグインをインストール
  • Apache を mod_proxy でリバースプロキシ化
  • munin をインストール
  • Mysql にスロークエリログが出力されるよう設定
  • 旧サーバーから WordPress の記事をエクスポート
  • 新サーバーに WordPress の記事をインポート
  • 本番環境用の VirtualHost を作成
  • テスト環境から git pull し、本番環境の構築
  • /etc/hosts を書き換え、擬似本番テスト
  • DNS の A レコードをさくら VPS のものに切り替え

大体こんな感じです。順番は必ずしもこの通りではありませんが。

さくら VPS では root 権限がもらえるので、いろいろインストールできるし、 Apache や MySQL についても細かく設定・監視ができるので楽しいです。 XREA のときにはできなかったような、より実践的なサーバー運用を学んで、このブログにも残していければと思います。