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

Programming log - Shindo200

イベント参加記録とプログラミング系の雑記

ファイルをAtCoderに提出するツールを作りました

ローカルにあるファイルをAtCoderに提出するツール「pcoder」を作って、RubyGemsに公開しました。実は初めてのGem作りでした。インストールは下記のコマンドで行えます。

$ gem install pcoder

使い方

試しに練習用ページの問題1Rubyで解いた下記のファイルを提出してみます。
practice_1.rb

a = gets.to_i
b, c = gets.chomp.split(" ").map(&:to_i);
s = gets.chomp
print "#{a+b+c} #{s}\n"

ファイル名は問題ページのパスから最後のスラッシュ("/")より後の部分だけを抜き出した名前にしてください。

【ファイル名の例】
練習用ページの問題1(http://practice.contest.atcoder.jp/tasks/practice_1

  • practice_1.rb

ARC#012の問題2(http://arc012.contest.atcoder.jp/tasks/arc012_2

  • arc012_2.rb

どのコンテストの問題かをファイル名で判断しますので、ファイル名は決められたものにしてください。ただし、pcoderの -t オプションで問題の名前を指定すれば、ファイル名を気にしないで提出することができます。-t オプションの使い方はヘルプを見てください。
正しいファイル名を付けたら、下記のコマンドでファイルを提出することができます。

$ pcoder practice_1.rb
Username:  #AtCoderのユーザーIDを入力
Password:  #AtCoderのパスワードを入力

「Successfully uploaded.」と表示されれば提出完了です。AtCoderの結果を確認してみましょう。
f:id:Shindo_Masaya:20130407005757j:plain:w400
大丈夫そうですね。今回はRubyのコードを提出しましたが、PythonやCなど他の言語のコードも提出できます。

ツールを作るのに参考にした資料

コードの構造、optparseライブラリの使い方を参考にしました。

CodeBreaker を作る演習からコードの構造、Rspecの書き方を参考にしました。

bundlerの使い方を参考にしました。gem作りのライブラリは色々あるのですが、今はbundlerがよく使われるみたいです。

備忘録

bundlerでGemを作る大雑把な流れ

Gemの名前をfooとして、Gemのテンプレートを作成する。

$ bundle gem foo

ライブラリをGem化する。

$ rake build
# ./pkg/foo-0.0.1.gem というファイルが作られる。

Gemをインストールする。

$ rake install
# pkgディレクトリに置いてある現バージョンのgemファイルがインストールされる。
$ gem list foo
*** LOCAL GEMS ***
foo (0.0.1)

現在のリポジトリにバージョンを表すタグ付けをする。既にGemが公開されている場合は、Gemの更新も行う。

$ rake release
# githubのユーザー名とパスワードを訊かれるので、入力する

RubyGems.orgにGemを公開する。(初めて公開するGemのみに必要)

$ gem push ./pkg/foo-0.0.1/gem
# RubyGems.orgのユーザー名とパスワードを訊かれるので、入力する

一度公開したGemを更新するには、バージョンの値(./lib/foo/version.rb)を書き換えてから、下記のコマンドを入力する。

$ rake build
$ rake release