Upgrade to Pro — share decks privately, control downloads, hide ads and more …

20200515_出張!Railsウォッチ in 銀座Rails#21

20200515_出張!Railsウォッチ in 銀座Rails#21

2020/05/15に銀座Rails#21で発表したスライドです。
https://ginza-rails.connpass.com/event/173610/
週刊Railsウォッチ: https://techracho.bpsinc.jp/tag/%e9%80%b1%e5%88%8arails%e3%82%a6%e3%82%a9%e3%83%83%e3%83%81

Masato Mori

May 15, 2020
Tweet

More Decks by Masato Mori

Other Decks in Programming

Transcript

  1. About Me
 • 森 雅智: @morimorihoge
 • BPS株式会社でRailsの受託開発チームをやってたり、週1大学非常勤で Web開発を教えてたりします
 •

    Ruby/Rails歴は11年くらい。Web開発は17年くらい
 • 銀座Ralis #10でActiveRecordでVIEWを使おうという話をしました
 About BPS & TechRacho
 • Web受託開発や電子書籍製品開発をやっている会社です
 • TechRachoという自社技術Blogを運営しています
 ◦ 3年半ほど前から平日毎日更新してます
 ◦ https://techracho.bpsinc.jp/ • お仕事相談、転職相談、TechRachoへのご意見など気軽にどうぞ
 ◦ https://www.bpsinc.jp/ 2

  2. これまでの出張Railsウォッチのピックアップテーマ
 • Rails6新機能特集
 ◦ 銀座Rails#12: 複数DB対応
 ◦ 銀座Rails#13: ActionText、Trix
 ◦

    銀座Rails#14: ActionMailbox
 • Railsアプリケーション開発に関する雑多なテーマ
 ◦ 銀座Rails#15: production、development、staging環境について
 ◦ 銀座Rails#16: 機能開発の設計レビューについて
 ◦ 銀座Rails#17: リソース管理スコープについて
 • 開発一般な話
 ◦ 銀座Rails#19: 開発チームの冗長化について
 ◦ 銀座Rails#20: Excelと仲良くしよう
 4
 ※過去のスライドはTechRachoにて公開しています。「TechRacho 銀座Rails」あたりで 検索するとヒットしますので興味のある方はどうぞ

  3. Railsアプリ開発者が標準仕様を参照するときはいつ?
 • Railsに実装されていないWeb標準に従った機能を新たに実装するとき
 ◦ Railsはかなりリッチな機能を持っているが、特殊な独自サービス・ソフトウェアが付与した ヘッダを使った機能を実装するなどの際が該当する(独自SSOなど) 
 ◦ 新機能を実装する際に、標準仕様を参照するようにすると比較的楽に設計できる時があ る(標準仕様は広くレビューされたものなので、一人で考えるよりは設計上の穴が少ない

    だろう)
 • 外部サービスとのAPI連携がうまくいかない時の障害調査・デバッグ
 ◦ Rails側、外部サービス側どちらに問題があるかを検証するために、お互いのシステムが きちんと標準仕様に沿った挙動をしているかの犯人探しをしたいとき 
 ◦ ※ニッチな機能などはライブラリ実装がバグってるケースが割とあります 
 7

  4. ABNF(Augmented Backus-Naur Form)とは
 8
 • 文脈自由文法を定義するメタ言語BNF(Backus-Naur Form)の亜種の一つ
 • 文法を定義することで「ある文法に沿っているか」を判別するのに使われる
 •

    BNF亜種は他にもあるが、RFCやW3CなどWeb、インターネット界隈ではABNFがよく 使われる印象
 • リファレンス
 ◦ よく参照されるRFC5234: https://www.ietf.org/rfc/rfc5234.txt 

  5. なぜABNFで書かれるのか?
 • Examplesのリストだけでは仕様の細部を表現できないことが多い
 ◦ 結果として後でバグや障害の原因になりがち
 • 必要十分な表現力があり、人間に読みやすい
 ◦ 少し学習すれば読むのは難しくない
 •

    機械的に処理することができる
 ◦ 多少書式を成型すればyaccに食わせてパーサーを作ることもできる
 ◦ ※パーサーが作れる=ある入力がきちんとその文法に沿っているかをチェックできる
 9

  6. 試しに見てみるRFC3339: timestampフォーマット
 • 「RFC3339」でググって見てみましょう
 • timestampフォーマットの仕様で、以下のようなものがRFC3339準拠となる(5.8. Examplesより)
 ◦ 1985-04-12T23:20:50.52Z ※

    UTC
 ◦ 1996-12-19T16:39:57-08:00 ※ UTC -8時間のタイムゾーン(PST) 
 ◦ 1990-12-31T23:59:60Z ※ うるう秒もあり得る 
 • RubyであればDateTime#rfc3339などを使って取り出すことができる
 11

  7. ABNFまとめ
 • RFC等の仕様には、さらにruleごとの詳細について解説がついているため、実際に はABNFに沿っている=標準仕様に沿っているとは限らないのに注意
 • Timestampは比較的わかりやすい例でしたが、もっと追ってみたい人は以下もチャ レンジしてみると良いと思います
 ◦ RFC4648:The Base16,

    Base32, and Base64 Data Encodings 
 ▪ https://tools.ietf.org/html/rfc4648 
 ◦ RFC3986:URI Generic Syntax 
 ▪ https://tools.ietf.org/html/rfc3986 
 ◦ W3C: Content Security Policy 
 ▪ https://www.w3.org/TR/CSP3/ 
 • その他自分で「仕様がうろ覚えだなあ」と感じるようなモノについては仕様を追いか けてみてABNFの定義が見つかると、自信を持ってコードを書けることが増えるかも しれません
 ◦ ソースコード内に標準仕様へのreferenceコメントを付けておくと、冗長なレビューコストも減らせるか も?
 27