Blog
December 13, 2014
Domain-Driven DesignやDesign-Driven Developmentではない DDD の
Drawing-Driven Developmentを Railsの見える化 開発 で発表しました。
実装されたコードを見える化することで、設計者との透明性が維持されます。
/rails/info/routesと/rails/info/properties以外のパスは任意で変更できます。November 1, 2014
第1回のChapter 1とChapter 2の内容を@higakiさんが解説。
Chapter 3とChapter 4をみんなが読書。
途中でにXPath勉強会、正規表現勉強会になったりと楽しかった。 他にも誤字やRubyのコードの指摘などまとめサイト(amagasakirb wiki)ができました。
@cuzicさんにクローラーの開発にmitmproxyがよいと教わった。

カヌレ堂 堂島店のカヌレです。
October 26, 2014
レッスンは普段の@satomicchyさんではなく、@yalabさんによる
便利なGemの紹介と、よく使うmethodの紹介でした。

ハロウィンの箱はチョコレートです。
英語のセッションをみんなで聞いて、@ixkaitoさんがフォローしてくれました。 内容は「Ruby開発あるある」で、聞き慣れた単語もあり面白かったです。
たこ焼き仮面のであることは秘密の@tenderloveさん 「Rackは楽じゃない」はダジャレです。
ChromeにURLを入力するとどうなるのか? 時間切れで最後までみることはできませんでしたが Rubyの話はでてきていません。
October 20, 2014
正しいものを正しくつくる!!のギルドワークスのイベントに参加しました。

リーン開発の現場は内容も良いですが、あとがきや日本語版解説もオススメです。
仮説検証フェーズや最短距離フェーズで求められていることや カンバンボートとタスクボートの違いなどの解説でした。
全員で一枚の絵を見ることは大切です。
カンバンの導入事例と勘所の解説でした。 カンバンあるあるとその対策は役立ちます。
カンバンで見える化をして透明性を確保する。 透明性の効果としてアクションを生み出す。
透明性がないと助ける事ができないが印象的です。
紹介されていたカンバンを普段でも使っています。 (シンプルなルールのカンバンが好きです。)
| Ready | Todo | Doing | Review | Done | Release |
|---|---|---|---|---|---|
| バッファ | バッファ | バッファ |
September 27, 2014
Shinosaka.rbのペアプロに参加しました。
A〜Eの5チームに別れて、それぞれのお題で発表しました。
各チームのお題はこちら
| A | 自動販売機 |
| B | 自動販売機 |
| C | 自動販売機 |
| D | ブラックジャック |
| E | ブラックジャック |
クレオ大阪北の1階の会議室は、ネットワークが繋がらないというトラブルで開始が遅れて 1時間30分程度のコーディングでしたが、楽しくペアプロができました。
RubyKaigi 2014のグッズとGroongaのステッカーを頂きました。 (来年は行きたいです。)

Ritoさん、ogomのTeamBは自動販売機のお題でした。
まず、作る物をユースケース図で話し合い。

次に、アクティビティー図で作るパートを分けました。

bundle gem autosaleでベースを作り、テストを書く予定でいたが
動くソフトウェアを作って終了しました。(コードはGitHubで公開しています。)
別チームのお題ですが、ユースケース図とアクティビティー図を描いてみました。
@startuml
:Dealer:
:Prayer:
Dealer -> (カードが配られる)
(カードが配られる) <- Prayer
Dealer --> (合計値を21に近づける)
(合計値を21に近づける) <-- Prayer
Dealer ---> (合計値が21を超えると負け)
(合計値が21を超えると負け) <--- Prayer
(合計値を17以上にする) <- Dealer
(合計値が17以上はカードを引けない) <-- Dealer
@enduml

@startuml
(*) --> "賭ける"
"賭ける" -> "1枚目を表で配る"
"1枚目を表で配る" --> "プレイヤーの2枚目を表で配る"
"プレイヤーの2枚目を表で配る" -> "ディーラーの2枚目は裏で配る"
"ディーラーの2枚目は裏で配る" --> "プレイヤーはヒットかスタンドを選択する"
"プレイヤーはヒットかスタンドを選択する" --> "ディーラーは17以上になるまでカードを引く"
if "プレイヤーの全員がスタンドになる" then
--> [YES] "判定する"
else
--> [NO] "プレイヤーはヒットかスタンドを選択する"
endif
"判定する" --> (*)
@enduml

ユースケース図やアクティビティー図はPlantUMLを使いました。
September 24, 2014
ピアノの生演奏では始まり、@cyri_さんの日本語の発表に驚き!
歌(オペラ)あり、ジャンケン大会ありと楽しい勉強会でした。
発表の後に質問のあったER図を描くGemはDrawERDです。
こんばんは、はじめましておごもりです。よろしくお願いします。
Githubのアカウントはogomですが、Twitterのアカウントはogomrです。
大阪のここ↓ 本町でシステム開発の仕事をしています。(ここの会場に来るまで8分程度でした。)
先日の開催は中止になりましたがHommachi.rbというRubyのコミュニティでコーチを予定しています。
突然の質問です!
「RubyKaigiに参加された方はいらっしゃいますか?」 ノ
私は残念ながら参加してしておりませんが、参加者のレポートで胸を熱くしました。 RubyKaigiの翌日ですが、ドメイン駆動設計LT会に参加しています。 (この内容もRailsなので、またこちらで話したいです。)
タイトルのDVDはDetonation Velocity Developmentで、爆速開発のことです。
今回はRailsの爆速開発をデモンストレーションで紹介させて頂きます。
みなさんがこのイベントに参加を登録したDoorkeeperのようなサービスを作ってみます。
ちなみにDoorkeeperはTokyo Rubyist Meetupを主催されているポールさんや
ミヒャエルさんがサービスを提供しています。
10分で出来る所までライブコーティングをします。 キーワードだけでも覚えて帰ってください。
Railsは規約を重視したフレームワークです。そのレールにさえ乗れば爆速な開発が可能です。
ただ安全にレールに乗る為には、みなさんのように学習をすることが大切です。
今年になっていつくかの関西のRubyにコミュニティーに参加しています。 そので関西には素晴らしいエンジニアがたくさんいるんだと実感しました。
関東はRubyKaigiで盛り上がっていますが、関西からもRubyを盛り上げましょう!
以上でおわりです。ありがとうございました。
September 21, 2014
名前はおごもりです。よろしくお願いします。
Githubのアカウントはogomですが、Twitterはogomrです。
大阪の本町や北浜でシステム開発をしています。
Honmachi.rbというRubyのコミュニティでコーチ(予定)をしています。

Domain-driven designでLess is moreを取り組んでいます。
(より少ないことは、より豊かなこと)

今回は、日本語版への序文でエリック・エヴァンスが原則のひとつにあげている
「ドメインの実践者とソフトウェアの実践者による創造的な共同作業を通じて、モデルを探究すること」を
テーマにLTをします。
ちなみに、ドメイン駆動設計の書籍では第17章が好きです。
タイトルのDraw with RailsのRailsはRuby on Railsという
Rubyが開発言語のWebアプリケーションフレームワークです。
そのRuby on Railsで図形を描く機能を紹介します。
サブタイトルのModeling and Coding and Drawingが図形を描く手段です。
初めのキーワード
Modeling for designers, Coding for programmers …
デザイナー(設計者)のためのモデリング、プログラマのためのコーディングではなく この間はシームレスな状態が理想です。「共同作業を通じて、モデルを探究すること」を 実践するには開発思想の共有が継ぎ目を埋めてくれます。
ModelingとCodingの間にはVision(開発思想)が入ります。ここにまたModel View Controllerとは別の
MVC (Modeling Vision Coding)という言葉が生まれました。
次のキーワード
Domain-specific language with Domain-driven design …
開発思想の共有には共通の言語を使う事が理想です。それにはDSL(ドメイン特化言語)が有効です。
RailsはDSLが広く使われており、DDDと相性がよいです。その一部を紹介します。
モデル駆動設計でのER図をRailsで描きます。
gem 'draw_erd'
rails generate scaffold user name:string state:string
rails generate scaffold group name:string state:string
rails generate scaffold member group:references user:references

状態遷移図もRailsで描くことができます。
gem 'draw_smd'
state_machine initial: :active do
event :disable do
transition active: :inactive
end
event :enable do
transition inactive: :active
end
event :close do
transition [:active, :inactive] => :closed
end
end

でもER図や状態遷移図をいきなり描くのは…

PlantUMLのDSLを利用しましょう!
先ほどの状態遷移図をPlantUMLとRailsで描くことができました。
gem 'draw_uml'
[*] --> active
active -right-> inactive : disable
inactive -left-> active : enable
active --> closed : close
inactive --> closed : close
closed --> [*]

モデルを探究するには、開発思想をコラボレーションすることが大切です。
デザイナーとプログラマがコラボレーションできる程度の
軽量モデリング(lightweight modeling)にすることが丁度よいのかもしれません。
ちなみにRubyはlightweight languageです。
August 16, 2014
@satomicchyさんの講義

@yalabさんのDockerの解説
August 3, 2014
@kuma_nanaさんからの説明
@orangainさんとペアになり、課題を付箋でモデリングをしました。

付箋の色でモデルをパターンに区別しています。
プレミアム会員の申請・登録の業務フローを作成するまでの手順を発表しました。
ユビキタス言語を認識ユースケースをホワイトボードで協議フローを作成ここからイテレーションでドメインモデルを蒸留します。
July 28, 2014
佐野初夫さんから生産管理システムの変遷やドラム・バッファー・ロープなどの説明がありました。
本棚の奥にはザ・ゴールがあります。

渡辺幸三さんのCONCEPTWARE(コンセプトウエア)で受注生産システムを紹介されました。
MacBookでもXEAD Modelerを動くようにしているので、公開が楽しみです。
July 26, 2014
GitLabはRuby on Railsで作られたGitリポジトリ管理ツールです。
GitHubはプルリクエスト、GitLabではマージリクエストです。
プルリと略されます。GitLabもマーリ、マーと略してもいいね!git-flowとGitHub Flowの代表的な運用のスタイルがあります。
git-flowとGitHub Flowを複合した運用をGitLabで実現できます。コラボレーションをすることで、尊敬・信頼できる仲間を増やしていきましょう!
July 13, 2014
第5章のソフトウェアで表現されたモデルのサービスを読書しました。
サービス指向アーキテクチャが思いつくようにソフトウェア工学にはサービスの言葉が普及しています。
ドメイン駆動設計はモデルを3パターン(エンティティ、値オブジェクト、サービス)の要素に区別します。
そのパターンのエンティティや値オブジェクトに該当しないモデルがサービスです。
![]()
機構(Mechanism)と方針(Policy)の分離がモデリングの大切な原則で、機構にフラクタルな構造で機構と方針があります。
確かに要件定義から基本設計、詳細設計の設計工程は問題の領域(What)と解決の実装(How)がフラクタルな構造ですね。
三要素分析法は企業システムの設計に特化した設計手法です。 モデリングのツールにXEAD Modelerが使われています。
第5回 ドメイン駆動設計読書会@大阪 (復習)を参考にインストールしました。
Windowsにはインストーラがありますが、Macは手動でビルドします。
ビルドに必要なソースコードやライブラリをダウンロードしたリンクです。
CONCEPTWARE(コンセプトウエア)で業務モデルが公開されています。
July 12, 2014
LTのスライド (Redmine with Sidekiq)
Sidekiq UIを使える認可処理を実装しています。2.5.2で追加されたプラグインのアップデートを確認する対応でURLを変更しました。これは非同期処理のworker classです。
チケットのステータスを変更するだけの単純な例です。
class SandboxWorker
include Sidekiq::Worker
sidekiq_options retry: 2
def perform(name=nil, count=nil)
puts 'Doing sandbox work'
Issue.all.each do |issue|
issue.status_id += 1
issue.save
end
end
end
非同期処理の活用で面白いプラグインができると良いですね。
Let the ticket monitoring by async!
飯田治行さん(@haru_iida)のセッションで「RedmineのER図はありますか?」の質問があって 「Rails ERDで出力できます!」と応えました。
休憩時間にER図を見せよと思ってbundle exec erdコマンドを実行 …
… 処理が終わらない! モデルが60以上あって関連が複雑だから \(^o^)/
野田誠人さん(@pinzolo)のセッション中に関心のあるモデルだけのER図を出力する プラグインを爆速で作ることに成功! 次のLT(非同期 Redmine)でER図を紹介できました。
紹介したER図はこちらです。 このプラグインの作り方も紹介します。
generateコマンドで簡単にPluginが作れます。今回はProjectに関連を持った5つのモデルをER図にしました。
$ bundle exec rails generate redmine_plugin redmine_draw_erd
$ echo "gem \"rails-erd\"" > ./plugins/redmine_draw_erd/Gemfile
$ mkdir -p ./plugins/redmine_draw_erd/lib/tasks/redmine/draw
$ cat << __EOS__ > ./plugins/redmine_draw_erd/lib/tasks/redmine/draw/erd.rake
require "rails_erd/diagram/graphviz"
namespace :redmine do
namespace :draw do
desc "Generate Entity Relationship Diagrams"
task erd: :environment do
options = {
filetype: :png,
attributes: [:foreign_keys, :primary_keys, :content],
title: "Project",
only: [:Project, :Member, :Issue, :Version, :News],
filename: File.join(File.expand_path('tmp/pdf', Rails.root), "project")
}
Rails.application.eager_load!
RailsERD::Diagram::Graphviz.create(options)
end
end
end
__EOS__
rake redmine:draw:erdコマンドでER図が出力されます。当日は出力するモデルを検討したので実装に5分ほどかかりましたが
この手順でコマンドを入力するだけだと30秒でプラグインの作成からER図の表示が完了します。
$ bundle install
$ bundle exec rake redmine:draw:erd
$ open ./tmp/pdf/project.png
このPluginはGithubに公開しています。 (redmine.orgにはもう少し手を加えてから登録します。)
June 28, 2014
郡山さんによる基調講演は、世界中の開発者と力を合わせる楽しさ また、開発者としてWeb創造に関わる喜びを実感できる内容でした。
スライドで登場したフレームワークの
です。
(Jekyllでドキュメントを公開されていますが、多言語対応は大変そうです。)
ソフトウェアを少しずつ、継続的に成長するフレームワークは Less is more on Domain-driven design な感じがします。
江頭さん(baserCMS)、菱川さん(concrete5)、紀野さん(Drupal)によるパネルディスカッション
途中で尼崎に移動したので、最後まで聞くことができませんでしたが
開発体制ではGitがそれぞれで利用されていました。
紀野さん(Drupal)がDrupalicon
が可愛く見えてくると言われていましたが
可愛い感じのDrupalicon
を描いてみました。
June 28, 2014
須藤功平さんのプロダクツを紹介して頂きました。 明日から使いたくなるプロダクツがたくさんあります。
そのメモとリンクです。
----だからRabbitで使えないかも。Mroongaを利用した無料特許検索サイトです。Groongaは強そうな名前ですが、計都羅睺剣は使えません。@ktouさん、@naoa_yさん貴重なセッションありがとうございました。
June 22, 2014
第5章のソフトウェアで表現されたモデルのエンティティと値オブジェクトを読書しました。
ドメインモデルの構成要素のサービスは次回の読書会で予定されています。
今回の読書会に関係ありませんが、ドメイン駆動設計はプラモデルを組み立てる事に似ています。
最近は忙しくて作る時間がありませんが、長く完成間近のプラモデルを並べてみました。
ガンプラの百式っぽいですが、これはKNIGHT of GOLDです。

OpenStackの10番目のリリースのJunoとは違う、JUNCHOONEです。

モデリングは設計を丁寧にしておくと、仕上がりが違いますね!
May 31, 2014
GitHub Pagesにチェンジログをホスティングします。
GitLabもRuby製ですね。Jekyllが利用できます。
2系がリリースされています。Liquidが使われています。
Shopifyが開発をしています。JekyllでBootswatchのテーマが使えるnSumeを利用します。
gem install nsume
mkdir example
cd example/
nsume init --site project
Changelogのサイトができます。
Vagrantっぽいサブコマンドにしています。Jekyllは日付とタイトルの単位でファイルが作成されます。
nsume post 0.0.1
Markdownで記述ができるのでカジュアルなチェンジログにしましょう。
Githubにexampleのリポジトリを作ります。
git init
git checkout -b gh-pages
git add --all
git commit -m "Initial commit"
git remote add origin git@github.com:ogom/example.git
git push -u origin gh-pages
パブリックへの公開に5分もかかりませんが、ローカルでも確認できます。
nsume up
nsume up --provider=awsでs3で公開する機能も実装できそうです。特に規定はありませんが、gitのコミットメッセージのルールを統一するとログから生成できます。
git log --date=short --pretty=format:"%ad %an %s (#%h)"
Railsで実装されたREST APIのドキュメントを生成します。
RSpecの結果からドキュメントを作成します。Modelから生成します。Schemaから生成します。シーケンス ダイアグラム等はPlantUMLから生成すればよいですね。