【参加メモ】第一回 エリック・エヴァンスのドメイン駆動設計 読書会
最近DDDの勉強会をよく見るなぁ、と機運が高まっていたので参加
evans-ddd-book-read.connpass.com
今回は初回ということで全体構成の紹介とまえがき・第1章の解説でした。
主催者の@moaieeeさんが時折笑いを交えながら、全体的に緩やかな雰囲気で進められました。
詳細な説明よりは、イメージを掴んでもらうようなゆるいスタイルの解説的な感じで進みそう(な予感)です。
全体構成
1,2部の話は正直つまらないかも、とのこと
自分の理解度に応じて参加回を決めてOK
- 1部 用語の定義と動きの紹介
- 2部 モデル駆動開発の基本構成の紹介
- 3部 実用的なモデルの設計と実装の話
- 4部 より大規模な設計の話
まえがき
モデルとは何か?
あるものを抽象化したもの
モデルを蒸留する
モデルまでだけでなく、実装までやってくぞ、という話
第1章
構成
やり方
モデルを取り出す5つのポイント
モデル化
モデルを取り出す流れ
PCB回路の例
実装化
モデルを適用したコード
貨物の運搬の例
モデルを取り出す
〜知識を噛み砕く〜
PCB回路の例
ヒアリングから徐々にモデルを作り出していく
人により言葉の定義が違う
ヒアリングを進めるうちに目的が曖昧になりがち。。
→実は、回路の遅延回数を知りたい。それを表すモデルが欲しいことがわかる。
ここでは何が言いたかった(と思われる)こと
設計者へのヒアリングを繰り返すことで、知識を噛み砕き、 モデルを洗練させていきましたよ、という例。
最初から完璧なモデルはできないので、継続的な学習により深いモデルが出来上がっていく。
【参考】
- ユースケース駆動開発実践ガイド
- ICONICプロセス
- ラショナル統一プロセス
船に載せる貨物の例
最初の簡単な例を作る (航海に貨物を載せる) ↓ 制限の追加 (最大予約数を実装に反映) ↓ 新たな制限の追加 (さらに実装に反映) ↓ (洗練を繰り返す)
【参考】
- [DDD]ドメイン駆動設計で実装を始めるのに一番とっつきやすいアーキテクチャは何か
- 久保秋 真さん
-
ドメインエキスパートとどうコミュニケーションを取るのか問題
例:カスタマーサポートなど
早くも2回目が公開されてる
evans-ddd-book-read.connpass.com
こちらも気になる ddd-community-jp.connpass.com
【Ruby】putsの返り値はnilらしいと聞いて色々みてみた。
きっかけ
Railsチュートリアルを眺めててたら
4.2.4 メソッドの定義の演習3で
palindrome_tester("racecar")に対してnil?メソッドを呼び出し、 戻り値がnilであるかどうかを確認してみてください (つまりnil?を呼び出した結果がtrueであることを確認してください)。 (以下略)
def palindrome_tester(s) if (条件。問題なので省略) puts "It's a palindrome!" else puts "It's not a palindrome." end end
と書いてあり、なんでだろ?と思ったので調べてみた。
また、 注記13にもこんなことが書いてある。
実際には些細な違いがあり、pメソッドは画面出力だけでなく戻り値も オブジェクトになります。 しかし、putsメソッドの場合は引数によらず必ずnilが戻り値になります。 (以下略)
リファレンスを見てみる
module function Kernel.#putsより
puts(*arg) -> nil 引数と改行を順番に 標準出力 $stdout に出力します。 引数がなければ改行のみを出力します。 引数が配列の場合、その要素と改行を順に出力します。 配列や文字列以外のオブジェクトが引数として与えられた場合には、 当該オブジェクトを最初に to_ary により配列へ、 次に to_s メソッドにより文字列へ変換を試みます。 末尾が改行で終っている引数や配列の要素に対しては puts 自身 は改行を出力しません。
なるほど標準出力されるのか〜
元々標準出力に向けてアウトプットするためのメソッドであり、返り値を得るようにはできてないですよってことなのだろうか。
似ているメソッドとして、module function Kernel.#pも見てみる。
p(*arg) -> object | Array 引数を人間に読みやすい形に整形して改行と順番に標準出力 $stdout に出力します。 主にデバッグに使用します。 引数の inspect メソッドの返り値と改行を順番に出力します。つまり以下のコードと同じです。 print arg[0].inspect, "\n", arg[1].inspect, "\n", ... 整形に用いられるObject#inspectは普通に文字列に変換すると 区別がつかなくなるようなクラス間の差異も表現できるように工夫されています。 p に引数を与えずに呼び出した場合は特に何もしません。
こっちは出力した情報を色々抜き出したりできるよう、返り値がオブジェクトになっているっぽい。
試してみる
Rails上で比較してみた。
- メソッドではメッセージ作成のみ。viewで
<%= %>
# 例えばapplication_helper.rb def thanks_message(user_name = "ユーザー") "#{user_name}さん、ありがとうございます" end # 例えばthanks.html.erb <div class="thanks_message" <%= thanks_message(@user.name) %> <div>
<結果>
当たり前だけど(ユーザー名)さん、ありがとうございます
と表示される。
- メソッド内でメッセージをputsして、それを
<% %>
viewに埋め込む
# 例えばapplication_helper.rb def thanks_message(user_name = "ユーザー") puts "#{user_name}さん、ありがとうございます" end # 例えばthanks.html.erb <div class="thanks_message" <% thanks_message(@user.name) %> <div>
<結果>
viewには何も表示されない!
一方、rails s
してるconsoleの方を見てみるとこっちに出力されてた。
色々試したが整理するとこんな感じ↓
メソッド内の出力メソッド↓/viewの表記→ | <% %> | <%= %> |
---|---|---|
なし | 非表示 | 表示 |
puts | 非表示 | 非表示 |
p | 非表示 | 表示 |
(pでも表示できるけど無駄感ハンパない。。)
余談
そもそも<%= %>
は何を出力してくれるのか
結果を出力
なるほどわからん。
# <%# WRONG %> # Hi, Mr. <% puts "Frodo" %>
はい、ごめんなさい。。
- erb(Eruby)のソース github.com
ここらへんだろうか https://github.com/jeremyevans/erubi/blob/master/lib/erubi.rb#L129-L133
when '=' rspace = nil if tailch && !tailch.empty? add_text(lspace) if lspace add_expression(indicator, code) add_text(rspace) if rspace
# Add the given ruby expression result to the template, # escaping it based on the indicator given and escape flag. def add_expression(indicator, code) if ((indicator == '=') ^ @escape) add_expression_result(code) else add_expression_result_escaped(code) end end # Add the result of Ruby expression to the template def add_expression_result(code) @src << " #{@bufvar} << (" << code << ').to_s;' // to_sで文字列に変換 end # Add the escaped result of Ruby expression to the template def add_expression_result_escaped(code) @src << " #{@bufvar} << #{@escapefunc}((" << code << '));' end
結局の所to_s
で文字列に変換してるということらしい。
to_sはObject classのメソッドなので、何でも文字列として返す(はず)。
例えば対象がarrayでも
[1, 2, 3].to_s =>"[1, 2, 3]" # 返り値はこんな文字列になる
まとめ
- putsの返り値はnil, pの返り値はarrayオブジェクト
- viewに出力するときはオブジェクトを用意して素直に
<%= %>
で書こう
技術書典5 ゆるく参加したレポ
この1ヶ月続いた3連休シーズン最終日は技術書典5でした。
前回に引き続き、今回も一般参加してきたのでそのレポです。
事前準備
今回は初めて池袋サンシャインシティで開催されました。
会場の広さが前回までの秋葉原UDXと比べて3倍とのことで参加サークルも増加、事前のサークルチェックは必須です。
公式ページのチェックリストで事前チェックを入れておくと、会場地図にチェックしたサークル位置がハイライトされてとても便利でした。
技術書典へ向かう
前回「DNSをはじめよう」で話題になった@mochikoAsTechさんがとてもわかりやすい記事を書かれていたため、会場までスムーズにいくことができました。
最高参加ガイドだhttps://t.co/Jn4X1LlEe6#技術書典5
— 渡り鳥🐥 (@migrateur_k) October 7, 2018
#技術書典
ちょっと誤算だったのですが今回は整理券がなかったため(行きがけの電車でtwitter眺めてて気づいた)、予想外に行列に並ぶことになりました。ちゃんと事前チェックおけば良かったなぁ、というのが今回の反省です。
入場前行列に並ぶ
なんだかんだ早め(10:20くらい)に着いたので、11:20くらいには入場できました。
会場の地図をチェックしたり、出展者さんの記事を読んでたりしたので、そんなに苦ではなかったかな。
今回の戦利品紹介
私は人気サークルの物理本にこだわりはなかったので、端から順繰りまわりました。
戦利品はこんな感じ↓
技術書典はあまりRuby本がないのですが、最近気になるJS(Nuxt, React, etc.)やかわいすぎて一目惚れした@tdakakさんのシールや、最近輪読会でお世話になっているとらLabさんの薄い本(無料!)、よちよち.rb関連でお世話になっている@pupupopo88さんの教育心理本など色々購入しちゃいました。
ラインナップを見ると、私の最近の課題がだいたいわかりますね 汗
初めて行く人向けメモ
#技術書典とか見てるとめちゃ混んでそうだし尻込みしてしまうと思うんですが、ゆるく参加するなら〜的なメモです↓
時間帯
物理本にこだわらないなら、午後2時くらいから参加でOK
DLカードを用意している出展者の方が多いので、よほど遅い時間帯でなければ大抵の本は手に入ると思います。
また後からBOOTHなどで買える本も結構あるので(特に人気の出展者さん)、当日手に入らなくても大丈夫。
持ち物
ここら辺持っていけばOKかと。
- 小銭
- 飲み物
- 軽食
- タオル
小銭に関しては簡単後払いシステムを利用するとQR読み込みで購入できるのでかなり便利です。
買い終えたら
ハッシュタグをつけて戦利品写真をツイートしてみましょう。参加した感がアップするし、出展者の方が反応してくれるとテンションも上がります 笑
まとめ
前回は圧倒的ぼっち参加でしたが、今回は知り合いが出展者として参加していたり、会場撤収後も戦利品お披露目会したりなど、 かなり楽しかったです(・ω・)b
ジョナサンでお披露目会#技術書典5
— 渡り鳥🐥 (@migrateur_k) October 8, 2018
#技術書典 pic.twitter.com/oPZFEOVBsc
輪読会で利用した「とらLab」が良い感じだった
きっかけ
最近よちよち.rbで知り合ったメンバーで「Webを支える技術」の輪読会をやっているのですが、毎週開催のため毎度会場どうしよう問題がつきまとう。。
そんななか見かけたのがこちらのツイート
行ってみました。https://t.co/MTMa76ZHeK
— あんどう@人工知能と競艇 (@t_andou) 2018年9月9日
エンジニアは無料で使える、だと、、
しかもイベント利用でも無料、だと、、
行くしかない!( ゜∀ ゜)
というわけでこちらのフォームから申し込み (今回は@chinatz_さんがやってくれました)
https://news.toranoana.jp/64239
とらLabへのアクセス
とらLabがある秋葉原虎ビルは、銀座線末広町駅のすぐ近く。JR秋葉原駅からは少し歩きます。
入口前の張り紙
とらのあな2ndに入ってすぐ右側のエレベータから4Fに上がるとすぐです。
とらLabの様子
少し早めについたところ、、
もう会場セッティングが済んでた。。!神対応!
会場に着いて感じたのですが、かなり落ち着ける雰囲気で(あまりとらのあな感はないかも)集中できそうな環境です。もちろんwi-fiもあります
せっかくなので会員カードも作ってみた。
ウワサ?のプログラミング言語アンケート。Javaが多いのかな
Ruby勢力拡大しときましたw
誰でも書き込めるコミュニティノートもあります。 中身が気になる方はぜひ行ってみてください。
直近のイベント
スケジュールの状況はコチラでも確認できます。 イベントで貸し切りのケースもあるため、訪問前に確認しておいた方が良さそうです。
技術書典5にも参加されるんですね〜
輪読会の様子
ちらっと見えますがesaにまとめながら進めています。 輪読会の話はまた別記事で書こうと思います。
というわけで、ありがとうございました!
プロジェクタ、変換ケーブルなどもあり、勉強会を開くのに必要なものも一通り揃ってる良い環境でした(無料だし!)。
その場で次回の会場申し込みもdone(・∀・)
公式のハッシュタグはないらしいですが#とらLabにつぶやくと中の人も見てくれてるみたいです!
感想やシェアも歓迎とのこと
iOS開発未経験だけどiOSDC当日スタッフしてきたよ!
この週末でiOSDC Japan 2018 Day3, 4の当日スタッフとして参加してきたので、そのレポ
なぜか申し込む
普段RubyとJSしか触ってないけどゆるふわバスケメンバーと話してるとiOS界隈楽しそうとか、元ぺちぱー的にとむぞうさんがやる運営は楽しそうすぎでしょ、ということで機運が高まり当日スタッフに申し込んでみた。
そしてなぜか当たる
当選メール↓
【タイトル】 iOSDC Japan 2018: 当日スタッフ ご応募ありがとうございました 【本文】 BCCにて失礼いたします。 iOSDC Japan 2018実行委員会です。 こんにちは。 先日はiOSDC Japan 2018の当日スタッフへのご応募、ありがとう ございました。 スタッフにて検討した結果、 当日スタッフをお願いしたいということになり、ご連絡させて 頂きました。 (中略) それでは、よろしくお願い致します! -- iOSDC Japan 2018 実行委員会
たぶん検討とかしてないよね
スタッフ顔合わせ
という名の飲み会
当日に向けて士気を高めた!
なぜかRubyの話ばかりしてた笑
Day3
主に受付をやりつつ、ヘルプの要請あればそこに入る、という動きをしていた。
朝からどんどんドーナツ
コーヒー職人の朝は早い
完璧なるドブ漬けオペレーション
バドワイザーがトビウオのよう
選びぬかれたQAチーム
お弁当めちゃうま!
懇親会
ビール瓶開けスキルがupした。
これがiOSでぃーすぃーだ!
もちろんクラフトビアも
いいにく
ネットワーク系ミサンガ
いいお寿司台
ハイタッチでお見送り
Day4
2日目ということ少し余裕ができ、 スタッフ業の合間に発表をいくつか聞いてみた。
iOSのことはよくわからないので知ってる人の話でも、ということでakatsukiさんの発表を聞いてみた。 自分にもかなりわかりやすかったし、記事をみると事前準備あってこそあの良い発表ができあがるのだな、とすごく参考になる。 akatsuki174.hatenablog.com
あとアンカンファレンスにいつもrebuildに登場するhakさんがいらして、とむぞうさんと古今東西ゲーム機談義をしてたのがめちゃくちゃ面白かった。
朝ごはん
止まらないゲームハードネタ@アンカンファレンス
クロージング
まとめ
iOSDCのことよくわからないまま参加したけど、スタッフ&参加者みんなで楽しいカンファレンスを作り上げようという雰囲気を感じつつ、楽しい2日間を過ごせました! 来年もまた参加したいです。
【LTしてきた】WEBエンジニア勉強会 #08
タイトルどおりLTしてきたのでそのまとめ
8回目のWEBエンジニア勉強会に参加してきた。会場はアクアミーティングスペース渋谷
今回もテーマを決める前に勢いで5分枠に申し込んだ。LT駆動開発
web-engineer-meetup.connpass.com
発表について
www.slideshare.net
今回のテーマはGoogle Apps Script(GAS)とSlackの連携アプリ
最近仕事で業務知識について答えてくれるBotが欲しいな、ともんやり思っていたので、 週末にまず遊びで作ってみたものをまとめて発表した。
デモ
今回のLTでは初めてデモに挑戦してみた。 著作権的なアレがあるためアップロードスライドからは抜いたけど、 ポケモンのイーブイネタでSlackbotの動きをみせた。
今回はあらかじめ下のようなスプレッドシートを用意した。
デモした画面をそのまんまキャプチャ
デモではSlackの投稿を利用した「一覧表示」「説明取得」だけみせたけど、実は「登録」もできたりする。
GASのソースコード
後で載せる予定
実装中あるある
- トリガーワードを登録し忘れて反応がなく焦る
- Slackへの投稿にトリガーワードを入れてしまい無限ループ
- リンクを含めた投稿にサムネイルが表示されない→参考
みなさんの発表
ハッシュタグがメモ代わり #webエンジニア勉強会08 hashtag on Twitter
あとはいつも通りOSCAさんブログの勉強会レポートで!
すでにレポート書かれた方がいて、今回の感想を書いていただいてた。ありがとうございます!
まとめ
発表やると打ち上げのビールがうまい(・∀・)
参考
@zuckey_17さんのブログ
これを読めば速攻で最初のアプリ作成までいけるので、まずは作ってあとで自分色に染めましょう
Google Apps Scriptを利用したSlack Bot作成の" Hello, World!! " Google Spreadsheet + Google Apps Script で Slack KPT Botを作ってみた
おまけ
はてなブログのアイキャッチ設定とTwitterへの更新反映