読者です 読者をやめる 読者になる 読者になる

さくらのクラウドAPIをパイプで渡せるようにする

さくらのクラウド Ruby Gem API FUSE

この記事はさくらインターネット(その2) Advent Calendar 2016の20日目の記事です。

はじめに

FUSE での開発を題材にアドベントカレンダーを書こうと思っていたところ、あまりの偶然に驚愕したのですが、昨日のアドベントカレンダーで Go で FUSE で開発された方がいらっしゃいました。拝読し、翻って私の記事のことを思いますと、開発の途中の報告レベルで恐縮しています。本記事は Ruby での実装となります。何卒よろしくお願いします。

余談ですが、個人的に今年の上旬は FUSE 熱が高かったのですが、

いろいろ他の優先すべきことがあったためいつの間にやらペンディングとなり、今回、アドベントカレンダーの題材ということもあり FUSE の開発に着手できほっとしています。アドベントカレンダー駆動開発いいですね。

概要

現在、Ruby の Gem の lwoggardner/rfusefs を使い、FUSEファイルシステムを開発中です。

blp1526/sacloudfs-rb

さくらのクラウドAPI1.1 を利用したファイルシステムで、例えば、ターミナルから ls mountpiont/tk1v/disk と打った場合、裏でさくらのクラウドのSandboxゾーン(tk1v)に対して GET /disk がリクエストされ、コマンドの結果としては、disk ディレクトリの配下にディスクの id がファイルとして存在するという処理になっています。 具体的には、

f:id:blp1526:20161220212923j:plain

というようにSandboxゾーンで3つのディスクを作成している場合、

f:id:blp1526:20161220213019j:plain

上記2枚目のターミナルのとおり、ls mountpoint/tk1v/disk の結果として、3つのファイルが標準出力に表示されます。

さくらのクラウドAPIについて

さくらのクラウドAPIについては、下記スライドでエバンジェリストの寺尾さんがまとめられています。

スライドの15枚目にありますが、Sandboxゾーンというテスト用のゾーンがあり、無課金でAPIの動作確認ができます。 また、スライドの29枚目のとおり、APIを利用するためにはAPIキーの発行が必要です。

所感

このファイルシステムFUSE の練習として開発しています。このファイルシステムの利用方法をあえて言うと、ブログの記事名のとおり、ls mountpoint/tk1v/disk | xargs curl ... のように、コマンドとコマンドをパイプでつなぎ、何らかの処理をできるようにすることだと思いますが、いろいろな例外に対する処理を想定すると、普通になんらかのスクリプト言語で処理を書いた方がいいと思われます。 FUSEファイルシステムを簡単に開発することができますが、本当に役に立つものを作るのは難しいものだと感じます。fuse-sshfs や ntfs-3g、zfs-fuse のような身近に利用しているレベルのものを開発できるよう、技術力と発想力を磨いていきたいと改めて思いました。

Google 検索後に Developer Tools を開く Alfred Workflow

alfred

Google 検索後に Developer Tools を自動で開く Alfred Workflow を作りました。

github.com

検索ごとに Developer Tools を手動で開く手間が省けだいぶ楽になりました。

tig のチェックアウト時などの [Yy/Nn] の確認をスキップする設定

tig

ずっと探していたのですが、マニュアル内を confirm などの単語で検索していたのが間違いでした。 設定方法はこちらに記載されていました。

例えば、tig refs で行うチェックアウトの場合ですと、こちらに記載の

bind refs C ?git checkout %(branch)

の ? の部分を ! に置き換えたもの、すなわち

bind refs C !git checkout %(branch)

.tigrc に追加するだけで [Yy/Nn] の確認をスキップできました。さらに、チェックアウトした瞬間に tig を抜けたい場合には < を追加して

bind refs C !<git checkout %(branch)

で OK です。

「表記ゆれ撲滅ハッカソン」に参加しました

勉強会

六本木の Mozilla Japan にて開催された「表記ゆれ撲滅ハッカソン」に参加しました。 その名のとおり、表記ゆれを正すハッカソンで、私は mozilla-japan/gecko-l10n というリポジトリにて「語尾が -er、-or、-cy、-ry、-gy の単語はすべて長音を付ける」というルールに基づき、いくつかの単語を対応しました。こちらのプルリクなどです。

印象に残ったことはいくつもありますが、そのひとつとして、こちらの Wiki にも書かれていますが、「特定の接続詞や副詞はひらがなで書く」際の基準として、共同通信社の『記者ハンドブック新聞用字用語集』という書籍を利用されているという話がありました。なるほど、このような基準となる書籍があるのですね。

非常にためになるハッカソンでした。主催の Mozilla Japan 様、ありがとうございました。

git のエイリアスとして peco で branch 一覧を表示し checkout できるようにする

tig git peco

ターミナルから tig refs と打つと refs の一覧画面が表示されます。 さらに、refs の中から checkout したいものを選択し、 Shift + c を打つと、選択したものにチェックアウトすることができます。

大変便利な機能ですが、ローカルブランチだけでなくリモートブランチやタグも表示されてしまいますので、 ローカルブランチだけを見たい場合には表示される量が多すぎますし、 また、チェックアウト時には本当にチェックアウトをするか否かの確認の [Yy/Nn] を打たなければならず、確認を飛ばしたくなる場合もあるかと思います。

そこで、gitエイリアスとして、tig に倣い git refs を用意しました。 .gitconfig

[alias]
  refs = !git checkout $(git branch | peco | awk '{ print $NF }')

上記のように定義し、peco を通して快適にブランチの切り替えができるようになりました。

ググってみると同様のことは .zshrc に定義されている方が多かったのですが、 自分は tigrefs を真似たくて gitエイリアスとして定義した次第です。

Vim でログファイルを開くときのための設定

vim

ログファイルが特にそうなのですが、同じような行が続くファイルを目視確認するとき、どの行に着目していたのか見失う場合があると思います。

Vim の場合ですと、:set cursorline を実行し、現在いる行にカーソルラインを表示し、わかりやすくすることが可能ですが、このカーソルライン、Ruby などアンダースコアが多いプログラミング言語を書いていると、カーソルラインの線なのか、メソッドなどのアンダースコアなのかわかりにくくなってしまいなかなかの困りものです。

そこで、*.log もしくは logrotate で圧縮された *.log*.gz のファイルだけに set cursorline を設定するように、

augroup Log
  autocmd!
  autocmd BufNewFile,BufRead *.log set cursorline
  autocmd BufNewFile,BufRead *.log*.gz set cursorline
augroup END 

と .vimrc に追加したところ、大変心地よくログファイルを閲覧できるようになりました。

Vim のタブ移動を矢印キーに割り当て直感的かつタイプ数を節約する

vim

通常の割り当て

Vim のタブ機能は大変便利です。 個人的には kana/vim-tabpagecd を利用して、別のディレクトリと行き来するときなどに感謝の気持ちでいっぱいになります。 ただ、デフォルトの設定ですと、次のタブに移動するときはgt、前のタブに戻る場合はgTというキーバインドであるなど、直感的でなく、また、タイプ数が多くて連続では打ちにくくもあるかなと思います。

矢印キーに割り当て

なんとか直感的かつタイプ数を少なくする方法はないかと考えていたところ、普段全く触っていない矢印キーを活用してみてはどうだろうと思い至りました。 そこで、 .vimrc

nnoremap <Up>    :tabclose<CR>
nnoremap <Down>  :tabnew<CR>
nnoremap <Left>  :tabprevious<CR>
nnoremap <Right> :tabnext<CR>

と設定し、 Shougo/unite.vim のためのキーバインドとして

nnoremap <LEADER>t :Unite tab<CR>

を加えたところ、大変満足なタブの移動具合となりました。

追記

という記事を書いてから2、3日使ってみましたが、 矢印キーまで指の位置を動かすのが億劫で、 結局現在は以下のようになりました。

nnoremap <C-c> :tabclose<CR>
nnoremap <C-n> :tabnew<CR>
nnoremap <C-h> :tabprevious<CR>
nnoremap <C-l> :tabnext<CR>

またいつか変わる日が来るかもしれません。