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
から生成すればよいですね。