2011年11月27日日曜日

タダ同然で自分専用のバグ・トラッキング・システムを立てたい (レンタル・サーバー「ロリポップ」上にRedmineを仕立てる)

タダ同然で自分専用のバグ・トラッキング・システムを立てたい

2012/12/25追記:2012年12月に「さくらのVPS」にサーバーを移行しました。Redmineをインストールする場合、ロリポップでは環境面でかなり厳しいものがあります。

開発に欠かせないバグ・トラッキング・システムですが、以前から公開ウェブ・サーバー上に自分専用のサービスが欲しいなと考えていました。

自分が進行しているプライベートなプロジェクトの色々なアイデアやTODOをいつでもどこでも更新出来たら嬉しいなぁと考えたわけです。個人的にgithubやsourceforgeを使う事はありますが、バグ・トラッキング・システムを自分の好みで変更できないのが残念なところです。

また、プライベートなアイデアやプロジェクトが、ダダ漏れになるのも、それを避けるためにお金を払うのも、自分が好きなバグ・トラッキング・システムを使えない事と相まってお得な感じがしません。




単にアイデアをメモするだけならばその手のツールがあるのですが、それは単なるメモとしてしか役立ちません。 後々見返してみた時に、「これ何だっけ?」とか「アイデアとアイデアの関係がどうだったのか?」とか、そもそもメモなのできちんと管理できないわけです。(少なくとも私は。)
それらのアイデアがどのようにコードになったのか知るすべもありません。

そんな事を考えていた時、自分が約10年前からレンタルしているサーバーの契約更新がありました。状況を調査してみたところ、以前に比べてバグ・トラッキング・システムを導入する為の環境が整いつつある事に気付きました。(プランの変更によって最大の障壁だったsshログインが可能という事がわかった。)

そこで、今回は私が使用しているレンタル・サーバー「ロリポップ」上に、バグ・トラッキング・システムRedmineを導入する過程を簡単に御紹介します。使用するプランは「チカッパプラン」です。このプランは月額525円で30GBの容量を確保できます。更に今回の作業で重要なsshが使えます。


この手の作業の何が面倒なのか?

この手の作業でとにかく一番面倒なのは「やってみて、うまくいくまで試行錯誤する過程。」です。
ウェブ・アプリケーションを導入する場合、沢山の依存関係の解決と細かなバージョン差異による影響を取り除くような作業が欠かせません。(あ、組み込みも同じか。)

開発をスムーズに進めるための環境作りに時間がかかりすぎて、開発がスムーズに進まないなんて笑うに笑えません。(実は今回そんな感じ。来週はMTM07です。出展の準備をしたい。)

本当に「何やってるの自分?」と自分に突っ込みたくなってきます。
更にRailsって何?とかRubyGemsって何?とかやってるとどうしようもなく時間がかかります。

この記事は「できる」という事実を示し、試行錯誤を少しでも取り除こうという狙いで書きました。


バグ・トラッキング・システムによる製品開発フロー

バグ・トラッキング・システムを使って製品を開発するフローは、背景にある考えによって様々ですが、大抵の場合は以下のようになるでしょう。
  1. 製品の仕様を考える。
  2. 「やること」を洗い出す。
  3. 「この日までに実現するんだ!」と決める。
  4. 「やること」と「この日までに実現するんだ!」を見ながら進捗や状況を管理する。
  5. 製品が完成したらリリースを決める。
  6. 市場から得られるフィードバックを集める。
  7. 最初に戻る。(要するに無限ループ。)
上記のループは、必ずしも1から始まるとは限りません。
もしかしたら6から始まるかもしれないし、もしかしたら3から始まる場合もあるかもしれません。


大切なのは「繰り返しの中で製品を改善する過程」です。

Redmineを使った機能追加の管理の実例を以下に示します。
Redmineの開発は、Redmineで管理されています。
以下に挙げるチケットは「ユーザの削除機能」に関するものです。
メジャーなツールと僕の好きなRedmine

国内ではやたらとTracがメジャーな感があります。
私は以下の理由でRedmineを好んで使用しています。
  • 一回構築すれば複数のプロジェクトで使用できる。
  • ビューがシンプルで美しい。
  • 画像を貼ったりファイルを貼ったりが簡単。
  • その他(色々な事が自然にできるところなど。)
もしかしたら、現在ではその他のツールも同様の事ができるのかもしれませんが、一度Redmineに慣れてしまうと他のツールに積極的に移行する気になれません。これは、数年前にTracとMantisをつまみ食いしているので、自分にとってどちらが好ましいと感じるかを知っているせいかもしれません。


ロリポップでRedmine

さて、長い前置きはさておき、ロリポップでRedmineを実現します。
今回は手始めとしてcgiモードを使ってまずは実現する事を念頭に、ハマりそうなところだけを列挙しする事にしました。

出来上がるとアクセスした時に以下のようなページが表示されます。


使用した各ツールのバージョンを挙げておきます。
rubyはロリポップのサーバーにインストールされているruby 1.8.7を使用しました。
上記のバージョンの関係はRedmine本家のインストール・ガイドのページに記載されています。


新しいバージョンのRedmineをインストールしたい場合、上記バージョン関係を把握してから行ないましょう。上記の依存関係を見てもわかるように、細かなバージョンの違いで動作しない事が十分に考えられます。



RubyGemsのセットアップ

初めにRubyGems 1.3.7をwgetでダウンロードして展開します。
展開したディレクトリにあるsetup.rbに「--prefix $HOME」を与えてセットアップを実行します。
ロリポップが提供するサーバにsshでログインした場合、LolipopUserというIDが割り当てられています。(当然ながらroot権限ではありません。)

これでRubyGemsのインストールは完了です。
私はこの時点で.bash_profileに以下を追加しました。
export RUBYLIB=~/lib
export GEM_HOME=~/lib/ruby/gem
export RAILS_ROOT=~/rails/redmine
export PATH=$PATH:~/bin:~/lib/ruby/gem/bin
「source ~/.bash_profile」したら念のためホームで「gem -v」してバージョンを確認します。
「1.3.7」と出れば狙いの環境になっています。エラーが出たらパスが通って無いとかsetup.rbでの環境構築に失敗しているとかが考えられます。



Railsのセットアップ

次にrailsをgemを使ってインストールします。
「gem install -v=2.1.2 rails」とすればバージョンを指定してインストールする事ができます。

以上でRedmineが依存する環境を作り上げた事になります。



Redmineのインストールとセットアップ

次にRedmine本体のインストールです。

Redmine 0.8.7をダウンロードして、展開します。
私は$HOME/rails/redmineに展開しました。


config/database.yml

展開したらconfigディレクトリに移動してセットアップを行ないます。
初めにconfig/database.yml.exampleをコピーしてconfig/database.ymlを作ります。


(ハマりどころ)設定はロリポップの管理ページにある情報をそのまま記載します。
(ハマりどころ)socketの項目はテンプレートに無いので追加して下さい。
(ハマりどころ)socketの設定はロリポップのmysqladminを使って確認して下さい。サーバの変数という項目にsocketがあります。
(ハマりどころ)production設定を使う為の作業をしていると頭の片隅に入れておいて下さい。


データーベースを初期化する


この作業は展開したredmineのディレクトリで行います。
rakeがRakefileを参照して作業するからです。
rake db:migrate RAILS_ENV=production
rake redmine:load_default_data RAILS_ENV=production

config/environments/production.rb

ウェブ・サーバが持つルートの配下にディレクトリを作って構成する場合には、config/environments/production.rbに以下を追加します。
ActionController::AbstractRequest.relative_url_root = '/あなたのディレクトリパス

config/environment.rb

config/environment.rbにパスの設定などを追加します。
(下記の設定は最適でないかもしれません。環境に合わせて最適な記述をして下さい。)

また、productionを使うのでコメント・アウトされている部分を有効にします。


もう、このあたりで「動くのかなぁ~。」と不安になります。


dispatch.cgi

最後にディスパッチャの設定です。
今回は遅い遅いと評判のdispatch.cgiを使っています。
一行目のrubyへのパスを環境に合わせて「/usr/bin/ruby」としました。


.htaccess

最後に.htaccessの編集です。
  • 「Options +FollowSymLinks +ExecCGI」をコメントアウト。
  • 「AddHandler  cgi-script  .cgi」を追加。
  • 「RewriteRule  ^(.*)$  dispatch.cgi  [QSA,L]」を追加。

公開ディレクトリにあるファイルのパーミッション

公開ディレクトリにあるファイルのパーミッションを整えます。
ロリポップのサポート・サイトの情報も参考にしてください。


とりあえず動かすようにした作業のまとめ

今回は「とにかく実現してみるんだ」という方向で作業しました。

レンタル・サーバでRedmineというと何故だかさくらインターネットでの事例ばかりです。
もしかしたらきちんと運用する人は「ロリポップなんて使わない。」ということかもしれません。

今回は「ロリポップでもRemineを動作可能」を示すためだけにかなり適当に作業しました。
メールの設定やバージョン管理システムとの連携が残っていますが、動作する事がわかったので後はゆっくりとやっていこうという感じです。


タダ同然じゃない!

「タダ同然で」と書きましたが、全然タダではありません。
冒頭に書いたとおり月額払う事になりますが、「ホームページを運用していたサーバで、実は動作させられる。」と考えれば安いと考えられなくもありません。

0 件のコメント:

コメントを投稿