【学生必見】個人や部活でGitHubのプライベートレポジトリを無料で使おう!

“GitHub”は、”Git”で管理されたソースコードのまとまり”レポジトリ”を置いておくためのサーバを提供しているサービスです。

GitHubの無料枠では”レポジトリ”はオープンソースとして世界中の人々に公開されます。なので、プライベートなプロジェクトのソースコードや、公開できないものでは使えませんね。有料プランでは、この”プライベートリポジトリ”を持つことができますが、学生であればそこまで払いたくないですよね。。。

ですが、学生は無料で使えちゃう方法があるんです!

その方法を、紹介したいと思います。

Continue reading

RailsでYARDをRakeから使う方法

Railsでドキュメント生成ツールの『RDoc』ではなく、『YARD』を使う方法を紹介します。

1. Gemfileにyardを追加

# Gemfile
group :doc do
  gem 'yard', require: false
end

追加後に、bundle installでgemを更新してください。

2. Rakeタスクで実行できるようにする

RDocの様にYARDをRakeタスクから実行できるようにしてみましょう。

bundle exec rails g task yardoc
# lib/tasks/yardoc.task
require 'yard'
require 'yard/rake/yardoc_task'

YARD::Rake::YardocTask.new do |t|
  t.files = %w(
      app/models/**/*.rb
      app/controllers/**/*.rb
      app/helpers/**/*.rb
      app/mailers/**/*.rb
      lib/**/*.rb
    )
  t.options = []
  t.options = %w(--debug --verbose) if $trace
end

これで、bundle exec rake yardocを実行すれば、doc/以下にドキュメントが生成されます。

 

RDocと比べて、YARDの方は書式タグが充実しているので、フォーマットに統一感が出て良いですね。

 

参考サイト

SH2マイコンでインベーダーゲーム

長野高専の電子情報工学科には『マイコンシステム』という授業があり、マイコンボードを使った実習をします。

このボード上でTFT液晶とSDカードを使ってゲームを作る、という授業課題が出たので『インベーダーゲーム』を作ってみました。登場する敵キャラが顔文字なので、名付けて『ASCII INVADER』ですw(以前にも…CUIで

Continue reading

has_manyで関連元のオブジェクトに依存した条件を付けたいとき

Railsのモデルで、has_manyの関連で関連先を絞り込むために条件を付けたいときがありますよね。

Rails Guidesにもあるように、 第2引数でlambda式を渡して条件を付けることができます。

has_many :users, -> { where("created_at > ?", Time.now) }

こんな感じで。

where以外にorderなども使えるので、予めソートしておきたい場合などに便利です。

これぐらいであれば、Rails Guidesや書籍、他のサイトにも載っている情報だと思います。

 

しかし、こんなシーンではどうしますか?

「関連元のオブジェクトのフィールドに依存した条件を付けたい」

つまり、has_manyを書いているモデル自身のフィールド値を、このlambda式内に伝える方法です。

実は、このやり方はRails Guidesでも紹介されていない上に、あまりググっても出てこない情報です。(私調べ)

Continue reading

Vagrant + Chef soloで仮想環境構築

  • Vagrantを使いVirtualBoxで仮想マシンをサクッと建てられる様に
  • Chefを使い、環境構築をサクッとできるように

全体像

VagrantとChefの役割は以下の通り。

  • Vagrant:仮想マシンの構築(OSインストール・初期設定)に使用
  • Chef:構築したマシンの内部の設定(パッケージインストール・設定)に使用

Vagrantでマシンを建てて、それぞれのマシンの内部の設定をChefが行う感じ。

なぜVagrantを使うのか?

Chefスクリプトを作るためにはテスト環境が必要。
ChefではRollbackができないので、毎回マシンを建て直してテストする必要がある。
これは本当に面倒くさそう。。。

そこで、仮想マシンをサクッと建てられるVagrantを使用する。

Vagrantを使用すると、Vagrantfileというファイルを作成し、あとはvagrant upコマンド1発で新しい仮想マシンを構築することができる。
Chefでテストするために使うだけであれば、サードパーティー(Vagrantboxes)が用意している仮想マシンのイメージを使えば、これだけで作業が済む。

Vagrantで仮想マシンを構築

Vagrantboxesの以下のイメージを使って構築する。

vagrant box add base http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130731.box

mkdir /path/to/hello
cd /path/to/hello

vagrant init base
vagrant up

chef-solo, knife-soloの導入

作業マシンからの作業

gem install chef
# もしくはこちら
# curl -L http://www.opscode.com/chef/install.sh | sudo bash
gem install knife-solo

# サーバにChefを導入
knife solo prepare <host>

Chefレポジトリの作成・Cookbookの作成

knife solo init <name>
cd <name>
git init .
git add .
git commit -m 'initial commit'

knife cookbook create hello -o site-cookbooks