Questions and feedbacks

moro
moro commented 3 months

@neko314

そうですね。バイネームだと上げきれないのですが、 XP を読んで、いいなあと思う方とは志向が合うことが多いと思います。

たとえば書籍2段落目が

XP とは、自分たちのできることをオープンにして、それを実行に移すことだ。そ して、そのことを他の人にも認めたり、期待したりすることだ。「自分は頭がいいん だから、ひとりで上を目指せばいい」などという未熟な思い込みを克服することだ。 もっと広い世界で成熟した場所を見つけることだ。ビジネスや仕事も含めたコミュ ニティーのなかで、自分の居場所を見つけることだ。自己超越のプロセスのことだ。 そのプロセスのなかで、開発者として最善を尽くすことだ。ビジネスのためになる 優れたコードを書くことだ。

こんな感じなので、その志向が合う人とは音楽性が合うことが多いです。

Like(2)

kokuyouwind
kokuyouwind commented 3 months

画像差分を愚直に使うだけだともう一工夫必要に感じたのですが、この辺りの知見があるととても興味があります。 その他にもこんなテクニックあるよ、みたいなものあれば

他のテクニックですと、外部スクリプトで差し込まれるチャットサポートのタグが出たり出なかったりする問題があったため、それをスクリーンショットの直前に消すようにしていますね。 page.execute_script 'typeof $ !== "undefined" && $(".LPMcontainer") && $(".LPMcontainer").css("display", "none")' のような感じです。 こういうときにはjQueryが入ってると便利ですね。

ただ消すだけだとレイアウトが崩れてしまうので、仰る通りダミーコンテンツに差し替えたりhiddenにするなどしてもよいかもしれません。

いじる要素が増えてくると複雑になってしまいますが、こういった感じでスタイルを直接いじってやるのは応用が効くかなと思います。 例えば、時間経過で変わってしまう「X日前」のような表示を固定の内容に差し替えてしまう、などしてやればうまくテストできるようになりそうです。

Like(1)

kokuyouwind
kokuyouwind commented 3 months

puppeteer でスクショがたまに部分的にしか撮られない事象に悩まされているのですが、 misoca さんではドライバは何を使っていますか? たぶん selenium 経由で chrome ですかね?

そのとおりで、Selenium + headless Chromeですね。 特に秘匿情報はないので、spec_helperのセットアップコードを載せておきます。

Capybara.register_driver :headless_chrome do |app|
  options = Selenium::WebDriver::Chrome::Options.new
  options.add_argument('headless')
  options.add_argument('disable-gpu')
  options.add_argument('lang=ja-JP')
  options.add_argument("window-size=#{ENV['WINDOWS_DEFAULT_WIDTH']},#{ENV['WINDOWS_DEFAULT_HEIGHT']}")

  driver = Capybara::Selenium::Driver.new(
    app,
    browser: :chrome,
    options: options
  )
  bridge = driver.browser.send(:bridge)
  bridge.http.call(
    :post,
    "session/#{bridge.session_id}/chromium/send_command",
    cmd: 'Page.setDownloadBehavior',
    params: {
      behavior: 'allow',
      downloadPath: Dir.pwd + '/screenshots'
    }
  )
  driver
end

Capybara::Screenshot.register_driver(:headless_chrome) do |driver, path|
  driver.browser.save_screenshot(path)
end

Capybara.configure do |config|
  config.run_server = false
  config.default_driver = :headless_chrome
  config.app_host = ENV['APP_HOST']
  config.default_max_wait_time = 10
  config.save_path = 'screenshots'
end

# 前回実行分だけ残して、後は削除する。
Capybara::Screenshot.prune_strategy = :keep_last_run
# 撮影サイズが標準だと狭いので広げる。
Capybara::Screenshot.webkit_options = { width: 1600, height: 1200 }
# スクリーンショット名にタイムスタンプを付けない
Capybara::Screenshot.append_timestamp = false

同様の症状は起きていますか?

うーん、起きていないですね… 読み込みの問題なら少し眺めにsleepすれば解決するかもしれませんが、多分そういう感じの欠け方でもないんですよね。

Like(1)

taogawa
taogawa commented 3 months

@fursich チーム内で「サービス、なんかごちゃごちゃしているよね」の声が出てきたらサービスの整理の頃合いかなと思います。 app/services はなんでも置き場として便利なのは否めません・・・。たとえばFactoryクラスがいるな〜と思っても、1つしかなければトップレベルにディレクトリ掘るのはためらわれる -> services に置いておく、はありそうな流れです。 DDD本の3種類のサービス定義の話をしましたが、最初からすべてあれらが必要かというとそうでもないでしょうし。

ただ、概念として別物にしたいなというもの(例えばアプリケーションサービス)が出てきたときはそれと区別できるようにしておくのがいいかなと思います。

Like(0)

mtsmfm
mtsmfm commented 3 months

puppeteer でスクショがたまに部分的にしか撮られない事象に悩まされているのですが、 misoca さんではドライバは何を使っていますか? たぶん selenium 経由で chrome ですかね? また、同様の症状は起きていますか?

Like(0)

nashirox
nashirox commented 3 months

ウィトゲンシュタインの名前が出た時点で絶望的な気持になりました

Like(0)

indigolain
indigolain commented 3 months

暗黙な依存が存在するfactoryに関して、これを良い感じにリファクタする方法やアプローチがあれば教えていただきたいです。

Like(0)

yono
yono commented 3 months

「挙動」と「振る舞い」の違いについてもう少し詳しく教えてください

Like(0)

mpg-izumi-hirayama
mpg-izumi-hirayama commented 3 months

お話を伺いながら、名前の「良さ」の定義について「変数の名前」「クラスの名前」「メソッドの名前」で微妙に異なったりするのかなと思ったんですが、 藤村さんの中でこれらのレイヤーごとの命名について違う点はあるとお考えですか? あれば、どう違うとお考えか教えていただけるとうれしいです。

Like(1)

aeroastro
aeroastro commented 3 months

今回の可読性を現場で実践していく上で、重要だと考えているもの(方法論)があれば教えていただきたいです。

特に、既存のテストコードを、可読性が高い状態へと改善していく際のヒントを頂けると助かります。

Like(0)

expajp
expajp commented 3 months

let!の多用はDBアクセスが増えてテストにかかる時間が増えてしまうと思うのですが、なにか対策はありますでしょうか?

Like(1)

okuramasafumi
okuramasafumi commented 3 months

プログラミングの概念でスタックというのがあり、それの操作として"Pop"というものがあると思います。 この名前は、スタックを「縦方向に積まれた何か」として脳内イメージできない限り「悪い名前」になってしまうと思います(ポップの原義は「飛び出る」ぐらいの意味であるため)。このような、現実世界や各人の脳内イメージに根差した名前の用法についてはどう考えていますか?

Like(0)

issei126
issei126 commented 3 months

逆に shared_examples の使い所っていうのがあれば教えてほしいです。

Like(0)

cobafan
cobafan commented 3 months

willnetさんの話されている内容だとファイルが大きくなりそうですが、 そのために工夫されていることはありますか?

例えば、ネストは何階層までにしている等あればお聞きしたいです。

Like(1)

hshimoyama
hshimoyama commented 3 months

関連が複雑なモデルのレコード群で trait を使って制御しようとすると、入れ子の子・孫レコードを制御する trait をその親に書く必要があるなど、記述が煩雑になる問題があると思うのですが、そういうケースの場合どのように対処していますか?

Like(1)

taiki-t
taiki-t commented 3 months

https://www.poodr.com

こちらでした!

聞きにきてくださりありがとうございました!

Like(1)

sue445
sue445 commented 3 months

letのスコープは狭くするという話がありましたが、そうした場合contextの数(例:10個以上)によっては全く同じletを何個もコピペすることになってDRYにならないという問題があると思います。

こういう場合でもletは愚直に各contextに書くべきでしょうか?「○個以上なら外側に切り出す」という基準があるのであれば教えてほしいです。

Like(3)

morimorihoge
morimorihoge commented 3 months

Visual Regression Test、試してみたことはあるのですが、埋め込まれている外部スクリプトの広告機能などがdiffとして反応してしまったりして今一つ使ってみたプロジェクトでは誤検知が多かった印象でした。発表でもランダム要素があるとうまくいかないと挙げられていた部分ですね。
ほかにもアニメーションなどが含まれているとスクショが撮られるタイミングによって差分が出てしまったりなど、画像差分を愚直に使うだけだともう一工夫必要に感じたのですが、この辺りの知見があるととても興味があります。

※E2Eテストの時だけ当該DOMを固定ダミーコンテンツに差し替えるなど?こうするといいよ、的なものがあればぜひ

(追記) -> 具体例出していただけましたね、ありがとうございます!その他にもこんなテクニックあるよ、みたいなものあれば

Like(1)

urimaro
urimaro commented 3 months

フレームワークを作らない
決定権を住まう人自身に委ねる

上記のようにおっしゃっていましたが、住まう人がフレームワークを作ってしまっている場合も多々あると思います。 こんなとき、「いい感じにする」ためにどんなことをしていますか? また、気をつけていることはありますか?

Like(0)

anonymous
anonymous commented 3 months

専門家がそんなに知識が堪能ではなかったみたいなケースによく出会うんですが、そういうところを調整するのも「合流する場」の人が調整する責務があると思いますか?

Like(1)

yuriko1211
yuriko1211 commented 3 months

「全体をいい感じにする」志向に目覚めたきっかけはありますか?

Like(0)

colorbox
colorbox commented 3 months

管理画面でCRUDでは足りない、というお話がありましたが、それに関しての質問です。

これまでの経験の中で管理画面で要求されたCRUD以外の機能にはどういったものが多かったですか?

Like(0)

neko314
neko314 commented 3 months

これまでに「全体をいい感じにする開発者だなあ」って思った方はいますか?具体的に他の志向の方とどのような点が異なっていたり秀でたりしていましたか?

Like(0)

ujihisa
ujihisa commented 3 months

Q.

何が「良い感じ」なのか自明でないとき、いろんな模索方法があると思います。このとき、自分で考えても、関係者みんなに相談しても、誰も何もわからないときはどのようにしますか?

moroさんの回答

  • わからないけど進んでみる。手を動かしてみる。1歩すすんで0.5歩戻ってこっちに進む、みたいな。みんなで学習。
  • やりつつコードベースめちゃくちゃにつないために技術力を使う。

Like(2)

hachi8833
hachi8833 commented 3 months

冒頭で話してた「Rubyのスゴい本」ってどの本でしょう?

(ああ、私も20年前Zopeフレームワークの野良翻訳やろうとして技術がわからなくて挫折したのを思い出しました)

Like(0)

This software is available as open source under the terms of the MIT License.
Copyright © 2018 Yoshiyuki Hirano