スーパーエンジニア Richardさん来日 meetup参加記録
@imunew さんのお誘いで、スーパーエンジニア Richardさん来日 meetupに参加してきた。imunewさんの参加記録は↓。
11時から8時間近くの長丁場でしたが、全く時間を感じないほどでした。 主催してくださった@koriym さん、@ksetaさん、会場を提供してくださったサイボウズスタートアップスさん、 そして何より、@mackstarさんありがとうございました!!
以下個人的なハイライト
@mackstarによるおはなし
技術以外のこと
- デザイナーを最初から入れてきちんとブランディングしている。(http://www.bbc.co.uk/iplayer)
- オフィス中にsystem healthが表示されている
- コミュニケーション大事
技術的な話
- HEADLESS CMS
- PHPで使われてるフレームワークはSymfony/Laravelがほとんど
- MessageDriven
- ドメインに適合する方式だった。
- RESTで作ってるけど、様々なサービスから同じAPIがコールされるので効率が悪い
- キャッシュも統一されていない
- 並列実行はelixer/Erlangの言語に組み込まれているから便利
- オフラインモードのためにキャッシュストア、セッションストア、オフラインストア
- GraphQL
- 古いモバイル端末にも対応
- スキーマ設計が難しい
- messge : 何があったか/何をしたいか
- CQRS
- EventSourcing
- イベントを全て記録しておけば、ある日のある時点の再現が可能
- circui-breaker pattern
- サービスごとに時期によってautoscalingするby queue inspection
- 人が少ない時に情報を取っておいて、ローカルストアに入れておく
- ドメインに適合する方式だった。
郡山さんのおはなし
ハイパーメディアアフォーダンス
Hypermedia Affordance // Speaker Deck
- 使う側と物の間に意味を与える
- JSONにリンクでアフォーダンスをつけたのがハイパーメディア(HAL)
- htmlはformタグでわかる
- Location header
- asyncでも使える
- べき等性:支払いにはべき等性があるのでput
- 2回送るなではなく、2回受け付けるな
- 自己記述的
- トップ(ルート)にアクセスすれば、どこのリソースにアクセスできるかわかる。全てのリソースはトップからアクセスできる
- discoverable
- ドキュメントを用意しなくても出来上がっている
- 機能を実現するコード・構造を実現するコード
- REST!= CRUD over HTTP
- information + (affordance)
- /menu /order
- 自分のアフォーダンスをネットワーク網に取り付けること
- 長期的な関心は慎重に
- どうでもよいことは流行に従い、 重大なことは道徳に従い、 芸術のことは自分に従う。(小津安二郎)
リチャードさんへの質問
- pair programmingが普通
- ペアプロしてない=idea/codeを分かち合っていないサイン。
- pair programmingをしていないことが問題なのではなく、コミュニケーションをとっていないのが問題
- あるいは難しいことをしていない
- コミュニケーションを取らないことが、自分の成長できるチャンスを捨てている
- 他の人が考えていないことまで考えられる人が評価される
- 特にマイクロサービスを運用していく上では、ヘルスチェックを細かく監視する必要。
- ビジネスがうまく行っていることを他の人に見せる必要。
- テストピラミッド
- 2-3時間あれば理解できるコード
- 満足しないことがスキルアップに大切。
- death by strangulation
- レガシーとの戦い
- wrapperで小さく始める
- 順次使い始める
- creativity/idea oriented が日本では少ないと感じる
- workerかlaborかみたいな話。
勉強会の合間に、gemを公開できたので、LTもしてきました。 今日発表した内容はまとめ直してアップしますが、元ネタだけおいておきます。
久しぶり(転職以来初)の勉強会参加で、良いインプットになった。 今年もあと4ヶ月ほどしかない。もっと成長するために動かなければ。
Quit Smoking with HabitStrap
先日↑で紹介した HabitStrapで禁煙してました。
無事66日間達成。
これから使う人のために
一度締めると緩められないので、最初につけるときに注意してください。 これからの時期、日焼けが残るので注意してください。
こんなので禁煙できるのか、半信半疑でしたが、本当に意外なほど簡単に実践できておどろいている。
勢いで6本セットを買ったのであと5本習慣の改善ができる。
過剰なルーティングのカスタマイズ
元記事はこちら
翻訳
Bad Smell
map.resources :posts, :member => { :comments => :get, :create_comment => :post, :update_comment => :put, :delete_comment => :delete }
Roy Fielding’*1の論文*2によると、リソースと、その状態を表すには、RESTfulなルーティングを使うべきです。過剰なカスタマイズをせず、デフォルトの9アクション(index, show, new, edit, create, update and destroy)を使いましょう。過剰なカスタマイズを避けるには、別リソースを使うようにしましょう。
Refactor
map.resources :posts do |post| post.resources :comments end
postリソースに対して、create_comment, update_comment and delete_commentというカスタムルーティングを使わないようにするために、commentsリソースのnewアクションを使うようにします。できる限りデフォルトの7アクションを使うようにしましょう。
感想
RESTfulを意識しましょう。デフォルトのアクション以外を作りたくなったらコントローラーを分割しましょう。ということですね。
RESTfulにするならデフォルトのルーティングを使わない
元記事はこちら
感想
内容がRails2の時代のものでRails5と書き方が大きく異なるので、翻訳は割愛。 RESTfulなルーティングを採用する場合は、余計なルーティングが生成されると、セキュリティリスクにもなるからやめましょうという主旨だと思う。
resources :posts, :member => { :push => :post }
みたいな書き方をするのは7種類のアクション(index、show、new、edit、create、update、destroy)全部を使う時だけにして、 一つでも欠ける時は個別に書くのがよい。と思う。