1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

初心者が久しぶりにプログラミングの学習を再開する時にすべきこと

Last updated at Posted at 2022-10-06

始めに

プログラミング学習するが、何かしらの理由で学習時間が思うように確保できないことがある。ようやくまとまった時間を確保することが出来たとしても、何をしていたのか、何をしなければいけなかったのか忘れていることが多く、学習へのモチベーションはどんどん下がる。そして、学習に取り掛かるのが億劫になることもある。そういった時にすぐに学習に取り組めるようなリハビリ手順をここに残す。

リハビリのポイント

プログラミング学習へのモチベーションを取り戻すに 前に進んでいる感覚 を作ることが重要だと私は考える。
では、その 前に進んでいる感覚 を作るにはどうすればよいか。

結論

画面に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(無料版)で翻訳しました。

意味を完全には理解できないけど、PATHrails 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モデルの理解

ModelViewContollorの頭文字を取った略語であり、railsアプリを扱うために必要な概念の一つ。
それぞれの意味は

単語 意味
Model データベースとのやりとりを仲介してくれる
View` ユーザーに見える部分の処理
Contollor 処理の振り分け

このようにプログラムの役割を明確に分けて、コードの管理と運用保守を簡単にしている。

ユーザーからのリクエストに対してどのようにサーバーレスポンスしているかもう一度思い出しながらアプリ制作を進めていく。

まずはルーティングの設定

ユーザーからのリクエストを最初に受け取るのルーターである。ルーターリクエストの内容に応じてコントローラーアクションに振り分けていく。

routes
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アクションを追記します。

homes_contollor
class HomesController < ApplicationController
  def index

  end
end

ユーザーからのリクエストを受け取ったルーターコントローラーアクションに振り分けます。アクションでは受け取ったパラメーターインスタンス変数に入れてviewに渡したり、データベースとやりとりするためモデルと連携したりします。今回はとくにそういった処理はないので、viewとのパイプぐらいにしておきましょう。

ビューの作成

ユーザーに表示する画面を作成します。

  • ターミナルでviewファイルを格納するためのhomesディレクトリを作成
  • 表示画面ファイルを作成します。
  • 表示画面ファイルに表示内容を記述
ターミナル
mkdir app/views/homes  viewファイルを格納する大枠

touch app/views/homes/index.html.erb  アクションに応じた画面を表示するファイル を作成
app/views/homes/index.html.erb
<h1>Hello World!!</h1>

実際にHello World!!と画面に表示されるのか確かめましょう。
http://localhost:3000/homes

簡単なアプリ作成完了! でも、簡単すぎる??

ひとまずはここまで作業しているということはリハビリの効果は出ていると言っても過言ではないのでしょうか。
先ほど作っためちゃめちゃ簡単なアプリでもいいのですが、少し物足りない感じも否めない。コントローラーのアクションや、データベースを全く使っていないですからね。
さらにリハビリの負荷を上げてみたい方はこのまま続けてみてください。

まずはコントローラーからビューへデータを渡す

クライアントからのリクエストに対してルーターは指定されたURLのコントローラーのアクションを繋げます。コントローラーは適切なアクションを繋げます。

app/controllers/homes_controller.rb
class HomesController < ApplicationController
  def index
    # ***** 次を追加 *****
    @greet = "NEW Hello World!!"   #インスタンス変数に"Hello World!!"を格納
  end
end

*インスタンス変数とは、、、一旦おいておこう。

コントローラーのアクションで定義した"NEW Hello World!!"をviewに渡すにはインスタンス変数に格納する必要があった。
格納したインスタンス変数をビューへ渡すには以下のように記載する。

app/views/homes/index.html.erb
<%= @greet %>

そう、"NEW Hello World!!"を格納したインスタンス変数をビューに書き込む。すると値は保持されたままビューファイルに内容を渡すことができる。実際に渡すことが出来ているのかサーバーを立ち上げてみてみよう。

ターミナル
rails s

リンク先で無事に"NEW Hello World!!"と表示されていれば、コントローラーからビューにデータを渡すことが成功出来ている。

モデルからコントローラーへデータを渡してみる

さらにリハビリの負荷をあげていく。
つぎはデータベースとのやりとりを仲介するモデルからコントローラーへデータを渡していく。

まずはモデルを作成する

ターミナル
touch app/models/user.rb

2022/10/06 途中

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?