Railsにコントリビュートした
軽い気持ちでpull requestを送ってみたら数十分後になんとmergeされてしまった。間違ってmasterブランチに送ってしまったため、おそらくrails 5で公開されることになる。
追加したのはrake initializer
という簡単なrakeタスクで、railsの起動時に実行されるinitializerを実行順に出力する。
% rake initializer set_load_path set_load_path set_load_path set_load_path set_autoload_paths set_autoload_paths set_autoload_paths set_autoload_paths add_routing_paths add_routing_paths add_routing_paths add_routing_paths add_locales add_locales add_locales add_locales add_view_paths add_view_paths add_view_paths add_view_paths load_environment_config load_environment_config load_environment_config load_environment_config load_environment_hook load_active_support set_eager_load initialize_logger initialize_cache initialize_dependency_mechanism bootstrap_hook active_support.deprecation_behavior prepend_helpers_path prepend_helpers_path prepend_helpers_path prepend_helpers_path load_config_initializers load_config_initializers load_config_initializers load_config_initializers active_support.halt_callback_chains_on_return_false active_support.initialize_time_zone active_support.initialize_beginning_of_week active_support.set_configs action_dispatch.configure active_model.secure_password action_view.embed_authenticity_token_in_remote_forms action_view.logger action_view.set_configs action_view.caching action_view.collection_caching action_view.setup_action_pack action_controller.assets_config action_controller.set_helpers_path action_controller.parameters_config action_controller.set_configs action_controller.compile_config_methods active_record.initialize_timezone active_record.logger active_record.migration_error active_record.check_schema_cache_dump active_record.set_configs brancher.rename_database active_record.initialize_database active_record.log_runtime active_record.set_reloader_hooks active_record.add_watchable_files global_id active_job.logger active_job.set_configs action_mailer.logger action_mailer.set_configs action_mailer.compile_config_methods setup_sass setup_compression jbuilder web_console.initialize web_console.insert_middleware web_console.templates_path web_console.whitelisted_ips web_console.whiny_requests web_console.acceptable_content_types engines_blank_point engines_blank_point engines_blank_point engines_blank_point append_assets_path append_assets_path append_assets_path turbolinks append_assets_path add_generator_templates ensure_autoload_once_paths_as_subset add_builtin_route build_middleware_stack define_main_app_helper add_to_prepare_blocks run_prepare_callbacks eager_load! finisher_hook set_routes_reloader_hook set_clear_dependencies_hook disable_dependency_loading
もともとは、naoty/brancherというrubygemを作るときに、railsの初期化プロセスにコードを差し込みたくてinitializerが実行される順番を確認するデバッグ用のコードを書いていたのがきっかけだった。似たようなrakeタスクにrake middleware
というものがあり、これがあるならrake initializer
もあっていいだろうという軽い気持ちでpull requestを送ってみた。
意外とすんなりmergeしてもらったので、railsへのコントリビュートに対して心理的なハードルがかなり低くなった。上の出力を見てもらえればわかるとおり同じようなinitializerが実行されており、起動が遅くなったり、initializerで定数を定義したときに大量のwarningが出たりする。前々から定数のwarningが大量に出る問題は不思議に思っていたが、これが原因なのかもしれない。またコントリビュートするとしたら、ここらへんを解決するところになりそう。