サラリーマンP(プログラマーというよりPM) ぽんきち日記

サラリーマンP(プログラマーというよりPM) ぽんきち日記

サラリーマンP(もうプログラマーは業務ではほぼしてなくてPM業務ばっか)の備忘録的なものです

Amebaでブログを始めよう!
世の中様々なバージョン管理システムがありますが、その中でも分散バージョン管理は今注目されています。
サーバー上での中央集権的管理も大事ですが、ローカル作業の履歴ってあると便利ですよね。
で、その分散バージョン管理の中でもおそらく一番有名なGit(ギット)の導入部分を紹介します。

まずGitの導入ですが各OSによって異なります。私はUbuntuを使用しているので
$ sudo apt-get install git-core
でgitや依存しているその他諸々のものが導入できます。
※ご指摘を受けて訂正しました。クルチャさんありがとうございます。

で、導入後はお約束の初期設定を行います。
初期設定ではGit上のユーザー名やメールアドレスなどを設定します。
これらを設定することでコミットログに挿入されます。
$ git config --global user.name "ユーザー名"
$ git config --global user.email "メアド"

また端末をカラー表示にするには
$ git config --global color.ui auto

エディタを設定する場合は
$ git config --global core.editor vim
※例でvim
でコミットログの編集で使用するエディタが変更できます。

で、GitのコマンドはSVNに比べてデフォルトで短縮形のコマンドが用意されていないので
別名を定義します。
$ git config --global alias.co checkout
$ git config --global alias.st status
$ git config --global alias.ci commit
$ git config --global alias.br branch
$ git config --global alias.hist 'log --graph --date=short'
などあくまでも例ですがこういった形でお好みの設定をするといいでしょう。
ちなみにオプションで--globalと付けていますが、リポジトリ毎に設定することも出来ます。

以上で大まかな設定が出来たので、次は実際にどのような動きをするか試してみます。
まずは任意のディレクトリに新しいディレクトリを作成しそこに移動します。
$ mkdir sample
$ cd sample
で、Gitリポジトリを作成します。
$ git init
Initialized empty Git repository in /path/to/dir/sample/.git/
と表示されてリポジトリが初期化されます。
この状態ではこのリポジトリにはmasterというブランチのみとなっています。

次にバージョン管理するファイルを作成してみましょう。
$ touch a.txt
作成後Gitからどのように見えているのか確認するには以下のコマンドを実行します。
$ git status
すると
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# a.txt
nothing added to commit but untracked files present (use "git add" to track)
と表示されるかと思います。
次にバージョン管理するように追加してコミットしてみましょう。
$ git add .
$ git commit -m "初期コミット"
すると
[master (root-commit) 任意のID] 初期コミット
0 files changed, 0 insertions(+), 0 deletions(-)
create mode 100644 a.txt
と表示されます。環境によって若干異なる箇所もあるかと思います。
で以下のコマンドでログや状態を確認して見ましょう。
$ git log
commit 任意のID
Author: ユーザー名 <メアド>
Date: Sun Mar 18 00:00:00 2012 +0900

初期コミット
$ git status
# On branch master
nothing to commit (working directory clean)

これで初期状態が出来ました。
次回はブランチの作成、マージなどを紹介したいと思います。

入門Git/濱野 純(Junio C Hamano)

¥2,310
Amazon.co.jp

GroovyにはDSL(ドメイン特化言語)を定義するにあたり、強力にサポートする機能があります。
それらを使って非常に簡単なDSLを定義してみたいと思います。
ちなみにこちらの記事が良く纏まっていて参考にさせていただきました。
まずは定義したDSLは以下の様になります。
hello {
        message {
                value "hoge"
        }
}

なんとなく分るとは思いますがこのように定義すると「Hello,hoge」と出るようなものを定義しました。
普通こんな「ドメイン」無いとは思いますが^^;
まずはDSLを定義したファイルを読み込んで実行クラスを示します。

class Main {
        static main(args){
                run( new File("src/main/resources/dsl.groovy"))
        }
        static run(File file){
                Script script = new GroovyShell().parse(file.text)
                Message mes = new Message()
                script.metaClass = createEMC(script.class,{
                        ExpandoMetaClass emc ->
                        emc.hello = {
                                Closure cl ->
                                cl.delegate = new HelloDelegate(mes)
                                cl.resolveStrategy = Closure.DELEGATE_FIRST
                                cl()
                        }
                })
                script.run()
                printMessage(mes)
        }
        static ExpandoMetaClass createEMC(Class clazz, Closure cl){
                        ExpandoMetaClass emc = new ExpandoMetaClass(clazz,false)
                        cl(emc)
                        emc.initialize()
                        emc
        }
        static printMessage(Message message){
                println "${message.hello}${message.mes}"
        }
}


上記ソースはExpandoMetaClassを使用してScriptクラスの振る舞いを拡張し、その振る舞い自体は、
Closure#delegateに別途定義したHelloDelegateを渡しています。
delegateはClosureのthisのようなものでこちらの記事に詳しく解説されています。
#こうした先人達の記事は非常に助かり、私も大いに助けられています。
これらを使用することによってDSLの定義が可能になります。
ちなみにサンプルソースはこちらにアップしています。良かったら参考にしてみてください。
GitHubの実験代わりのものなのでブランチの切り方がおかしいですが、気にしないでください。

GroovyではXMLの読み込みにXmlSlurperというクラスを使用することによって、
文字通りずるずると読み込むことが出来ます。
Groovyにはもう一つXmlParserというものがありますが、読み込みにはXmlSlurperのほうが適しています。
以下にコードを紹介します。


import groovy.xml.MarkupBuilder

def writer = new StringWriter()
def xml = new MarkupBuilder(writer)
xml.example() {
        person(name: 'hoge', type: 'hage'){
                city('Tokyo')
                remarks('特に無し')
        }
        person(name: 'moge', type: 'debu', foo: 'bar'){
                city('Saitama')
                remarks('だ埼玉って言わないで')
        }
}
def doc = new XmlSlurper().parseText(writer.toString())
println "city=${doc.person.find { it.@type == 'debu' }.city}"

出力結果:

city=Saitama



先日のものに処理を追加したものになります。
XMLの要素の特定はGPathと呼ばれるXMLPathに似ている形式で指定します。
この機能はGroovyの得意とするDSLで定義されサンプルでも提示したように
非常に分りやすい定義で希望の要素を抽出することが出来ます。
この機能もGroovyがツールに向いている理由の一つかと思います。
またDSL(Domain Specific Language)を自分で定義することも出来ますので
自分のやりたいことに特化したものを定義することも出来ます。
何れそのやり方を紹介したいと思います。

プログラミングGROOVY/関谷 和愛

¥3,360
Amazon.co.jp