自己紹介&Ruby on Rails チュートリアル第1章をやってみて　

#自己紹介
はじめまして。

　　
現在情報系の大学2年生で、とある会社で長期インターンをさせてもらえることになりました。プログラミングに関しては、CやPythonなどの基本を触ったことがある程度で、自分で何かを作るなどは特にやったことがないです。
　　　　　　
　　
一応、大学の授業でCSをやったり、去年応用情報を受けたりはしたので(不合格)、簡単な知識はあります。将来の目標としては、ドイツの大学院を出て、ドイツで働けたらなあとは思っております。


今回はインターン先の方から、「これやっとけば、だいぶいい感じだよ！」と言われたので、Ruby on railsのチュートリアルをやってみたいと思います。

■第1章
Railsチュートリアルの流れとしては、実際にWebアプリケーションを開発する流れのよう。章を追っていくほど、機能を増やした物を作れるそうだ。面白そう。

　　
RubyやRailsさらに必要なツールをすべてインストールするには、ベテランであっても苦労するそう。たしかに、自分で何かインストールする時、サイトによりけりで結構困るイメージ。
　　
##実践していく 
Railsのセットアップがやや難し目なようなので、Cloud9を用いて進めていくようだ。

##1.3 最初のアプリケーション
手始めにHello Worldを表示するアプリケーションを作るので、専用の「environment」ディレクトリを作る。

```
$ cd            
$ mkdir environment  
$ cd environment  
```   
  
その後

 ```
$ rails _5.1.6_ new hello_app
```

を実行し、大量のファイルとディレクトリが出てくる。Webフレームワークを導入しているおかげで。コードが読みやすくなっているそう。
  　　　　　　　　　
###1.3.1 Bundler　　
上のrails newを実行した時に自動的に実行される。ここではデフォルトのアプリケーションgemを変更してBundlerを再度実行してみる。
gemは実際に使用するバージョンに変更。コードは少し長いので略。

置き換えた後は

```
$ cd hello_app/
$ bundle install
```
を実行し、アプリケーションが実行可能になる。

###1.3.2 rails server

```
$ cd ~/environment/hello_app/
$ rails server
```
でローカルWebサーバーを立ち上げる。
他のタブでコマンド実行ができるようになるので、このコマンドは別タブのターミナルで行った方が良いらしい。



###1.3.3 Model-View-Controller (MVC)
MVCモデルとは
Model View Controllerの略
・Railsアプリとの通信の際、ブラウザがWebサーバーにリクエストを送信
・コントローラーがそれを受け取る
・場合によってはビューを生成し、HTMLをブラウザに送り返す
・コントローラーはRubyのオブジェクトである、データベースとの通信担当のモデルと対話する

###1.3.4 Hello, world!
```
$ ls app/controllers/*_controller.rb
```
でコントローラの確認。
renderメソッドで「hello, world!」というテキストを表示する。

```
class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception

  def hello
    render html: "hello, world!"
  end
end
```

またRailsのルーティングファイルの内容に

```
$ root 'application#hello'
```
を追加する。

プログラミング初心者は、親の顔より見る「hello,world!!」をデフォルトのページに表示させることができました。(ちょっと手こずったので、対処法は一番下に書いてます。
![スクリーンショット 2022-02-06 15.02.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2210462/845c76da-706b-9f42-13a4-acfbe659415c.png)

##1.4 Gitによるバージョン管理
実際に動作するRailsアプリを初めて完成させることができたので、ソースコードをバージョン管理下に。

###1.4.1 インストールとセットアップ
Cloud9にはデフォルトで実装されている。systemセットアップを、コンピュータ1台につき1回だけ行います。

```
$ git config --global user.name "Your Name"
$ git config --global user.email your.email@example.com
```


*このgit configで設定する名前やメールアドレスは、今後リポジトリ上で一般に公開されるので注意が必要。

次にリポジトリの初期化を行う。そのために、アプリケーションのルートディレクトリに移動する。
hello_appだったら、```$ cd ~/enviroment/hello_app``` で移動しておく。

以下のコードで、新しいリポジトリの初期化を行う。

```
$ git init
```

次にgit add -Aを実行し、プロジェクトのファイルをリポジトリに追加。

```
$ git add -A
```

このコマンドの実行により、現在のディレクトリにあるファイルがすべて追加される。

ステージング (Staging) という一種の待機用リポジトリに置かれ、コミットを待つ。ステージングの状態を知るために、statusコマンドを使う。

```
$ git status
```

リポジトリに反映するために、コミット（commit）する。

```
$ git commit -m "Initialize repository"
```

-mフラグを使い、コミットメッセージを指定する。

logコマンドでコミットメッセージの履歴を参照ができる。

```
$ git log
```

###1.4.2 Gitのメリット
次のコマンドでディレクトリの削除をしてしまった場合

```
$ rm -rf app/controllers/
$ ls app/controllers/
ls: app/controllers/: No such file or directory
```

まだコミット (保存) されていないので、簡単に削除前の状態に戻すことができる。


```
$ git checkout -f
$ git status
# On branch master
nothing to commit (working directory clean)
$ ls app/controllers/
application_controller.rb  concerns/
```


###1.4.3 Bitbucket

BitbucketはGitリポジトリのホスティングと共有に特化したサイト
Githubは公開リポジトリは有料だったが、2019年1月からGitHubの非公開型レポジトリが無料に。

リポジトリをBitbucketにプッシュするメリットは
・ソースコードとその変更履歴のバックアップ
・他の開発者との共同作業の簡単化

Bitbucket を使うためにGitのSSH公開鍵が必要なので、Cloud9のターミナルで次のコマンドを打ってみる。

```
$ cd
$ cd ~/.ssh
$ ls 
```

出てこなかったら

```
$ ssh-keygen
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa): ここにid_rsaと入力
```
を実行する。

lsコマンドで中身が確認できたら、SSH 公開鍵をコピーしてBitbucketの設定で貼り付けます。

ここからの流れは長いので割愛。。。


###1.4.4 ブランチ、編集、コミット、マージ
1.4.3の手順に沿って進めた場合、READMEファイルの内容が自動的に表示されるので、その内容を書き換えていく。

#####Branch (ブランチ)
ブランチとはリポジトリのコピーのこと。自由に変更や実験を試すことができる。

```
$ git checkout -b modify-README
$ git branch
  master
* modify-README
```

ここでは短期間だけ使う一時的なブランチをcheckoutと-bフラグで作成。
またアスタリスクでまたmodify-README ブランチを指している。

#####Edit (編集)
Cloud9のREADMEを編集する。

#####Commit (コミット)
変更後のブランチの状態を確認すると、

```
$ git status
・・・
modified:   README.md
・・・
```

でREADMEがmodifiedされたことがわかる。

メッセージをつけてコミットする。

```
$ git commit -a -m "Improve the README file"
```

#####Merge (マージ)
ここら辺はうまくできなかったです。modify-READMEブランチの変更内容を反映ができない。。

##1.5 デプロイする

頻繁にデプロイすることで、開発サイクルでの問題を早い段階で見つけることができる。

今回はHerokuを使っていく。

PostgreSQLと通信するために pg というgemを入れる。
gemfileに以下のコードを追記。

```
group :production do
  gem 'pg', '0.20.0'
end
```

HerokuではSQLiteがサポートされていないので、sqlite3というgemが本番環境に導入されないようにする。


本番用以外のgemをインストールしてGemfile.lockに反映させたあと、コミットする。

```
$ bundle install --without production
$ git commit -a -m "Update Gemfile for Heroku"
```

次に、Herokuのアカウントを新規作成して設定する。
続いて、自分のシステムにHerokuコマンドラインクライアントがインストールされているかどうかを確認する。

```
$ heroku --version
```

ない場合はインストールしておく。cloud9などのクラウドIDEの場合は以下。

```
$ source <(curl -sL https://cdn.learnenough.com/heroku_install)
```


コマンドを入力しHerokuにログイン。Herokuサーバーにサンプルアプリケーションの実行場所を作成します。


```
$ heroku login --interactive
$ heroku keys:add
$ heroku create
```

#####1.5.2 Herokuにデプロイする (1)

Gitを使って、Herokuにデプロイします。警告は無視していいそう。

```
$ git push heroku master
```

#####1.5.3 Herokuにデプロイする (2)
一生できなかったので一旦諦めます。。。
中にはやらなくて良いという方もいるので。

##チュートリアルの感想
今回この章ではインストール、開発環境の設定、バージョン管理など、色々やりました。文章読んでコマンド見るだけでもWebアプリケーションのことがぼんやりわかって面白かったです。
IDEを使って自分がこんなことできるようになるなんて...
章を重ねていくごとに難しくなっていても頑張ろうと思います






##疑問点・単語集

*gem パッケージのこと、名前


*開発環境を大別すると
①IDE(総合開発環境)
②テキストエディタやコマンドラインを使う環境
に分けられる

*デプロイ　ITの分野では開発したソフトウェアを実際の運用環境に配置・展開して実用に供することを指す場合が多い。
　　



途中

```
rails server
```

を実行しても、

```
A server is already running
```

と表示されてしまい、非常に困ったので対処法のメモ
・rails sを実行しているターミナルの終了
・killコマンドでの停止　```kill プロセスID```
```ps```コマンドや```lsof -i ```コマンドでIDは見つけられる

参考サイト:[rails server (rails s) できない原因と対処方法【初心者向け】](https://ichigick.com/rails-server-failed/)


あと、Bitbucketへのプッシュがうまくいかず

```
error: src refspec master does not match any. 
```

のエラーが出て困っていたのですが

```
$ git commit -m 'First Commit'
```
でうまくいきました。

参考サイト:[Gitでerror: src refspec master does not match anyのエラー](https://qiita.com/maominionbsk54/items/de00bbba78074fdd7325)