より良い環境を求めて このページをアンテナに追加 RSSフィード

2015-07-04

[] Web開発時のGitでのゆるいワークフロー

Gitで何か低レベルの高度な操作が必要だっていうときは、大抵の場合は作業は一つのブランチでしかしない症候群にかかっている。

Gitはブランチやマージが軽いので、作業中のブランチを次々作っても上手い具合にマージしてくれる。



masterが本番、developがテストサーバー

この辺はreleaseでもstagingでも何でも良い。

f:id:n314:20150704165512p:image

一人開発でも効果ある。


masterからissue-1ブランチを切る

issue-1でcommit => developにマージ => テストサーバーで確認 => ちょっとここ直して〜

issue-1でcommit => developにマージ => テストサーバーで確認 => ちょっとここ直して〜

issue-1でcommit => developにマージ => テストサーバーで確認 => 確認中...時間がかかりそう

暇なのでmasterからissue-2ブランチを切る

(※ issue-1 を残したまま masterからissue-2 を作る。issue-1 の中で、あるいはdevelopから派生して別の作業をしてしまうと後で面倒なことになる。)

issue-2でcommit => developにマージ => テストサーバーで確認 => ちょっとここ直して〜

issue-2でcommit => developにマージ => テストサーバーで確認 => OK、本番に反映して〜

masterにissue-2をマージ => 本番反映

issue-1 はあとここだけ直して〜

issue-1でcommit => developにマージ => テストサーバーで確認 => OK、本番に反映して〜

masterにissue-1をマージ => 本番反映

masterとdevelopの差異が無い場合は適度にmasterにdevelopをマージ、developにmasterをマージ(単に履歴のグラフ表示を見やすくするため)



ちなみにPHPなので、デザイナーサーバーに直接画像をアップしたりHTMLを書き換えたりすることもある。

その場合は適当なタイミングでテストサーバーあるいは本番サーバー上で直接commit => push する。

次回pullせずに気付かずにpushしても弾かれるので特に問題は起きない。

2015-06-26

[] Redmineの少機能設定

以前はあれもこれもプラグインでできるなどと色々入れた結果、やることがぼやけたりRedmineのバージョンを上げづらくなったりということになっていた。


今回はとにかくメニューやリンクを減らす方向で設定。

  • admin以外はシステム管理者にしない
  • ロールと権限で開発者・報告者にメンバー管理を追加して、普段は開発者で使って他のユーザーの確認に報告者になったりチケット整理時だけ管理者になったりする
  • トラッカーで使うのは「担当者」「対象バージョン」「進捗率」とカスタムフィールドのみ
  • 進捗率はステータスから自動計算(設定のチケットトラッキング)
  • ワークフローは初期設定のものから更に削る
  • チケットのステータスは「要求待ち」「要件確定」「テスト待ち」「リリース待ち」など表記を変える
  • フィールドに対する権限で、一定のステータス以降は「担当者」「対象バージョン」を必須
  • バージョンは「6月リリース分」「7月リリース分」「未定」「随時」など
    • ここで期限を区切るのでチケットでは日付や工数を管理しない
  • プロジェクトのモジュールで使うのは「チケットトラッキング」「リポジトリ」「デフォルトカスタムクエリ

カレンダーやガントチャートは、必要なときほど情報が入力されていないことが多いので保留。



  • Redmine Default Custom Query」プラグインで、チケット一覧の初期表示を変える
  • Redmine Startpage plugin」でトップをマイページまたはチケット一覧に変える
  • 「View Customize plugin」で

他にもマイページに固定リンクやお知らせを入れたりメニューの順番を入れ替えたりできるView Customize pluginは思った以上に何でもできる。すごい。

担当者のデフォルト設定が〜〜とか色々記事があるけど、issues/new$ に対する設定で全部jQueryでやってしまえ的な。

$(function(){
  var val = 0;

  // 担当者初期値(自分)
  $('#issue_assigned_to_id option').each(function(){
    var v = $(this);
    if (v.text() == '<< 自分 >>'){
      val = v.attr('value');
      return false;
    }
  });
  $('#issue_assigned_to_id').val(val);

  // バージョン初期値(一番上)
  val = 0;
  $('#issue_fixed_version_id option').each(function(){
    var v = $(this);
    if (v.attr('value')){
      val = v.attr('value');
      return false;
    }
  });
  $('#issue_fixed_version_id').val(val);
});

グローバルな設定にロジックを埋め込んでも気にならないなら、かなり入力の手間を省けそう。

リポジトリへのリンクも、初期画面をmasterではなくdevelopに変更するとか。


サイドメニューを隠すJavaScriptの前にこれを入れて

  // プロジェクトタブの移動
  if ($('#main-menu a.overview')[0]){
    $('#sidebar').append('<h3>プロジェクト</h3>');
    var ul = $('<ul>');
    $('#sidebar').append(ul);
    $.each(['overview', 'activity', 'repository', 'settings'], function(k, v){
      ul.append($('#main-menu a.' + v).parent());
    });
  }

たまにしか見ないプロジェクトの概要、活動、リポジトリ、設定タブをサイドメニューに移すとか。

2015-06-25

[] Redmine3.0を入れた

プラグインや共通設定リセットなどの関係でRedmine3.0を入れた。


既にRuby1.9.3でRedmine2.4.3が動いていたのだが、それは残したままrvmで。


念のため別のLinuxユーザーを作ってrvmも新規で入れる。

Rubyのバージョンはデフォルトで2.2.1だった。

Passengerは5.0がインストールされた。


古いPassenger4.0のapacheモジュールではうまく動かなかったので、今回インストールしたPassenger5.0をApacheで読み込んだ。

古い方はPassengerRootなどを設定。

Ruby2.2.1で作ったPassenger5.0のApacheモジュールでもRuby1.9.3のRedmine2.4.3は動くっぽい。


というメモ。




あとついでに今更だけども、DebianのExim4でのメール設定

production:
  email_delivery:
    delivery_method: :sendmail
    sendmail_settings:
      arguments: "-i"

http://www.redmine.org/projects/redmine/wiki/EmailConfiguration

ちゃんとDebianの例が書いてあるのでマニュアルを読みましょう。

2015-03-02

[] 流れるようなインターフェースをtraitで

ぼんやり思ったことのメモ。


たとえばDB接続なら

<?php
$item = Item::select()
              ->from('item')
              ->join('category')
                ->on()->over(['category.status' => 'item.status'])
              ->like(['name' => 'my item'])
              ->order('code')
              ->offset(100)
              ->limit(10)
              ->get();

とかやりたい。

今までさくっと実装しようとすると、メソッド全部入りのDBクラスを作れば良かったんだけども、traitを使うと各メソッドを細切れで作っておいてtraitで

<?php
class CalledSelect
{
  use Join;
  use Where;
  use Order;
  use Get;
  use Offset;
}
class CalledFrom
{
  use Join;
  use On;
  use Where;
  use Order;
  use Get;
  use Offset;
}
class CalledWhere
{
  use Order;
  use Get;
  use Offset;
}

のようにすると、選べるメソッドが制限されて書きやすいんじゃないかと。PHP7では戻り値も書けるようだし。( https://wiki.php.net/rfc/return_types )

まあ今はIDE使ってないし恩恵ないんだけども。

2015-01-15

LinuxChromeをなるべく落ちないようにする

最近DebianChromeがよく落ちる。

OS再起動すると1日は落ちないが、次の日にはよく落ちるようになっている。

Chrome再起動しても同じ数だけタブを開いたら落ちる。


実際の動きは分からないけれど、メモリのキャッシュを見ずにメモリ足りないと認識して落ちているように見える。


1. Chromeを終了

2. http://futuremix.org/2009/09/clear-linux-memory-cach

sync
echo 3 > /proc/sys/vm/drop_caches

3. Chrome起動


少し改善した気がする。

2014-07-22

[][] Debian wheezyにphpenvでPHP複数バージョンの共存

かなりハマったのでメモ。


基本は

http://qiita.com/uchiko/items/5f1843d3d848de619fdf

こちらを参考に、一般ユーザー権限で操作する。


git clone https://github.com/CHH/phpenv.git
phpenv/bin/phpenv-install.sh 

mkdir ~/.phpenv/plugins
cd ~/.phpenv/plugins
git clone https://github.com/CHH/php-build.git

# rcファイルを編集後、読み込み

http://tkuchiki.hatenablog.com/entry/2014/04/08/210022

こちらを見ながら、該当個所の apxsをapxs2に変更しつつ修正。


ちなみにapxs2コマンドは apache2-threaded-dev にある。


で、root権限がないと設定ファイルのコピーでパーミッションエラーが出る。

phpenv install 5.5.14

# エラー終了

cd ~/.phpenv/versions/5.5.14/
mkdir libexec
cd /tmp/php-build/source/5.5.14
make
make install

# エラー終了

make install-modules install-binaries install-build install-headers install-programs install-pharcmd

これで一応libphp5.soは出来るので、 /etc/apache2/mods-available/php5.load を変更すればバージョンを変えられる。

パーミッションエラー以外にも何かエラーがある気がする。もやもやしたまま一旦終了。

2014-06-19

[] DebianにGitonomyをインストール

外部のサーバーで一般ユーザー権限でやろうとするとかなりめんどい。


http://gitonomy.com/doc/gitonomy/master/installation/

基本はここに書いてあるんだけども…。


(www-dataはapache実行ユーザー)

  1. linuxアカウントDBアカウントでgitonomyユーザーを作る、gitonomy DBを作る
  2. gitonomyにグループwww-data追加
  3. www-dataとgitonomyアカウントのumaskを002にする
  4. ダウンロードしたファイルを解答してapacheデフォルトドキュメントルートにする
  5. app/cache app/logs の権限を2775、所有権のグループをwww-dataにする
  6. app/config/* にグループ書き込み権限追加、グループをwww-dataにする
  7. w3mlocalhost/install.php にアクセス
    • 各項目を設定する
    • Secretは適当にランダム文字を入れた
  8. ./install.sh を実行する
  9. Apacheの設定をドメインに変えてブラウザでアクセスして確認
  10. Administration → configuration の設定 (特にメール送信)
  11. app/repositories ディレクトリを作り、SGID、グループ設定
  12. cron設定

new usersで、何故かパスワード入力欄が無い。

なので、ログアウトしてRegisterする。

adminでログインし直して、権限を付与、再びログインし直し。


プロジェクト作成などのテスト。



それからcron設定。




……。非常に疲れた。

Gitlabが重いから乗り換えようと思ってたけど、これはどうなんだろう。

バージョン1になるまで待った方が良いのかもしれん。

そもそもSymfonyとかDoctrineとか使う必要なくね?

gitwebとまでは言わないからもう少し軽くしてほしい。


あとユーザー管理が謎。

Gitlabみたいな内向きというよりは、PHPでもgithub作ろうみたいなノリなのか、そもそもターゲットを何も考えてないのかも。