##ActionPackとは
ActionPackはRailsの中でもかなり広範囲にわたる機能を提供している部分の1つです。主な機能としてはジェネレータ、セッションなどで、フラッシュ、ActionViewやキャッシュ機能などもActionPackが提供しています。
##ジェネレータ
ActionPackが提供するジェネレータとしてcontrollerとscaffoldがあります。まずcontrollerのジェネレータコマンドとして、
rails g controller users
というコマンドを実行すると、
create app/controllers/user_controller.rb
invoke erb
create app/views/user
invoke test_unit
create test/controllers/user_controller_test.rb
invoke helper
create app/helpers/user_helper.rb
invoke test_unit
invoke assets
invoke coffee
create app/assets/javascripts/user.coffee
invoke scss
create app/assets/stylesheets/user.scss
というように大量のファイルが作成されます。もしこのコマンドを取り消したい時には、以下のコマンドを実行して下さい。
rails d(またはdestroy) controller users
続いてscaffoldの場合を見ていきましょう。scaffoldをジェネレータで作成するコマンドは以下になります。
rails g scaffold entries
こちらのコマンドを実行すると、
invoke active_record
create db/migrate/20190802064905_create_entries.rb
create app/models/entry.rb
invoke test_unit
create test/models/entry_test.rb
create test/fixtures/entries.yml
invoke resource_route
route resources :entries
invoke scaffold_controller
create app/controllers/entries_controller.rb
invoke erb
create app/views/entries
create app/views/entries/index.html.erb
create app/views/entries/edit.html.erb
create app/views/entries/show.html.erb
create app/views/entries/new.html.erb
create app/views/entries/_form.html.erb
invoke test_unit
create test/controllers/entries_controller_test.rb
create test/system/entries_test.rb
invoke helper
create app/helpers/entries_helper.rb
invoke test_unit
invoke jbuilder
create app/views/entries/index.json.jbuilder
create app/views/entries/show.json.jbuilder
create app/views/entries/_entry.json.jbuilder
invoke assets
invoke coffee
create app/assets/javascripts/entries.coffee
invoke scss
create app/assets/stylesheets/entries.scss
invoke scss
create app/assets/stylesheets/scaffolds.scss
controllerをジェネレートした場合より、さらに生成されるファイルが多いです。増えたファイルとしてはモデルファイルや ビューファイルがindex、edit、show、new、_formなど複数生成されていることです。今までなんとなく使っていたrailsのジェネレータコマンドですが元々はActionPackで定義された機能だったのです。
##セッション
セッションとはHTTPとは状態を保持できないステートレスですが、セッションを使うと状態を保持するステートフルに変更することが出来ます。主にログイン情報を保持したりすることにWebアプリケーションでは使われています。これにより、ログインしている状態であることを保持することが出来て、ログインを毎回全て行う手間から解放されます。
問題としてはセッションで情報を識別する際にセッションIDというものを使用するのですが、このセッションIDを第三者に盗まれてしまうと第三者が自分としてログインすることが可能になったり、セキュティ的には注意して実装する必要がある部分になります。