Plesk Obsidianリリース記念!Plesk最大7カ月無料キャンペーン

2013/11/26

DevOpsで捗るよね、という話

DevOpsってなんだ?

最近良くネット上で見かける「DevOps」という単語。

デブ?オプス?

最近腹の周りに肉がついてきた自分のことをいわれているのかと早とちりしそうになったのですが、どうも企業が競争に勝つための冴えたやり方のことをいっているらしい。
いまさら聞けない「DevOps」 ※@IT様の記事へのリンクです

「ツール」を使いこなすことと「企業文化」がキモらしいのですが、「企業文化」をすぐ変えるのは難しいので、まずはできる事からという事で「ツール」を試してみようと思います。

企業文化はさておき、ツールだよね!

さてIT業界に限らず、仕事はタスク(スケジュール)管理が大切です。仕切りのいい人、とはタスク管理の上手い人。それがシステムやソフトの開発に関わる話なら、バージョン管理もまた同様に関わってくるでしょう。

メール同報すればいじゃん、エクセルでカレンダー作って配布すればいいじゃん、という認識では困ります。仕事は日々動き、日程もバージョンも刻々変わっていく。人間の記憶や手作業では追いつかない。ましてや大人数が関われば混乱へまっしぐら。

こういった中で統合的なツールとしてgoogle appsを導入している方も多いと思うのですが、セキュリティとコストから導入できない企業もいるという事で、最近は定番とまでいわれている多機能でスゴそうなプロジェクト管理ツールのRedmineを試してみることにしました。

Redmineは、プロジェクトのタスク管理、進捗管理、情報共有が行え、SubversionやGitなどのバージョン管理システムとの連携機能も備えており、ソフトウェア開発やwebサイト制作などのITプロジェクトで特に威力を発揮するらしいです。

Redmineで検索すると、Redmine.JP — Redmine日本語情報サイトが1番目に表示されるので素直にいってみます。

日本語の情報がそんなにないようなことを聞いたことがあるのですが、バッチリ日本語のサイトで情報も充実していて分かりやすいですね。
詳しいインストールの手順についてはこちらのリンクが便利ですので参考にしてインストールしてみました。

http://blog.redmine.jp/articles/redmine-2_0-installation_centos/

Redmine 2.0をCentOS 6.2にインストールしてみた

※まずは事前にCentOS6.2をインストールした仮想サーバーを用意しておきます。

手順1) SELinuxを無効にする

エディタで /etc/sysconfig/selinux を開き、 SELINUX の値を disabled に編集してください。
——————————————
SELINUX=enforcing

SELINUX=disabled
——————————————
編集後はCentOSを再起動します。

# reboot

再起動後、 getenforce コマンドを実行してSELinuxが無効になったことを確認してください。 Disabled と表示されればSELinuxは無効になっています。

# getenforce Disabled
手順2) iptablesを有効にする。

CentOS 6.3の初期状態ではiptables(ファイアウォール)が有効になっており、外部からサーバ上の80/tcpポート(HTTP)に接続することができません。クライアントのwebブラウザからアクセスできるようiptablesの設定を変更します。
エディタで /etc/sysconfig/iptables を開き、80/tcpへの接続を許可するための以下の記述を追加してください。追加位置は、22/tcpへの許可している記述の直後としてください。

——————————————————————————————–
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 22 -j ACCEPT
-A INPUT -m state –state NEW -m tcp -p tcp –dport 80 -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT
——————————————————————————————–
※赤字が追記したところ。 設定が終わったらiptablesを再起動してください。

# service iptables restart

次はRedmineを使用するにあたり、必要なパッケージのインストールを行います。

手順3)必要なパッケージのインストール

EPELリポジトリの登録
Rubyのビルドに必要なlibyamlをyumでインストールできるようにするために、EPEL(エンタープライズ Linux 用の拡張パッケージ)リポジトリを追加します。
まず、下記のページで最新のepel-release パッケージのURLを確認・コピーしておいてください。
http://dl.fedoraproject.org/pub/epel/6/x86_64/repoview/epel-release.html
※2013年11月11日時点の最新URLです↓
http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
その後、以下のようにまずはwgetでパッケージファイルをサーバー上に直接ダウンロードし、rpm コマンドを実行してください。CentOSのyumリポジトリにEPELが追加されます。

# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm

次は開発ツール(Cコンパイラ等)をインストールします。

# yum groupinstall "Development Tools"

RubyとPassengerのビルドに必要なヘッダファイルなど

# yum install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel

MySQLとヘッダファイル

# yum install mysql-server mysql-devel

Apacheとヘッダファイル

# yum install httpd httpd-devel

ImageMagickとヘッダファイル・日本語フォント

# yum install ImageMagick ImageMagick-devel # yum install ipa-pgothic-fonts

ImageMagickと日本語フォントはガントチャートをPNG形式の画像にエクスポートするのに使われます。

手順4)Rubyのインストール

RedmineはRubyで動きますので、Rubyをインストールします。
RubyのオフィシャルサイトのダウンロードページからRuby 1.9.3のソースコードをダウンロードしてください。 ※安定板を使用する為、1.9.3をインストールしました

http://www.ruby-lang.org/ja/downloads/

Rubyのビルド
ダウンロードしたRubyのtarballを展開して、configureを実行してください。

# tar zxvf ruby-1.9.3-p194.tar.gz # cd ruby-1.9.3-p194 # ./configure

Rubyのビルドとインストールをします。

# make # make install # make clean

インストール後、rubyコマンドを実行して正しくインストールされたことを確認してください。

# ruby -v ruby 1.9.3p194 (2012-04-20 revision 35410) [x86_64-linux]

bundlerのインストール
Redmineが使用するGemを一括インストールするためのツール、bundlerをインストールします。

# gem install bundler --no-rdoc --no-ri
手順5)MySQLの設定

デフォルトキャラクタセットをutf8に設定
エディタで /etc/my.cnf を開き、 [mysqld] セクションに character-set-server=utf8 を、 [mysql] セクションに default-character-set=utf8 を追加してください。
以下は追記例です※これで私の環境では正常に動いています

————————————————————-
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server=utf8
skip-character-set-client-handshake
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[mysqldump]
quick
max_allowed_packet=16M
default-character-set=utf8
[mysql]
default-character-set=utf8
————————————————————-
MySQLの起動および自動起動の設定

# /etc/init.d/mysqld< start
# chkconfig mysqld on

/etc/my.cnf への設定が反映されていることの確認
MySQLのシステム変数に設定されている値が
• character_set_filesystem
• character_sets_dir
以外すべてutf8になっていることを確認してください。
latin1 になっている項目があれば、 /etc/my.cnf の設定が正しいか確かめてください。

# mysql -uroot
mysql;
 
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

rootユーザーのパスワード変更・匿名ユーザー削除

mysql> use mysql;
mysql> update user set password=password('********') where user = 'root';
mysql> delete from user where user = '';
mysql> flush privileges;
mysql> exit;

※ ******** の部分は任意のパスワードを設定してください。
Redmine用データベースとユーザーの作成

# mysql -uroot -p
mysql> create database db_redmine default character set utf8;
mysql> grant all on db_redmine.* to user_redmine identified by '********';
mysql> flush privileges;
mysql> exit;

※ ******** の部分は任意のパスワードを設定してください。このパスワードは後述のdatabase.ymlの設定で使用します。

手順6) Redmineのインストール

Redmineのダウンロード
下記のページからRedmine 2.0のtarball(.tar.gz)をダウンロードしてください。
http://rubyforge.org/frs/?group_id=1850
Redmineの展開と配置
ダウンロードしたRedmineのtarballを展開してください。 redmine-2.0.0 というディレクトリが作成され、その下にRedmineを構成するファイル群が作成されます。

# tar zxvf redmine-2.0.0.tar.gz

Redmineの配置先のディレクトリを決定し、そこへ展開したファイルを移動してください。例えば、 /var/lib/redmine を配置先とする場合、以下のようにします。

# mv redmine-2.0.0 /var/lib/redmine
手順7) データベースへの接続設定

Redmineからデータベースへ接続するための設定を記述したファイルを作成します。
以下の内容でRedmineのインストールディレクトリ以下に config/database.yml を作成してください。
—————————–
production:
adapter: mysql2
database: db_redmine
host: localhost
username: user_redmine
password: ********
encoding: utf8
—————————–
※ ******** 部分は、MySQL上に作成したRedmineユーザーのパスワードです。
※ config/database.yml.example に設定例がありますので参考にしてください。
メールサーバへの接続設定
Redmineからメールサーバへ接続するための設定を記述したファイルを作成します。
以下の内容でRedmineのインストールディレクトリ以下にconfig/configuration.yml ファイルを作成してください。
—————————–
production:
email_delivery:
delivery_method: :smtp
smtp_settings:
address: “localhost”
port: 25
domain: ‘example.com’
—————————–
※ example.com の部分は、Redmineを実行するサーバのFQDNとしてください。
※ config/configuration.yml.example に設定例がありますので参考にしてください。
configuration.yml ではメールサーバへの接続設定のほかにもアップロードされたファイルの保管場所や、データベースの暗号化などが設定できます。詳しくはconfiguration.yml によるRedmineの設定 をご覧ください。

手順8) Gemパッケージのインストール

アプリケーションが必要とするGemを一括してインストールできるツール、bunderを使用してRedmineで使用するGemをインストールします。Redmineのインストールディレクトリで以下のコマンドを実行してください。

# bundle install --without development test postgresql sqlite

本手順ではデータベースにMySQLを使用するため、 PostgreSQLまたはSQLite用のデータベースアダプタをインストールしないよう –without オプションで指定しています。もしSQLiteを使用する場合は次のようにしてください。

# bundle install --without development test postgresql mysql
手順9) Redmineの初期設定とデータベースのテーブル作成

セッションデータ暗号化用鍵の生成とテーブル作成を行います。Redmineのインストールディレクトリで以下のコマンドを実行してください。

# rake generate_secret_token
# RAILS_ENV=production rake db:migrate
手順10) Passengerのインストール

Apache上でRedmineなどのRailsアプリケーションの実行に必要なPhusion Passengerをインストールします。

# gem install passenger --no-rdoc --no-ri

PassengerのApache用モジュールのインストール インストーラを実行し画面の指示に従って操作してください。

# passenger-install-apache2-module

インストールが完了すると以下の様に表示されます。太字の部分はApacheに設定すべき内容なので控えておきます。表示される設定情報は passenger-install-apache2-module –snippet を実行して後で参照することもできます。

The Apache 2 module was successfully installed.
 
Please edit your Apache configuration file, and add these lines:
 
LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12
PassengerRuby /usr/local/bin/ruby
 
After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!
 
Press ENTER to continue.
手順11) Apacheの設定

Passengerの設定を追加

Passengerの設定をApacheに追加します。 /etc/httpd/conf/httpd.conf に直接追加してもよいですが、管理しやすいようPassenger関係の設定は別ファイルにまとめます。
以下の内容で /etc/httpd/conf.d/passenger.conf を作成してください。
# Passengerの基本設定です。
# passenger-install-apache2-module –snippet を実行して表示される設定を使用。
# 環境によって設定値が異なりますので以下の3行はそのまま転記しないでください。
—————————————————————————-
LoadModule passenger_module /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.12
PassengerRuby /usr/local/bin/ruby
—————————————————————————-

# Passengerが追加するHTTPヘッダを削除するための設定(任意)。
—————————————————————————-
Header always unset “X-Powered-By”
Header always unset “X-Rack-Cache”
Header always unset “X-Content-Digest”
Header always unset “X-Runtime”
—————————————————————————-
# 必要に応じてPassengerのチューニングのための設定を追加(任意)。
—————————————————————————-
PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerUseGlobalQueue on
PassengerHighPerformance on
PassengerStatThrottleRate 10
RailsSpawnMethod smart
RailsAppSpawnerIdleTime 86400
RailsFrameworkSpawnerIdleTime 0
—————————————————————————-

手順12) Apacheの起動および自動起動の設定
# /etc/init.d/httpd start
# chkconfig httpd on

Apache上のPassengerでRedmineを実行するための設定
Redmineを配置したディレクトリ以下のファイルを、Apacheを実行するユーザー・グループ(CentOSの場合はいずれも”apache”)で読み書きできるよう、オーナーを変更します。

# chown -R apache:apache /var/lib/redmine

どのような形態(URL)でRedmineを利用するかによって設定が異なりますが、今回はwebサーバをRedmine専用として使用する設定にします。
webサーバのルートディレクトリでRedmineを実行するための設定です。「http://サーバIPアドレスまたはホスト名/」でRedmineにアクセスできます。
エディタで /etc/httpd/conf/httpd.conf を開き DocumentRoot をRedmineのpublicディレクトリ(例: /var/lib/redmine/public )に変更してください。
——————————————–
DocumentRoot “/var/www/html”

DocumentRoot “/var/lib/redmine/public”
——————————————–
設定変更後、Apacheを再起動してください。

以上でインストールは完了です。 早速ブラウザからアクセスしてログイン画面が開くか確認してみましょう。

インストール完了後の初期設定

インストールが完了したので、いろいろ試してみました。

まずはログイン。初めてのアクセスの際にはログインIDとパスワードは共に「admin」となっていますのでログイン。セキュリティの為にパスワードの変更を行います。

① 右上のログインボタンをぽちっと押す

② ログインIDとパスワードは共に「admin」となっているのでログイン

③ 個人設定をクリック

④個人設定画面に切り替わるので、パスワード変更をクリック

⑤ パスワードを変更します

次に、このままだとこのページを見た人は勝手にユーザー登録が出来てしまうので設定を変更します。

⑥勝手にユーザー登録させない為の設定変更
画面上にある「管理」をクリックし、管理項目を表示します。
その次は「設定」をクリック

「設定」ページの中にある「認証」というタブをクリックします。
ここに「ユーザーによるアカウント登録」というプルダウン項目がありますのでこれを「無効」に設定して、画面したの「保存」を押します。

と、まずは本当に最低限の変更が完了します。

それでは試してみるぞ!

ではまず初めに新しい「プロジェクト」を作ってみます。
上部にある「プロジェクト」リンクをクリックし、その次に「新しいプロジェクト」をクリックします

新しいプロジェクトの作成画面に切り替わります。
必要項目を入力して「作成」ボタンを押します。
識別子は最初の文字がアルファベットの小文字でないといけませんので注意してください。

次に「トラッカー」を作成します。
これが無いとプロジェクトの中でチケットを登録する事が出来ません。

画面が遷移するので「新しいトラッカーを作成」をクリックします。

トラッカーの名称を入力。
紐付けするプロジェクトにチェックを入れ「作成」ボタンをクリックします。

これでトラッカーの登録は完了です。
さて、あと一歩です。
次は「ロール」の作成を行います。
「ロール」とはある権限を付与される対象となるグループの名称だと思ってください。
画面の右側に表示されている「ロールと権限」をクリックします。
この画面以外から遷移する場合には、画面上部の「管理」⇒「ロールと権限」と進めます。

「新しいロール」をクリックします

まずは管理者権限のロールを作ります。 名称は任意で構いませんがすべての項目にチェックを入れます。

はい。ロールもできました。
では次に「プロジェクト」をクリック

更に作成済みのプロジェクトをクリック

ブルーのヘッダー部分の下部に、「活動」「ロードマップ」「チケット」「新しいチケット」「ガントチャート」「カレンダー」「ニュース」「文書」 「wiki」「フォーラム」「ファイル」「設定」とうタブがズラリと並んでいるので、「新しいチケット」をクリック。
チケットの内容を記載して「作成」ボタンを押します。

チケットが登録されました!

カレンダーにも即座に反映されるので確認してみます。

簡単ですね。

あと2名巻き込んで、管理者と開発者と報告者の3人で同時に操作するとかやってみたかったのですが、それこそスケジュールが合わず断念。ファイルの更新などがリアルタイムでできるのかどうか、あとチケットごとの作業時間を入力して一覧できるか実際に試してみたかったんですけど、そこまではレポートならず。
とはいえ、ブラウザから使えるWEBアプリなわけで、それはレンタルサーバーでデーターベースを操作するのときっと変わりないんだよなあ、と勝手に納得してみるのでした。

情報共有機能充実で、かなりDevOpsですね。
※まだまだ入り口ですがそんな感覚に浸りたいのです

ガントチャートも自動的に出来ちゃって便利。これがあるとスケジュール感が俯瞰できていいですよね。あとwikiで制作のガイドラインをまとめたり、フォーラムで意見交換したりと、情報や課題共有といった「みんなで使う」部分をより強く意識していると思うし、それって最初に書いたDevOpsな部分も捗るんじゃないかとも思う。

開発系の話でいうとGitやCVSやSubversionといったバージョン管理システムとも連携して、ソースコードと問題・課題・不具合・タスクを簡単に紐付けることができます。

個人的にはサポートメールの対応状況管理に便利なのかなあ…気になってます。これからはどんな企業でもSNS的なユーザーとの双方向のやりとりを意識しないといけないだろうし、そのためにはサポートメールを社内でうまく回すのは考えておきたいところ。だからメールの問い合わせの内容や、誰がいつどこまで対応したかなどが簡単に把握できるこのツールは、なんだか必須な気がしてきました。

ただ実際問題としては、これだけの機能を自分が使いこなせるかどうかは微妙。機能がいっぱいで、こっちもいっぱいいっぱいですよ(笑)また何人かメンバーがいたとして、使い方をみんなで理解し合えるかどうかもハードル高そうです。

以前、パンフレットの制作で簡単なグループウエアを使ったのですが、6人ぐらいが基本的な操作を覚えるのだけで1カ月ぐらい経ってしまいました。共通のリテラシーというか、慣れというか、そういうものが必要かも。

開発のみなさんなら無問題ですよね。

ここまで書いた話は、すでに使ってる人にはいまさらな話だとは思います。慣れた人は自分の勉強や趣味の進捗もこれで管理しちゃうとか?そこまで使いこなせたら楽しいでしょうね。実際の仕事のアウトプットだけでなく、こうしたツールについても捗ってしまうのは正直羨ましい。しかもオープンソースなので無料。まったく至れり尽くせりとはこのこと。試さない理由はないですよね。生産性が上がること間違いないと思います。

株式会社エコトバ 棕澤和宏


コラム一覧へ