AtCoderをRubyで解いてみた!!(前編)

来たるコーディングテストへの対策として何が一番いいのか色々試しております。

 

その中で日本語&他の人の回答も見れるという点からAtCoderというサイトにたどり着きました!!(こりゃいいぞ)

自分の回答と照らし合わせてより良いコードとも照らし合わすことができるのでこりゃ最高ってことで自分なりに解いて見直しをしてみました!!

 

atcoder.jp

それじゃあ行ってみよう!!

 

 

 

前提


 まずこちらの

AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~ - Qiita

の10問をRubyで自分なりに解きました。

こちらを別のタブで開き問題をみながら解いてみてください!

 

次にこちらの

AtCoder に登録したら解くべき精選過去問 10 問を Ruby で解いてみた - Qiita

を参考にリファクタリングしました!!

 

いやぁ、とても勉強になる。

Paizaなどはたとえ自分が合っていたとしても他の回答がみられないので僕みたいな経験がない身からするとやりずらかったです。

 

第1問


 

*自分*

a, b = gets.split.map(&:to_i)
puts (a * b).even? ? 'Even' : 'Odd' 

 *模範*

a, b = gets.strip.split.map(&:to_i)
puts (a * b).even? ? 'Even' : 'Odd' 

 *ポイント*

 if分は3項演算子でシンプルにすればコードが短く書ける。

条件演算子(?:) - 条件分岐 - Ruby入門

第2問


 

*自分*

s = gets.split("").map(&:to_i)
puts s.sum 

*模範*

puts gets.strip.split("").map(&:to_i).inject(:+) 

*ポイント*

・ sumメソッドはRubyバージョン2.4以降から利用できるメソッドみたい。

 どうやらAtCoderRubyバーションは2.3だから使えない。

・模範はinjectメソッドを使っているがこれからの事を考えて覚えておく必要性はない気がする。

・わざわざ変数に入れなくても

puts gets.split("").map(&:to_i).sum

としてもよかった。

第3問


 

*自分*

回答できませんでした。 

*模範*

 _n = gets.to_i
as = gets.strip.split.map(&:to_i)
cnt = 0
while as.all?(&:even?) do
      cnt = cnt.succ
      as = as.map { |a| a / 2 }
end

puts cnt

*ポイント*

・ 『全てが偶数である』という判別にall?という便利なメソッドがある。

・ Whileのループ技もしかっかり身につけたいところ

all? (Enumerable) - Rubyリファレンス

第4問


 

*自分*

 回答できませんでした。

*模範*

 a, b, c, x = 4.times.map { gets.to_i }
cnt = 0
(0..a).each do |i|
  (0..b).each do |j|
    (0..c).each do |k|
                      cnt += 1 if i * 500 + j * 100 + k * 50 == x
          end
     end
end

puts cntputs cnt

*ポイント*

 ・同形式の複数の標準入力はtimesメソッドで受け取る。(コードが簡潔)

・複数の変数の組み合わせはeachメソッドで入れ子の繰り返しを行う

・後置if文記法を使う(コードが簡潔)

第5問


 

*自分*

n, a, b = gets.split(" ").map(&:to_i)n, a, b = gets.split(" ").map(&:to_i)

result = []

(1..n).each do |m|

     result << m if m.to_s.split("").map(&:to_i).sum.between?(a, b)

end

puts result.sum

*模範*

n, a, b = gets.strip.split.map(&:to_i)

n,a,b = STDIN.gets.chomp.split(" ").map(&:to_i)
result = 0

(1..n).each do |i|
    j = i
    sum = 0
    while j > 0
       sum += j % 10
       j = j / 10
    end
    if sum >= a && sum <= b
        result += i
    end
end

puts result 

*ポイント*

・各桁の和を求めるには10で割った余りの合計を足していく方が主流だそうです。

・後置if文て結構便利なんだなってこんぐらいから痛感する。

betweenメソッドは初めて触れたが使い勝手がいい。

between? (Comparable) - Rubyリファレンス

 

感想


 

いざやってみるとプログラミングって難しいと改めて実感しますね。

しかし、論理立てて1つ1つ解いていくのはやはり楽しさの1つですね。

*1『チェリー本』で基礎は学習意しておりますが、その他での重要さはズバリ

『メソッド』だと感じました。

いくら配列や文字列の仕組みを理解できてもそこに変化を与えるメソッドを覚えないと意味がないと感じました。

コーディングテストに向けてさらに勉強あるのみですね。

後編は近々あげま〜す!!(自己満)

それじゃバイバイ!!

 

*1チェリー本

 

【未経験】Railsでポートフォリオを作るまでの学習順序と具体的な教材について

先日勝又さんがTouTubeでRailsポートフォリオを作るまでの順序と具体的な教材について動画を出されていましたので文章としてまとめいていきます。

自分自身にもすごくためになる動画になっております。

www.youtube.com

 

目次

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

 

はじめに

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

これは

①どのような順序で

②どのような教材を

学習していけばいいかに関して説明します。

 

学習順序

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

コンピュータサイエンス基礎

という流れになります。

 

もちろん、いきなりRubyとかJavaScriptの学習から始める方式もありだとは思いますが

2進数、16進数、CPU、メモリ、ハードディスク、データベース、ネットワーク、プログラムの基本構造などのコンピュータサイエンスの基礎知識に関しては、ある程度知っておかないと先に進めない場面が出てくるので、まずは先に片付けてしまう方が結局効率が良かったりします。

ここは飛ばしがちですよね。と言いつつ僕自身も飛ばしたのでのちに苦労しました。笑

 

その後Linuxの基礎を学習することでLinuxの様々なコマンドを一応理解できます。

この時点でいわゆるあの『黒い画面』つまりターミナルを使ってGUIではなくてコマンドライン色々な作業を行うための基礎知識が身につきます。

 

そしてその次に、HTML、CSSJavaScriptの基礎を学習するとこの時点でとりあえず

Webアプリケーションのフロント部分の仕組みはなんとなく把握できるようになってきます。

 

そして次にRubyの基礎を学習することでWebアプリケーションのバックエンド開発の準備ができて、SQLの基礎を学習することでデータベースを扱うための準備ができ

さらにGItとGitHubのの基礎とRailsの基礎を学習することでRailsポートフォリオを作成するための準備は一通り完了するということになります。

いやぁ、こりゃもっと知りたかった(^_^;)

 

もちろんもっと細かいことまで学習してもいいですが、できるだけ早く良質なポートフォリオを作成してモダンなWeb系自社開発企業さんでバックエンドとして働くことを目指している方であれば、作成前にこれ以上色々と手を出しても投資対効果は大して高まらないし、いわゆる『勉強のための勉強』になってしまう可能性が高いと思います。

 

ですので上記で挙げた範囲の学習をざっと学習したら、とにかくさっさとポートフォリオ作りに入ってしまうことをお勧めします。

ここで大事なことは、

全てを理解できていなくても全然問題ないこと

忘れてしまっていることがあっても全然問題がないこと

です!

まさに『 JUST DO IT !! 』です!!

 

 

学習教材

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

それぞれの学習項目に関するおすすめの教材を紹介していきます。

 

コンピュータサイエンス基礎

基本情報技術者試験」用の評判の良い参考書の内容をざっと勉強するのが恐らく本も効率が良い。

カリキュラムの内容としては、コンピュータサイエンス基礎の内容がとてもコンパクトにまとまっているので、とりあえず一冊ざっとやっておけばこの時点での学習範囲としては十分になります。

選別方法はAmazonのレビューなどを参考に購入してみてください。

勝又さんのオススメは「キタミ式イラストIT塾基本情報技術者」がイラストも豊富でオススメだそうです。

 

 

Linux基礎

Linux標準教科書」が定番です。

こちらの書籍をざっと学習すればLinuxコマンド、ファイルの操作、グループとユーザーの権限管理、viというエディタの基本的な使い方、シェルスクリプト、その他Linuxを使う上での基本的な知識は理解できます。

 

Linux標準教科書

Linux標準教科書

 

 

・HTML/CSS/JavaScript/Ruby/基礎

こちらはProgate」の教材がいいのでそちらで勉強すれば十分。

多少物足りない方は動画付きの解説があるドットインストール」がオススメ。

 

・GitとGitHubの基礎

Progateでも十分ですがUdemyの「はじめてのGitとGitHub」という教材の評判もいいみたいなのでおすすめ。

 

Rails基礎

こちらは定番のRails Tutorial」をやりきれば十分。

ここまで終わらせたらすぐにでもポートフォリオ製作に入りましょう。

 

大事なこと

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

ここで大事なことは、

『学習を始めてからポートフォリオを作りきるまでの期間をできるだけ短くする』

ということです。

人間はどんどん古い記憶から忘れてしまいます。

学習から作成までの期間が数週間空いてしまうとまた復習から始めないといけないことになります。

ポートフォリオが前に進まずただ時間の無駄になってしまいます。

そうならないよう、なるべく記憶が新しいうちに作成に入り短期間で完成させられるようにしましょう。

ドラクエでいうなら『ガンガン行こうぜ!!』です。(きっと)

 

また、学習の最初のうちから『Mac』を使うようにしましょう。

現場では開発端末にMacを選択している人が大多数かつ、Windowsがらみで問題が発生してもMacと比較すると答えられる人が少なく、問題解決に無駄な時間を費やす可能性が高くなります。

 

ポートフォリオで大事なこと

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

基本的な機能を持ったメディア系のWebサービスを作りherokuへデプロイまで完了したとしても、

そこはやっとWeb系自社開発系企業さんへの転職活動が行える『スタートライン』

なたっただけであって、そこで肩の力を抜かないようにしましょう。

機能を豊富にしてみたり、インフラにAWSを使ってみたりなど色々工夫をしましょう。

採用担当者さんは『どれだけ頑張って勉強したか』ではなく『学習した内容を良質な成果物に落とし込め流だけの自走能力がるかどうか』をみています。

 

最後に

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

僕も現在就職活動に入りました。

この動画を拝見し自分自身にも非常に刺激になりました。

皆さんも同じ立場の方がいらっしゃいましたら頑張って行きましょう!!

RailsアプリをAWS EC2にデプロイする方法その④デプロイ編②

AWSを使って本番環境にデプロイさせたので今回はその方法を簡潔に分かりやすく4段階にわけて書いて行きます。

1・下準備編

RailsアプリをAWS EC2にデプロイする方法その①下準備編 - 21歳フリーターからrailsエンジニアになるまで

2・DB.サーバー構築編

RailsアプリをAWS EC2にデプロイする方法その②DB.サーバー構築編 - 21歳フリーターからrailsエンジニアになるまで

3・デプロイ編①

RailsアプリをAWS EC2にデプロイする方法その③デプロイ編① - 21歳フリーターからrailsエンジニアになるまで

4・デプロイ編②⇦今回ここ

RailsアプリをAWS EC2にデプロイする方法その③デプロイ編② - 21歳フリーターからrailsエンジニアになるまで

 

いよいよ最後だ!!!!!

頑張っていこう!!!!

 

11・Unicornの設定

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 

Unicornとはアプリケーションサーバーの一種です。
アプリ本体を格納するためのサーバーです。

早速インストールしていきましょう。
下記コマンドを実行して下さい。

[seiya|CHARME] $: vi Gemfile

-----------------------------

#以下を追記

group :production, :staging do

    gem 'unicorn'

end

----------------------------

[seiya|CHARME] $ gem install bundler

[seiya|CHARME] $ bundle install

[seiya|CHARME] $ vi config/unicorn.conf.rb

--------------------------- 

 viコマンドでconfig配下に生成したunicornの設定ファイルに、下記を記述します。

$worker  = 2

  $timeout = 150

  $app_dir = "/var/www/rails/CHARME" (自分のアプリ名)

  $listen  = File.expand_path '/var/run/unicorn.sock', $app_dir

  $pid     = File.expand_path '/var/run/unicorn.pid', $app_dir

  $std_log = File.expand_path 'log/unicorn.log', $app_dir

  # set config

  worker_processes  $worker

  working_directory $app_dir

  stderr_path $std_log

  stdout_path $std_log

  timeout $timeout

  listen  $listen

  pid $pid

  # loading booster

  preload_app true

  # before starting processes

  before_fork do |server, worker|

    defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!

    old_pid = "#{server.config[:pid]}.oldbin"

    if old_pid != server.pid

      begin

        Process.kill "QUIT", File.read(old_pid).to_i

      rescue Errno::ENOENT, Errno::ESRCH

      end

    end

  end

  # after finishing processes

  after_fork do |server, worker|

    defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection

  end

 深追いはしませんがハマったポイントは参考にしていた記事はunicorn.sockとpidをtmp以下にセットしていましたがこれだとどうやらうまく読み込んでくれないみたいなので

var/run/下にセットしました!

 

12・Nginxの設定

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

NginxはWebサーバーにあたります。
これも先ほど出てきましたね。受付窓口です。

早速下記コマンドを打ち込んでください。

[seiya|~] sudo yum install nginx

[seiya|~]$ cd /etc/nginx/conf.d/

[seiya|conf.d]$ sudo vi CHARME.conf #自分のアプリケーション名でファイル名変更 

 viコマンドで作成したnginxの設定ファイルには、下記を記述します。

error_log  /var/www/rails/CHARME/log/nginx.error.log; #自分のアプリケーション名に変更

access_log /var/www/rails/CHARME/log/nginx.access.log; #自分のアプリケーション名に変更

# max body size

client_max_body_size 2G;

upstream app_server {

  # for UNIX domain socket setups

  server unix:/var/run/unicorn.sock fail_timeout=0; #自分のアプリケーション名に変更

}

server {

  listen 80;

  server_name 54.95.23.50;

  # nginx so increasing this is generally safe...

  keepalive_timeout 5;

  # path for static files

  root /var/www/rails/CHARME/public; #自分のアプリケーション名に変更

  # page cache loading

  try_files $uri/index.html $uri.html $uri @app_server;

  location @app_server {

    # HTTP headers

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_set_header Host $http_host;

    proxy_redirect off;

    proxy_connect_timeout      360;

    proxy_send_timeout         360;

    proxy_read_timeout         360;

    proxy_pass http://app_server;

  }

  # Rails error pages

  error_page 500 502 503 504 /500.html;

  location = /500.html {

    root /var/www/rails/CHARME/public; #自分のアプリケーション名に変更

  }

} 

 ここでハマったポイントが1つあります。

try_files $uri/index.html $uri.html $uri @app_server;

  location @app_server {

 ここの@app_serverは上記の上から7行目でセットしたupstreamの名前に@をつけたものになりますのでご注意を!!(参考したサイトがそうなっておらずハマりまくりました笑)

また、設定ファイルの記述が終わったら、下記も実行してください。

[seiya|conf.d] cd /var/lib

[seiya|lib] sudo chmod -R 775 nginx

 この呪文はpostメソッドでもエラーが出ないようにするためのものなのだとか。
「開けごま」的な勢いでとりあえず唱えてあげましょう。

これにて設定は完了です!!

 

13・MySQLの設定

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

続いてDBです。
(アプリケーションのDBがMySQLで作成されている前提で話を進めていきます。)

下記コマンドを打ち込み、MySQLに関する設定を変更していきましょう。

[seiya|CHARME]$ vi config/database.yml

----------------------------

  production:

    <<: *default

    database: CHARME_production

    username: root #ここをrootに変更する

  password:      #ここを空欄にする

----------------------------

 

[seiyai|CHARME]$ sudo service mysqld start #mysqldの起動

[seiyai|CHARME]$ ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

[seiyai|CHARME]$ rake db:create RAILS_ENV=production

[seiyai|CHARME]$ rake db:migrate RAILS_ENV=production

f:id:yamasey712:20191012175140p:plain

上記のように、
アプリのmigrationファイルが実行されたログが出て来れば無事成功です!!

 

14・Nginxの起動

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー


 先ほど設定したNginxを起動させましょう。
使うはたった1行のコマンド。

[seiya|CHARME]$ sudo service nginx start

 これだけなんです!!(涙)

 

15・確認するぞ!!!!!

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

ついにここまできた。

アクセスしてみよう。。(手汗すごい)

52.64.~~~~~~~~~(ご自身のIPアドレス)

 

f:id:yamasey712:20191012175523p:plain

って、え??????(3度見はした)

まさに夢ならば〜どれほど〜よかったでしょう。ですね(涙)

よし、夢では終わらせないためにまずは、Unicornの起動確認。

[seiya]$ ps -ef | grep unicorn | grep -v grep

 このコマンドを打ち込んで、

seiya  24265     1 27 03:12 ?        00:00:01 unicorn_rails master -c /var/www/rails/tech-ruche/config/unicorn.conf.rb -D -E production

seiya  24271 24265  0 03:12 ?        00:00:00 unicorn_rails worker[0] -c /var/www/rails/tech-ruche/config/unicorn.conf.rb -D -E production

seiya  24273 24265  0 03:12 ?        00:00:00 unicorn_rails worker[1] -c /var/www/rails/tech-ruche/config/unicorn.conf.rb -D -E production

こんな感じでなんだかゴニョゴニョ表示されていれば既に起動されています。
表示されない場合は下記を実行してください。

[seiya]$ unicorn_rails -c /var/www/rails/CHARME(アプリの名前)/config/unicorn.conf.rb -D -E production #unicornを起動させる

 

その後もう一度上記の起動確認コマンドを実行し、例のゴニョゴニョが出て来ればOKです。

その後、Nginxも再起動させます。

[seiya|CHARME]$ sudo nginx -s reload

 これでもう一度アクセスしてみてください!!
アプリが表示されましたか?

ちなみに僕の場合これをやってもさっきのエラー画面のままうんともすんとも言わず3日ぐらい積みました(涙)

 

そんな3日の闇を解決してくれたのがこのコマンドでした!!

1.unicornの停止

2.rails assets:precompile RAILS_ENV=production の実行

3.unicornの再起動(上記コマンド)

 この2のコマンドのおかげで無事デプロイすることができました!!!

本番環境に自分のアプリが映った時は嬉しすぎて泣きそうでした!!笑

 

最後に

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

皆さんも無事にデプロイできましたか??

これは僕みたいに勉強中の人たちのやくに少しでも役にたてたらいいなと思い書きました!!

何か質問などございましたらお気軽にどうぞ!!

ご連絡ございましたらメールかtwitterにてどうぞ!!

メールアドレス:yamasey_guchi@icloud.com

teittwr:https://twitter.com/yamasey712

RailsアプリをAWS EC2にデプロイする方法その③デプロイ編①

AWSを使って本番環境にデプロイさせたので今回はその方法を簡潔に分かりやすく4段階にわけて書いて行きます。

1・下準備編

RailsアプリをAWS EC2にデプロイする方法その①下準備編 - 21歳フリーターからrailsエンジニアになるまで

2・DB.サーバー構築編

RailsアプリをAWS EC2にデプロイする方法その②DB.サーバー構築編 - 21歳フリーターからrailsエンジニアになるまで

3・デプロイ編①←今回ここ

RailsアプリをAWS EC2にデプロイする方法その③デプロイ編① - 21歳フリーターからrailsエンジニアになるまで

4・デプロイ編②

RailsアプリをAWS EC2にデプロイする方法その③デプロイ編② - 21歳フリーターからrailsエンジニアになるまで

 

 

いよいよデプロイ編だよ!!頑張っていこう!!!!

(※コマンドは全てMacでの使用を想定しています。)

 

8・EC2へログイン

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

まずは、作成したインスタンスが起動しているのを確認してください。

EC2の「インスタンスの状態」が「running」になっていればOKです!!

 

こっからコンソール画面を使っていきますよ!!

まずは下準備

$ sudo brew install python

$ sudo easy_install pip

$ sudo pip  install awscli

 これらのコマンドを実行してください。

*ここでsudoをつけるとデンジャラスだよみたいな警告を受ける場合があります。*

 

インスタンスへのログイン設定

 

先ほど作成したインスタンスにログインをしていきます。

EC2インスタンスにログインできるユーザーとして、AWSでは、デフォルトでec2-userという名のユーザーが用意されています。

 

まずは、

1・ec2-userでログイン

2・新たなユーザー作成

3・作成したユーザーにec2-user と同等の権限を付与

4・新たなユーザーで再ログイン

 の流れで進めていきます!

 

打ち込むコマンドは下記の通りです。

*[ ~ ] $: mv Downloads/CHARME.pem .ssh/

*[ ~ ] $: cd .ssh/

*[ .ssh ] $: chmod  600 CHARME.pem

*[ .ssh ] $: ssh -i  CHARME.pem ec2-user@54.92.132.123

 *最後の@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPを使用してください!!*

 

初回ログインの場合、上記コマンドを打ち込むと、

「本当に接続を続けるの...?」と聞かれますので恐れずに「yes」としましょう!

 

続いて新たなユーザーを作成し、作成したユーザーにマスター権限を与えていきます。

[ec2-user|~]$ sudo adduser seiya (名前)

[ec2-user|~]$ sudo password  seiya

[ec2-user|~]$ sudo visudo 

「passwd: すべての認証トークンが正しく更新できました。」と表示されればユーザー登録とパスワード変更が完了です。

*パスワードの基準が割と厳しめなのでランダムパスワードをググってやるといいかもです!!*

 

上記の最後のコマンドを実行するとVIMが開くと思いますので

1・rootに関する権限の記述箇所を探す(結構下の方)

root    ALL=(ALL)         ALL

2・その下に、作成したユーザーに権限を追加する記述

seiya  ALL=(ALL)         ALL  を追加する

3・escを押してInputモード終了

4・Shift +  zz で保存&編集終了

 とやります。

編集が完了したら

 [ec2-user|~]$ sudo su - seiya

 このコマンドでユーザーの切り替えを行います。

無事に[ec2-user|がseiya(作成したユーザー名)と切り替わればOKです。

 

SSH通信によるインスタンスへのログイン

続いては実際にSSHという通信方法を用いてインスタンスにログインしていきます。
流れとしては

1・ローカルで鍵の生成

2・その鍵をどの通信の認証時に使用するか等を設定

3・サーバーとの認証処理を行う

4・実際に新ユーザーでログイン 

 という流れでいきます!!

早速行ってみよう(ここからはローカルでの作業です!!

[~]$ cd .ssh

[.ssh]$ ssh-keygen -t rsa

(#公開鍵を作成)

-----------------------------

Enter file in which to save the key ():CHARME_key_rsa

(#ここでファイルの名前を記述して、エンター)

Enter passphrase (empty for no passphrase):

(#何もせずそのままエンター)

Enter same passphrase again:

(#何もせずそのままエンター)

-----------------------------

 

[.ssh]$ ls

#「CHARME_key_rsa」と「CHARME_key_rsa.pub」が生成されたことを確認

[.ssh]$ vi config

(#VIMを起動し、設定ファイルを編集する)

-----------------------------

# 以下を追記

Host CHARME_key_rsa

  Hostname 前出のElastic IP (#自分の設定に合わせて)

  Port 22

  User seiya (#先ほどのユーザー名)

  IdentityFile ~/.ssh/CHARME_key_rsa (#秘密鍵の設定)

-----------------------------

[.ssh]$ cat CHARME_key_rsa.pub

(#鍵の中身をターミナル上に出力ssh-rsa~~~~localまでをコピーしておく)

 上記により、
1.ローカルで鍵の生成
2.その鍵をどの通信の認証時に使用するか等を設定
ここまでが完了しました。 続けて見ていきます。
(ここからはサーバー側の作業です!!)

[seiya|~]$ mkdir .ssh

[seiya|~]$ chmod 700 .ssh

[seiya|~]$ cd .ssh

[seiya|.ssh]$ vi authorized_keys

(#vimが開く)

-----------------------------

ssh-rsa sdfjerijgviodsjcIKJKJSDFJWIRJGIUVSDJFKCNZKXVNJSKDNVMJKNSFUIEJSDFNCJSKDNVJKDSNVJNVJKDSNVJKNXCMXCNMXNVMDSXCKLMKDLSMVKSDLMVKDSLMVKLCA shizuma@shizuma-no-MacBook-Air.local

(#先ほどコピーした鍵の中身を貼り付け)

-----------------------------

[seiya|.ssh]$ chmod 600 authorized_keys

[seiya|.ssh]$ exit

[ec2-user|~]$ exit

 これで新ユーザーに見事権限が付与されたはず!!
ローカルで下記コマンドを入力し、実際にログインできるか試してみましょう。

[~]$ ssh CHARME_key_rsa

ログインできれば、無事ユーザー設定は終了です。

 

9・EC2インスタンスの環境構築

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 次は、作成したEC2インスタンス内でrubyやその他の環境が動くよう設定していきます!!

[seiya] sudo yum install \ #yumのインストール

git make gcc-c++ patch \ #cc++コンパイラgitの差分をpatchファイルに変更

openssl-devel \

libyaml-devel libffi-devel libicu-devel \

libxml2 libxslt libxml2-devel libxslt-devel \

zlib-devel readline-devel \

mysql mysql-server mysql-devel \

ImageMagick ImageMagick-devel \

epel-release

 1行づつ実行していってください。もう呪文です。はい!

途中で『こんだけインストールしても大丈夫??』みたいなのが出ますが

「y」を打ち込んでEnterをしてください!!

 

次はNode.jsのインストール。

[seiya|~]$ sudo yum install nodejs npm --enablerepo=epel 

 これも確認が出てくるので、「y」→Enterをしてください。

 

そして、rbenvのインストール→パスを通して→ruby-buildのインストールです。

[seiya|~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

(#rbenvのインストール)

[seiya|~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

(#パスを通す)

[seiya|~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

[seiya|~]$ source .bash_profile 

(#.bash_profileの読み込み)

[seiya|~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

(#ruby-buildのインストール)

[seiya|~]$ rbenv rehash 

(#rehashを行う)

 

そしていよいよ、rubyのインストールです。

# ruby 2.1.3のインストール(versionは適宜変更)

[seiya|~]$ rbenv install -v 2.1.3

[seiya|~]$ rbenv global 2.1.3

[seiya|~]$ rbenv rehash

[seiya|~]$ ruby -v

 ruby -vコマンドで、しっかりとrubyのバージョンが表示されれば成功です。

 

10・gitとの連携、アプリのクローン

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

次は、ご自身で作成されたアプリをgitからクローンし、EC2インスタンス内に配置していきます。(やっとここまで来たかぁ)

 

vi コマンドで.gitconfigというgitに関する設定ファイルを生成します。

[seiya|~]$ vi .gitconfig

 そして下記のように設定しましょう。

[user]

  name = your_name (#gitに登録した自分の名前)

  email = hoge@hoge.com (#git登録時の自分のメアド)

 

[alias] (#これはお好きに)

  a = add

  b = branch

  ch = checkout

  st = status

 

[color] (#色付け)

  ui = true

 

# githubの場合

[url "github:"] (#pullpushのための設定)

    InsteadOf = https://github.com/

    InsteadOf = git@github.com:

# bitbucketの場合

[url "bitbucket:"]

    InsteadOf = https://ユーザ名@bitbucket.org/

    InsteadOf = git@bitbucket.org:

 完了したらファイルを保存し、
アプリを配置するディレクトリを作成していきます。

[seiya|~]$ cd /

[seiya|/]$ sudo chown seiya var (#varフォルダの所有者をseiyaにする)

[seiya|/]$ cd var

[seiya|var]$ sudo mkdir www

[seiya|var]$ sudo chown seiya www

[seiya|var]$ cd www

(#wwwと同じ処理)

[seiya|www]$ sudo mkdir rails

[seiya|www]$ sudo chown seiya rails

 下準備が整ったら、いよいよgitとの接続です。
まずは、下記コマンドを打ち込んでください。

[seiya|www]$ cd ~

[seiya|~]$ mkdir .ssh (#既に生成されている場合もあります。)

[seiya|~]$ chmod 700 .ssh

[seiya|.ssh]$ cd .ssh

[seiya|.ssh]$ ssh-keygen -t rsa

-----------------------------

Enter file in which to save the key ():aws_git_rsa

(#ここでファイルの名前を記述して、エンター)

Enter passphrase (empty for no passphrase):

(#何もせずそのままエンター)

Enter same passphrase again:

(#何もせずそのままエンター)

-----------------------------

[naoki|.ssh]$ ls

(#aws_git_rsa」と「aws_git_rsa.pub」が生成されたことを確認)

[naoki|.ssh]$ vi config

-----------------------------

# githubの場合以下を追記

Host github

  Hostname github.com

  User git

  IdentityFile ~/.ssh/aws_git_rsa (#秘密鍵の設定)

# bitbucketの場合以下を追記

Host bitbucket

  Hostname bitbucket.org

  User git

  IdentityFIle ~/.ssh/aws_git_rsa (#秘密鍵の設定)

-----------------------------

[seiya|.ssh]$ cat aws_git_rsa.pub

-----------------------------

ssh-rsa sdfjerijgviodsjcIKJKJSDFJWIRJGIUVSDJFKCNZKXVNJSKDNVMJKNSFUIEJSDFNCJSKDNVJKDSNVJNVJKDSNVJKNXCMXCNMXNVMDSXCKLMKDLSMVKSDLMVKDSLMVKLCA seiya@ip-10-0-1-10

 catで表示させた公開鍵を、githubにアクセスして登録していきます。
gitへの公開鍵登録に関しては下記サイトが参考になります。 

GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita

 

ちなみに、「Bad owner or permissions on~~~~」と言われてしまった場合は、configファイルの権限を変更する必要があります。

[seiya|.ssh]chmod 600 config

でファイルの権限を変更した後、再び、

$ ssh -T github

 を実行してみてください。

githubの場合

Hi seiya! You've succwwwessfully authenticated, but GitHub does not provide shell access.

bitbucketの場合

logged in as seiya.

 

このようなメッセージが返って来れば接続成功です。

登録が済んだら、いよいよクローンです!!!!

[seiya|.ssh]$ cd /var/www/rails

[seiya|rails]$ git clone git@github.com:~~~~~~~~~~~~

 git cloneの後に続くURLは、githubの下記より取得してください。

f:id:yamasey712:20191012170807p:plain

これでめでたくクローンが出来た...かと思います!(できてておくれ(゚∀゚))
確認のために、下記コマンドを実行してみてください。

[seiya|.ssh]$ cd /var/www/rails

[seiya|rails]$ ls

 ご自身のアプリ名が記載されたフォルダが存在すれば、見事クローン成功です!!

おめでとうございます!!

アプリのsecret_key_baseの設定

クローンが成功したら、railsファイルのconfig/secrets.ymlに記述されている、secrets_key_baseを変更していきましょう。

こちらを参考に行なってください

Rails5.1をproduction環境で起動する際の秘密鍵設定 - Qiita

この記事のsecret_key_baseに下記の方法で生成したシークレットキーを使ってください。


今回は本番にあげるアプリの設定を変更するので、productの欄のみ編集すれば大丈夫です。

* 僕の場合Rails5.1.6でやっていたのでこの方法ですがどうやらRails5.2から違う方法が新しく追加されたみたいですね!(もちろんこれでもできます)

 

まずはシークレットキーを生成していきます。

 

[seiya|rails] $: cd  CHARME

[seiya|CHARME] $: rake secret

(#シークレットキーを生成)

-----------------------------

jr934ugr89vwredvu9iqfj394vj9edfjcvnxii90wefjc9weiodjsc9o i09fiodjvcijdsjcwejdsciojdsxcjdkkdsv

(#表示されるkeyをコピーする)

-----------------------------

[seiya|CHARME] $: cd /

[seiya|/] $: sudo  vi /var/www/rails/CHARME/config/secrets.yml.key(後述)

上記の最後のコマンドで入力する値はローカル環境内のsecrets.yml.key内をコピペすればOKです!!

これで無事、生成されたシークレットキーをproduction環境に反映出来たことになります。

さぁ、これでやっとこさサーバーにアプリがあがるところまで行くことができました!!!

疲れたね。

あと少し!!!!!

頑張っていこう!!!!

次章:デプロイ編②