TDDBC 大阪 2.0 参加してきた #tddbc
待ちに待った念願の TDDBCに参加することができました!
主催者の皆様のおかげで、今回は、 6/2 土曜日、6/3 日曜日の二日同じ内容をやっていただいていました。なぜなら、人気がありすぎて、すぐに 満席になってしまうくらいに人気で、それだけこの勉強会に参加したい方が多いって事でしょうね。
募集ページ
みんなのポジションペーパー
タイムテーブル
0930〜1000 | 受付 |
1000〜1010 | 会場説明 |
1010〜1040 | 和田さん講演 |
1040〜1110 | 吉岡さん or 咳さん講演 |
1110〜1120 | 休憩 |
1120〜1200 | デモペアプロ |
〜1300 | ご飯食べながらペア決めしながらアイスブレイク |
1300〜1530 | 演習と休憩 |
1540〜1610 | 関さんの講演 |
1620〜1650 | テーブルレビュー |
1700〜1730 | 講師・TAトークセッション |
1730〜1740 | KPT |
1740〜1750 | 和田さん振り返り |
1750〜1800 | おわりに |
和田さん(@t_wada)講演
ここでは、TDDに関する基本の考え方について学びました。TDD自体は聞きかじった程度で、ちゃんと人のお話を聞くのは初めてでした。ここで学んだことを以下に列挙します。- ソフトウェア開発の3本柱:バージョン管理、テスティング、自動化
- テストに関する感覚は皆違う。
- TDDの「黄金の回転: Red、 Green、リファクタリング、のサイクル。
- プログラムを作成する時は、自分が最初のユーザーである事を意識すること。
- テストを書いて、自分のコードに自信を持とう。
- 「CleanCode」の著者、Robert C. Martin さんは、 グリーンバンドを見て、やる気を奮い立たせているそうだ。
吉岡さん(@hyoshiok)講演
資料楽天に勤めていらっしゃる吉岡さんの発表は、TDDとか自動ビルド等の歴史が分かる発表でした。
- 1980年とか、それくらいからTDDとか、継続的インテグレーションの始まりのような開発をされていたと聞いて、ビックリ。
- チェックアウト→コード修正→他の方のレビュー→チェックイン:レビューは大事ですね。
- デイリービルド:ビルド専用のマシンが複数台あり、その日のチェックインをビルド、エラー時は即時ロールバックした。
- テストプログラムは、他人の作ったコードのテストだけやるようにした。
- 吉岡さんが会ったハッカーは、高い技術と、コミュニティをを大事にする心、を持つプロフェッショナルである。
- テストのないコードはレガシーコードだ!
デモペアプロ
ペアプロは@t_wadaさんと@irofさんによって行われました。お二人とも楽しそうにペアプロされていました。ワークショップ
私のペアプロのお相手は、@yoshi_naoyukiさん。若くてやる気のある方でした。今回私は、Groovy希望で受けさせていただいたのですが、当日@kyon_mmさんが「Groovy(Spock)でやりたい人?Javaが書けるならGroovy(Spock)で楽しくできるはずですよ〜」って呼びかけしたら、およそ10人くらいの方が手をあげられていました。これが「Javaと仲良くやっていくGroovyの力」なのか?呼びかけした@kyon_mmさんのカリスマ性なのか? おそらくは両方でしょう。ペアプロの前に、まずは環境設定をしました。今回はIntelliJidea + Spockでペアプロを行いました。PCは、@yoshi_naoyukiさんがお持ちのパソコンの方が、画面が広かったので、お借り致しました。@yoshi_naoyukiさん、ありがとうございました。
実際にペアプロをやってみると、まず事前にやったはずのSpockの構文を私が すっかり忘れてしまい思ったように進みませんでした。結局、@kyon_mmさんにお教えいただき、分かるようになりましたが、少し時間をロスしてしまいました。@kyon_mmさんありがとうございます。この反省点は二つです。
- 予習するなら、要求される環境でちゃんとやっておく。 今回、IntelliJもちゃんとやっておくべきだったなと思いました。
- ワークショップ中であっても、落ち着いて行動する。 私が忘れてしまった内容はSpockのトップページを見れば一目瞭然の内容で、その時冷静にググってれば割と早くSpockで始められたと思います。
今回の演習課題
Spockについて@kyon_mmさんに教えて頂いたおかげで、TDDBCに集中できました。用意されていた課題は、「飲み物自動販売機」プログラムをTDDを用いて書いていくものでした。二人でしながらプログラムを作っていると、これが 「楽しい」と純粋に思えました。それぞれが個人の主張を貫き通すわけではなく、議論しいい方を採用しながらプログラムを作る、こういう経験はなかなかできません。とてもいい経験になりました。TDDについては、最初はテストファーストを意識していましたが、途中から「最初からグリーンバーが見える書き方」に移行してしまった私に対し、ペアプロ相手の@yoshi_naoyukiさんは冷静に「テストファースト」を考えておられました。これは、 @yoshi_naoyukiさんの長所ですね。
私たちはステップ2の途中で、タイムアップになりました。あまり進みませんでしたが、とにかくあっという間に感じるほど、集中できたし、楽しい時間でした。
関さん(@m_seki)講演
関さんのお話は、TDDをより進化させるお話でした。- 手動テストもいいよ?
- たまには、デストロイしてみては?
- レガシーコード改善ガイドを読もう。
TAさん達のパネルディスカッション
- TDD行う上でよく詰まるところは?他のコードやライブラリが必要な時の対処。
- DB接続周りの対処。本物の環境を使ったり、もしくはDBスキーマの変更が激しい場合はmockでできるだけがんばるという意見も。
- ログを吐き出すコードを書き、そのログを自動で評価する。
- テストの効果の見える化が大事!
まとめ
Twitterのまとめ:TDDBC大阪 1.0 & 2.0いやー、勉強になりました。主催、講師のみなさん、ありがとうございました。グリーンバンドを購入したので、新しい職場の机の上に置きました。この経験を元に、テストファーストの考え方を考えながら仕事をしていきたいと思います。 「acts_as_professional」
関連書籍
JGGUG名古屋Groovy DSL勉強会 参加してきた #jggug
5月30日に 株式会社ニューキャスト様で行われた JGGUG名古屋Groovy DSL勉強会に参加してきました。
事の始まり
この勉強会は、以前モスクワにて行われた Cloud Foundry Open Tour 2012のモスクワ開催*1で、Groovyのproject managerであるGuillaume Laforgeさんが発表された、「Going to Mars with Groovy Domain-Specific Languages」について読み、考えたり、コードを作成してみたりする会でした。ニューキャストの方達は、数人でモスクワまで言ってお話を聞かれたみたいですね。 すごい行動力です。スライド
DSLについて
まず、私に取っては 「DSLとは何か?」からスタートしなくてはなりませんでした。今まで何回かネットで調べたことはあったのですが、何となくなイメージしかつかめておりませんでした。ですが、上記のスライドと、@tyamaさんにいろいろと教えて頂いたおかげで、DSLについてある程度の理解をすることができました。まず、それを説明します。DSLを一言で言うと、 ある環境(ドメイン)で利用される、記述者の理解しやすい形で記述できる固有言語と言えます。その中にはいくつかのポイントがあります。 そうやって考えると、私たちプログラマの回りにはDSLが多くあります。SQLやHTML、XMLなんかもその類でしょう。おもしろかったのは、音楽で使う楽譜もDSLといえるようです。*3上記のスライドの例では、 「火星を探索するロボットに対するDSL」について話がされています。その中でも、 「プログラム上必要なコード」を徹底的に排除し 「DSLとして必要なコード」だけに徹底的に絞っていくお話になっています。「Groovyのこんな機能を使ってこういったDSLを動かせるプログラムを作成できますね。」というスライドになっています。
DSLを実現するためのGroovyのテクニック
- GroovyShell 上記の資料の47スライド目あたりに解説がありますが、DSLを読み込んで実行する際に、GroovyShellを使って、あらかじめ必要な関数等をバインドしておき、DSLであるGroovyスクリプトを実行する事ができるようです。
- Compilatoin customizer コードのコンパイル時に様々な事を織り込んで動作させる仕組みの様です。大きく分けて以下の3つに分かれます。
- Import customizer 上記スライドの53スライド目あたりに説明がありますが、コンパイル時に使用するimport対象のクラス等をimportする書式を外に出せるようですね。
- AST transformation customizer 上記スライドの54スライド目に説明があります。GroovyにはもともとAST変換という機能が備わっていますが、その機能をコンパイル時に織り込む事ができる様ですね。例では、Loggerを織り込んでいます。
- Secure AST customizer 上記スライドの59スライド目あたりに説明があります。これは、すでにあげた 「場合によっては必要のない部分にアクセスできない様に、セキュリティ対策を行う。」に値します。59スライド目の例では、Groovyの言語仕様の一部である closureの使用を制限しています。また、演算子や使用できるクラスを制限したりして、DSLとして使用で切る部分だけに絞ることができています。 必要な機能ですね。
- Command chain 上記スライドの112スライド目あたりに説明がありますが、Groovy1.8からできるようになった、 ドットや括弧を省いて、オブジェクト.メソッドのような構造を表すことができる機能の様ですね。この説明では、スピードを指定する際に使用し、DSLとしては不要なドットや括弧を省いています。
まとめ
何よりDSLの考え方がはっきりしたのが、私にとってはありがたい話でした。なんとレベルの低いことか^^;集まられていた皆さんに聞いて見たところ、DSL自体は何かのプログラムの書籍などから生まれた物ではなく、一般常識と言えるレベルの様です。*4また、Groovyの柔軟さもよく分かりました。参考
- twitterのまとめ
- @kiy0takaさんによるJavaFXを使ってDSLを書けば、「Groovyたん 火星にいく!」アプリ 要Java7です。お遊びの様ですが、サンプルとしては秀逸でした!詳しくは@kiy0takaさんのブログ記事を参照してください。 Groovyたん火星へ行く
- マーチン・ファウラーさんの書かれたDSLの本の和訳版
継続的デリバリー読書会2 参加してきた #CDStudy
2012年5月20日に行われた、 継続的デリバリー読書会2に参加してきました。
以前行われた 第1回と同じように、みんなで輪読して、章毎にテーブル単位で話し合う形で行われました。今回の範囲は、 第3章 継続的インテグレーション、 第4章 テスト戦略を実装するでした。
第3章 継続的インテグレーション
この章は 継続的インテグレーションについて学ぶ章でした。継続的インテグレーション*1は、継続的デリバリーの中核をなす部分といっても過言ではないでしょう。 Jenkinsに代表される強力なオープンソースのツールがありますし、それらを使って最終的に客先に届けるまでのプロセスで何度も繰り返すプロセスといえます。大まかな内容は以下のようになります。
- 導入
- 継続的インテグレーションを実現する
- 継続的インテグレーションの前提情景
- 継続的インテグレーションソフトウェアを使用する
- 基本的なプラクティス
- やったほうがいいプラクティス
- 分散したチーム
- 分散バージョン管理システム
- まとめ
私が参考になった点を以下に列挙します。
- 開発者は自らのビルドに責任を持て! これは、単純に考えると「継続的デリバリー」、「継続的インテグレーション」どちらにも関係なく必要な事のように思えます。この書籍の中では、まず 「コードのコミットからキックされる、テスト、ビルドを数分で終わるようにする!」とはっきり明言されています。そうでないと、ビルドにかかる時間をぼーと待つ事になる上に、 「他のメンバーがビルドを行っていたら、そのビルドが正常に終了するまで待つ!」という原則から、他のメンバーの進捗に悪影響を与えます。そのうえで、 「自分のビルドが正常に終了するまで帰宅してはならない!」と言っています。ビルドで問題を残したままにすることは、その間他のメンバーの作業を止めてしまうからです。この書籍では、例としてオフショア開発のケースを上げて、アメリカでエラーを起こしたままにすると、インドで作業ができないというような例を説明してくれています。このお話から、書籍にも記述がありましたが、 「金曜日の夜にコミットするのはダメ!」「ノーコミットフライデー!」という名言めいた言葉がどこからともなく聞こえてきました。
- 常に以前のリビジョンに戻れるようにすること! 前の項目を満たしていたとしても、ビルドが失敗することはあり得ることです。その際、対処に係る時間を計測し、対処にかかる時間が10分以上であれば、以前のリビジョンに戻しましょう、とお話されています。この書籍の考え方では、以前のリビジョンは必ず正しく稼働していたはずです。ここでビルドに失敗した状態で時間をかけると、他のメンバーからのコミットを妨げるだけでなく、他のメンバーからの事故で問題がより深刻化するおそれもあるからです。素早いリバートを心がける必要があるようです。
- 分散バージョン管理システムをうまく使う! 分散バージョン管理システムなら、コードのコミットを行う際に、自分のローカルに中央リポジトリのコードを取得して、競合の管理ができます。こんな所にも分散バージョン管理の利点が生きてくるわけですね。
第4章 テスト戦略を実装する
この章では、「継続デリバリー」において意識すべきテスト戦略について書かれていました。私自身「元製造業」の人間です。「品質こそ企業の命」と常に聞いて社会人をやっていましたから、どんな職種であっても品質との縁は切ることができないというのが持論です。この章は以下のような説明がされていました。- 導入
- テストの種類
- 実際に起こり得る上京と戦略
- プロセス
- まとめ
私が参考になった点を以下に列挙します。
- 受け入れテストを自動化する事! 私の中では受け入れテストを自動化するのは
- すべてのテストを自動化できるわけではない! 上記のように自動化できるところは自動化するべきですが、書籍の中にも、どの程度まで自動化するべきかは、検討するべきだとあります。やはり、人がやるテストは柔軟なんですね。
- 振る舞い駆動開発のパターンを利用する! 振る舞い駆動開発パターンを利用すれば、
- 非機能要件に関するテストは事前準備する。 一般的に必要な非機能要件に関するテストは予測可能という観点から、事前に準備しておきべきという事が書かれていました。これはチームとしての経験値が物を言う内容ですね。とても大事な事だと思います。
一番難しいという印象がありました。特に想定されるのWebシステムであり、やはり無難に各入力フォームに対しテストコードを打つスクリプトを地味に作る発想しか私自身できていません。書籍にも記述がありましたが、フォームの名前等に依存するテストになってしまうのがよくあるケースだそうです。ただ、受け入れテストまで自動化されて、常に顧客要求を満たすことが確認できるビルドができるのであれば、これほど
心強い事はありませんね。
設計者が作る設計書=テストコードとなり得る。これを使わない手はない。
まとめ
今回もとても勉強になりました。次回までにまた該当の章を読んでおいて、知識を深めたいと思っています。@kyon_mmさん、会場準備等ありがとうございました。Twitterのまとめ
*余談ですが、当記事はGroovyのMarkupBuilderを使ってHTMLを作成して書きました。いずれまた記事にします。
*1:以下、CIと表記する。
vi/vim 設定 コマンド 私的まとめ
vimの設定コマンドの私的まとめです。
基本は、各コマンドの入力はvimのスタンダードモード時に入力します。項目によりますが設定を永続化させたい場合は~/.vimrcに記述してください。また、論理値オプションと書かれた項目は、以下のような形で、オフにできます。
:set no○○○○
コマンド
シェル
shellコマンド実行結果の取り込む。 | :r !shellコマンド |
表示
現在のモードを照会する。 | :set showmode | |
行数表示する。 | :set number | 論理値オプション |
実行されているスクリプトの一覧表示する。 | :scriptnames | |
カーソル上下に必ず表示させる行数をセットする。 | :set scrolloff=整数 | |
カーソル横に必ず表示させる桁数セットする。 | :set sidescrolloff=整数 | |
右下に桁数表示する。 | :set ruler | 論理値オプション |
入力途中のコマンドを右下に表示する。 | :set showcmd | 論理値オプション |
タブ文字等を可視化する。 | :set list | |
list時のタブ文字表記をデフォルトから「>-」に変更する。 | :set listchars=tab:>-,trail:- | |
コメント行の高さを3行に変更する。 | :set cmdheight=3 | |
構文強調表示を開始する。 | :syntax enable | |
長い行の折り曲げ禁止する。 | :set nowrap | |
バックグラウンドカラーを変更する。(ただし、:syntax enable以前に記述すること。) | :set background=dark | |
カラースキーマを変更する。 | :colorscheme evening | |
システム変数の値を表示する。(例:filetype) | :echo &filetype |
検索
検索、置換時に大文字小文字の区別をする。 | :set ignorecase | 論理値オプション |
検索時に検索にヒットする部分を色付け表示する。 | :set hlsearch | 論理値オプション |
検索する言葉を入力する際、その入力値に該当する直近の結果をハイライトする。 | :set incsearch | 論理値オプション |
編集
新しい行作成時に、一つ上の行のインデントを保持するかの設定する。 | :set autoindent | 論理値オプション |
挿入モードでBackSpaceキーで削除できる項目の決定する。 | :set backspace=indent,eol,start*1 | |
コマンドを新たにマップする。(この例ではQにgqをマップしている) | :map Q gq | |
10 文字ずつ横スクロールさせる。 | :set sidescroll=10 | |
上下の行への移動に使えるキーを追加する。 | :set whichwrap=b,s,<,> | |
キーワードに現在使える文字を表示する。 | :set iskeyword | |
キーワードに使える文字を追加する。 | :set iskeyword+=○ |
履歴
コマンドを50個分、検索パターンを50個分、ヒストリ(履歴)として残す。 | :set history=50 |
ファイルタイプ関連
ファイルタイプ識別をし、ファイルタイプ対応のプラグイン、インデントをonにする。 | :filetype plugin indent on |
ファイルタイプを個別指定する。(例はfortranに設定) | :set filetype=fortran |
オプション
オプション一覧の表示 | :options | 開いたファイルで変更したいオプションコマンド上でEnterキーを押すと、オンオフ切り替えができる。 |
保存
ファイル編集終了時に自動保存する。 | :set autowrite | 論理値オプション |
vi/vim 編集 コマンド 私的まとめ
viの私的覚書です。
移動
上下左右の移動
k h l j
単語毎に移動
前進する。 | w |
後退する。 | b |
行の
先端に移動する。 | ^ |
最後に移動する。 | $ |
段落毎に移動
前進する。 | { |
後退する。 | } |
ファイルの最初、最後へ移動
最初へ移動する。 | gg |
最後へ移動する。 | G |
現在位置を表示する。 | ctrl-g |
行を指定して移動する。 | 行数G |
対応する開き括弧、閉じ括弧へ移動
括弧へ移動する。 | % |
検索
行内1文字検索する。(左から右) | f○ |
行内1文字検索する。(右から左) | F○ |
検索開始する。 | / |
次候補する。 | n |
行頭検索する。 | /^○○ |
行末検索する。 | /○○$ |
検索履歴を巡回する。 | /上キー、下キー |
単語区切りでの検索する。 | /\>○○\> |
マーク
マークは画面上に表記されないので注意する。
マークする。 | m{a-zA-Z} |
マークの場所へ行く。 | '{a-zA-Z} |
viが自動で覚えた場所へ行く。 | '{0-9} |
マークの一覧を確認する。 | :marks |
特殊操作
カーソル下のカッコに対応するカッコに移動する。 | % |
ウィンドウ範囲内の最初の文字に移動する。 | h |
ウィンドウ範囲内の中段の文字に移動する。 | m |
ウィンドウ範囲内の最後の文字に移動する。 | l |
タグ
カーソル直下の文字列からタグへの移動する。 | ctrl-] |
タグ移動を戻る。 | ctrl-o |
タグ一覧を見る。 | :tags |
スクロール
1行下を表示する。 | ctrl-e |
1行上を表示する。 | ctrl-y |
半ページ上を表示する。 | ctrl-d |
半ページ下を表示する。 | ctrl-u |
1ページ上を表示する。 | ctrl-b |
1ページ下を表示する。 | ctrl-f |
カーソル位置に対して画面を
カーソルが最上段にくるように表示する。 | zt |
カーソルが真ん中の行にくるように表示する。 | zz |
カーソルが最下行にくるように表示する。 | zb |
入力
入力モードへ | i |
入力モードから抜ける。 | ESC |
カーソル位置一つ右から入力モードへ移行する。 | a |
カーソル位置の1行下に一行挿入して入力モードへ移行する。 | o |
以降は入力モード中
上の行と同じ文字を反映する。 | ctrl-y |
下の行と同じ文字を反映する。 | ctrl-e |
最新の入力をカーソル位置に反映する。 | ctrl-a |
これは便利!以前打った単語に基づく補完。頭文字を入力し、
順送りの候補表示する。 | ctrl-n |
逆順送りの候補表示する。 | ctrl-p |
プログラムのソースなど、指定された言葉を辞書補完する。プログラマ必須の機能
ソースコードなどのの辞書補完機能を使う。*1 | ctrl-x ctrl-o |
インデント
カーソル行にインデントを1段つける。 | ctrl-t |
カーソル行のインデントを1段消す。 | ctrl-d |
以上まで入力モード用のコマンド
二字一音文字入力
二字一音文字一覧を表示する。 | :deg |
二字一音文字入力する。 | 入力モードでctrl-k |
コピー
さまざまなコピーする。 | y-共通モーション |
1行コピーする。 | yy |
名前付コピーを行う。 | "○上記yコマンド*2 |
カーソルの前に貼り付けする。 | P |
カーソルの後に貼り付けする。 | p |
名前付貼り付けを行う。 | "○上記pコマンド*3 |
変更
指定の範囲を削除して入力モードへ移行する。(=編集) | c-共通モーション |
c$と同じ。 | C |
c1と同じ。 | s |
cc(1行削除して編集モードへ)と同じ。 | S |
カーソル位置の1文字上書きする。 | r○ |
上書きモードへ移行する。 | R |
大文字小文字変換する。 | ~ |
行を左揃えにする。 | :le |
行を中央揃えにする。 | :ce |
行を右揃えにする。 | :ri |
ビジュアルモード
範囲選択モードに移行する。 | v |
範囲選択モードに移行する。(行単位) | V |
範囲選択モード終了する。 | ctrl-v |
元に戻る、やりなおし
元に戻る。 | u |
やりなおしする。 | ctrl-r |
上記2つと:○○コマンド以外のコマンドで、以前の動作繰り返しする。 | . |
保存
上書き保存する。 | w |
名前をつけて保存する。 | w ファイル名 |
保存せずに終了する。 | q! |
保存して終了する。 | wq or x |
他ファイル
他ファイルを開く。 | :edit foo.txt |
現在のファイルの変更を破棄して強制的に他ファイルへ移行する。 | :edit! foo.txt |
現在のファイルの変更を保存せずに他ファイルを開く。 | :hide edit foo.txt |
複数ファイル
複数ファイルリストを作成する。 | :args five.c six.c seven.h |
開いているファイルリストを変更する。(ワイルドカード指定) | :args *.txt |
現在開いているファイルの一覧を表示する。 | :args |
開いているファイルの中で、直前に変更していたファイルに戻る。 | ctrl-^ |
複数ファイルを開いている時に、次のファイルを開く。 | :next |
現在のファイルの変更を破棄して強制的に次のファイルを開く。 | :next! |
現在のファイルの変更を保存して次のファイルを開く。 | :wnext |
複数ファイルを開いている時に、次のファイルを開く。 | :previous |
現在のファイルの変更を保存して次のファイルを開く。 | :wprevious |
複数ファイルを開いている際に、ファイルリストの先頭を表示する。 | :first |
複数ファイルを開いている際に、ファイルリストの最後を表示する。 | :last |
複数ファイルをまたいだコピー、貼り付けをする。 | 名前付コピー機能を使う。 |
共通モーション
現在のカーソルのある単語の単語末まで○○ | ○w |
現在のカーソルのある単語の単語の始まりまで○○ | ○b |
現在のカーソル位置から行末まで○○ | ○$ |
現在のカーソル位置から行頭まで○○ | ○^ |
現在のカーソル位置から段落の始まりまで○○ | ○{ |
現在のカーソル位置から段落の終わりまで○○ | ○} |
現在のカーソル位置からファイルの終わりまで○○ | ○]] |
現在のカーソル位置からファイルの終始まりまで○○ | ○[[ |
意味づけのある1行(例えばピリオドからピリオドまで)で○○(空白残す) | ○iw |
意味づけのある1行(例えばピリオドからピリオドまで)で○○ | ○aw |
鹿駆動 勉強会 参加してきた #shikadriven
記念すべき日、2012年4月29日、鹿駆動勉強会が奈良県新公会堂 能楽ホールにて、開催されました。日本の伝統芸能である能の舞台でLT大会しようっていうんだから、とんでもない勉強会だ!ということで、「ぜひその現場で見てみたい」と思い、エントリーしました。今思えばがんばってLTしておくべきだったとも思います。それぐらい雰囲気のいいLT大会でした。
場所について
会場となった奈良県新公会堂と言う所はすばらしく、まさに日本の伝統と重みを感じさせる会場でした。まず近鉄奈良駅に降り立つと、すぐ近くに活気あふれる商店街がありました。まずここで昼食を頂きました。
↑商店街と↓頂いた「大仏きつねうどん」
そして、会場まであるいて5分とたたない内に、鹿が!
会場まで駅からおよそ20分、てくてく歩いていくと、見えてきた!
見るからに大きい会場!おまけにここにたどり着くまで一般の観光客しかみなかった!中に入ってみると、、、
し、鹿角の人たちが受付やってる!これは、おそらく施設の皆様もビックリしていることだろう。。。実際の会場に入ってみると、、、
デ、デカイ!!おまけにかっこよすぎるくらいの能舞台!!*1これは、、、予想以上にすごいLT大会になることは想像できました。^^
進行について
進行については、よくあるLT大会のような形で、基本5分で銅鑼がなって終了という形でした。最初と休憩明けのみ、選ばれた方による15分のLTでした。発表される方は総勢20名でしたが、みなさん資料も発表もうまく、あっという間に終わってしまった感じがしました。内容について
内容についてはTwitterのまとめに譲ります。Twitterのまとめ
私の感想としては以下の通りです。
- @skrbさんのオープニングが荘厳過ぎる!! オープニングは○ラクルさんに売れるレベルだと思いました。^^
- やっぱり最初の@mike_neckさんのLTからありましたが、きっかり5分で銅鑼がなって、強制終了したりするのがLT大会の醍醐味ですね。 @mike_neckさんもそれをうまく使っていた気がします。
- @hakuraiさんのJavaFX資料が充実していました。 JavaOneでたくさんJavaFXの講演を聞かれていたようですね。その後、ご自分でいろいろと確認されたのでしょう。よかった^^
- @backpaper0さんのLTが超冷静で資料が膨大だった。 膨大な資料をズバッと飛ばしたり、人間性が少し出てておもしろかったです。内容はしっかりしていました。
- @S_kozakeさんのシステムアーキテクトの話、ためになりました。
- 入社1年目の@Kuchitamaさんが、とってもいい発表をしておられました。 また、このように1年目の方でも気兼ねなく発表できるやさしさがこのLT大会にはありました。
- @bash0C7さんが言われていた机上デバッグのお話を聞くと、何だか懐かしい気持ちになりました。
- @tan_go238さんの発表から、「Java仮想マシン仕様」も大事だとわかりました。
- @dproject21さんは特にLTの出来がよかったです。勉強になります。
- @kiy0takaさんの発表は変わらずGJ*2です! 今回はMondoDBのお話でした。
- @shinsukeodaさんの発表から、、、うーん、JavaScriptもちゃんとやっておかなくては。。
- @hakoberaさんすみません。僕はPHPの初歩から始める必要があります。
- @_funyaさんの発表は、とにかくデモがすごかったです。*3
- @aoetkさんの発表で、HadoopのJavaでDSLを書くAsakusaFrameWorkについて知ることができました。
- @irofさんの和服姿がかっこよすぐる!*4 勉強会でアウトプットはとても大事!
- @pocketberserkerさんのLTは選択肢が3つあって選べるなんて、すごい! 先週も名古屋でお見かけしたのに、次の週で奈良で見かけるとは、、、神出鬼没?いやすごい。。
- @fukai_yasさん、カバレッジツールを自作されるなんて、なんてオシャレな!
- @daiksyさん含め、とっても楽しいLT大会をありがとうございました。
まとめ
とっても楽しい勉強会でした。勉強会の新たな歴史を作った勉強会と言えるのではないでしょうか?特に海外の方に見ていただきたいですね。日本の伝統芸能とITエンジニアたち、おもしろい組み合わせです。運営の皆様、本当に有難うございましたm(_ _)mSCMBootCamp in Nagoya 1 参加してきた
4/22に行われたSCMBootCamp in Nagoya 1に参加してきました。
前々から参加したかった勉強会で、今回は名古屋で開催されるという事で、はりきって行ってきました。結論から先に言うと、参加して本当によかったです。その理由が、「DVCSでチームで管理する際に、起こしがちなミスを経験できた」事、これが非常に大きいですね。とってもいい勉強会でした。私は今回、Gitで受けさせてもらいました。
スケジュール
10:00 - 10:30 受付10:30 開会
10:35 - 11:30 基調講演 @methane
11:30 - 12:00 各DVCS入門セッション
12:00 - 13:20 お昼休み(各自で昼食)
第二部 - 演習
13:20 - 14:35 演習1
14:35 - 14:50 休憩
14:50 - 15:50 演習2
15:50 - 16:15 レビュー + 休憩(運営でスイーツ提供)
16:15 - 17:15 演習3
17:15 - 17:40 レビュー + 休憩
17:40 - 18:10 講演
18:10 - 18:20 KPT
18:20 - 18:30 閉会
懇親会
19:00 - 21:00 同会場にてピザとソフトドリンク
基調講演
@methaneさんによる発表資料「これから分散バージョン管理を始める人たちへ」というタイトルの発表でした。私が理解できた内容は以下のとおりです。
- VCSを利用する際は、それに合わせて業務フローも変えないと効果が薄い。
- Subversionのような集中管理型では特にコードレビューがやりずらかった。
- よくある開発パターン:ブランチが開発ブランチのみ
- Gitは高速で内容がシンプル
- MercurialはWindowsサポートが強い
- BazaarはWindowsサポートが強いかつ、Subversionに似通ったコマンド体系で習得が早い
各DVCS入門セッション @bleisさんによるGitの説明
@bleisさんによる、Gitの基本的な考え方の説明でした。発表資料はGithubに公開されています。リンク先の右のdownloadからzipやtarでダウンロードできます。内容はとても分かりやすかったです。まとめると
- Gitの中身を分類すると、Blob ファイルの中身 Tree ディレクトリ構成 Commit コミット内容になる。
- ハッシュ値を使って、ファイルの比較と、ファイルの存在チェックを行っている。
- Treeの中に、ファイル名を持っている。Treeの中にファイル名のハッシュ値を持っている。逆にBlobの中にハッシュ値がない。
- 親コミットをたどって履歴がわかるようになっている。
- gitのコミットメッセージは、1行目、タイトル、2行目、空白、3行目、詳細。
- gitでファイルを違うディレクトリに移した場合、Treeに変更されるが、Blobは変更されない。
- ブランチはCommitオブジェクトへのポインタ。
- gitでブランチのマージ時には、親コミットがブランチの親とマージ先の親の二つになる。
- mergeは新しいコミットでマージを実現する。rebaseはブランチのマージを一本にする作業。
- git fetch originでクローン元の最新コミットを取得する。
演習
内容
演習は、自分が選んだDVCSのチートシートを、テーブル毎に協力して作成する事になります。私が選んだのはGitなので、Githubを中央リポジトリとして作業する形になりました。同テーブルになったのは、@kei10inさん、@sue445さん、@WK6_8Bさん、@cointoss1973さん。(但し@cointoss1973さんは、途中でMercurial講師として抜けていかれました)そしてテーブルの講師は、@clairvyさん。まず私たちのテーブルでは、@kei10inさんがgithubのSCMBootCampのリポジトリをフォークし、私たちのgithubアカウントを共同開発者の形で登録していただき、スタートしました。そして、githubのissueを使用して、各項目毎にトピックを作成し、その項目をassignする事で担当宣言し、チートシートを作成していきました。
私たちのGithubリポジトリ
Gitによる作業手順
gitによる作業手順は以下のような手順になりました。まず、githubのリポジトリをgit cloneでコピーしてから、- チートシートを編集*1
- git fetchでorigin/masterの最新情報を取得
- すでに更新されていれば、git rebaseで変更を取り込み
- コンフリクトが起こった場合は、コンフリクトを解消し、git addしてgit rebase --continue
- git pushでgithubへアップ
起こったミス
ここでチームで編集した際に起こったミス(良い経験)を上げておきます。- コンフリクトの解消時、コンフリクトした他の方変更を確認せずに感覚で修正し、失敗*2
- コンフリクトは起きなかったが、オートコミットの範囲で他の方の変更を復元した
- 間違いでは無いのですが、rebaseによる綺麗なコミット連携を心がけていたときに、マージしてしまう しかしこの後圧巻の修復っぷりでした!
@clairvyさんに教えていただいたナイスな事
テーブルの講師である@clairvyさんにはいろいろ教えていただきました。rebaseによる各コミットの連結や、ログの確認の仕方などなど。特に参考になったのはコミットの枝分かれがよく分かるgit logの見方です。git log --graph --all --color --pretty='%x09%h %cn%x09%s %Cred%d%Creset'
このコマンドを打つとあら不思議、--graphの表示によるコミット系譜に合わせて、色もついてとても分かりやすく表示されるではありませんか!このようなコマンドをエイリアスとして登録して、キー打ちを簡略化する事もお教えいただきました。いやはや、奥が深いですねぇ。
結果
登録された全issueまではいきませんでしたが、楽しくできました。今日のまとめ
最後に、今日のまとめを各テーブル毎に発表し、締めくくりました。他のテーブルの方達のチートシートは、出来がいい!私たちのテーブルは最初からチートシートを作ることが目的ではない!って言いきって、ひたすらGitの興じていたので、デザインとかそっちのけでしたw他のテーブルの皆さんのチートシートは見やすく、工夫もあり、見てておもしろい物でした。ただ、私たちのコミット系譜は一直線できれいでした!*3途中からみんなしっかりrebaseでやりきったため、1本道でしたよ^^