<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>RISIN'</title>
  <subtitle>フリーランスWebエンジニア</subtitle>
  <id>http://risin.jp/blog</id>
  <link href="http://risin.jp/blog"/>
  <link href="http://risin.jp/feed.xml" rel="self"/>
  <updated>2013-10-16T00:00:00+09:00</updated>
  <author>
    <name>遠藤 雅敬 (Masayuki ENDO)</name>
  </author>
  <entry>
    <title>middlemanの設定</title>
    <link rel="alternate" href="http://risin.jp/blog/2013/10/16/middleman/"/>
    <id>http://risin.jp/blog/2013/10/16/middleman/</id>
    <published>2013-10-16T00:00:00+09:00</published>
    <updated>2017-04-02T18:25:02+09:00</updated>
    <author>
      <name>Masayuki ENDO</name>
    </author>
    <content type="html">&lt;p&gt;本サイトで使用している middleman の主な設定をご紹介します。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;Gemfile&lt;/h2&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="c1"&gt;# If you have OpenSSL installed, we recommend updating&lt;/span&gt;
&lt;span class="c1"&gt;# the following line to use "https"&lt;/span&gt;
&lt;span class="n"&gt;source&lt;/span&gt; &lt;span class="s1"&gt;'http://rubygems.org'&lt;/span&gt;

&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"middleman"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 3.1.5"&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"middleman-blog"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 3.3.0"&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"middleman-livereload"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 3.1.0"&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"middleman-deploy"&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"middleman-rouge"&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"nokogiri"&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s1"&gt;'redcarpet'&lt;/span&gt;

&lt;span class="c1"&gt;# For feed.xml.builder&lt;/span&gt;
&lt;span class="n"&gt;gem&lt;/span&gt; &lt;span class="s2"&gt;"builder"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 3.0"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;config.rb&lt;/h2&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="no"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;zone&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Tokyo"&lt;/span&gt;

&lt;span class="c1"&gt;# [1] ブログ基本設定&lt;/span&gt;
&lt;span class="n"&gt;activate&lt;/span&gt; &lt;span class="ss"&gt;:blog&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;prefix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"blog"&lt;/span&gt;
  &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;taglink&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"tags/:tag.html"&lt;/span&gt;
  &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;layout&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"layouts/layout"&lt;/span&gt;

  &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tag_template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"tag.html"&lt;/span&gt;
  &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;calendar_template&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"calendar.html"&lt;/span&gt;

  &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;paginate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;per_page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;
  &lt;span class="n"&gt;blog&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;page_link&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"page/:num"&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;# [2] markdown 設定&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:markdown_engine&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:redcarpet&lt;/span&gt;
&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:markdown&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:fenced_code_blocks&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:smartypants&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;

&lt;span class="c1"&gt;# [3] シンタックスハイライト&lt;/span&gt;
&lt;span class="n"&gt;activate&lt;/span&gt; &lt;span class="ss"&gt;:rouge_syntax&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:lineanchor&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'line'&lt;/span&gt;

&lt;span class="n"&gt;activate&lt;/span&gt; &lt;span class="ss"&gt;:directory_indexes&lt;/span&gt;

&lt;span class="c1"&gt;# [4] Atom フィード設定&lt;/span&gt;
&lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="s2"&gt;"/feed.xml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:layout&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="kp"&gt;false&lt;/span&gt;
&lt;span class="n"&gt;activate&lt;/span&gt; &lt;span class="ss"&gt;:livereload&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:css_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'stylesheets'&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:js_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'javascripts'&lt;/span&gt;

&lt;span class="n"&gt;set&lt;/span&gt; &lt;span class="ss"&gt;:images_dir&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s1"&gt;'images'&lt;/span&gt;

&lt;span class="c1"&gt;# [5] build 時の設定&lt;/span&gt;
&lt;span class="n"&gt;configure&lt;/span&gt; &lt;span class="ss"&gt;:build&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
  &lt;span class="c1"&gt;# For example, change the Compass output style for deployment&lt;/span&gt;
  &lt;span class="n"&gt;activate&lt;/span&gt; &lt;span class="ss"&gt;:minify_css&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;:ignore&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s1"&gt;'syntax.css'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

  &lt;span class="c1"&gt;# Minify Javascript on build&lt;/span&gt;
  &lt;span class="n"&gt;activate&lt;/span&gt; &lt;span class="ss"&gt;:minify_javascript&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;

&lt;span class="c1"&gt;# [6] デプロイ設定&lt;/span&gt;
&lt;span class="n"&gt;activate&lt;/span&gt; &lt;span class="ss"&gt;:deploy&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="n"&gt;deploy&lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;
  &lt;span class="n"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;build_before&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kp"&gt;true&lt;/span&gt;
  &lt;span class="n"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;method&lt;/span&gt;       &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="ss"&gt;:rsync&lt;/span&gt;
  &lt;span class="n"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;host&lt;/span&gt;         &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'www'&lt;/span&gt;
  &lt;span class="n"&gt;deploy&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;path&lt;/span&gt;         &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/var/local/projects/risin.jp'&lt;/span&gt;
&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;以下、解説。&lt;/p&gt;

&lt;h3&gt;[1] ブログ基本設定&lt;/h3&gt;

&lt;p&gt;ブログエントリは &lt;code&gt;/blog&lt;/code&gt; 配下になるよう、&lt;code&gt;blog.prefix&lt;/code&gt; を指定しています。その他、ページネーション設定等、基本的な設定を行っています。&lt;/p&gt;

&lt;h3&gt;[2] markdown 設定&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;redcarpet&lt;/code&gt; という markdown engine を使用しています。 &lt;code&gt;fenced_code_block&lt;/code&gt; は、「`&amp;ldquo;」で囲んだ箇所がコードブロックとして解釈されます。&lt;/p&gt;

&lt;h3&gt;[3] シンタックスハイライト&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/Linuus/middleman-rouge"&gt;middleman-rouge&lt;/a&gt; を使用しています。スタイルシートは &lt;code&gt;/stylesheets/syntax.css.erb&lt;/code&gt; を用意し、以下の様にします。&lt;/p&gt;
&lt;pre class="highlight erb"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;%=&lt;/span&gt; &lt;span class="no"&gt;Rouge&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;Themes&lt;/span&gt;&lt;span class="o"&gt;::&lt;/span&gt;&lt;span class="no"&gt;ThankfulEyes&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;render&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ss"&gt;:scope&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'.highlight'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="cp"&gt;%&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;&amp;lt;%# &amp;lt;%= Rouge::Themes::Github.render(:scope =&amp;gt; '.highlight') %&amp;gt; %&amp;gt;
&amp;lt;%# &amp;lt;%= Rouge::Themes::Colorful.render(:scope =&amp;gt; '.highlight') %&amp;gt; %&amp;gt;
&amp;lt;%# &amp;lt;%= Rouge::Themes::Base16.render(:scope =&amp;gt; '.highlight') %&amp;gt; %&amp;gt;
&amp;lt;%# &amp;lt;%= Rouge::Themes::Base16::Solarized.render(:scope =&amp;gt; '.highlight') %&amp;gt; %&amp;gt;
&amp;lt;%# &amp;lt;%= Rouge::Themes::Base16::Monokai.render(:scope =&amp;gt; '.highlight') %&amp;gt; %&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;お好みでスタイルを選んでください。&lt;/p&gt;

&lt;h3&gt;[4] Atom フィード設定&lt;/h3&gt;

&lt;p&gt;サイトを build する際に、自動的に xml ファイルを出力します。
&lt;code&gt;source/feed.xml.builder&lt;/code&gt; を編集して、&lt;code&gt;xml.title&lt;/code&gt;, &lt;code&gt;xml.subtitle&lt;/code&gt; を適切に書き換えます。&lt;/p&gt;

&lt;h3&gt;[5] build 時の設定&lt;/h3&gt;

&lt;p&gt;build 時に、CSS, JavaScript の minify を行います。 [3] の syntax.css を minify 対象から外すようにしてください。 &lt;/p&gt;

&lt;h3&gt;[6] デプロイ設定&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/tvaughan/middleman-deploy"&gt;middleman-deploy&lt;/a&gt; プラグインを使いました。&lt;code&gt;middleman deploy&lt;/code&gt; コマンドを実行すると、build コマンドが行われ、スタティックなファイルを生成した後に、rsync, Git, FTP, SFTP などで Web サーバに転送することができます。今回は rsync を用いました。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;deploy.host = &amp;#39;www&amp;#39;&lt;/code&gt; となっているのは、ホスト名は別途 &lt;code&gt;~/.ssh/config&lt;/code&gt; にて設定しているためです。適切に設定してください。&lt;/p&gt;

&lt;p&gt;&lt;code&gt;deploy.path&lt;/code&gt; は、転送先に存在しない場合は作られます。&lt;/p&gt;

&lt;hr&gt;

&lt;p&gt;以上、参考になりましたら幸いです。&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>サイトリニューアル</title>
    <link rel="alternate" href="http://risin.jp/blog/2013/10/06/site-renewal/"/>
    <id>http://risin.jp/blog/2013/10/06/site-renewal/</id>
    <published>2013-10-06T00:00:00+09:00</published>
    <updated>2017-04-02T18:25:02+09:00</updated>
    <author>
      <name>Masayuki ENDO</name>
    </author>
    <content type="html">&lt;p&gt;ほったらかしにしていた本サイトですが、思うところがあってリニューアルしました。CMS は WordPress から &lt;a href="http://middlemanapp.com/"&gt;middleman&lt;/a&gt; へ移行し、デザイン・HTML は勉強も兼ねて昨今のトレンドを意識して実装しています。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;きっかけ&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;名刺がなくなったので発注しなきゃ&lt;/li&gt;
&lt;li&gt;デザインデータ紛失&lt;/li&gt;
&lt;li&gt;仕方ない。自分で作ろう。ロゴも新しく作っちゃえ。&lt;/li&gt;
&lt;li&gt;名刺できた。ブログで使っているロゴも新しいのに変えよう。&lt;/li&gt;
&lt;li&gt;なんかブログのテイストに合わない。ブログもデザインし直そう。&lt;/li&gt;
&lt;li&gt;WordPress のテーマ作るの面倒。。別に WordPress じゃなくてもいいんじゃね?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;こんな流れでサイト全体をリニューアルすることにしました。&lt;/p&gt;

&lt;h2&gt;デザイン&lt;/h2&gt;

&lt;p&gt;Bootstrap をベースにし、レスポンシブを活かせるようなレイアウトにしました。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;フラットデザインを意識し、極力シャドウ・グラデーションを無くす&lt;/li&gt;
&lt;li&gt;情報のまとまりはカード側デザインを導入&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;という感じです。&lt;a href="/portfolio"&gt;Portfolio&lt;/a&gt; のページでは Pinterest 風味な動作も入れてみました。&lt;/p&gt;

&lt;p&gt;ええ、完全に自己満足です。&lt;/p&gt;

&lt;h3&gt;SASS&lt;/h3&gt;

&lt;p&gt;私は本業はサーバサイドエンジニアなのですが、フロントエンドの技術もキャッチアップしておきたかったので、SASS を使ってみました。middleman には標準でコンパイルしてくれる仕組みが備わっています。&lt;/p&gt;

&lt;p&gt;SASS、超便利です。定義をネストでかけるので直感的で、カオスになりにくいです。&lt;/p&gt;

&lt;h2&gt;CMS を WordPress から middleman に変更&lt;/h2&gt;

&lt;p&gt;Bootstrap でデザインする際に &lt;a href="http://middlemanapp.com/"&gt;middleman&lt;/a&gt; を使っていました。middleman はプラグインで拡張することで、ブログ用のサイトも構築できることを知り、WordPress をやめました。&lt;/p&gt;

&lt;p&gt;middleman については別エントリで詳細を書くつもりです。&lt;/p&gt;

&lt;h3&gt;markdown&lt;/h3&gt;

&lt;p&gt;ブログエントリは markdown で書けるので HTML を意識する必要はありません。もちろん markdown 内に HTML を書けば HTML として解釈されるので Bootstrap のパーツも利用できます。&lt;/p&gt;

&lt;p&gt;これでブログを書くモチベーションが維持できるかな。&lt;/p&gt;

&lt;h2&gt;最後に&lt;/h2&gt;

&lt;p&gt;旧デザインのキャプチャを載せておきます。&lt;/p&gt;

&lt;p&gt;&lt;img alt="旧ブログ" src="/images/blog/2013-10-06/old_blog.png" /&gt;&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>ログ解析に便利なawk</title>
    <link rel="alternate" href="http://risin.jp/blog/2012/06/06/awk/"/>
    <id>http://risin.jp/blog/2012/06/06/awk/</id>
    <published>2012-06-06T00:00:00+09:00</published>
    <updated>2017-04-02T18:25:02+09:00</updated>
    <author>
      <name>Masayuki ENDO</name>
    </author>
    <content type="html">&lt;p&gt;アクセスログやアプリケーションのエラーログなど、一定のフォーマットで出力されるテキストの解析には awk が便利です。今回は MySQL のスロークエリログを対象に解析した時の tips です。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;MySQLのパフォーマンスチューニングにおいて、実行に時間が掛かる処理の特定にはスロークエリログが便利です。出力するための設定は &lt;a href="http://dev.mysql.com/doc/refman/5.1/ja/slow-query-log.html"&gt;本家リファレンス&lt;/a&gt; を参照下さい。&lt;/p&gt;

&lt;p&gt;スロークエリログは以下のような内容です。&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;120227&lt;/span&gt;  &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;00&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;27&lt;/span&gt;
&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="k"&gt;User&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="k"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;ユーザー名&lt;/span&gt; &lt;span class="o"&gt;@&lt;/span&gt; &lt;span class="err"&gt;ホスト名&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;IP&lt;/span&gt;&lt;span class="err"&gt;アドレス&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;Query_time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;  &lt;span class="n"&gt;Lock_time&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;  &lt;span class="n"&gt;Rows_sent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;  &lt;span class="n"&gt;Rows_examined&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;15932&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="k"&gt;COUNT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="nv"&gt;`count`&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;上記のフォーマットで場合によっては膨大な量のログが出力されます。これを目視でひとつひとつ確認するにはかなりの時間がかかるので、ツールを使って効率的に行ないたいと思います。そこで登場するのが awk です。&lt;/p&gt;

&lt;p&gt;awk の基本形は以下の通り。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;awk &lt;span class="s1"&gt;'条件文{実行文}'&lt;/span&gt; ファイル名
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これを使って、スロークエリログ内の 「Query_time」値が高い順に出力し、その行番号と行内容を出力する awk ワンライナーは以下の通りです。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="gp"&gt;$ &lt;/span&gt;awk &lt;span class="s1"&gt;'/Query_time/ &amp;amp;&amp;amp; $3 &amp;gt; 0 {print NR,$0}'&lt;/span&gt; slow.log | sort -k4 -n -r &amp;gt; sorted.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;コマンド解説&lt;/h2&gt;

&lt;dl&gt;
    &lt;dt&gt;条件文&lt;/dt&gt;
    &lt;dd&gt;行内の「Query_time」で正規表現マッチをかけ、かつ3列目( Query_time 値)が 0 以上のもの。&lt;/dd&gt;
    &lt;dt&gt;実行文&lt;/dt&gt;
    &lt;dd&gt;NR とは、処理中の行数を示すもの。$0 とは行全体を指す。よって、行番号とその行を標準出力に表示する。&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;これで、以下のように標準出力に表示されます。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2342 # Query_time: 2  Lock_time: 0  Rows_sent: 1  Rows_examined: 15932 
4854 # Query_time: 2  Lock_time: 0  Rows_sent: 1  Rows_examined: 7834 
7848 # Query_time: 10  Lock_time: 0  Rows_sent: 1  Rows_examined: 15932 
22475747 # Query_time: 5  Lock_time: 0  Rows_sent: 1  Rows_examined: 22146
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これで Query&lt;em&gt;time が 0 以上のものが表示されましたが、さらに sort コマンドをパイプで連結して Query&lt;/em&gt;time の降順で出力します。
&lt;dl&gt;
    &lt;dt&gt;-k4&lt;/dt&gt;
    &lt;dd&gt;ソートキーを指定します。スペース区切りで先頭から4列目( Query_time 値)を指定しています。&lt;/dd&gt;
    &lt;dt&gt;-n&lt;/dt&gt;
    &lt;dd&gt;数値の前に付いている記号「+」や「-」なども数値とみなします。&lt;/dd&gt;
    &lt;dt&gt;-r&lt;/dt&gt;
    &lt;dd&gt;逆順(降順)で出力すること。&lt;/dd&gt;
&lt;/dl&gt;&lt;/p&gt;

&lt;p&gt;これで最終的に sorted.txt に出力される内容は、以下の通り。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;7848 # Query_time: 10  Lock_time: 0  Rows_sent: 1  Rows_examined: 15932 
22475747 # Query_time: 5  Lock_time: 0  Rows_sent: 1  Rows_examined: 22146
2342 # Query_time: 2  Lock_time: 0  Rows_sent: 1  Rows_examined: 15932 
4854 # Query_time: 2  Lock_time: 0  Rows_sent: 1  Rows_examined: 7834 
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これで効率良く時間がかかっているSQLを見つけることができます!!&lt;/p&gt;

&lt;h2&gt;参考&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://d.hatena.ne.jp/kenjiskywalker/20120531/1338465148"&gt;Slow Query Logでみるとこ - kenjiskywalker no memo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.ideaxidea.com/archives/2010/07/mysql_slow_query.html"&gt;MySQLでSlow Queryを設定する方法 | IDEA*IDEA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.e.ics.nara-wu.ac.jp/~nogu/tips/unix_command.html#awk"&gt;コマンドリファレンス awk&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230887/"&gt;Linuxコマンド集 - 【 sort 】 行を並び替える：ITpro&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>サポートが切れたUbuntuでaptitudeを使う方法</title>
    <link rel="alternate" href="http://risin.jp/blog/2011/12/25/ubuntu_Ubuntuaptitude/"/>
    <id>http://risin.jp/blog/2011/12/25/ubuntu_Ubuntuaptitude/</id>
    <published>2011-12-25T00:00:00+09:00</published>
    <updated>2017-04-02T18:25:02+09:00</updated>
    <author>
      <name>Masayuki ENDO</name>
    </author>
    <content type="html">&lt;p&gt;年の瀬(しかも今日はクリスマス)ですが、いつもと変わらずTipsを載せておきます。今回はサポートが切れたUbuntuでもapt-getでパッケージを更新するやり方です。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;パッケージをインストールする時、もしUbuntuのサポートが切れている場合、aptitude(あるいはapt-get) installコマンド時に404エラーが出ます。本来であればUbuntu自体を更新すべきですが、開発マシンなどでは以下の手順でサクッと対処できます。&lt;/p&gt;

&lt;p&gt;環境は以下の通り:
&lt;dl&gt;
  &lt;dt&gt;Ubuntu&lt;/dt&gt;
  &lt;dd&gt;9.10&lt;/dd&gt;
&lt;/dl&gt;&lt;/p&gt;

&lt;h2&gt;/etc/apt/sources.listを更新する&lt;/h2&gt;

&lt;p&gt;念のためバックアップ。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# cp /etc/apt/sources.list /etc/apt/sources.list.old&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;sources.listを開き、「jp.archive」部分を「old-releases」に一括置換。
vimの場合。&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;:%s/jp&lt;span class="se"&gt;\.&lt;/span&gt;archive/old-releases/gc
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;aptitude update実行&lt;/h2&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# aptitude update&lt;/span&gt;
Get:1 http://old-releases.ubuntu.com karmic Release.gpg &lt;span class="o"&gt;[&lt;/span&gt;189B]
Get:2 http://old-releases.ubuntu.com karmic-updates Release.gpg &lt;span class="o"&gt;[&lt;/span&gt;198B]
:
:
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;これでaptitude install xxxができると思います。来年12.04LTS出たら使おう。&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>INSERT 〜 SELECTで一括INSERTするときの注意点</title>
    <link rel="alternate" href="http://risin.jp/blog/2011/11/03/mysql_INSERT_SELECTINSERT/"/>
    <id>http://risin.jp/blog/2011/11/03/mysql_INSERT_SELECTINSERT/</id>
    <published>2011-11-03T00:00:00+09:00</published>
    <updated>2017-04-02T18:25:02+09:00</updated>
    <author>
      <name>Masayuki ENDO</name>
    </author>
    <content type="html">&lt;p&gt;SELECT結果を別テーブルにINSERTしたい時があります。そんな時は INSERT (IGNORE) SELECT文を使うのですが、master/slaveでレプリケーションしている環境にて注意すべき点があります。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;備忘録、というか事故ったので、戒めとして。&lt;/p&gt;

&lt;p&gt;環境は以下の通り:
&lt;dl&gt;
  &lt;dt&gt;MySQL&lt;/dt&gt;
  &lt;dd&gt;5.0.51a&lt;/dd&gt;
&lt;/dl&gt;&lt;/p&gt;

&lt;p&gt;例えば以下の2つのテーブルがあるとして、&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="nv"&gt;`members`&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nv"&gt;`id`&lt;/span&gt; &lt;span class="n"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;unsigned&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="n"&gt;auto_increment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;`name`&lt;/span&gt; &lt;span class="n"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;`id`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ENGINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;InnoDB&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;CHARSET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;utf8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="nv"&gt;`member_logs`&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nv"&gt;`id`&lt;/span&gt; &lt;span class="n"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;unsigned&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="n"&gt;auto_increment&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;`year`&lt;/span&gt; &lt;span class="n"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;unsigned&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;`month`&lt;/span&gt; &lt;span class="n"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;unsigned&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;`member_id`&lt;/span&gt; &lt;span class="n"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;unsigned&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt;  &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;`id`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;ENGINE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;InnoDB&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;CHARSET&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;utf8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;今月のmember_logsレコードをmemberレコード分だけINSERTしたいときは、以下のようにします。&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;IGNORE&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;member_logs&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;member_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="k"&gt;YEAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="k"&gt;MONTH&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
     &lt;span class="n"&gt;members&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;サービスがmasterDBだけであればこれでいいのですが、複数台レプリケーションしている場合は不整合が起きる可能性があります。&lt;br /&gt;
サブクエリの&lt;code&gt;SELECT&lt;/code&gt;の&lt;code&gt;ORDER&lt;/code&gt;が指定されていないため、masterでの実行結果とslave側での結果が必ずしも一致しません。よって、&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;INSERT&lt;/span&gt; &lt;span class="k"&gt;IGNORE&lt;/span&gt; &lt;span class="k"&gt;INTO&lt;/span&gt; &lt;span class="n"&gt;member_logs&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;year&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="k"&gt;month&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;member_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt;
    &lt;span class="k"&gt;YEAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="k"&gt;MONTH&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;NOW&lt;/span&gt;&lt;span class="p"&gt;()),&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt;
     &lt;span class="n"&gt;members&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt;
     &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;ASC&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;のように&lt;strong&gt;明示的にORDER BY&lt;/strong&gt;しましょう。&lt;/p&gt;

&lt;p&gt;普通にSELECT文だけ実行するとPRIMARY KEYの昇順で返ってくるので早とちりしてました。&lt;/p&gt;

&lt;h2&gt;参考&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.irori.org/doc/mysql-rep.html#banned_sql"&gt;レプリケーション環境下で実行してはいけないSQL - 現場指向のレプリケーション詳説&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://dev.mysql.com/doc/refman/5.1/en/insert-select.html"&gt;MySQL :: MySQL 5.1 Reference Manual :: 12.2.5.1 INSERT &amp;hellip; SELECT Syntax&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://stackoverflow.com/questions/5650336/mysql-replication-of-insert-select-with-order-by"&gt;MySQL Replication of INSERT… SELECT with ORDER BY&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
  <entry>
    <title>gitoliteで作成したリポジトリをRedmineから参照する</title>
    <link rel="alternate" href="http://risin.jp/blog/2011/10/19/gitredmine_gitoliteRedmine/"/>
    <id>http://risin.jp/blog/2011/10/19/gitredmine_gitoliteRedmine/</id>
    <published>2011-10-19T00:00:00+09:00</published>
    <updated>2017-04-02T18:25:02+09:00</updated>
    <author>
      <name>Masayuki ENDO</name>
    </author>
    <content type="html">&lt;p&gt;&lt;a href="/blog/2011/10/17/git_gitolite/"&gt;前のエントリ&lt;/a&gt;でインストールしたgitoliteを用いて、リポジトリの作成からRedmineとの連携までを行います。&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p&gt;環境は以下の通り:
&lt;dl&gt;
    &lt;dt&gt;サーバー&lt;/dt&gt;
    &lt;dd&gt;OS: Ubuntu 10.04.1 LTS&lt;br /&gt;git: 1.7.0.4&lt;br /&gt;Redmine: 1.2.1&lt;/dd&gt;
    &lt;dt&gt;クライアントPC&lt;/dt&gt;
    &lt;dd&gt;OS: Mac OS X 10.7.2&lt;br /&gt;git: 1.7.4.4&lt;/dd&gt;
&lt;/dl&gt;&lt;/p&gt;

&lt;h2&gt;1. リポジトリを作成する&lt;/h2&gt;

&lt;p&gt;クライアントPCでの作業です。管理用リポジトリをcloneします。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[masayuki@local:~]$ cd /tmp/
[masayuki@local:/tmp]$ git clone gitserver:gitolite-admin #=&amp;gt; このやり方は前のエントリの~/.ssh/config の設定をご参考ください。
Cloning into gitolite-admin...
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 18 (delta 4), reused 0 (delta 0)
Receiving objects: 100% (18/18), done.
Resolving deltas: 100% (4/4), done.
[masayuki@local:/tmp]$ cd gitolite-admin/
[masayuki@local:/tmp/gitolite-admin]$ ll
total 0
drwxr-xr-x  3 masayuki  wheel   102B 10 19 14:15 conf/
drwxr-xr-x  3 masayuki  wheel   102B 10 19 14:15 keydir/
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;設定ファイルに作成するリポジトリ名(仮にnew_repoとします)と、パーミッションを追加します(ハイライト部分)。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[masayuki@local:/tmp/gitolite-admin]$ vi conf/gitolite.conf
repo    gitolite-admin
        RW+     =   masayuki

repo    testing
        RW+     =   @all

repo    new_repo
        RW+     =   masayuki
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;この設定ファイルをコミット&amp;amp;プッシュします。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[masayuki@local:/tmp/gitolite-admin]$ git add conf/gitolite.conf
[masayuki@local:/tmp/gitolite-admin]$ git commit
[masayuki@local:/tmp/gitolite-admin]$ git push
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;2. リポジトリのミラーを作成する&lt;/h2&gt;

&lt;p&gt;gitサーバー側での作業です。適当なディレクトリに、new_repoのミラーを作成します。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[root@server:~]# mkdir -p /var/local/projects/gitrepo
[root@server:~]# cd /var/local/projects/gitrepo/
[root@server:/var/local/projects/gitrepo]# git clone --mirror /home/gitolite/repositories/new_repo.git
[root@server:/var/local/projects/gitrepo]# chown -R gitolite:gitolite new_repo.git
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;次に、new_repoリポジトリに変更があったときに、先ほど作ったミラーに同期させるため、gitoliteユーザーにスイッチして、ミラー元のフックスクリプトを作成します。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[root@server:/var/local/projects/gitrepo]# su - gitolite
[gitolite@server:~]$ cd repository/new_repo.git/hooks/
[gitolite@server:~/repository/new_repo.git/hooks]$ cat &amp;gt;&amp;gt; post-receive &amp;lt;&amp;lt;EOF
&amp;gt; #!/bin/sh
&amp;gt; /usr/bin/git push --mirror /var/local/projects/gitrepo/new_repo.git
&amp;gt; EOF
[gitolite@server:~/repository/new_repo.git/hooks]$ chmod 700 post-receive
&lt;/code&gt;&lt;/pre&gt;

&lt;h2&gt;3. 作成したミラーリポジトリをRedmineから参照する&lt;/h2&gt;

&lt;p&gt;Redmineにブラウザでアクセスし、プロジェクト &amp;gt; 設定 の、「リポジトリ」タブにて以下の通り設定します。&lt;/p&gt;

&lt;p&gt;&lt;a href="/images/blog/2011-10-19/redmine_setting.png"&gt;&lt;img alt="Redmine設定" src="/images/blog/2011-10-19/redmine_setting.png" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;4. 確認&lt;/h2&gt;

&lt;p&gt;クライアントPCでリポジトリをクローンし、ファイルコミット&amp;amp;プッシュしたらRedmineに表示されるか確認してみます。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[masayuki@local:/tmp]$ git clone gitserver:new_repo
[masayuki@local:/tmp]$ cd new_repo/
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;空っぽのリポジトリができました。ファイルを追加してみましょう。&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[masayuki@local:/tmp]$ cd new_repo/
[masayuki@local:/tmp/new_repo]$ echo Hello &amp;gt; hello.txt
[masayuki@local:/tmp/new_repo]$ git add hello.txt
[masayuki@local:/tmp/new_repo]$ git commit
[masayuki@local:/tmp/new_repo]$ git push origin master
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Redmineの「リポジトリ」画面にアクセスしてみてください。今コミットされたファイルが見えるはずです。&lt;/p&gt;

&lt;h2&gt;参考&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ambitz.com/2011/03/07/adding-a-gitolite-controlled-repository-to-redmine/"&gt;Adding a gitolite-controlled repository to Redmine&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</content>
  </entry>
</feed>
