劇場版 ソードアート・オンライン -オーディナル・スケールを観た (2回目)

劇場版の SAO の2回目を観た。最初に観ようとしたときは自動券売機でチケットを取り忘れていたので、チケットの購入は3回目になる。

f:id:koic:20170314233837p:plain:w300

前回と変わって今回の来場者特典は100ページのオリジナル小説だったので得した気持ちだった。

箇条書きより見出しを好め

Wikiesa なんかでひたすら箇条書きで記されているのを、最近たびたび見かけるようになった気がしたので話していた、文書構造のリファクタリングテクニックとなる。

基本は一番浅い箇条書きを大見出しにして、ネストを一段ずつ下げるといったものでざっくり以下のような図解で話していた。以下の例では大見出しになったものをタイトルとしており、中見出しが一番浅い箇条に対応している。初手としてはかなり手早く手を加えることのできるテクニックのひとつだと思う。

f:id:koic:20170310153214j:plain:w300

もちろん箇条書きが良くないといったものではなく箇条として成立していればよい。良くないのは箇条の重ね書きの結果として、箇条書きの4段ネストといったものなどで、それは既に箇条として破綻していたりする。そういった structure smell を作らないように積極的に見出しを導入しておくのがひとつの解だと思っている。

広く普及していると思われる Markdown 記法を例に、文書構造の変更前と変更後についてのイメージを次の Gist に書いておいた。

gist.github.com

文書構造の実例としては書籍が参考になるが、5年半くらい前にしたスライドなんかを引用したりして話していた。文書構造については一度身につけると長く使える能力になるので早めに身につけておくのがおすすめ。

www.slideshare.net


このあたりの話がいくつか書かれているアカシックレコードを夏くらいまでを目処に掘り起こしたい。

RESTful#とは勉強会18

RESTful#とは勉強会18だった。会場はヴァル研究所さん。

rubychildren.doorkeeper.jp

前半は『Webを支える技術』の読書会。「16.7 トランザクション」を読み進めていた。ACID やトランザクション分離レベルという語彙がちらっと出てくるような、考え始めるととても奥深いテーマの回だった。

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

Webを支える技術 -HTTP、URI、HTML、そしてREST (WEB+DB PRESS plus)

後半は shokola さん謹製の課題ワークショップだった。

記事の状態をベースにした設計、Web リソースから考える設計、Hypermedia を切り口にした設計と各々異なる軸からの考え方を聞くことができて面白かった。雑談で出てきた話としては、HTML 5 から追加された <input type="submit"> での formaction 属性を知らなかったので勉強になった。

Rails 5.1.0 (Edge) でのDBクリーニングGemの進捗

Rails アプリケーションでのテスト時のデータクリーニングには Database CleanerDatabaseRewinder を使っていることが多いと思う。

Rails 5.1.0 の Edge つまり GitHub の master Rails に対してこれらを利用する場合は、Rails の PR 28293 に対応したパッチがあたった以下のものを使う必要がある。

それぞれの進捗を書く。

Database Cleaner

PR が既に出ていたが、2017年3月7日現在まだ master にマージされていない。

github.com

当面は以下のような感じで Gemfile に指定するなどの対処で動かすことになる。

gem 'database_cleaner', git: 'https://github.com/activefx/database_cleaner', branch: 'rails-5-1-schema-migration-table-name-fix'

DatabaseRewinder

master マージ済み。

github.com

未リリースなので、いまのところ Gemfile への git オプション指定などが必要。


これらには前述の PR で消されたActiveRecord::Migrator.schema_migrations_table_name に代わりActiveRecord::SchemaMigration.table_name を使うようにした対応が入っている。

Tip として ActiveRecord::SchemaMigration.table_name は Rails 4 では入っているため、現在メンテナンス対象となっている Rails 4.2 との互換があるため Rails のバージョンによるパッチの違いは考えなくても良い。

rails_5_1_0ブランチの準備

先日 Rails 5.1.0.beta1 がリリースされたので、Rails アプリケーションとしては master から rails_5_1_0 ブランチを切って裏で準備をはじめていることと思う (ブランチ名は Rails 本家に合わせてハイフン区切りだったり、その他いろいろあると思う) 。

話の前提知識として、2017年3月6日現在の Rails 5 系の GitHub 上の管理を書いてみるとこうなる。なお、ここでの話に関係のない beta と rc は割愛する。

  • master … Rails 5.1.0 (開発版) の Edge
  • 5.1.0.beta1 タグ … Rails 5.1.0.beta1 で RubyGems にリリースされている
  • 5.0.2タグ … Rails 5.0.2 で RubyGems にリリースされている Rails 5.0.z (安定版) の現時点の最新版
  • 5.0.1タグ … Rails 5.0.1 で RubyGems にリリースされている
  • 5.0.0.1タグ … Rails 5.0.0.1 で RubyGems にリリースされている
  • 5.0.0タグ … Rails 5.0.0 で RubyGems にリリースされている
  • 5-0-stable ブランチ … Rails 5.0.z (安定版) のメンテナンスブランチ

Rails 5.1.0 へのリリースを追うにあたり、Gemfile に 5.1.0.beta1 を指定するというのがひとつの考え方ではあるが、beta はある時点のスナップショットということで master はそこから更に進んでいることになる。つまり beta で起きていたバグが修正されていたり、beta からのリファクタリングが master に入っていたりする。

そういった理由から Gemfile には 5.1.0.beta1 よりも GitHub から直接 master を持ってくる Edge Rails を使うようにした方が良いと思っている。

Gemfile の diff で例をあらわすとこういった意味になる。

- gem 'rails', '= 5.1.0.beta1'
+ gem 'rails', git: 'https://github.com/rails/rails'

周辺の Gem に関しても、Rails 5.1.0 向けのバージョンが master で開発されているものは同様の理由から GitHub 指定となる。

Rails 5.1.0 の正式リリース、あるいは 5-1-stable メンテナンスブランチが切られたらそちらを使うように切り替える。これまでの傾向から Rails 5.1.0 が安定版となるリリースはまだ先の話になると思うので、気が向いたらアプリケーションの master でちょくちょく rebase すると良い。