始めに
プログラミング学習するが、何かしらの理由で学習時間が思うように確保できないことがある。ようやくまとまった時間を確保することが出来たとしても、何をしていたのか、何をしなければいけなかったのか忘れていることが多く、学習へのモチベーションはどんどん下がる。そして、学習に取り掛かるのが億劫になることもある。そういった時にすぐに学習に取り組めるようなリハビリ手順をここに残す。
リハビリのポイント
プログラミング学習へのモチベーションを取り戻すに 前に進んでいる感覚 を作ることが重要だと私は考える。
では、その 前に進んでいる感覚 を作るにはどうすればよいか。
結論
画面にhello would
と表示される程度の簡単なアプリを作成する
理由
簡単なアプリを作成するとがリハビリに最適だと考える理由は4つある。
・簡単なアプリであれば大きな手間もかからないから取り掛かるハードルが下がる
・簡単なアプリは目標が明確で達成しやすい
・難易度が低いので進んでいる感覚を作りやすい。
・難易度が物足りなければモデルの関連付けなども追加するなど自分で調節できる。
早速リハビリにとりかかろう
Step1:アプリを作る準備をする
そもそもアプリってどうやってつくるんだっけ?状態な人も少なくないはず。
アプリを作成するには、まずアプリを作成する場所(ディレクトリ)を作成する
アプリはディレクトリの中に作る。なので、まずはアプリを作る場所(ディレクトリ)を作る必要がある。
新しいアプリを作成する方法の一つとしてターミナルでコマンドを入力する方法がある。
cd Desktop デスクトップフォルダに移動(ディレクトリの保管場所に移動)
mkdir rails このコマンドにより、Desktopディレクトリの中にrailsディレクトリを作成することができる。
cd rails アプリを作成するために、上記で作成したディレクトリの中に移動する
これでアプリを格納するためのディレクトリが作成出来た。
Step2:アプリ作成に必要なファイルを作成
ターミナルでrails new
とコマンドを入力すればアプリを動かすためにに必要なファイルがrailsディレクトリ
の中に一気に作成される。
rails new hello_world_sample 左記コマンドにより ”hello_world_sample” というアプリが作成される。
これで一応アプリの作成の準備(アプリを作成するために場所、動かすためのファイルの作成)はできた。
Step3:Hello would と表示してみる。
アプリ作成に必要なファイル
を作成できた、次はルーティング
、コントローラー
、ビュー
などに触れてさらにリハビリを本格化していく。
作成したディレクトリ
をテキストエディタ
で開く。
テキストエディタ
でファインダー
の中のdesktop
の中のrails
というディレクトリ
を開く(おや?っと思った方もこのまま進めてみてください)
まずはデータベースの作成
データベースを作成するには、ターミナルで以下のコマンドを入力する
rails db:create
ここでさっそくリハビリ後の最初の試練が発生します。処理が期待通りに動いていないような感じのエラー文がブワーっと表示されます。
Usage:
rails new APP_PATH [options]
Options:
[--skip-namespace], [--no-skip-namespace] # Skip namespace (affects only isolated engines)
[--skip-collision-check], [--no-skip-collision-check] # Skip collision check
-r, [--ruby=PATH] # Path to the Ruby binary of your choice
# Default: /Users/username/.rbenv/versions/3.0.3/bin/ruby
-m, [--template=TEMPLATE] # Path to some application template (can be a filesystem path or URL)
-d, [--database=DATABASE] # Preconfigure for selected database (options: mysql/postgresql/sqlite3/oracle/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc)
# Default: sqlite3
-G, [--skip-git], [--no-skip-git] # Skip .gitignore file
[--skip-keeps], [--no-skip-keeps] # Skip source control .keep files
-M, [--skip-action-mailer], [--no-skip-action-mailer] # Skip Action Mailer files
[--skip-action-mailbox], [--no-skip-action-mailbox] # Skip Action Mailbox gem
[--skip-action-text], [--no-skip-action-text] # Skip Action Text gem
-O, [--skip-active-record], [--no-skip-active-record] # Skip Active Record files
[--skip-active-job], [--no-skip-active-job] # Skip Active Job
[--skip-active-storage], [--no-skip-active-storage] # Skip Active Storage files
-C, [--skip-action-cable], [--no-skip-action-cable] # Skip Action Cable files
-A, [--skip-asset-pipeline], [--no-skip-asset-pipeline] # Indicates when to generate skip asset pipeline
-a, [--asset-pipeline=ASSET_PIPELINE] # Choose your asset pipeline [options: sprockets (default), propshaft]
# Default: sprockets
-J, [--skip-javascript], [--no-skip-javascript] # Skip JavaScript files
[--skip-hotwire], [--no-skip-hotwire] # Skip Hotwire integration
[--skip-jbuilder], [--no-skip-jbuilder] # Skip jbuilder gem
-T, [--skip-test], [--no-skip-test] # Skip test files
[--skip-system-test], [--no-skip-system-test] # Skip system test files
[--skip-bootsnap], [--no-skip-bootsnap] # Skip bootsnap gem
[--dev], [--no-dev] # Set up the application with Gemfile pointing to your Rails checkout
[--edge], [--no-edge] # Set up the application with Gemfile pointing to Rails repository
--master, [--main], [--no-main] # Set up the application with Gemfile pointing to Rails repository main branch
[--rc=RC] # Path to file containing extra configuration options for rails command
[--no-rc], [--no-no-rc] # Skip loading of extra configuration options from .railsrc file
[--api], [--no-api] # Preconfigure smaller stack for API only apps
[--minimal], [--no-minimal] # Preconfigure a minimal rails app
-j, [--javascript=JAVASCRIPT] # Choose JavaScript approach [options: importmap (default), webpack, esbuild, rollup]
# Default: importmap
-c, [--css=CSS] # Choose CSS processor [options: tailwind, bootstrap, bulma, postcss, sass... check https://github.com/rails/cssbundling-rails]
-B, [--skip-bundle], [--no-skip-bundle] # Don't run bundle install
Runtime options:
-f, [--force] # Overwrite files that already exist
-p, [--pretend], [--no-pretend] # Run but do not make any changes
-q, [--quiet], [--no-quiet] # Suppress status output
-s, [--skip], [--no-skip] # Skip files that already exist
Rails options:
-h, [--help], [--no-help] # Show this help message and quit
-v, [--version], [--no-version] # Show Rails version number and quit
Description:
The 'rails new' command creates a new Rails application with a default
directory structure and configuration at the path you specify.
You can specify extra command-line arguments to be used every time
'rails new' runs in the .railsrc configuration file in your home directory,
or in $XDG_CONFIG_HOME/rails/railsrc if XDG_CONFIG_HOME is set.
Note that the arguments specified in the .railsrc file don't affect the
defaults values shown above in this help message.
Example:
rails new ~/Code/Ruby/weblog
This generates a skeletal Rails installation in ~/Code/Ruby/weblog.
~/Desktop/rails
❯ rails s
Usage:
rails new APP_PATH [options]
Options:
[--skip-namespace], [--no-skip-namespace] # Skip namespace (affects only isolated engines)
[--skip-collision-check], [--no-skip-collision-check] # Skip collision check
-r, [--ruby=PATH] # Path to the Ruby binary of your choice
# Default: /Users/kuramotokansei/.rbenv/versions/3.0.3/bin/ruby
-m, [--template=TEMPLATE] # Path to some application template (can be a filesystem path or URL)
-d, [--database=DATABASE] # Preconfigure for selected database (options: mysql/postgresql/sqlite3/oracle/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc)
# Default: sqlite3
-G, [--skip-git], [--no-skip-git] # Skip .gitignore file
[--skip-keeps], [--no-skip-keeps] # Skip source control .keep files
-M, [--skip-action-mailer], [--no-skip-action-mailer] # Skip Action Mailer files
[--skip-action-mailbox], [--no-skip-action-mailbox] # Skip Action Mailbox gem
[--skip-action-text], [--no-skip-action-text] # Skip Action Text gem
-O, [--skip-active-record], [--no-skip-active-record] # Skip Active Record files
[--skip-active-job], [--no-skip-active-job] # Skip Active Job
[--skip-active-storage], [--no-skip-active-storage] # Skip Active Storage files
-C, [--skip-action-cable], [--no-skip-action-cable] # Skip Action Cable files
-A, [--skip-asset-pipeline], [--no-skip-asset-pipeline] # Indicates when to generate skip asset pipeline
-a, [--asset-pipeline=ASSET_PIPELINE] # Choose your asset pipeline [options: sprockets (default), propshaft]
# Default: sprockets
-J, [--skip-javascript], [--no-skip-javascript] # Skip JavaScript files
[--skip-hotwire], [--no-skip-hotwire] # Skip Hotwire integration
[--skip-jbuilder], [--no-skip-jbuilder] # Skip jbuilder gem
-T, [--skip-test], [--no-skip-test] # Skip test files
[--skip-system-test], [--no-skip-system-test] # Skip system test files
[--skip-bootsnap], [--no-skip-bootsnap] # Skip bootsnap gem
[--dev], [--no-dev] # Set up the application with Gemfile pointing to your Rails checkout
[--edge], [--no-edge] # Set up the application with Gemfile pointing to Rails repository
--master, [--main], [--no-main] # Set up the application with Gemfile pointing to Rails repository main branch
[--rc=RC] # Path to file containing extra configuration options for rails command
[--no-rc], [--no-no-rc] # Skip loading of extra configuration options from .railsrc file
[--api], [--no-api] # Preconfigure smaller stack for API only apps
[--minimal], [--no-minimal] # Preconfigure a minimal rails app
-j, [--javascript=JAVASCRIPT] # Choose JavaScript approach [options: importmap (default), webpack, esbuild, rollup]
# Default: importmap
-c, [--css=CSS] # Choose CSS processor [options: tailwind, bootstrap, bulma, postcss, sass... check https://github.com/rails/cssbundling-rails]
-B, [--skip-bundle], [--no-skip-bundle] # Don't run bundle install
Runtime options:
-f, [--force] # Overwrite files that already exist
-p, [--pretend], [--no-pretend] # Run but do not make any changes
-q, [--quiet], [--no-quiet] # Suppress status output
-s, [--skip], [--no-skip] # Skip files that already exist
Rails options:
-h, [--help], [--no-help] # Show this help message and quit
-v, [--version], [--no-version] # Show Rails version number and quit
Description:
The 'rails new' command creates a new Rails application with a default
directory structure and configuration at the path you specify.
You can specify extra command-line arguments to be used every time
'rails new' runs in the .railsrc configuration file in your home directory,
or in $XDG_CONFIG_HOME/rails/railsrc if XDG_CONFIG_HOME is set.
Note that the arguments specified in the .railsrc file don't affect the
defaults values shown above in this help message.
Example:
rails new ~/Code/Ruby/weblog
This generates a skeletal Rails installation in ~/Code/Ruby/weblog.
、、、久しぶりにプログラミング学習した時にあるあるなのが、学習開始直後早々にエラーが発生し心が折れそうになること。
まあ、一旦ここは嫌な気持ちを横に置いておいて、よくエラー文を見てみましょう。
とりあえず英語が苦手な私は何かしらのツールで翻訳してみます。
使い方を説明します。
rails new APP_PATH [オプション]を指定します。
オプションを指定します。
[--skip-namespace], [--no-skip-namespace] # 名前空間をスキップする (孤立したエンジンのみに影響する)
[衝突チェックをスキップする], [--no-skip-collision-check]
-r, [--ruby=PATH] # お好みのRubyバイナリへのパスです。
# デフォルトは /Users/kuramotokansei/.rbenv/versions/3.0.3/bin/ruby
-m, [--template=TEMPLATE] # アプリケーションのテンプレートへのパス (ファイルシステムのパスやURLでも可)
-d, [--database=DATABASE] # 選択されたデータベースに対する事前設定 (オプション: mysql/postgresql/sqlite3/oracle/sqlserver/jdbcmysql/jdbcsqlite3/jdbcpostgresql/jdbc) # デフォルトでは,sqlite3が選択されます.
# デフォルト: sqlite3
-G, [--skip-git], [--no-skip-git] # .gitignore ファイルをスキップする.
[--skip-keeps], [--no-skip-keeps] # ソースコントロールの.keepファイルをスキップします.
-M, [--skip-action-mailer], [--no-skip-action-mailer] # Action Mailer ファイルをスキップする。
[--skip-action-mailbox], [--no-skip-action-mailbox] # Action Mailbox gemをスキップする。
[--skip-action-text], [--no-skip-action-text] # Action Text gemをスキップする。
-O, [--skip-active-record], [--no-skip-active-record] # アクティブレコードをスキップするファイルです。
[--skip-active-job], [--no-skip-active-job] # アクティブなジョブをスキップする
[--skip-active-storage], [--no-skip-active-storage] # アクティブなストレージのファイルをスキップする
-C, [--skip-action-cable], [--no-skip-action-cable] # アクションケーブルのファイルをスキップする
-A, [--skip-asset-pipeline], [--no-skip-asset-pipeline] # アセットパイプラインをスキップする生成のタイミングを示す
-a, [--asset-pipeline=ASSET_PIPELINE] # アセットパイプラインの選択 [options: sprockets (default), propshaft] # デフォルトでは、スプロケットとプロップシャフトを選択します。
# デフォルト: sprockets
-J, [--skip-javascript], [--no-skip-javascript] # JavaScript ファイルをスキップします。
[--skip-hotwire], [--no-skip-hotwire] # Hotwireの統合をスキップする
[--skip-jbuilder], [--no-skip-jbuilder] # jbuilderのgemをスキップする
-T, [--skip-test], [--no-skip-test] # テストファイルのスキップ
[--skip-system-test], [--no-skip-system-test] # システムテスト用ファイルをスキップする。
[--skip-bootsnap], [--no-skip-bootsnap] # ブートスナップのgemをスキップする
[--dev], [--no-dev] # Railsのチェックアウトを指すGemfileでアプリケーションをセットアップする。
[--edge], [--no-edge] # GemfileがRailsのリポジトリを指すようにアプリケーションをセットアップする。
--master, [--main], [--no-main] # Railsリポジトリのメインブランチを指すGemfileでアプリケーションをセットアップする。
[--rc=RC] # railsコマンドの追加設定オプションが含まれるファイルへのパス
[--no-rc], [--no-no-rc] # .railsrcファイルからの追加設定オプションの読み込みをスキップする。
[--api], [--no-api] # API only のアプリのために小さいスタックを事前設定する。
[--minimal], [--no-minimal] # 最小限の rails アプリを事前に設定する。
-j, [--javascript=JAVASCRIPT] # JavaScript のアプローチを選択する [options: importmap (default), webpack, esbuild, rollup] # デフォルトは importmap です。
# デフォルト: importmap
-c, [--css=CSS] # CSSプロセッサの選択 [オプション: tailwind, bootstrap, bulma, postcss, sass... check https://github.com/rails/cssbundling-rails] # デフォルト: インポートマップ。
-B, [--skip-bundle], [--no-skip-bundle] # バンドルインストールを実行しない。
ランタイムオプションです。
-f, [--force] # 既に存在するファイルを上書きする。
-p, [--pretend], [--no-pretend] # 実行するが何も変更しない
-q, [--quiet], [--no-quiet] # ステータスの出力を抑制する。
-s, [-skip], [--no-skip] # すでに存在するファイルをスキップする
Railsのオプション。
-h, [--help], [--no-help] # このヘルプメッセージを表示して終了する。
-v, [--version], [--no-version] # Railsのバージョン番号を表示して終了
説明
rails new' コマンドは、新しいRailsアプリケーションを、デフォルトの
ディレクトリ構造および設定を指定したパスに作成します。
を実行するたびに使用される追加のコマンドライン引数を指定することができます。
rails new' は、ホームディレクトリの .railsrc 設定ファイル内で実行されます。
または、XDG_CONFIG_HOME が設定されている場合は $XDG_CONFIG_HOME/rails/railsrc に指定します。
.railsrc ファイルで指定された引数は、このヘルプの上記のデフォルト値に影響しないことに注意してください。
ファイルに指定された引数は、このヘルプ メッセージの上記のデフォルト値には影響しないことに注意してください。
例を示します。
rails new ~/Code/Ruby/weblog
これは、~/Code/Ruby/weblogにRailsのスケルトンインストールを生成します。
www.DeepL.com/Translator(無料版)で翻訳しました。
意味を完全には理解できないけど、PATH
やrails new
のコマンドの使い方について説明されている気がします。
rails new
のコマンドを入力した時はなんとなく成功していた気がするので, rails new
コマンドが正しく入力できていない説 は保留にします。
PATH
の意味がよく理解できていないのでこれを機会に 簡単 に学習し、原因究明してみます。あまり時間をかけすぎないようにしましょう。モチベーションがどんどん削がれます。笑
point: まずは意味を調べてイメージしてみる。
単語 | 意味 |
---|---|
path | 進路、小道 |
point: つぎに簡単な解説記事を探してみる。
https://wa3.i-3-i.info/word1166.html
どうやらpathとはコンピュータのとっての進路みたいなものらしい。
point: 予測してみる
rails db:create
というrails new
ありきのコマンド
を入力してパス
を指定するような指示やrails new
の使い方について説明されているということは、もしかしたらhello_would_sample
というアプリ
がコンピューター
に認識されていない可能性がある。rails new
コマンド自体は正しく処理されているっぽい気がするので(コマンド入力時に明らかなエラーが表示されてなかった気がするから)テキストエディタ
の設定か、もしくはコマンド
を入力するディレクトリ
の階層が違うのかもしれない。
・テキストエディタのパス設定とか?
・違うディレクトリでコマンド入力している?
前者はちと大変そうなので、後者から試してみる。
結果は、、、
cd hello_world_sample アプリディレクトリに移動(筆者 この時点で、察する)
rails db:create データベース作成のコマンド入力
Created database 'db/development.sqlite3' 、、、成功した。
Created database 'db/test.sqlite3'
このようにリハビリ
の中で出てくるエラー
を乗り越えるとさらにモチベーション
も上がるので冷静に取り組み続けてみよう、リハビリは本当はじっくりと1日かけても構わないと私は考える。
サーバーを起動してみる
サーバを起動してアプリが動いているか確かめる。
rails s サーバー立ち上げのコマンドを入力する
http://localhost:3000 画面が表示されるか確認する。
無事に画面が表示されていればとりあえずはアプリの立ち上げが完了した。あとはhello_wouldを表示する作業だけだ!
ここから先を実装するために思い出さなければいけない大事な基本
MVCモデルの理解
Model
、View
、Contollor
の頭文字を取った略語であり、railsアプリを扱うために必要な概念の一つ。
それぞれの意味は
単語 | 意味 |
---|---|
Model | データベースとのやりとりを仲介してくれる |
View` | ユーザーに見える部分の処理 |
Contollor | 処理の振り分け |
このようにプログラム
の役割を明確に分けて、コード
の管理と運用保守を簡単にしている。
ユーザー
からのリクエスト
に対してどのようにサーバー
がレスポンス
しているかもう一度思い出しながらアプリ制作を進めていく。
まずはルーティングの設定
ユーザー
からのリクエスト
を最初に受け取るのルーター
である。ルーター
はリクエスト
の内容に応じてコントローラー
のアクション
に振り分けていく。
Rails.application.routes.draw do
# ***** 次を追加 *****
get "/homes", to: "homes#index"
end
これはユーザーからHTTPメソッド get:情報を一覧表示してほしいURL
そのためにhomesコントローラー
のindexアクション
へ繋げるというコード
である。
コントローラーの作成
一覧表示してほしいとユーザー
からリクエスト
があった時は、homesコントローラー
のindexアクション
につなげると記載した.
なので、homesコントローラー
を作成する。作成する方法はターミナルでのコマンド入力である。
touch app/controllers/homes_controller.rb なぜtouchで作成なのか、touchは元々ファイルの変更日時を更新するコマンドらしい、、、
するとhomesコントローラー
が作成される。中身が空っぽなのでアプリケーションコントローラー
を 継承 するコードを記述する。そして、index
アクションを追記します。
class HomesController < ApplicationController
def index
end
end
ユーザー
からのリクエスト
を受け取ったルーター
はコントローラー
のアクション
に振り分けます。アクション
では受け取ったパラメーター
をインスタンス変数
に入れてview
に渡したり、データベース
とやりとりするためモデル
と連携したりします。今回はとくにそういった処理はないので、view
とのパイプぐらいにしておきましょう。
ビューの作成
ユーザーに表示する画面を作成します。
- ターミナルでviewファイルを格納するための
homesディレクトリ
を作成 - 表示画面ファイルを作成します。
- 表示画面ファイルに表示内容を記述
mkdir app/views/homes viewファイルを格納する大枠
touch app/views/homes/index.html.erb アクションに応じた画面を表示するファイル を作成
<h1>Hello World!!</h1>
実際にHello World!!
と画面に表示されるのか確かめましょう。
http://localhost:3000/homes
簡単なアプリ作成完了! でも、簡単すぎる??
ひとまずはここまで作業しているということはリハビリの効果は出ていると言っても過言ではないのでしょうか。
先ほど作っためちゃめちゃ簡単なアプリ
でもいいのですが、少し物足りない感じも否めない。コントローラーのアクションや、データベースを全く使っていないですからね。
さらにリハビリの負荷を上げてみたい方はこのまま続けてみてください。
まずはコントローラーからビューへデータを渡す
クライアント
からのリクエストに対してルーターは指定されたURLのコントローラーのアクションを繋げます。コントローラーは適切なアクションを繋げます。
class HomesController < ApplicationController
def index
# ***** 次を追加 *****
@greet = "NEW Hello World!!" #インスタンス変数に"Hello World!!"を格納
end
end
*インスタンス変数とは、、、一旦おいておこう。
コントローラーのアクションで定義した"NEW Hello World!!"
をviewに渡すにはインスタンス変数に格納する必要があった。
格納したインスタンス変数をビューへ渡すには以下のように記載する。
<%= @greet %>
そう、"NEW Hello World!!"
を格納したインスタンス変数をビューに書き込む。すると値は保持されたままビューファイルに内容を渡すことができる。実際に渡すことが出来ているのかサーバーを立ち上げてみてみよう。
rails s
リンク先で無事に"NEW Hello World!!"
と表示されていれば、コントローラーからビューにデータを渡すことが成功出来ている。
モデルからコントローラーへデータを渡してみる
さらにリハビリの負荷をあげていく。
つぎはデータベースとのやりとりを仲介するモデル
からコントローラーへデータを渡していく。
まずはモデルを作成する
touch app/models/user.rb
2022/10/06 途中