Skip to content

Instantly share code, notes, and snippets.

Sunao Tanabe sunaot

Block or report user

Report or block sunaot

Hide content and notifications from this user.

Learn more about blocking users

Contact Support about this user’s behavior.

Learn more about reporting abuse

Report abuse
View GitHub Profile
@sunaot
sunaot / intention_reveiling_names.md
Last active Sep 12, 2019
実装に名前をつけるのでなく意図に名前をつける
View intention_reveiling_names.md

名前は使われる場面で使い方を指示したり制約したりするような意味合いを名前で表現できるとよい名前になります。

表現しているクラスだったり変数の実装を見ながらつけると名前をつけるもの自体を中心においてそれを説明する名前になります。良い名前にしたいなら、そのオブジェクトやメソッド、変数が使われる場面で、どのように使うと読みやすいか、ミスしやすい部分をミスしないように導けるかを気にしながら、使う人へメッセージとなるような名前をつけます。

これを実装ではなく意図に名前をつけると呼んでいます。CODE COMPLETE 上巻の 11.1.2 に『問題指向の名前』という半ページくらいの文章があり、 How でなく What に名前をつけるという主旨のことが書いてあるのが元ネタ (の一つ) です[^1]。

意図 というすばらしい語彙は Kent Beck が Smalltalk Best Practice Patterns というこれまたすばらしい本に Intention Revealing Names という話を書いているということを以前一緒に働いた Java エンジニアに教えてもらって以来、気に入って大事に使っています[^2]。

何が起こっているのでしょうか? それはコミュニケーションです。最も重要なのは、一行だけのメソッドでも、意図を伝えるために存在する価値があるということです。

@sunaot
sunaot / sponsors_exhibition.md
Last active Mar 14, 2019
スポンサーブースを出展するよ。メインの想定は RubyKaigi ですが他でもそこそこ変わらないと思います
View sponsors_exhibition.md

@threetreeslight にスポンサーブースってどんなかんじで出してます?って聞かれたのでスポンサーブース出展のノウハウを書いてみた。 ブースが強い会社は一人ノウハウを持った状態で転職した人がいてこなれたかんじでやっているという印象。

設営資材

パネルとテーブルクロスとバナースタンドはつくりました。遠くから見たときに存在に気付いてもらえるように。

ノベルティ

前回の RubyKaigi ではどら焼きつくって持っていきました。7社くらいとかぶりました。知合いスポンサー間で事前にすり合わせておけばよかった...

@sunaot
sunaot / naming.md
Last active Jun 12, 2019
名前をつける
View naming.md

レビューコメントから

「問合せている」のは手段で、目的として得たいものは別ですよね。名前は実装や手段ではなく、意味や意図、結果、目的に対して付けます。
実装じゃなくて意味に付けようって話はコードコンプリートに書いていて、たぶんリーダブルコードにも書いていて、超基本的なんですが最重要なので、すべての名前で今自分はなにに対して名前を付けたのかを自問自答する癖をつけるのをおすすめです。

Clean Code より。

意図を表現した名前をつける (Use intention revealing names)

@sunaot
sunaot / what_is_rehearsal.md
Last active Mar 8, 2018
リハーサルというものはだなの文章
View what_is_rehearsal.md

リハーサルはなぜ重要か

(実施告知の文章から抜粋)

ええと、みなさんAWS移行の準備も大詰めでリハですね。リハーサルってなぜやるかわかってる人もわかっていない人もいると思うので書いておきます。結論を先に書くと、本番当日もそのまま手順を踏襲するとそれで移行が終わる詳細な手順が書かれた移行手順書を書いてリハをしてください。リハの中で手順どおりには行かなかったところはその時にすべて手順書に反映して、本番のときは手順どおりでやれるようにしてください。

本番一発勝負というのは難しいもので、人間どんなに考えていても失敗します。でも失敗を糧に二度目をすると一度目にやった失敗は回避できます (できるようにします)。システム開発というのは一般的に大体予測不能なところで失敗するものなので、一度本番同様に動かしてみるというのが非常に重要になってます (アジャイルが繰り返し開発するのも動くソフトウェアを信じるからですね)。

性質として事実上そういうものなのですが、私達の気持ちとしては当然失敗はしたくありません。そこで、失敗をするはずの一度目としてリハーサルという疑似本番をやるわけです。そうすることで、失敗の予行演習ができます。本番に向けて失敗の予防ができます。ここを人手でやると再現性が落ちるのでベストは自動化され、何度やっても繰り返し同じことが実現できる状態です。でも、それはしやすいものとむずかしいものもあるので人間がそのとおりに実行をしたら同じ結果になるという手順書というのが大事になってきます。

@sunaot
sunaot / automators_mind.md
Last active May 8, 2019
自動化をしていくときに大切なこと
View automators_mind.md

自動化をしていくときに大切なこと

心得

作業を自動化しようと思う者であれば、定型作業はすべて悪だと思い、人がやる以上は必ずその作業に判断とそれによる付加価値が発生することを求める。 付加価値があるときも、時間と費やす集中力に見合う付加価値があるのか、他のことに時間を使えばもっと価値があるんじゃないかと徹底的にこだわる。

自動化できない作業をせざるをえないときに同じ心持ちだとただただ消耗するので、そこはそれと切り替えよう。思考を停止し自分は機械だと思いこなそう。現実は厳しく、"Done is better than perfect." だ。

大切なこと

@sunaot
sunaot / thor.md
Created Mar 4, 2016
CLI アプリケーションを書くときのアーキテクチャ
View thor.md

どこの層まで Thor であることを意識させるかというのはポイントになりそうな気がします。 database は Thor 以外からはけして呼ばれないでしょうか? たとえば、Web インターフェイスをかぶせた場合。bot を呼出し元として使い始めた場合。 実際にそれらを作り始めて不都合が出てから変えてもいいのですが、今の時点で

+--------------+ +-----------+
|  dispatcher  | |   view    |
+--------------+ +-----------+
+----------------------------+
@sunaot
sunaot / dummy_object.rb
Last active Feb 28, 2016
Dummy Object の作り方
View dummy_object.rb
require 'minitest/autorun'
class ModuleTest < Minitest::Test
def test_module_eval
debugger = Object.new
debugger.class.module_eval do
define_method(:debug) {|s| %(debug: #{s}) }
end
assert_equal 'debug: Hello', debugger.debug("Hello")
end
@sunaot
sunaot / i18n_enum_hash_selector.rb
Created Dec 7, 2015
こんなかんじの作りたい。ばーっとイメージで書いてしまってるので Hash のときと Array のときで対応変える必要ありそうな気がする。Hash は invert で。
View i18n_enum_hash_selector.rb
module EnumHashSelector
DEFAULT_RESOLVER = ->(model_class, method_name, key) {
"activerecord.enums.#{model_class.name.underscore}.#{method_name.to_s}.#{key}"
}
def self.i18n_path_resolver=(resolver = DEFAULT_RESOLVER)
resolver.call(model_class, method_name, key)
end
def enum_selector(model_class, method_name)
@sunaot
sunaot / from_svn_to_git.md
Created Nov 18, 2015
Subversion へさよならを告げて Git/GitHub 利用へ移っていくためのノウハウあれこれ。
View from_svn_to_git.md

Subversion を Git へ移行したい (そして共有方法として GitHub を使いたい) 場合に考える観点をあげてみます。

  • チームに Git にくわしい人がいるか? いない場合、聞く先があるか?
    • チャットに git ルームをつくるなど
  • 習熟度に不安があったら、やってはいけないことリストとこうすべきリストの整備が初期の混乱を防ぎます
    • force push 禁止
    • ブランチはリモート追跡ブランチからきる
View using_pry.md

問い

permits ってなに?

class FoodsController < ApplicationController
  permits :name, :amonut
  
  ...
end
You can’t perform that action at this time.