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

その手の平は尻もつかめるさ

ギジュツ的な事をメーンで書く予定です

Donki というツールを作りました

ruby

諸事情によりRuby を知っておく必要があって、「たのしいRuby」 やら「初めてのRuby」を読んだんですけど、
「やっぱり実際にソースを書かなきゃ覚えられないだろ!」と思ったので、Ruby で自分が使うためのツールを作りました。

Donki?

pathogen やVundle、NeoBundle といったVim Plugin の管理ツールは非常にクールで使いやすくて良い感じですよね。
ただ、当然の事ながらこれらはVim Plugin の管理にしか使えないので、
「非Vim Plugin のリポジトリが対象でも使える管理ツールが欲しいなー」
「GitHub とかに転がっている、スーパーハッカーが作った便利ツールを一元管理できるツールがあれば便利だよなー」
という訳で出来たのがDonki です。

使い方

Donki をインストールするとホームディレクトリに.donkirc という設定ファイルが生成されるので、
それをカスタマイズして使用します。.donkirc の記述例はこちらにあります。
(donki.rb にはエイリアスを設定しておくと便利かも分かりません)

基本的な使い方としては、(ここら辺はNeoBundle を参考にしました。ただ、アプリケーションの都合上clean はありません)
$ ./donki.rb install
すると、.donkirc で指定されたリポジトリをローカルにダウンロード・インストールします。

$ ./donki.rb update
すると、ローカルにインストールされたリポジトリをアップデートします。(内部的にはgit pull を実行しています)

$ ./donki.rb uninstall
は、全てのインストールされたリポジトリをアンインストールします。
uninstall の後にリポジトリ名を指定すると、そのリポジトリのみをアンインストールします。

あとの詳しい使い方はREADME とか--help とかを見てもらえればと思いますが、
いかんせん僕の崩壊した英語で記述されているので、「マジ意味わかんねえ!」みたいな時はご一報下さい。

.donkirc の実用例

以下は僕の.donkirc になります。
{
    "default_directory": "~/.donki",
    "repositories": [
        "git@github.com:moznion/Pod2Readme.git",
        "git@github.com:moznion/Implement_Trashbox.git",
        { "url": "git@github.com:moznion/skeletons4vim.git", "name": "skeletons", "branch": "master", "target": "~/.vim" },
        { "url": "git@github.com:moznion/snippets4neosnippet.git", "name": "snippets", "branch": "master", "target": "~/.vim" },
        { "url": "git@github.com:moznion/vimrc.git", "target": "~/dotfiles" }
    ]
}
こういう風にしておくと、Pod2Readme とImplement_Trashbox *1 は~/.donki ディレクトリ以下にインストールされ、
skeletons4vim はskeletons という名前で、またsnippets4neosnippet はsnippets という名前で~/.vim ディレクトリ以下に、
vimrc は~/dotfiles 以下にインストールされます。
(この例では全てのリポジトリのURL をssh 形式で指定していますが、https 形式でもgit 形式でも大丈夫です)

こうしておくとinstall で一括インストール、update で一括アップデート出来てそこそこ便利です!!!!!

課題

設定ファイルがJSON っていうのはどうなんだろう……DSL の方が良いのでは……
(YAML 対応も考えた、というか割と単純にサポートできたんですけど、要らないのでは? という事で無しにしました)

Feedback

目下募集中です。
Ruby でモノを書いたのは初めてで、いまいち良く分かってない部分がたっぷりあって、多分作法とかもなってないと思うので、
その辺を指摘して頂けたら嬉しいです。 (というか、Ruby 云々の前にOOP の設計があんまりイケて無い気が……)
バグ等はISSUE なんかに突っ込んでもらえるとありがたいです。

補足

名前の由来は鈍器ではないです。激安ジャングルの方です。

*1:今考えるとこの名前ダサ過ぎて死ねる