[Ruby][Yard]Rakeタスクへの登録の仕方とメモ

YARD Rakeタスクへの登録の仕方とパラメータメモ


YARDが認知されてきて久しいですが、YARDのRakeタスクへの登録の仕方と諸々のYARD関連のメモをしておきます


Rakeタスクへの登録の仕方


yardを使用する場合はGemfileのdevelopmentグループに以下を追加します


group :development do
gem 'yard', require: false
end

Railsアプリケーションの場合


lib/tasks/以下にyardoc.taskという名前でファイルを作成して以下のように記述してください


require 'yard'
require 'yard/rake/yardoc_task'
YARD::Rake::YardocTask.new do |t|
t.files = ['app/controllers/**/*.rb','app/helpers/**/*.rb', 'app/mailers/**/*.rb', 'app/models/**/*.rb', 'lib/**/*.rb']
t.options = []
t.options << '--debug' << '--verbose' if $trace
end

これで以下のようにしてRakeタスクとして呼び出すことができるようになります


rake yard

実行するとRails.rootのdoc以下にyardocができるようになります
また、以下の部分でどのRubyファイルをyardocにするか指定しています


t.files = ['app/controllers/**/*.rb'...]

Gemライブラリ等の場合


こちらはRakefile中に追記します(Rakefileがなければ新規作成します)


require 'bundler'
Bundler::GemHelper.install_tasks

require 'rspec/core'
require 'rspec/core/rake_task'
RSpec::Core::RakeTask.new(:spec) do |spec|
spec.pattern = FileList['spec/**/*_spec.rb']
end

RSpec::Core::RakeTask.new(:rcov) do |spec|
spec.pattern = 'spec/**/*_spec.rb'
spec.rcov = true
end

# yardsettings
require 'yard'
require 'yard/rake/yardoc_task'
YARD::Rake::YardocTask.new do |t|
t.files = ['lib/**/*.rb']
t.options = []
t.options << '--debug' << '--verbose' if $trace
end

task :default => :spec

specとrcovも追加してありますが、yardのみの場合は# yardsettingsの部分を追記します
基本的な書式はRailsの場合と同じで、yardocにしたいファイルをfiles以下に追記します


YARD タグメモ


タグの書き方の基本


@tagname descriptionが基本形式です
複数行記述することも可能です
その場合は以下のように記述します


# @return [Array] 1行目
# 2行目

@title, @markupタグ


READMEなどのみに使えるタグです
README.markdown等の先頭に以下を追加することで、yardoc中の表示を変えることができます
yard_titleタグ


@title PrivacyMaskToolsについて
@markup markdown

@paramタグ


引数を指定するタグです


# @param [引数の型] 引数名 説明

引数の型は[]で囲む必要があります
以下がサンプルです
引数の型中で呼び出されるメソッド(この場合はscan)を明示することもできます


# @param [String, #scan] text 探索対象文字列
def pick_rfc_email(text)

@returnタグ


そのまま返り値に関する説明のタグです


# @return [引数の型] 説明

引数の型は[]で囲む必要があります


@deprecatedタグ


以下のようにyardocのメソッド上に線が引かれます
yardoc_deprecated_sample


このタグは推奨されないメソッドやクラスに追記します
推奨されないメソッドの上に追記します(多分)


# @deprecated [推奨されない理由]
def xxx
end

その他によく使うタグ


  • @note
    見た目がわかりやすいため結構好き
    # @note
    # これこれの制御ができていないため注意
  • @example
    使い方の例を記述します
    # @example 説明文
    # methodの呼び出し方 #=> 結果
  • @option
    ハッシュなどの引数を指定
    すごく便利
    # @param [Hash] options 説明
    # @opts options [引数の型] :シンボル ('デフォルト値') 説明

  • @see
    別URLに参照先がある場合は指定
    yardoc上で外部リンクになります
    # @see http://namakesugi.blog42.fc2.com

  • @todo
    todoです(説明不要)

@deprecated, @todo, @noteを記述した場合のyardocは以下のようになります
yard_todo_note_sample
その他のタグの一覧


スポンサーサイト

ServersMan@VPSにFulcrumをインストール

Fulcrumとは


Railsで作られたPivotal Trackerのcloneです
Open Sourceであり、githubにてソースコードが公開されています
github ... https://github.com/malclocke/fulcrum


Pivotal Trackerって?


アジャイル開発の支援をするためのツールで、プロジェクトの計画づくりをするためのツールです
といっても馴染みがない人にはわかりにくいので、以下サイトを参照されると良いでしょう
Pivotal Tracker ヘルプ
もちろん開発以外にも営業の進捗管理などにも使おうと思えば使えるかもしれませんので
いろいろ試してみると良いかもしれません


ServersMan@VPSへのインストール


今回はすべてroot権限でのインストールを実施しますので、先頭の#は除外します


Rubyのインストール


Railsアプリケーションですので、まずはrubyをインストールします
バージョンアップ等が楽なので、rvmを用いることにします


gitのインストール


gitは標準のyumリポジトリには入っていませんので、rpmforgeをインストールします


cd /tmp/
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
wget http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

rpmforgeのenableを0にします(yumコマンドだけだと無効となるような設定です)


vi /etc/yum.repos.d/rpmforge.repo

[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el5/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el5/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 0 # <= ここを1から0にします
protect = 0
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rpmforge-dag
gpgcheck = 1

gitをインストールします


yum install --enablerepo=rpmforge git

インストール完了したら、以下コマンドでバージョンを確認します


git --version
# => git version 1.7.6.1

その他の依存パッケージのインストール


yum install bash curl libxslt gcc-c++ patch readline readline-devel zlib zlib-devel libyaml-devel libffi-devel openssl-devel make bzip2 autoconf automake libtool bison iconv-devel

※既にインストールされているパッケージも含まれていますが、
一応上記がrvmの依存らしいです


rvmのインストール


おなじみにrvmをインストールします


bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)

再度ログインしなおして、rvmコマンドを使えるようにしておきます


exit
sudo su -

rvmを用いてruby-1.9.2のインストール


rvm install 1.9.2

globalのgemsetにbundlerをインストールします


rvm use 1.9.2
rvm gemset use global
gem install bundler --no-ri --no-rdoc

gemsetを作成し、デフォルトに指定しておきます


rvm use 1.9.2
rvm gemset create default
rvm use 1.9.2@default --default

irb等の動作確認


一応irb等を起動させて、動作確認をしておきます


irb

irb上で以下を実行します


require "zlib"
require 'iconv'
require 'openssl'

上記がfalseが返ってこなければとりあえずはOKだと思います
falseが帰ってきた場合は以下を参照してruby-1.9.2をインストールしなおしてください
http://beginrescueend.com/packages/


MySQL 5.5のインストール


CentOSの場合でかつsqlite3を使う場合は色々と面倒なので、MySQLを使うことにします


remiリポジトリの有効化


remiリポジトリを用いてMySQL5.5を入れることにします


rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-5.rpm

remiリポジトリがデフォルトでは無効になっていることを確認します


vi /etc/yum.repo.d/remi

[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=0 # <= ここが0であることを確認
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

MySQL5.5のインストール


yum install mysql-server*.remi mysql-devel*.remi --enablerepo=remi

MySQL 5.5の設定


最低保証512MBですので、midiumをベースに適当に設定します
なお、VPSで、かつWebサーバとDBサーバがセットで起動するようになるため、
TCP/IPベースの接続を無効にするskip-networkingオプションを有効にしています


cd /tmp
wget -O my.cnf http://namakesugi.web.fc2.com/settings/fulcrum_my_cnf.txt
mv my.cnf /etc

MySQL 5.5の起動と設定


以下で起動させ、エラーがでないことを確認します


/etc/init.d/mysqld start

自動起動設定を有効にします


chkconfig mysqld on

MySQLに接続し、初期設定を施します
testデータベースの削除と、ゲストユーザーの削除、ホスト名のユーザーの削除をしています
なお、接続用ユーザーに関しては適当に設定してください
※接続用ユーザーは作らなくてもOK


mysql -uroot

drop database test;
use mysql
delete from user where user="";
delete from user where host="[サーバのhost名]";
grant all privileges on *.* TO [適当なユーザー]@'localhost' identified by '[適当なパスワード]' with grant option;

最後にrootユーザーに適当なパスワードを設定して完了です


set password for root@'localhost'=PASSWORD('[適当なパスワード]');
set password for root@'127.0.0.1'=PASSWORD([適当なパスワード]');
set password for root@'::1'=PASSWORD('[適当なパスワード]');

Fulcrumのインストール


いよいよFulcrumのインストールを行います
インストール場所はとりあえず/var/www/以下とします


git clone git://github.com/malclocke/fulcrum.git
cd fulcrum

Gemfileの修正とbundle installの実行


現時点ではRailsが3.0.9でしたので、3.0.10にしておきます
また、unicornとmysqlを有効にしておきます


vi Gemfile

source 'http://rubygems.org'

gem 'rails', '3.0.10'
gem 'mysql2', '~> 0.2.6'
gem 'devise', '1.2.1'
gem 'cancan', '1.6.1'
gem 'transitions', '0.0.9', :require => ["transitions", "active_record/transitions"]

gem 'fastercsv', '1.5.3', :platforms => :ruby_18
gem 'compass', '>= 0.11.5'
gem 'unicorn'

色々とセオリー無視をしてGemfile.lockも消してしまいます


rm Gemfile.lock

最後にbundleを実行して、必要ライブラリをインストールします


bundle

database.ymlの設定


rake taskを用意してくれていますが、無視してデータベース関連のセットアップをします


vi config/database.yml

production:
adapter: mysql2
encoding: utf8
reconnect: false
database: fulcrum_production
pool: 5
username: [MySQLのユーザー]
password: [パスワード]
host: localhost
socket: /var/lib/mysql/mysql.sock

以下を実行して、データベースの作成とmigration, 初期データのインポートをします


cd /var/www/fulcrum
rake db:create RAILS_ENV=production
rake db:migrate RAILS_ENV=production
rake db:seed RAILS_ENV=production

[注意]何かしらのメールサーバが起動していないとdb:seedに失敗します
そのため以下を実行しておきましょう


yum install postfix
/etc/init.d/postfix start
chkconfig postfix on

Unicornの設定


free -mで確認しながら、Unicornのプロセス数を設定してください


cd /tmp
wget -O unicorn.rb http://namakesugi.web.fc2.com/settings/unicorn-config.txt
mv unicorn.rb /var/www/fulcrum

パーミッションの設定


apacheユーザーにしておきます
※上記unicorn.rbのユーザーがapahceであるため


cd /var/www/fulcrum
chown -R apache:apache .

Unicornの起動


cd /var/www/fulcrum
unicorn_rails -c config/unicorn.rb -E production -D

なお、停止する際には以下を実行します


kill -QUIT `pgrep -f 'unicorn_rails master'`

Apacheの設定


Proxyの設定をすればOKです
今回はUnicornが13000ポートで動作しているため以下のように設定しました
ProxyPass /javascripts/ !を指定していないと動作しません
この設定を追加してApacheを再起動して完了です


<VirtualHost *:80>
ServerName [servername]
DocumentRoot /var/www/fulcrum/public

ProxyRequests Off

<Directory "/var/www/fulcrum/public" >
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

ProxyPass /javascripts/ !
ProxyPass /images/ !
ProxyPass /robots.txt !
ProxyPass / http://localhost:13000/
ProxyPassReverse / http://localhost:13000/
</VirtualHost>

Fulcrumが動いた!


http://fulcrum-demo.namakesugi.net/でデモサイトにつながるようになりました
ID : test@example.com
PW : testpass
でログインできます
※4時間毎にデータベースがリセットされます


なお、この設定では以下のようなメモリ使用量となってしまっています
そのうち512MB以下に抑えるようにしておきます...
そういう点だとRailsアプリ + VPSって結構不利だよね


# free -m
total used free shared buffers cached
Mem: 2048 581 1466 0 0 0
-/+ buffers/cache: 581 1466
Swap: 0 0 0

ServersMan@VPSでiptableの設定をする

ServersMan@VPSでiptableの設定をする


サーバ運営をする上で、面倒で初心者にはつらいところ
とりあえず、ssh, http, httpsで接続できるように指定しておきます
ftp使うのは、このご時世にはありえないので、やるならSFTP等かな
FTPSでもいいけど、、、




iptableの設定ファイル


コンソール上で1つ1つ叩いて設定していくのもいいけど、ミスった時とか嫌なので/etc/sysconfig以下にiptableというファイルを設置してここから読み込ませるようにします


# vi /etc/sysconfig/iptables

とりあえずわからない人のコピペ用です
これやっとけばssh, http, htttpsで外部から繋がらなくなることもないでしょう
なお、これだとサーバの外部からサーバ宛のメール送信やサーバの外部からのFTPは
繋がらなくなりますので、ご注意ください


概要としては外からの通信はhttp, https, sshのみ許可しそれ以外は遮断。
サーバから外への通信は全て許可という感じです


*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -i ! lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# Security Setting
## Ping of Death
-N ping-death
-A ping-death -m limit --limit 1/s --limit-burst 4 -j ACCEPT
-A ping-death -j LOG --log-prefix "PING OF DEATH: "
-A ping-death -j DROP
-A INPUT -p icmp --icmp-type echo-request -j ping-death

## Synflood
-N drop_synflood
-A drop_synflood -m limit --limit 10/s --limit-burst 10 -j RETURN
-A drop_synflood -j LOG --log-prefix "SYNFLOOD: " -m limit --limit 1/s --limit-burst 10
-A drop_synflood -j DROP

# INPUT Setting
### ssh
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3843 -j ACCEPT

### web
-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
### serversman
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 8080 -j ACCEPT
#-A INPUT -p tcp -m state --state NEW -m tcp --dport 8081 -j ACCEPT
### icmp
-A INPUT -p icmp -j ACCEPT

# OUTPUT Setting
-A OUTPUT -j ACCEPT
COMMIT

上のほうはおまじないと思ってください
外からの通信を拒否、中から外への通信は許可、転送は拒否という設定の後に
一応セキュリティ設定をいれています
(通常であれば上流のネットワーク機器で弾くので必要ないのですが、VPSですので一応設定)


SSHのiptablesについて


以下の部分でSSHの接続許可をしています
ServersMan@VPSにおいては、デフォルトのSSHポートが3843なので以下のようにしています
通常のデフォルトポートは22ですので注意してください


### ssh
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3843 -j ACCEPT

  • -A INPUT これは外部からのサーバへの通信に対してという意味です
    サーバから外部への通信は-A OUTPUTとなります
  • -p tcpでTCP
    udp, icmp, allなどの指定ができます
  • -m state --state NEWで新規接続の場合適用の意味
    なくても良いが、設定に失敗すると現在接続中のSSH接続も弾かれてしまうので一応
  • -m tcp --dport 3843サーバ側へのtcp 3843ポートへの接続に対してという意味
  • -j ACCEPT 許可するという意味

つまり合わせて読むと
外部からVPSのサーバに対してTCP3843接続は許可するという意味になります


なお、よりセキュアにしたい場合は以下のようにIPを指定することも可能です
※hosts.allowでやったほうが簡単なのであまりやりませんが


-m tcp --dport 3843 -d xxx.xxx.xxx.xxx

OUTPUTについて


この設定では外部通信はすべて許可しています
もし、サーバがマルウェア等に感染した場合は外部通信をすべて許可していますので、任意のデータを外部に送信されてしまいます
これが嫌であれば、外部通信をすべて拒否にしたあとに、必要最低限のポートだけ解放するようにしてください


iptablesのまとめ


基本的に以下を追加して、外部からの接続許可をしたいポートを指定するだけでOKです
細かい制御はミドルウェア側でもできますので


-A [INPUT or OUTPUT] -p all -m state --state NEW -m tcp --dport [port番号] -j ACCEPT

※ipv6のip6tablesの書き方はなんとなく同じように書けばOKだが、手元の環境がv4なので、試せないためOFFにしておくことにする


その他のセキュリティ設定をする


Sysctl Security


sysctl.confを修正して、各種セキュリティ設定を有効にしておきます


# cp /etc/sysctl.conf /etc/sysctl.conf.org
# vi /etc/sysctl.conf

中身をすべて消去し以下のように変更します


## kernel defaults
# kernel.sysrq = 0
# kernel.core_uses_pid = 1
# kernel.msgmnb = 65536
# kernel.msgmax = 65536
# kernel.shmmax = 68719476736
# kernel.shmall = 4294967296

## net security
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.tcp_max_syn_backlog = 1280
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.default.secure_redirects = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
net.ipv4.tcp_timestamps = 0

TCP Wrapper


sshの接続元の制限や、vsfptdを使う際の制限などにも使えるTCP Wrapperのデフォルト値を設定しておきましょう


# echo "ALL: ALL" >> /etc/hosts.deny
# echo "sshd: ALL" >> /etc/hosts.allow

なお、固定IPやsshで接続するプロバイダ等がわかっている場合は以下のようにするとより安全になります


# vi /etc/hosts.allow

sshd: xxx.xxx.xxx.xxx # <= 固定IPを入れる
sshd: .commufa.jp # プロバイダがCommufaだったら許可(コミュファ使ってます!

プロバイダ指定のところはsshで接続した際に以下のように表示されますのでそこで確認できます


最後にサーバを再起動して設定を適用させて完了です
init 6で再起動します


# init 6

Last login: Sat Sep 17 22:47:24 2011 from xxxx.xxxxx.commufa.jp

参考 : CentOS Protectio(英語)
iptableの設定例や今回は関係ありませんが(VPSなので)ハードウェアセキュリティ等もありますので、一度読んでみるといいでしょう


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。