railsがんばる子

Ruby on Railsがんばる子です。胡蝶蘭のECサイトを運営しています。

最終的なゴールを決めるためのファシリテーション

Question。「最終的なゴールはなんですか?」

何かをやるときに最終的なゴールを決めてから動くのはとても重要なことだと思います。 しかし、最終的名ゴールを決めるのはとても難しいことです。

取り組むのが難しい疑問・課題は違う角度から考えてみることも重要です。

比較対象を経由して答えを見つける

Webサービス運用を開始してから半年ほど、思うように伸びず様々な仮説を立てて考察しています。 そういう状況でプロダクトオーナーに対して「最終的なゴールはなんですか?」という質問が出ました。

いきなり答えるのは難しいと感じたので「Webサービスを始める前に思い描いていた理想と、現状で違うところはなんでしょうか?」と質問しました。

いくつかでてきました。

次に「Webサービスを始める前に思い描いていた理想と、現状で違うところはなんでしょうか?」と質問してみました。

また、いくつか出てきました。

最後に「新しくゴールを設定しようとしたときに、Webサービスを始める前に思い描いていた理想との違いはなんでしょうか?」と質問しました。 このとき、プロダクトオーナーの頭の中は整理された状態になっています。 最初に質問したときと違います。

少しの間をおいたあと、新しいゴールを語り始めてくれました。

施策を抽象化する

見つけた答えや新しいゴールは、具体的な施策であることが多いです。 具体的な施策=実行可能なので、とても良いことなのです。 しかし、施策の内容が重複することや、やるべき施策が漏れてしまうことがあります。

具体的な施策を抽象化して、大きな課題として定義します。 その上で、課題に対する施策をもう一度みんなで考えます。

こうしてプロダクトオーナーが語ったゴールや施策を共通点ごとにまとめて、提示しました。 同僚から足りない課題を追加していただき、その上で施策を考えることができました。

rails migrateとrollbackの両方ができなくなってしまった

教訓

  • migrationファイルは手動で編集しないこと
  • カラムを変更するなど、rollbackが出来ないmigrationファイルを作成しないこと

事象

ステージングでdb:migratedb:rollbackが効かなくなりどうしょうもなくなってしまった。

原因

migrate済みのファイルを二つに分割したあと、rollback不可能なmigrationをしてしまったことが原因となります。

手順1

最初にmigrateファイルを作成し、stagingで実行します。

class AddAAndBToHoge < ActiveRecord::Migration
  def change
    add_column :hoges, :a, :string
    add_column :hoges, :b, :string
  end
end
heroku run rake db:migrate

手順2

ロールバック不可能なmigrateファイルを作成し、stagingで実行します。

class ChangeCFromHoge < ActiveRecord::Migration
  def change
    change_column :hoges, :c, :boolean
  end
end
heroku run rake db:migrate

手順3

そのあとでmigrationファイルを2つに分割します。

class AddAAndBToHoge < ActiveRecord::Migration
  def change
    add_column :hoges, :a, :string
  end
end
class AddAAndBToHoge < ActiveRecord::Migration
  def change
    add_column :hoges, :b, :string
  end
end

手順4

この後でmigrateを実行しようとするとcolumn :bが既に存在するため、migrate errorとなりました。

対処

手順1

MySQLにログインし、hogesテーブルからカラムbを削除します

ALTER TABLE hoges DROP b;

手順2

DBからschema.rbを生成

heroku run rake db:schema:dump

手順3

migrationを実行します

heroku run rake db:migrate

haml フォームの外側から要素を送れるボックス

= form_tag xxx_path, id: 'hoge_form' do
  .. something
= text_area_tag :comment, '', form: 'hoge_form'

参考情報

会社の同僚が書いたコードを参考にさせていただきました、ありがとうございます!