- 投稿日:2020-05-31T21:48:13+09:00
Windows10環境、VSCodeで作成したファイルをGitHubにpushしたらrejectedされた時の解決策
(2020/6/1 追記)
Node.jsでWebアプリを作ろうとVSCode(Powershell)で作成、初めてGitを使ってみようと決心したものの、いくつかの壁に当たりました。
なんとか解決した経緯を書きます。
1.Gitのインストール
https://proengineer.internous.co.jp/content/columnfeature/6893#1
こちらのサイトを参考に(versionは違うっぽいですが多分大丈夫)、まずはGitをインストールしました。
2. 初期設定
無事インストールできたら、左下のスタートボタンを左クリックして、Git Bashなるものを起動してコマンドプロンプトっぽいやつを出し、
https://qiita.com/kerobot/items/78372640127771f92ee0
こちらのサイトでGitの初期設定をしました。
3. VSCode内ターミナルでの試み
まずVSCode内のターミナル、つまりPowershellでなんとかGitHubにpushできないかと頑張ってみました。
https://qiita.com/Toshimatsu/items/f71a935612a55d6e674e
こちらのサイトを参考に、ローカルリポジトリに移す段階までは行くことができましたが、
$ git push --set-upstream origin master git: 'remote-ps' is not a git command. See 'git --help'. The most similar command is remote-ftps最後の最後で必ずこうなってしまい、解決策も全く引っかからなかったので、おとなしくGit Bash上で行うことにしました。
4. Git Bashでrejected
Git Bashを起動して、VSCodeで作業していたファイルへと移動します。
> cd (ファイル名)3のサイトと同様に行い、またもローカルリポジトリまでは行くのですが、今度は以下のようなエラーが出てきてしまいました。
$ git push --set-upstream origin master ! [rejected] master -> master (fetch first) error: failed to push some refs to 'https://github.com/kanprogramming/threadapp.git' hint: Updates were rejected because the remote contains work that you do hint: not have locally. This is usually caused by another repository pushing hint: to the same ref. You may want to first integrate the remote changes hint: (e.g., 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details.ggり続けたところ、次のQiita記事を見つけました。
https://qiita.com/takanatsu/items/fc89de9bd11148da1438どうやら、fetchやらmergeやらをしないと駄目らしい。
$ git fetch && git merge origin/master (なんか色々出てくる) $ git merge --allow-unrelated-histories origin/master (なんか色々出てくる、READMEとか出てきたら成功だと思います)これでまたpushしてみたら、僕はできました。
(6/1 追記)
なんとなく関係図を作ってみました。
どうやらorigin/masterというのが中間生成物的な扱いで、ここを経由してリモートとローカルのやりとりをしてるみたいです。(あってますかね?)コンフリクトした時の解消法を今調べてます。
- 投稿日:2020-05-31T19:55:13+09:00
vagrant でgit pushできない
エラー内容
$ git push origin master Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.解決策
vagrant 環境でgitの秘密鍵が設定されていないから。
まず、ローカルで
cd .ssh cp id_rsa ~/Document/work/vagrant仮想環境で
mv id_rsa ~/.sshこれでOK!
- 投稿日:2020-05-31T18:16:47+09:00
リポジトリを追加する方法 & git pull時のエラーについて
リポジトリ追加の際のcommandの操作について
いつも忘れてしまうのでメモです。環境
- 作成済みのリポジトリを用意
- ローカルに新しくディレクトリを作成して
git init
後の操作リポジトリ追加コマンド
$git remote add origin 追加したいリポジトリリポジトリ消去コマンド
$ git remote rm origin
git pull
を実行するとエラーが出るThere is no tracking information for the current branch. Please specify which branch you want to merge with. See git-pull(1) for details. git pull <remote> <branch> If you wish to set tracking information for this branch you can do so with: git branch --set-upstream-to=origin/<branch> masterどのブランチにマージしていいかわからないという意味なので以下のコマンドを実行します。
$ git pull リポジトリurl master
これでマージできました。
- 投稿日:2020-05-31T18:07:06+09:00
gitとgithubのコマンドまとめ
gitでよく使うコマンド
gitリポジトリを作成する
$ git initgitの状態を確認
$ git status選択したファイルをステージングする
$ git add ファイル名カレントディレクトリのrbファイルをステージングする
$ git add *.rbカレントディレクトリ以下の全ての変更のあったファイルをステージングする
$ git add .変更のあったファイルをすべてステージングする
$ git add -Agitにコメントをつけて保存する
$ git commit -m 'コメント'変更履歴を確認
$ git loggithub
githubをリポジトリのoriginとしてgitの設定ファイルに追加(githubでリポジトリを作ったときに自動で作成されていたので、コピペして使用)
$ git remote add origin https://github.com/XXXX/XXXXXX.gitgithubのmasterにアップロードする
$ git push origin masterリモートリポジトリからローカルに最新のリポジトリをダウンロード
$ git pull originブランチの作成
masterからdevelopブランチを作成し、developブランチに切り替える
$ git checkout -b develop mastermasterにブランチを切り替える
$ git checkout master今どのブランチで作業しているか確認
$ git branchdevelopをmasterにマージ
$ git merge develop(例)developブランチをmasterにマージする場合
$ git branch $ git checkout master $ git branch $ git merge develop $ git push origin master
- 投稿日:2020-05-31T17:34:33+09:00
Gitでアカウントを切り替えて作業する方法(sshを使用するパターン)
# キーの作成 ssh-keygen -t ed25519 -C email@example.com -f id_ed25519_email chmod 700 ~/.ssh chmod 600 ~/.ssh/id_ed25519_email ### この時点で、作成した公開キーをgithub側に登録する # sshで使う時のキーの設定 tee -a ~/.ssh/config <<'EOF' >/dev/null Host github_email HostName github.com User git IdentityFile ~/.ssh/id_ed25519_email IdentitiesOnly yes AddKeysToAgent yes EOF # connect check!! ssh -T -i ~/.ssh/id_ed25519_email github_email # git clone ### git clone git@github:daijinload/test.git git clone github_email:daijinload/test.git # local account設定 git config --local user.name email git config --local user.email email@example.com ### optional # alias git-change-account-email='git config --local user.name email && git config --local user.email email@example.com'一応、こんな感じでいける。
会社のアカウントと、個人アカウントを切り替えたい時などに使うと良いかと。
他にも色々と手があるみたいだが、この方法だと、
- cloneするときだけ意識すれば良い
- そこまで面倒なセットアップじゃない
ので、このくらいで良いかと。
切り替えたいaccountを、aliasにでも登録しておけば、clone時にセットするのが多少楽になるかと。
- 投稿日:2020-05-31T15:40:36+09:00
MacOSでGitインストーラーでインストールしたGitをアンインストールして標準(Apple git-127)に戻してみた
Gitバージョンの確認
MacでGitを久しぶりに使うことになり、Gitの場所とバージョンを確認すると、バージョン2.3.5でした。
$ which git /usr/local/git/bin/git $ git --version git version 2.3.5う〜ん。いつインストールしたか思い出せない。どうやらGitインストーラーでインストールしているようだ。
(参考)Gitインストール方法の違いによるGitパスは、以下のとおり(標準のパス)
/usr/bin/git
(インストーラーでのGitのパス)
/usr/local/git/bin/git
(Home-brewでのGitのパス)
/usr/local/Cellar/git/(バージョン番号)/bin/gitGitのアンインストール
「Git アンインストール」でググると、「/usr/local/git」にある削除用スクリプト「uninstall.sh」で削除できると出てくるが、自分の環境にはありませんでした。(最近のインストーラーはあるのかも。確認していません。)
このため、GitのHPからインストールされているバージョンのインストーラーのアーカイブをダウンロードして、dmg ファイルを開くと、その中に「uninstall.sh」があるので、以下のように実行します。$ cd /Volumes/Git\ 2.3.5\ Mavericks\ Intel\ Universal $ sh ./uninstall.shすると、
This will uninstall git by removing /usr/local/git/**/*, /etc/paths.d/git, /etc/manpaths.d/git Type 'yes' if you are sure you wish to continue: yes Password: Forgot package 'GitOSX.Installer.git235Universal.git.pkg' on '/'. Forgot package 'GitOSX.Installer.git235Universal.etc.pkg' on '/'. Uninstalledアンインストールできました。
"No such file or directory"の対応
ところが、バージョンを確認すると、
$ git --version -bash: /usr/local/git/bin/git: No such file or directory「そんなものは無いよ」と言われてしまったので、which と type でファイルパスを確認するとズレている。このため、hash -r する。
$ which git /usr/bin/git $ type git git is hashed (/usr/local/git/bin/git) $ hash -r $ git --version git version 2.24.2 (Apple Git-127)最近のMacOS標準のGitは、新しいのか・・・(XcodeのアップデートでGitもアップデートされていたようだ)
「Git」に複数の脆弱性(2019.12.10)
今回、ググっていると、こんなニュースがありました。
「・・・2月10日にGit 2.24およびそれ以前のバージョンで複数の脆弱性が存在することが明らかに。最新バージョンにしましょう・・・」最後に(home-brew)
今後は、バージョン管理が面倒なので、home-brewでインストールして管理しようかと考えています。(home-brewでのGitインストール方法は、色々な方々が分かりやすく詳しく紹介されていますので、ここまでとします。)
- 投稿日:2020-05-31T15:40:36+09:00
MacOSでGitインストーラーのGitをアンインストールして標準(Apple git-127)に戻してみた
Gitバージョンの確認
MacでGitを久しぶりに使うことになり、Gitの場所とバージョンを確認すると、バージョン2.3.5でした。
$ which git /usr/local/git/bin/git $ git --version git version 2.3.5う〜ん。いつインストールしたか思い出せない。どうやらGitインストーラーでインストールしているようだ。
(参考)Gitインストール方法の違いによるGitパスは、以下のとおり(標準のパス)
/usr/bin/git
(インストーラーでのGitのパス)
/usr/local/git/bin/git
(Home-brewでのGitのパス)
/usr/local/Cellar/git/(バージョン番号)/bin/gitGitのアンインストール
「Git アンインストール」でググると、「/usr/local/git」にある削除用スクリプト「uninstall.sh」で削除できると出てくるが、自分の環境にはありませんでした。(最近のインストーラーはあるのかも。確認していません。)
このため、GitのHPからインストールされているバージョンのインストーラーのアーカイブをダウンロードして、dmg ファイルを開くと、その中に「uninstall.sh」があるので、以下のように実行します。$ cd /Volumes/Git\ 2.3.5\ Mavericks\ Intel\ Universal $ sh ./uninstall.shすると、
This will uninstall git by removing /usr/local/git/**/*, /etc/paths.d/git, /etc/manpaths.d/git Type 'yes' if you are sure you wish to continue: yes Password: Forgot package 'GitOSX.Installer.git235Universal.git.pkg' on '/'. Forgot package 'GitOSX.Installer.git235Universal.etc.pkg' on '/'. Uninstalledアンインストールできました。
"No such file or directory"の対応
ところが、バージョンを確認すると、
$ git --version -bash: /usr/local/git/bin/git: No such file or directory「そんなものは無いよ」と言われてしまったので、which と type でファイルパスを確認するとズレている。このため、hash -r する。
$ which git /usr/bin/git $ type git git is hashed (/usr/local/git/bin/git) $ hash -r $ git --version git version 2.24.2 (Apple Git-127)最近のMacOS標準のGitは、新しいのか・・・(XcodeのアップデートでGitもアップデートされていたようだ)
最後に(home-brew)
今後は、バージョン管理が面倒なので、home-brewでインストールして管理しようかと考えています。(home-brewでのGitインストール方法は、色々な方々が詳しく紹介されていますので、ここまでとします。)
- 投稿日:2020-05-31T15:40:36+09:00
MacOSでGitインストーラーでインストールしたGitを標準(Apple git-127)に戻してみた
Gitバージョンの確認
MacでGitを久しぶりに使うことになり、Gitの場所とバージョンを確認すると、バージョン2.3.5でした。
$ which git /usr/local/git/bin/git $ git --version git version 2.3.5う〜ん。いつインストールしたか思い出せない。どうやらGitインストーラーでインストールしているようだ。
(参考)Gitのパスは、以下のとおり(標準のパス)
/usr/bin/git
(インストーラーでのGitのパス)
/usr/local/git/bin/git
(Home-brewでのGitのパス)
/usr/local/Cellar/git/(バージョン番号)/bin/gitGitのアンインストール
「Git アンインストール」でググると、「/usr/local/git」にある削除用スクリプト「uninstall.sh」で削除できると出てくるが、自分の環境にはありませんでした。(最近のインストーラーはあるのかも。確認していません。)
このため、GitのHPからインストールされているバージョンのインストーラーのアーカイブをダウンロードして、dmg ファイルを開くと、その中に「uninstall.sh」があるので、以下のように実行します。$ cd /Volumes/Git\ 2.3.5\ Mavericks\ Intel\ Universal $ sh ./uninstall.shすると、
This will uninstall git by removing /usr/local/git/**/*, /etc/paths.d/git, /etc/manpaths.d/git Type 'yes' if you are sure you wish to continue: yes Password: Forgot package 'GitOSX.Installer.git235Universal.git.pkg' on '/'. Forgot package 'GitOSX.Installer.git235Universal.etc.pkg' on '/'. Uninstalledアンインストールできました。
"No such file or directory"の対応
ところが、バージョンを確認すると、
$ git --version -bash: /usr/local/git/bin/git: No such file or directory「そんなものは無いよ」と言われてしまったので、which と type でファイルパスを確認するとズレている。このため、hash -r する。
$ which git /usr/bin/git $ type git git is hashed (/usr/local/git/bin/git) $ hash -r $ git --version git version 2.24.2 (Apple Git-127)最近のMacOS標準のGitは、新しいのか・・・
「Git」に複数の脆弱性(2019.12.10)
今回、ググっていると、こんなニュースがありました。
「・・・2月10日にGit 2.24およびそれ以前のバージョンで複数の脆弱性が存在することが明らかに。最新バージョンにしましょう・・・」最後に(home-brew)
今後は、バージョン管理が面倒なので、home-brewでインストールして管理しようかと考えています。(home-brewでのGitインストール方法は、色々な方々が分かりやすく詳しく紹介されていますので、ここまでとします。)
- 投稿日:2020-05-31T12:11:15+09:00
【Git】職場で使うことを想定してGitの使い方を考えてみた - part2
はじめに
この記事では
バージョン管理システムのGitを
職場で使うことを想定して
Gitの使い方についてまとめた記事です。今回はGit関連のサービスは使えないけど
リモートリポジトリは作成できる人向けに書きます。ベストプラクティスや間違いがあれば
それなりに良い方法で書き直していきます。
あざやかにバージョン管理をキメたい
前回の内容に加えて
もしかするとこういうコマンドもあると
やりやすくなるのではというのがあったのでその続き正直なところ職場だったら
Gitを操作できるGUIをクライアントを
導入すれば解決なんじゃないかと思われry効率を最優先にとっても
ソフトを導入することは
あまり良い選択肢ではないと思います。
なにゆゑそう思うか
効率を最優先にとっても
ソフトを導入することは
あまり良い選択肢ではないと思います。これは私の持論ですが主に理由は2つ
・ソフトを扱えることでその技術が扱えると勘違いする人が登場すること
・ソフトのサポート終了した瞬間その技術が使えなくなること簡単に言えば
「GUIのソフトウェアがなければその技術を扱えない」というハンデキャップをわざわざ負いに行くことはないんじゃないかな
ということと
ニッチな技術でとんがるより
みんなが愛してやまない技術を使ったほうが
自身の市場価値は測りやすいとも思うからです。
今回登場するコマンドー
$ git clone [リポジトリURL] $ git push origin [ブランチ名] $ git merge [ブランチ名] $ git branch -D $ git branch -d
想定される環境
客先常駐
GitHub使用不可
Windows10 Pro 64bit
Git 2.26.2.windows.1
想定される利用者
研修中のエンジニア(例えば、業務未経験者など)
初学者を教えるベテラン、中堅エンジニア
リポジトリのコピー(git clone)
リポジトリのURLと書きましたが
.gitフォルダのあるリポジトリのフォルダパスでも使えます。
たとえば、clone元のリポジトリ(test)が
別のディスクドライブ(仮にF:)にあるとき
以下のように入力することリポジトリをcloneできます。$ git clone F:\test
cloneしたあと
clone後に
内容を変更してaddして
commitすると
変更されるリポジトリはどこでしょうか。答えは簡単です。
clone先のリポジトリです。
このときclone元のリポジトリは変更されません。
clone元を更新したい
clone元を更新したいときはpushを使います。
例えば、clone元のリポジトリのmasterブランチを更新したいときは
カレントのリポジトリをcommitしたあと
以下のように入力すること更新できます。$ git push origin master
改修とレビューのサイクルを作りたい
実際に作業する人とレビューする人に
分かれて作業するときのことを考えてみた。
作業者側
1.git clone
2.git branch -b test
3.コード改修
4.git add
5.git commit
6.git pushこうすることでclone元リポジトリには
testブランチという草が生える。間違ってもmergeしないように!!!
レビュー者側
何をレビューするかについての議論が先かとは
思いますがこれについては
次回以降まとめます。作業者側の作業が終わったと仮定して話を進めると
1.git clone
2.git merge
3.レビュー
4.git branch -d test
5.git push origin master工程の3で問題がなければ4と5に進む
レビューNGならば作業者にもう一度、同じ手順を踏んでpushしてもらう。
この運用の問題点
・作業者がtestブランチを切り忘れたままcommitしてしまう可能性
・レビュー者がマージ完了後のtestブランチを削除し忘れる可能性
問題点その1
作業者がtestブランチを切り忘れたままcommitしてしまう可能性
これについては
作業者のフローである工程2の後に
git branchを叩くことで
ポカを回避できそう。
問題点その2
レビュー者がマージ完了後のtestブランチを削除し忘れる可能性
これについてはレビュー後か
merge後に
git branchを叩くことで
ポカを回避できそう。
まとめ
git branch めっちゃ大事なコマンドでは???
来月あたりから実際にこれで運用してみようと思います。
おわり
- 投稿日:2020-05-31T11:40:55+09:00
Day29 Git Github 用語
Git
gitとは、ソースコードを始めとするファイルの変更履歴を管理するためのシステム。
変更履歴を記録するシステムのことをバージョン管理システムと言う。
ファイルの変更履歴を管理することで、
何か問題があったときに過去のファイルに戻れるようにしておくことが利点。Github
gitの仕組みを利用したwebサービスのこと。
gitの機能に対してチーム開発に便利な機能と付け加え、gitにおけるリモートリポジトリの役割も担っている。
github上にチームで共有のプロダクト(ソースコード)を配置し、開発者はgithub上からソースコードをコピーしたり、
ソースコードをgithub上のリポジトリに反映させることが出来る。Github Desktop
gitを扱うためのGUIツールの一つです。
GUIツールとは、グラフィカルユーザインターフェースのことで、gitを扱う際に直感的な操作が出来るツールのことです。
github desktopは、githubが提供しているGUIツールです。リポジトリ
リポジトリとは、変更履歴を管理しておくための入れ物。
このリポジトリにファイルやディレクトリの変更履歴を記録しておく。ローカルリポジトリ
ローカルリポジトリとは、自分のPC上(ローカル環境)に置くリポジトリのこと。
自分のPC上にあるファイルやディレクトリのバージョン管理を行いたいときに使う。リモートリポジトリ
外部のサーバーなどのネットワーク上に置くリポジトリのこと。
ネットワーク上に置くことで、複数人で管理下のファイルやディレクトリを共有することが出来る。
ローカル環境下で問題が起こったとしても、またリモートリポジトリからダウンロードを行うことで元に戻すことが出来る。クローン
リモートリポジトリを複製してローカルリポジトリを作成すること。
クローンを行うとリモートリポジトリの内容をそのままダウンロードすることが出来る。インデックス
インデックスとは、コミットをするファイルを登録するための場所。
ファイルをコミットすると、インデックスに登録されているファイル群の変更が記録される。
一度に多くのファイルを変更した際に、どのファイル単位でコミットするかを選択するために使用する。
インデックスに登録したファイル単位が一つのコミットとなるために、どのファイルをインデックスに登録するかを決める必要がある。コミット
ディレクトリやファイルの状態を記録するための操作。
コミットすることで現在の状態が、日時や変更を加えた人の情報を含めて一緒に保存することが出来る。コミットメッセージ
コミットメッセージとは、一つのコミットに対してつけるコメントのこと。
そのコミットでどのような作業をしたのかということを記録しておくために記述する。プッシュ
ローカルリポジトリで加えた変更とリモートリポジトリに同期させること。
ローカルでコミットが終わり、リモートに変更を同期させたい場合には必ずプッシュを行う必要がある。ブランチ
リポジトリで管理をしているプロジェクトの履歴の1つ。
自分の作業をしている場所のこと。
ブランチ同士は独立しているため、それぞれのブランチが干渉していない。
開発者ごとに担当する機能を明確に分けることが出来る
完成途中や問題のあるソースコードをリリースしないで済む。プル
リモートリポジトリの変更履歴をローカルリポジトリに反映させる操作のこと。
他の開発者による変更がリモートリポジトリに反映された後や、自分でマージを行った際には必ずこのプルの作業を行う必要がある。プルリクエスト
作成したブランチをmasterブランチにマージをするときの確認作業のこと。
ブランチ間の差分を他の開発者から確認やレビューを貰うということを行います。
そのコードに問題が無いかどうかを他の開発者や上司に確認を行うためにプルリクエストを見て貰います。マージ
ブランチとブランチを結合すること。
結合する側のブランチを結合される側のブランチにマージを行うと、結合する側のブランチの内容が結合される側のブランチに反映される。.gitignore
gitの管理対象から管理を外すためのファイルやディレクトリを指定するためのファイルです。
.gitignoreにファイルやディレクトリを指定すると、管理対象から外すことができます。
管理対象から外れるということは、githubにコードやファイルを同期させ無くて済むということです。
- アプリケーションのlogファイル
- 画像ファイル pulic/uploads 以下
- secrets.yml 等のセキュリティ上問題があるファイル
上記にあげたようなファイルを主にgitignoreに指定します。
これ以外にも、自分でgithubで公開したくないファイルも自分で指定をすることができます。なぜaddしてcommitするのか
インデックスの概念が無い場合では、コードを書く作業とGitの操作とを行ったり来たりする必要がありそうです。これでは効率のいい仕事はできません。
インデックスの概念があれば、一気にコードを書いて、後からバージョンごとに選別する(インデックスに登録する)という流れが可能になります。コードを書く作業とGitの操作を行ったり来たりすることはなくなり、効率の良い仕事ができそうです。
- 投稿日:2020-05-31T10:50:18+09:00
ワイのGitの使い方を公開する
自分のGitの使い方を公開します。
Gitを使った開発経験は現時点ではトータル1年未満です。
参考にしてほしいというより、こうしたほうがいいってアドバイスもらったりしたいです。
自分のレベル感としてはGitでプッシュする・プルするといった言葉の意味はわかりますが、お世辞にも使いこなせてるとは言えないです。Sourcetree
https://www.sourcetreeapp.com/
やっぱりGUI環境はあったほうがいいよね?ってことで入れています。
リリースとかマージするとき(ミスできない作業をするとき)使うことが多いように思います。
コマンドラインで更新作業をするのは少し怖いです。VSCode
開発作業(コーディング)をする中で必要なことはVSCode上からやります。
ブランチの切り替え、コミット、プッシュなどを主にやっていると思います。
簡単な確認作業も拡張機能のおかげでできています。使っている拡張機能
・GitLens
https://marketplace.visualstudio.com/items?itemName=eamodio.gitlens・Git History
https://marketplace.visualstudio.com/items?itemName=donjayamanne.githistory・Git Blame
https://marketplace.visualstudio.com/items?itemName=waderyan.gitblame・Git Graph
https://marketplace.visualstudio.com/items?itemName=mhutchie.git-graphVSCodeをあまり使いこなせていないのですが、慣れればSourcetreeでやっているような作業もできると思います。
最近使い分けするのが少し面倒になっているのが正直なところです。コマンドライン
VSCodeのpowershellとかGit bashから操作します。
主な使いみちとしては検索作業です。
漏れがないかとかを確認するのにGUIとかの線を一本一本追ってられません。
VSCodeのターミナルから実行したりするのでVSCodeからやってるやん!!ってなるけどそこは気にしない。主に使うコマンドは以下のような感じ
#マージ済みのブランチを確認 $ git branch --merged #マージ漏れの確認 $ git branch --no-merged #開発ブランチマスターにマージする前に変更内容を確認 $ git log --oneline --no-merges origin/master..開発ブランチ名 #変更したファイル名の一覧を取得 $ git diff --name-only ブランチ名
- 投稿日:2020-05-31T05:14:53+09:00
Git レビューする時に使うコマンド
目的
タスクの作業途中にレビュー依頼を受けた時のコマンドをまとめました。
深夜テンションで書いたのでおかしいところがあったらコメントにて教えてください?環境
$ git --version git version 2.26.21. まずはコミットする
$ git status $ git diff $ git add $ git commitのコマンドを駆使してコミットできるものはコミットします。
2. 編集途中のコードを一時的に退避する
$ git stash -u急いでレビューしたい時はスタッシュで退避させておきます。
-u
オプションを指定するとuntracked file
も含めて退避します。3. 退避した内容を確認する
$ git stash list $ git stash show -pGitのことを信頼してるので、あまり内容を確認することはないです。
4. ローカルリポジトリを最新の状態にする
$ git fetchこれを忘れるとレビューするブランチ見つからないやん?ってなります。
5. レビューしたいブランチに切り替える
$ git switch xxxxxローカルリポジトリを最新の状態に更新して、レビューしたいブランチに切り替えます。(
checkout
は使わないゾという強い意志)6. レビューする
魚の骨が喉につっかえてしまうようなコードがないか確認して問題なければLGTMです。
レビューする時に使うコマンドを補足でご紹介します。レビュー用にウェブ設計チェックリスト作りました。チェックリストとソースコードを照らし合わせてレビューします。
補足: git log
コミットのログを表示します。
$ git log $ git log --one-line $ git -P log --one-line
-P
Git全般のオプションですが、ページャーなしで一気に表示します。地味に便利かもです。$ git log --oneline --graph --decorate --name-statusオプション指定すれば良いってもんじゃないですけど、
git log
のオプションめちゃくちゃいっぱいあります。
--one-line
1コミット1行で表示--graph
グラフっぽい表示--decorate
ブランチ名、タグ名等の別名表示--name-status
ファイル名を表示補足: git show
$ git show $ git show -1 $ git show -2 $ git show -3
git show
とgit show -1
は同じく最新のコミットの内容を表示します。
数値の代わりにハッシュ値を指定してもokです。補足: git diff
$ git diff master $ git diff master --name-only他のブランチとの差分を見ることができます。
1個1個のコミットを見るのめんどいよって方はこちら。
--name-only
差分のあるファイル名のみ一覧表示$ git diff master --color=always | less -R
git diff
の結果を less を使って表示したい時はこんな感じで表示します。オプションを付けないとうまく色付け表示できないので注意です。補足: git grep
ワークツリー内の検索をします。
.gitignore
に登録してあるファイルは除外されるので便利です。$ git grep -np 検索したいワード
-n
検索に一致した行数を表示
-p
検索に一致した行の前にある関数名を表示補足: git blame
$ git blame ファイル名リポジトリで管理されているファイル内の行ごとの最終更新を見れます。
行ごとのコミット(ハッシュ値)、コミッター、更新日が分かるよ。
問題が起きたとき等でどのコミットで変更されたかを探すなどするときに便利です。(犯人探しには絶対に使わないでください。大体犯人は自分です)この辺りのサイトからレビュイーの趣味趣向合いそうな最高のLGTM画像を探します。
一番時間を使うところです。ここは全力で探しましょう。補足: 結局のところ...
GitHubの差分表示が優秀すぎるのでコマンド打つ必要ないのかも?
7. 再び自分のブランチに戻る
$ git switch -ブランチ名を指定してもいいですが入力するのも思い出すのも面倒です。
-
で一つ前のブランチに戻れます。8. 退避しておいたコードを元に戻す
$ git stash pop最新のスタッシュから退避させておいたコードを戻します。
いい感じのコードを書けたらコミットしてプッシュします。9. コミットしてプッシュする
$ git add $ git commit $ git push -u origin HEADレビューする時は大体この流れでやってます。
Git関連の記事まとめ
参考記事
- 投稿日:2020-05-31T00:35:08+09:00
チュートリアル「Terraform、Cloud Build、GitOps を使用してインフラストラクチャをコードとして管理」の実施
お題
以下の記事をトレースするだけ。
https://cloud.google.com/solutions/managing-infrastructure-as-code?hl=ja前提
以下の記事でのセットアップが完了していること。
https://qiita.com/sky0621/items/c488e8adb2a51870ad22以下については知識があるものとしてやり方や概念など説明しない。
- GitHubでのフォークのやり方
- GCS(Cloud Storage)
開発環境
# OS - Linux(Ubuntu)
$ cat /etc/os-release NAME="Ubuntu" VERSION="18.04.4 LTS (Bionic Beaver)"# Git
$ git version git version 2.26.2# Terraform
$ terraform version Terraform v0.12.25# gcloud
$ gcloud version Google Cloud SDK 294.0.0実践
■ アーキテクチャ
以下に記載の通り、「
dev
」と「prod
」という(実際の開発現場ならもうひとつ「stg
」もあるかも)構成。
https://cloud.google.com/solutions/managing-infrastructure-as-code?hl=ja#architecture■ 使用リポジトリ
以下をフォーク。
https://github.com/GoogleCloudPlatform/solutions-terraform-cloudbuild-gitopsで、ローカル(作業端末)にクローンしておく。
ディレクトリ構成は以下の通り。$ tree . ├── cloudbuild.yaml ├── environments │ ├── dev │ │ ├── backend.tf │ │ ├── main.tf │ │ ├── outputs.tf │ │ ├── terraform.tfvars │ │ ├── variables.tf │ │ └── versions.tf │ └── prod │ ├── backend.tf │ ├── main.tf │ ├── outputs.tf │ ├── terraform.tfvars │ ├── variables.tf │ └── versions.tf └── modules ├── firewall │ ├── main.tf │ ├── outputs.tf │ ├── variables.tf │ └── versions.tf ├── http_server │ ├── main.tf │ ├── outputs.tf │ ├── variables.tf │ └── versions.tf └── vpc ├── main.tf ├── outputs.tf ├── variables.tf └── versions.tf以降、上記のディレクトリ構造であることを前提とする。
■ 状態の保存先をGCSバケットに変更
terraform.tfstate
(インフラ構築状態が保存されているファイル)の格納先をローカルからGCSバケット内に変更。GCSバケット作成
GCPプロジェクトIDを名前の一部に含むバケット名を作るとバケット名の重複が防げる。
$ env | grep GOOGLE GOOGLE_CREDENTIALS=/home/sky0621/.config/gcloud/my-gcp-prj-01-terraform-credential.json GOOGLE_PROJECT=my-gcp-prj-01 $ $ gsutil mb -l asia-northeast1 gs://${GOOGLE_PROJECT}-tfstate Creating gs://my-gcp-prj-01-tfstate/...あと、デプロイ履歴を保持できるようにしておく。
$ gsutil versioning set on gs://${GOOGLE_PROJECT}-tfstate Enabling versioning for gs://my-gcp-prj-01-tfstate/...
backend.tf
ファイルの修正
terraform.tfstate
の格納先の指定はbackend.tf
ファイルで行っているので、dev と prod それぞれの環境別に置いてある当該ファイルを修正。
修正後は以下のようになる。environments/dev/backend.tfterraform { backend "gcs" { bucket = "${GOOGLE_PROJECT}-tfstate" prefix = "env/dev" } }※
environments/prod/backend.tf
の方も同様に修正。
terraform.tfvars
ファイルの修正dev と prod それぞれの環境において、定義時にGCPプロジェクトIDの指定が必要になる箇所が複数ある。
そのため、変数として定義しておいて、必要になる箇所ではその変数を参照する記述にしてある。
変数が定義されているのは、terraform.tfvars
ファイル。
この中も以下のように環境変数からGCPプロジェクトIDを参照するように修正する。environments/dev/terraform.tfvarsproject="${GOOGLE_PROJECT}"ここまでの状況をGitHub上のリポジトリにPush
$ git status ブランチ dev Your branch is up to date with 'origin/dev'. Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git restore <file>..." to discard changes in working directory) modified: environments/dev/backend.tf modified: environments/dev/terraform.tfvars modified: environments/prod/backend.tf modified: environments/prod/terraform.tfvars$ git add -A$ git status ブランチ dev Your branch is up to date with 'origin/dev'. コミット予定の変更点: (use "git restore --staged <file>..." to unstage) modified: environments/dev/backend.tf modified: environments/dev/terraform.tfvars modified: environments/prod/backend.tf modified: environments/prod/terraform.tfvars$ git commit -m "Update project IDs and buckets" [dev 6c54e5f] Update project IDs and buckets 5 files changed, 8 insertions(+), 5 deletions(-)$ git status ブランチ dev このブランチは 'origin/dev' よりも1コミット進んでいます。 (use "git push" to publish your local commits) nothing to commit, working tree clean$ git push origin dev Enumerating objects: 17, done. Counting objects: 100% (17/17), done. Delta compression using up to 4 threads Compressing objects: 100% (7/7), done. Writing objects: 100% (9/9), 750 bytes | 375.00 KiB/s, done. Total 9 (delta 5), reused 0 (delta 0), pack-reused 0 remote: Resolving deltas: 100% (5/5), completed with 4 local objects. To github.com:sky0621/solutions-terraform-cloudbuild-gitops.git bf83e89..6c54e5f dev -> dev■ Cloud Build 関連の設定
API使えるようにしておく
$ gcloud services enable cloudbuild.googleapis.com Operation "operations/xxx.99999999-xxxx-999-xxxx-99999999" finished successfully.Cloud Build サービスアカウントに権限を付与
元記事でも記載があるけど、「とりあえず
roles/editor
をつけているものの本来なら必要最小限なロールを付与すべき」とあるので実際の開発現場では留意すべき。サービスアカウントの情報を得る
プロジェクト自体の情報
$ gcloud projects describe ${GOOGLE_PROJECT} createTime: '2020-05-27T15:19:59.167Z' lifecycleState: ACTIVE name: My Project 19162 projectId: my-gcp-prj-01 projectNumber: '999999999999'プロジェクトナンバー部分を抜粋
$ gcloud projects describe ${GOOGLE_PROJECT} --format 'value(projectNumber)' 999999999999上記ナンバーを含むCloud Build サービスアカウントのメアドを環境変数にセット
$ export CLOUDBUILD_SA="$(gcloud projects describe ${GOOGLE_PROJECT} --format 'value(projectNumber)')@cloudbuild.gserviceaccount.com" $ $ env | grep CLOUDBUILD_SA CLOUDBUILD_SA=999999999999@cloudbuild.gserviceaccount.comロール付与
$ gcloud projects add-iam-policy-binding ${GOOGLE_PROJECT} --member serviceAccount:${CLOUDBUILD_SA} --role roles/editor Updated IAM policy for project [my-gcp-prj-01]. bindings: 〜〜〜 - serviceAccount:999999999999@cloudbuild.gserviceaccount.com role: roles/editor 〜〜〜Cloud Build を GitHub リポジトリに接続
Cloud Build アプリの GitHub Marketplace ページにアクセス
https://github.com/marketplace/google-cloud-build
ちなみに、下記とのこと。
Cloud Buildは、無料枠を超えるビルド1分あたりの料金です。
1日120分の無料ビルド分。その後$ 0.003 /分。
最大10の同時ビルドが含まれます。
ビルドされたイメージをGoogle Container Registryに自動的にプッシュします(ストレージコストがかかる場合があります)。
詳細については、Cloud Buildの料金ページをご覧ください。
https://cloud.google.com/cloud-build/pricing終わった様子。
■ ソースの変更によるCloud Build発動を確認
ローカルでソース修正しリモートにPush
$ pwd /home/sky0621/work/src/github.com/sky0621/solutions-terraform-cloudbuild-gitops $ $ git branch * dev $フォーク元リポジトリで(学習用に)タイプミスされていたファイルを修正。
$ git diff diff --git a/modules/firewall/main.tf b/modules/firewall/main.tf index 5e40f70..1d2e549 100644 --- a/modules/firewall/main.tf +++ b/modules/firewall/main.tf @@ -27,6 +27,6 @@ resource "google_compute_firewall" "allow-http" { ports = ["80"] } - target_tags = ["http-server2"] + target_tags = ["http-server"] source_ranges = ["0.0.0.0/0"] }上記バグ修正のコミット用にブランチを切って、上記の内容を反映。
$ git checkout -b bugfix origin/dev M modules/firewall/main.tf Branch 'bugfix' set up to track remote branch 'dev' from 'origin'. Switched to a new branch 'bugfix' $ $ git branch * bugfix dev $ $ git add . $ $ git status ブランチ bugfix Your branch is up to date with 'origin/dev'. コミット予定の変更点: (use "git restore --staged <file>..." to unstage) modified: modules/firewall/main.tf $ $ git commit -m "http ファイアウォール ターゲットの修正" [bugfix 82e283a] http ファイアウォール ターゲットの修正 1 file changed, 1 insertion(+), 1 deletion(-) $ $ git status ブランチ bugfix このブランチは 'origin/dev' よりも1コミット進んでいます。 (use "git push" to publish your local commits) nothing to commit, working tree clean $ $ git push -u origin bugfix Enumerating objects: 9, done. 〜〜〜 To github.com:sky0621/solutions-terraform-cloudbuild-gitops.git * [new branch] bugfix -> bugfix Branch 'bugfix' set up to track remote branch 'bugfix' from 'origin'.作成したバグ修正ブランチを
dev
ブランチにマージあれっ、Cloud Buildのとこで失敗してる?
というわけで、詳細を見に行く。これでもよくわからないので、Cloud Build側のページへ飛ぶ。
terraform init
で失敗してるのかな。
「生データを表示」してみると、Step #1 - "tf init": [0m[1mInitializing the backend...[0m Step #1 - "tf init": [31mError loading backend config: 1 error occurred: Step #1 - "tf init": * terraform.backend: configuration cannot contain interpolations Step #1 - "tf init": Step #1 - "tf init": The backend configuration is loaded by Terraform extremely early, before Step #1 - "tf init": the core of Terraform can be initialized. This is necessary because the backend Step #1 - "tf init": dictates the behavior of that core. The core is what handles interpolation Step #1 - "tf init": processing. Because of this, interpolations cannot be used in backend Step #1 - "tf init": configuration. Step #1 - "tf init": Step #1 - "tf init": If you'd like to parameterize backend configuration, we recommend using Step #1 - "tf init": partial configuration with the "-backend-config" flag to "terraform init". Step #1 - "tf init": Step #1 - "tf init": [0m[0m Finished Step #1 - "tf init" ERROR ERROR: build step 1 "hashicorp/terraform:0.11.14" failed: step exited with non-zero status: 1「
terraform.backend: configuration cannot contain interpolations
」とのこと。
ググる。
https://qiita.com/aoshimash/items/f0be7dd81c856d335460
backend.tf
で変数使えない様子。。。
しょうがないので変数使わず、再度Push。お、先ほどはすぐに失敗したけど、しばらく継続してる様子。
成功した。
詳細を見てみる。失敗時にも出ていたけど、以下に記載の4つのステップが実行されたログとなっている。
https://github.com/GoogleCloudPlatform/solutions-terraform-cloudbuild-gitops/blob/master/cloudbuild.yaml
つまり、terraform apply
までされているので、うまくいっているなら、適用対象のGCPプロジェクトにTerraformの定義が反映されているはず。そう、今回、
bugfix
ブランチからdev
ブランチへのプルリクは作ったけど、まだマージしてない。
このCloud Buildログは、あくまでbugfix
ブランチが出来たから流されたもので、設定としてはdev
とprod
以外はterraform apply
はしないものとなっているので、実際にGCP環境には適用されていない。では、プルリクをマージして、
dev
ブランチを更新してみる。
はい、マージ完了。
Cloud Build側でビルド状況を確認してみる。
すると、dev
ブランチに更新がかかったゆえの実行中ビルドが増えている。完了後のログ詳細を見てみると、
今度は、スキップされずにterraform apply
が実行されている。■ 反映結果の確認
まずは、Terraform実行による状態管理をCloud Storage上で行う設定にしたので、その確認。
うん、
tfstate
ファイルが格納されている。うまくいっているなら、以下が出来ているはず。
- VPC
- Firewall
- Compute Engine
それぞれ出来ておる。
まとめ
参考記事では、このあと、「Cloud Build の実行が成功した場合にのみマージを適用できるようにする」対応や本番環境の方への適用などもやっているけど、ちょっと力尽きたので今回はこのへんでおしまい。
- 投稿日:2020-05-31T00:17:38+09:00
Rails Tutorial 第6版 学習まとめ 第一章
概要
この記事は私の知識をより確実なものにするためにRailsチュートリアル解説記事を書くことで理解を深め
勉強の一環としています。稀にとんでもない内容や間違えた内容が書いてあるかもしれませんので
ご了承ください。
できればそれとなく教えてくれますと幸いです・・・出典
RailsチュートリアルMVCとは
MVCとは
Model View Controller を略したものである
Railsチュートリアル第1章より
https://railstutorial.jp/chapters/beginning?version=6.0#sec-mvc図の通りブラウザからリクエストがあるとコントローラがリクエストを受け取り
必要なデータはモデルを通してデータベースを照会し、Viewを出力することでページを表示するルートルーティングの設定
config/routes.rb 内に
root 'controller_name#action_name'
と記述することで指定したコントローラーのアクションをルートURLとして参照する
演習
1.application_controller.rbをこのように書き換える
application_controller.rbclass ApplicationController < ActionController::Base def hello render html: "hello, world!" end end2.省略
3.①application_controller.rbにgoodbyeアクションを追加application_controller.rbclass ApplicationController < ActionController::Base def hello render html: "hello, world!" end def goodbye render html: "goodbye!!!!!!!!!!!!!!!!!!!" end end②routes.rbを書き換えルーティングをgoodbyeアクションへ変更
routes.rbRails.application.routes.draw do # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html root "application#goodbye" endGitによるバージョン管理
Cloud9を使っているならばGitのインストールは不要
初期設定
初回のみ初期設定を行う
1.名前とメールアドレスを登録
$ git config --global user.name "自分の名前" $ git config --global user.email your.email@example.com2.Gitで使うデフォルトのエディタを設定
今回の場合はnanoエディタを使う
$ sudo ln -sf `which nano` /usr/bin
を実行3.エイリアスを設定(しなくてもOK)
git checkout コマンドを今後省略形の git co で使いたい場合は
設定する
$ git config --global alias.co checkout
を実行4.Gitパスワードの保持時間の変更
以降使うことになるpushコマンドなどでパスワードを入力する手間を省くためにパスワードの保持時間を設定する
意識高い人は設定しなくても良い。デフォルトの保持時間は900秒リポジトリセットアップ
git init
でリポジトリを初期化するgit add -A
で全てのファイルをステージングに追加git commit -m "Initialize repository"
でaddしたファイルをコミットするここまでがGitの基本的な流れ(ここまではまだローカルマシンでしか保存されていない)
このようにバージョン管理を行うことで以前の状況まで戻りたい時などに
戻れる(超重要!)↑の作業でローカルマシン上ではコミットしたのでネットワーク上(リモートという)にアップする
リモートにアップすることで完全なバックアップができ、他の作業者とのソースコードの共有が容易になる
リモートでよく使われるものにGithubやBitbucketなどがある
今回はGithubを使用してリモートへアップしてみるまずはGithubのアカウントを作成し、
新規のリモートリポジトリを作成するローカルリポジトリを今作成したリモートリポジトリにアップするコマンドを表示してくれているので
コピーしてターミナルにそのままはりつける初回はユーザーネームとパスワードの入力を求められる
ちなみにCloud9ではパスワードが入力できない問題があり、私はそれでGithubではなくBitbucketを当初使っていました…
コンソールに文字の入力ができなくなる
https://teratail.com/questions/106094パスワードがセキュリティ対策で表示されなかっただけですね…?
ブランチ
gitではブランチというものを扱う。ブランチはリポジトリのコピーで都度使い分けることで
変更や実験を自由に試すことができる
通常、親リポジトリはmasterブランチと呼ばれ(デフォルトはこれ)、今回はREADME.mdを編集するための
お試しブランチとしてmodify-READMEブランチを作成して作業することにする
トピックブランチはgit checkout -b modify-README
で作成できる
※gitの初期設定でエイリアスを設定していた場合はgit co -b modify-READMEでもOK$ git checkout -b modify-README Switched to a new branch 'modify-README'ちなみにブランチ一覧は
git branch
で表示される
*がついたブランチが現在のブランチ$ git branch master * modify-READMEブランチを作成したのでREADME.mdをさっそく編集
README.md# Ruby on Rails Tutorial ## "hello, world!" This is the first application for the [*Ruby on Rails Tutorial*](https://railstutorial.jp/) by [Michael Hartl](https://www.michaelhartl.com/). Hello, world!編集が終わったらさっそくローカルリポジトリにコミットしてみる
流れとしてはgit add -A
でステージングしてから、git commit -m "~~~~"
コミットである。
git commmit -a -m "~~~~"
とするとステージングも含めて一緒にやってくれるので便利。
※-aオプションはステージングはしてくれるがバージョン管理下に置く機能はないため
バージョン管理下に置かれていないファイルはgit add
でバージョン管理下に置く必要がある。
-aオプションを使えばいいというわけではないmerge(マージ)
ファイルの変更が終わり、modify-READMEブランチでコミットしたので
親リポジトリ(masterブランチ)に反映させたい。
他のブランチの内容を現在のブランチに上書きすることをmerge(マージ)と言う。手順としては、masterブランチにmodify-READMEブランチを反映させたいので
masterブランチに移動→現在のブランチ(masterブランチ)にmodify-READMEブランチをマージとなる
この手順をコマンドで入力した結果がこちら$ git checkout master Switched to branch 'master' Your branch is up to date with 'origin/master'. $ git merge modify-README Updating 392f440..28a415b Fast-forward README.md | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-)
git checkout master
でmasterブランチに移動後
git merge modify-README
でmasterブランチにmodify-READMEの内容をmergeしている。トピックブランチを削除することもできるが、必須ではないためここでは省略。
Push
先ほどローカルでmasterブランチに変更をマージしたのでこれらのファイルをリモートリポジトリにアップする。
このリモートにアップする作業をPushという。
最初の段階でgit push -u origin master
をしているので今回はgit push
で問題ない。git pushで問題ない理由
この段階では難しいので、興味がなければスルーしても問題ないですが、
git push -u origin master の意味について書いておきます。
このコマンドではローカルのmasterブランチで最後にコミットされた内容を
リモートのoriginにpushしますよ!というコマンド。
-uというのはmasterの上流ブランチにoriginを設定しますよというオプション。
まあ簡単に言うと-uで指定するとmasterのデフォルトのpush先がoriginになるため
一度このコマンドでプッシュした後はgit push
だけでデフォルトのプッシュ先
originにmasterの内容をプッシュしてくれるということ。デプロイする
デプロイの準備①
ここまでで一連の流れが終了した。
ファイルを作成→編集→リモートにプッシュ
とりあえず試しで本番環境にデプロイしてみる。
使用するのは手軽なHeroku使う前に、現在導入しているSQLiteはHerokuではサポートしていないため、
本番環境ではHerokuがサポートしているPostgreSQLを使うよう、Gemファイルを書き換える。Gemfilesource 'https://rubygems.org' git_source(:github) { |repo| "https://github.com/#{repo}.git" } gem 'rails', '6.0.3' gem 'puma', '4.3.4' gem 'sass-rails', '5.1.0' gem 'webpacker', '4.0.7' gem 'turbolinks', '5.2.0' gem 'jbuilder', '2.9.1' gem 'bootsnap', '1.4.5', require: false group :development, :test do gem 'sqlite3', '1.4.1' gem 'byebug', '11.0.1', platforms: [:mri, :mingw, :x64_mingw] end group :development do gem 'web-console', '4.0.1' gem 'listen', '3.1.5' gem 'spring', '2.1.0' gem 'spring-watcher-listen', '2.0.1' end group :test do gem 'capybara', '3.28.0' gem 'selenium-webdriver', '3.142.4' gem 'webdrivers', '4.1.2' end group :production do gem 'pg', '1.1.4' end # Windows ではタイムゾーン情報用の tzinfo-data gem を含める必要があります gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
bundle install --without production
で本番環境gem以外をインストールする
ローカル環境ではもともとdevelopment環境のためproduction環境のgemは影響しないが
ここでproductionに対してgemを追加したことやRubyバージョンを指定したことをGemfile.lockに
反映させないと、本番環境デプロイで失敗する。この段階で今の変更もコミットしておく
$ git commit -a -m "Update Gemfile for Heroku"デプロイの準備②
次に、Herokuのアカウントを作成する。→ Herokuアカウント作成
続いて、Heroku CLI(Command Line Interface)をインストールする。
Cloud9を使っているならば次のコマンドで即インストール可能だ。$ source <(curl -sL https://cdn.learnenough.com/heroku_install)Heroku CLIがインストールできたがどうかは
heroku -v
でHerokuのバージョン情報が表示できれば確認できる。インストールが確認できたらHerokuコマンドで先ほど作成したアカウントにログインする
$ heroku login --interactive次に
$ heroku createを実行し、Herokuサーバー上に今回作成したアプリケーションの実行場所を作成する。
これで、デプロイしたらブラウザで表示可能になる。あとはGitを使ってherokuにプッシュすればデプロイできる。
git push heroku masterここまでやれば、heroku createコマンドで生成されたアドレスを開けば
hello_appが公開されている。演習
- application_controllerのhelloアクションを書き換え、もう一度今の変更をプッシュする。
- routes.rbのrootURLをgoodbyeアクションに変更し、もう一度今の変更をプッシュする
Herokuコマンドについて
herokuには他にも様々なコマンドが用意されている。
heroku renameコマンドではアプリケーションの名前を変更することができる。
実際は自動で生成されるデフォルトアドレスで十分。
RailsチュートリアルもHeroku上に置かれている。
このような独自ドメインも使用可能。演習
heroku help
またはheroku -h
でコマンド一覧を表示する。 Herokuのログはheroku logs
で参照可能- herokuアプリのアクセスログやエラーログなど様々なログが確認できる
第一章のまとめ
- RailsはRubyのフレームワーク。
- クラウド環境(Cloud9)はRubyなどの環境があらかじめインストールされているのに加え 環境の設定も容易でOSが違っても使用できる超有能ツール(環境による差異がない)
rails コマンドを使えばrails の様々な機能が使える
- rails server →ローカルサーバーを立てる
- rails console →railsのコンソールを起動する
- rails new →railsのアプリを新規で作成する
- rails generate →railsのファイルを作成する(モデル・コントローラなど様々)
RailsやHerokuを組み合わせることでhello_app程度なら一瞬で作れる。超便利。
データの喪失を防止、複数の作業者と共同作業を行えるようにするため、Gitを使って
バージョン管理を行う。さらにはGitHubの非公開リポジトリにプッシュする。作成したアプリケーションはHerokuを使って簡単にデプロイできる。