- 投稿日:2020-03-21T21:35:02+09:00
Railsアプリを git-flow で管理する
はじめに
就活用のポートフォリオをGitで管理する際、これまでは全ての作業を同じブランチで行なっていました。
しかし今後現場に入ってチームで開発する際には、issueごとにブランチを切ってそれぞれで作業するということもあると思います。
そうした状況に今から慣れておくために、ポートフォリオを作成する過程のGit管理に、git-flowを活用することにしました。issueを作成する
まずはこれから追加したい機能などの内容を記述したissueを作成します。
対象リポジトリに移動する
ターミナル上で対象のリポジトリに移動します。
$ cd myapp #自分のアプリの名前git-flowをインストールする
ターミナルで下記コマンドを打ち込み、git-flowをインストールします。
$ brew install git-flowブランチ「develop」を作成
「git checkout」は、gitのブランチを切り替えたい時に使います。
$ git checkout master Already on 'master'で、masterブランチに合わせた上で、
$ git branch develop新しいブランチ「develop」を作成します。
git-flowを導入する
対象のリポジトリに git-flow を導入します!
$ git flow init Which branch should be used for bringing forth production releases? - develop - master - socialization Branch name for production releases: [master] Which branch should be used for integration of the "next release"? - develop - socialization Branch name for "next release" development: [develop] How to name your supporting branch prefixes? Feature branches? [feature/] Release branches? [release/] Hotfix branches? [hotfix/] Support branches? [support/] Version tag prefix? []いろいろ項目を聞かれますが、デフォルトの設定で良いので、Enterを押していきます。
「feature」ブランチに切り替える
git-flow には5つのブランチの概念があり、先ほど作成した「develop」は開発用。
そして下記で作成する「feature」は、機能実装用のブランチです。
issue番号を指定することで、issueに紐づけることができます。$ git flow feature start <issue番号>具体的には下記のように書きます。
$ git flow feature start 14 Switched to a new branch 'feature/14' Summary of actions: - A new branch 'feature/14' was created, based on 'develop' - You are now on branch 'feature/14' Now, start committing on your feature. When done, use: git flow feature finish 14切り替わったかどうか、確認してみます。
$ git branch develop * feature/14 master切り替わっています。
このままではまだローカル環境内で切り替わっているだけなので、「publish」コマンドでGitHubに反映します。$ git flow feature publish 14 Summary of actions: - A new remote branch 'feature/14' was created - The local branch 'feature/14' was configured to track the remote branch - You are now on branch 'feature/14'コミットする際に「#issue番号」を入れる
コミットメッセージの中に、「#issue番号」を入れることで自動的にコミットが、該当するissueに紐づきます。
issueごとにコミット内容が確認できるため、コミットの差分が視覚的に分かりやすいです。例です。
$ git add . $ git commit -m "SpecialBookモデルを追加 #14"GitHubの管理画面で、Pull Requestを送信する
該当のブランチからPull Requestを送信します。
内容を確認し、Pull Requestをマージする
変更内容を確認し問題がなければ、コミット内容をマージします。
以上です。
今後も現場の開発を意識した学習を進めていきます。
- 投稿日:2020-03-21T21:32:31+09:00
製薬企業研究者がGitの基本についてまとめてみた
はじめに
Gitは共同開発で使われるバージョン管理ツールです。
ファイルの変更履歴を管理することができます。
ここでは、Gitの基本に絞って解説します。Gitの初期化
Gitを使うときは最初に準備として以下のコマンドを実行します。
$ git init
これによりGitが初期化されます。
リモートの登録
これからファイルをアップロードするリモートの場所を登録するには以下のコマンドを実行します。
リモート名としては、origin
を使うことが多いです。$ git remote add リモート名 リモートのURL
ファイルの選択
アップロードするファイルを選択するには、以下のコマンドを実行します。
$ git add ファイル名
コミット
選択したファイルをコミットするには、以下のコマンドを実行します。
$ git commit -m "コミットメッセージ"リモートへのファイルのアップロード
コミットしたファイルをアップロード(プッシュ)するには、以下のコマンドを実行します。
ブランチ名は、master
とすることが多いです。$ git push リモート名 ブランチ名
リモートからのファイルのダウンロード
リモートからファイルをダウンロード(プル)するには、以下のコマンドを実行します。
$ git pull リモート名 ブランチ名
変更の確認方法
追加されたファイルや、変更が加えられたファイルを確認するには、以下のコマンドを実行します。
$ git status
変更内容の詳細を確認するには、以下のコマンドを実行します。
$ git diff
コミット履歴の確認方法
コミットの履歴や、コミットメッセージを確認するには、以下のコマンドを実行します。
$ git log
まとめ
ここでは、Gitの基本的な使用方法について解説しました。
共同開発だけでなく、個人でファイルの変更履歴を把握するときにも使えます。
- 投稿日:2020-03-21T15:55:58+09:00
Progate無料版をやってみる【SQL】
前回に引き続きProgate無料レッスンをやっていこうと思います。
今回はSQLです。
SQL
データベースとは
・検索や蓄積が容易にできるよう整理された情報の集まり。
Wikipedia・リレーショナルデータベースが今の主流らしい。
業務ではそれしか触ったことないはず。
フワフワしてて詳しくはわからないです・・・。
リレーショナルデータベースほぼこれなのでおそらく他のデータベースは覚えなくてよい。
サイトの顧客情報や、銀行残高、店の売り上げ、在庫、等々・・・
世の中のほとんどの情報がすべてデータベースに保存されている。
Qiitaのログイン情報や、この記事も。環境構築
業務ではSQLServer、Oracle、postgresqlを触っていました。
MySQLやSQLite、MariaDB等は経験がないため、その中でも人気のMySQLを使用したいと思います。上記にアクセスし、ダウンロードのリンクをクリック。
以下のどちらかをインストール。
上はネットでダウンロードしながらインストールする版(Webインストール)
下は最初に一括でダウンロードする版ダウンロード後、インストールします。
インストールが完了すると、「MySQL Workbench」なるものが立ち上がりました。
データベースをGUIで操作するSQLクライアントだと思います。
Object Browser
やA5SQL
やSQL Server Management Studio
、OracleのSQL Developer
みたいなものかな?英語なので日本語化しようとしたのですが、どうやら日本語化に必要なファイルがとても古いバージョンのようで(更新が止まっている)、今のバージョン8に適用すると、アプリケーションがうまく動かなくなるそうです。
なので、古いファイルを見ながら、今の該当のファイルを手動で変更していくしかないそうです。変更量もかなり多いとのこと・・・。
既にやっていただいた方がいたので、そのファイルを使用させてもらおうと思います。MySQL Workbench 8.0のWindowsへのインストールと日本語化
ここで取得した「main_menu.xm」を
C:\Program Files\MySQL\MySQL Workbench 8.0 CE\data
に上書きすれば・・・
※上書きする前に元のファイルはバックアップしておいた方が良いです。動かなった時に戻せるので・・・。立ち上げられなくなっちゃいました
バージョンが全く一緒ではないし、インストールした際のオプションがことなると、中身も違うのでしょう・・・なので自分のファイルと、落としてきたファイルをWinMergeで差分見ながらマージしました。
でもメニューから何かしらの設定を開くと全部英語です・・・。
ダメじゃん・・・。レッスンに戻ります。
「purchases」というテーブルをレッスンでは使用するようです。
テーブルをworkbenchで作っていこうと思います。sakilaとworldデータベースはデフォルトで用意されているのかな。
テーブル数が少ないworldデータベースにテーブル作っていこうと思います。Progateを見ると
らしいので、なんとなく型を予想して、以下のDDLを実行します。CREATE TABLE world.`purchases` ( `id` int NOT NULL AUTO_INCREMENT, `name` char(35) NOT NULL DEFAULT '', `price` int DEFAULT '0', `character_name` char(35) NOT NULL DEFAULT '', `category` char(35) NOT NULL DEFAULT '', `purchased_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) )world(スキーマ).テーブル名
idはオートインクリメント(データ挿入時に自動的に1プラスされて採番されます)
purchased_atはデフォルト値として現在日時を設定します。データを突っ込みます。
idは自動採番されるので0
でOKです。insert into `world`.`purchases` values (0,'スマホケース','1500','にんじゃわんこ','雑費','2017/7/1'); insert into `world`.`purchases` values (0,'お弁当','500','ひつじ仙人','食費','2017/7/1'); insert into `world`.`purchases` values (0,'ワンピース','3000','とりずきん','雑費','2017/7/1'); insert into `world`.`purchases` values (0,'参考書','2000','にんじゃわんこ','雑費','2017/7/1'); insert into `world`.`purchases` values (0,'電車賃','450','ひつじ仙人','交通費','2017/7/1'); insert into `world`.`purchases` values (0,'プリン','150','にんじゃわんこ','食費','2017/7/2'); insert into `world`.`purchases` values (0,'サッカーボール','2500','ベイビーわんこ','雑費','2017/7/2'); insert into `world`.`purchases` values (0,'電卓','700','ひつじ仙人','雑費','2017/7/4'); insert into `world`.`purchases` values (0,'お弁当','1000','にんじゃわんこ','食費','2017/7/4'); insert into `world`.`purchases` values (0,'プリンパフェ','500','にんじゃわんこ','食費','2017/7/4'); insert into `world`.`purchases` values (0,'タクシー代','1200','とりずきん','交通費','2017/7/9'); insert into `world`.`purchases` values (0,'わたあめ','100','ベイビーわんこ','食費','2017/7/10'); insert into `world`.`purchases` values (0,'眼鏡','5000','ひつじ仙人','雑費','2017/7/10'); insert into `world`.`purchases` values (0,'焼きプリン','200','にんじゃわんこ','食費','2017/7/10'); insert into `world`.`purchases` values (0,'ハンドバッグ','8000','とりずきん','雑費','2017/7/15'); insert into `world`.`purchases` values (0,'豆乳クッキー','300','とりずきん','食費','2017/7/15'); insert into `world`.`purchases` values (0,'牛丼','600','にんじゃわんこ','食費','2017/7/15'); insert into `world`.`purchases` values (0,'焼き魚定食','550','ひつじ仙人','食費','2017/7/15'); insert into `world`.`purchases` values (0,'ノート','150','ベイビーわんこ','雑費','2017/7/21'); insert into `world`.`purchases` values (0,'えんぴつ','100','ベイビーわんこ','雑費','2017/7/24'); insert into `world`.`purchases` values (0,'チーク','800','とりずきん','雑費','2017/7/24'); insert into `world`.`purchases` values (0,'駐輪代','200','にんじゃわんこ','交通費','2017/7/28'); insert into `world`.`purchases` values (0,'バター','240','ひつじ仙人','食費','2017/7/28'); insert into `world`.`purchases` values (0,'じゃがいも','50','ひつじ仙人','食費','2017/7/28'); insert into `world`.`purchases` values (0,'牛乳プリン','100','にんじゃわんこ','食費','2017/7/28'); insert into `world`.`purchases` values (0,'バス代','230','ひつじ仙人','交通費','2017/8/2'); insert into `world`.`purchases` values (0,'ふんわりパンケーキ','750','とりずきん','食費','2017/8/2'); insert into `world`.`purchases` values (0,'焼きプリン大福','140','にんじゃわんこ','食費','2017/8/3'); insert into `world`.`purchases` values (0,'電子工作キット','5400','にんじゃわんこ','雑費','2017/8/7'); insert into `world`.`purchases` values (0,'柔軟剤','600','とりずきん','雑費','2017/8/7');デフォルトスキーマを設定しておくと
クエリを書くときにworld
とスキーマを指定しなくても済みます。
レッスンの演習のSelect文をworkbenchで試しながら進める・・・。
複数のカラムを選択する
・全カラムの場合は
select * from テーブル名;特定のデータを取得しよう WHERE、WHERE(2)、比較演算子
・データを特定の条件で絞る場合には
Where
。
・and
で複数条件も可能。
・= > < >= <=
等LIKE演算子、LIKE演算子(2)
・あいまい検索が行える。
LIKE
where カラム名 like '%探したい文字%'後方一致
%文字
前方一致
文字%
NOT演算子
・
not
で~じゃないを指定する。SELECT * FROM purchases where not character_name = 'にんじゃわんこ';
LIKE
と組み合わせてSELECT * FROM purchases where not name like '%プリン%';NULLとは
・Nullのデータを取得するときは
IS NULL
その逆はIS NOT NULL
SELECT * FROM purchases where price is null; SELECT * FROM purchases where price is not null;これを試すときはあらかじめ、
price
カラムにNullを設定しておきます。AND・OR演算子
・かつで
AND
・またはでOR
#ANDの場合 SELECT * FROM purchases where category = '食費' and character_name = 'ひつじ仙人'; #ORの場合 SELECT * FROM purchases where category = '食費' or character_name = 'にんじゃわんこ';ORDER BY
・並び順
ASC
で昇順、DESC
で降順。
なにも指定しなかったら昇順になる。#降順 SELECT * FROM purchases order by price desc; #条件で絞って昇順 SELECT * FROM purchases WHERE character_name = "にんじゃわんこ" order by price asc;LIMIT
・必要な数だけ取得。
あまりにも多い件数だけと処理に時間がかかるときなどに指定したり・・・。先頭の数十件しか必要ないとき等・・・。SELECT * FROM purchases WHERE character_name = "にんじゃわんこ" limit 10;総合演習
#purchased_atカラムが「2017-08-01以前」のデータを取得してください SELECT * FROM purchases where purchased_at <= '2017-08-01'; #nameカラムが「プリン」を含むデータを取得してください SELECT * FROM purchases where name like '%プリン%'; #NOT演算子を用いてcharacter_nameカラムが「にんじゃわんこ」でないデータを取得してください。 SELECT * FROM purchases where not character_name = 'にんじゃわんこ'; #priceカラムがNULLであるデータを取得してください SELECT * FROM purchases where price is null; #categoryカラムが「食費」かつcharacter_nameカラムが「ひつじ仙人」であるデータを取得してください SELECT * FROM purchases where category = '食費' and character_name = 'ひつじ仙人'; #priceカラムを基準に「降順に並び替えた」データを、最大で「5件」取得してください SELECT * FROM purchases order by price desc limit 5;感想
・基本的な事であった。
・削除(delete)がないのはなぜ?次のレッスンからかな。何回も言ってますが無料分だから仕方ないすよね。
んー。課金して上級レッスンやらないと意味ない気がしてきた・・・。
時間がもったいない!?次回はSassをやっていきます。
- 投稿日:2020-03-21T14:18:12+09:00
コミットログを消さずにGitのリポジトリを統合する
https://github.com/TakesxiSximada/.org-capture というリポジトリを統合する場合
git remote add https://github.com/TakesxiSximada/.org-capture cap git subtree add --prefix=capture cap master–prefix で指定した場所にディレクトリが作成され、その下にファイルが作成される。
- 投稿日:2020-03-21T10:38:45+09:00
Windows で git diff の結果を patch.exe で使う
「git 互換 patch」で検索すると、次のようなページがすぐ見つかる。
こうか!(diff じゃないけど、show も似たようなもんだ)
$ git show --no-prefix 5f682fb657439fe518475e6effc6e7e30b1dfd33 > patch.1だが、Windows では、このパッチを適用すると
$ patch.exe < ../../patch.1 patching file readline.go Assertion failed: hunk, file ../patch-2.5.9-src/patch.c, line 354とエラー終了してしまう。「patch assertion failed」でググると、すぐ対処方法を記載したページが見つかる。
どうも、改行コードが LF だと、こうなってしまうようだ。パッチコードの改行コードを変換してもいいんだが、お手軽にバイナリモードを使用した。
$ patch.exe --binary < ../../patch.1しかし、assertion failed は、ひどいよな。もうちょっとマシなエラーメッセージは出せなかったものか…
余談1:UAC ダイアログ版
patch.exe は WindowsXP 時代のものを使うと UACダイアログが起動してしまう(「patch」という名前を含んでいるせい)。UAC ダイアログが出ないバージョンは 次より配布されている
余談2:-p オプション
パッチを作る側と、パッチを適用する場所で、ディレクトリの深さが違うと当然だが、パッチ適用が失敗する。
patch コマンドの -p オプションを使うと、パッチの相対パスの深さを減らすことができる。-p0 だとそのまま、-p1 だとディレクトリを一つ減らすという感じだ。
- 投稿日:2020-03-21T10:19:21+09:00
[Git]Cheat Sheet
- 投稿日:2020-03-21T09:31:31+09:00
Google Colab上でGitHubからCloneして変更をPushするまでのまとめ
何の記事?
Google Colaboratory上でGitHubのレポジトリをcloneし、変更をpushするまでのメモ。特に変わったところはないです。
ちなみにColabではノードブックに関してはコマンドを打たなくてもpushまでできる便利な機能があります。
参考記事:Colabratoryって画面上だけでGitHubにPushして差分まで見れちゃうって知ってた?そもそもColabからGithubにpushする必要ってあるの?
環境難民にとっては結構起こりえます。
あと、いちいちローカル環境でcloneするまでも無いが、既存コードをforkしてちょっとreviseして試してバージョン管理したいときなど。手順
流れとしてはDriveマウント→clone→config→add→commit→origin設定→pushです。
マウントは最初の1回だけでOK。
configとorigin設定はセッション中に1回だけでOK。1. Google Driveをマウントする
ご存知の通りColabはインスタンスの12時間ルール&90分ルールがあるので、作業ディレクトリの内容が一定時間で消えてしまいます。
当然.git
なども保存されず、これではコード管理もやりようがないので、まずはGoogle Driveをマウントします。
UI上で左側のファイルボタンを押し、「ドライブをマウント」でマウントできます。
これで自分のGoogleDrive上のファイルをノートブック上で扱えるようになり、保存もできるようになります。2. Clone
Google Drive上に
ColabData
というような作業ディレクトリを作ります(作らなくても良いです)。
カレントディレクトリを移動しcloneします。%cd /content/drive/My Drive/Colabdata/ !git clone https://github.com/reponame.git3. Config(ユーザ名とメールアドレスを設定)
これを設定しないとcommitで怒られます。
!git config --global user.email "yourmail@gmail.com" !git config --global user.name "username"4. Add, Commit
特に変わったところはないです。
!git add file.py !git commit -m "Added new file."5. リポジトリ情報を明示的に記述してOriginを設定
ここが若干のハマりポイントです。
git cloneした時点でリモートサーバにoriginがデフォルトで設定されるのですが、ここにpushしても下記のように怒られます。!git push origin master # fatal: could not read Username for 'https://github.com': No such device or addressColabでは、下記のように明示的にoriginに認証情報(ユーザ名、パスワード)を渡して設定する必要があります。
!git remote set-url origin https://username:password@github.com/reponame.git !git push origin master無事pushが通れば成功です。快適なColabライフをお送りください。
まとめ
Colab上で、git cloneからpushまでの流れをまとめました。
下記に、一連のコマンドをまとめます。%cd /content/drive/My Drive/Colabdata/ !git clone https://github.com/reponame.git !git config --global user.email "yourmail@gmail.com" !git config --global user.name "username" !git add file.py !git commit -m "Added new file." !git remote set-url origin https://username:password@github.com/reponame.git !git push origin master以上です。
- 投稿日:2020-03-21T00:29:47+09:00
Progate無料版をやってみる【Git】
前回に引き続きProgate無料レッスンをやっていこうと思います。
今回はGitです。
業務で多少使用してます。
ただ、TortoiseGitを主に使っているので、コマンドライン上からはほぼ叩いたことないです。Git
Gitの準備
Gitの理解や、コマンドの意味は以下を参考にさせていただきました。
いまさらだけどGitを基本から分かりやすくまとめてみた
[ver 1.2] Git でよく使われるコマンドにイラストによる説明を加えて1枚のチートシートにまとめてみた・Gitは昔ローカルPCにインストール済みです。
・作業用のディレクトリを作成
私はc:/job/GitTest
を作りました。
・作業ディレクトリに移動cd c:/job/GitTestそこで
git init共有するファイルを選択しよう
・適当なファイルを作り、
git add ファイル名
で追加
nul > test.txt
でファイルを作りgit commit
・コミット
git commit -m "メッセージ"リモートの準備・リモートを登録しよう
・GitHubにリポジトリ用意したので、それを使います。
・git remote add origin https://github.com/GodPhwng/TestProject2.git
リモートにファイルをアップロードする
git push origin masterリモートのファイルをダウンロードする
・取得する場合は
git pull origin master
とやる。共同開発の流れをおさらいしよう
・ファイル作って →
git add
→git commit
→git push origin master
→git pull origin master
でpushされたものを取得Gitを使いこなそう
・Progate側をお願いします。
変更内容を把握しよう
・
git diff
で変更箇所が分かる。
個人的にはTortoiseGitで差分からWinMergeを見る方が、差分がわかりやすいんですけどね。addしたファイルを確認しよう
・
git status
でどのファイルがaddされているのかわかる。わかりやすいコミットメッセージを書こう
・まぁ後でログ見たときに、変更がわかりやすいようにコミット時のメッセージはわかりやすくしておいて方が良い。
git log
・
git log
でコミットログを確認。
→ まずgit pull origin ブランチ名
すること。・正直コマンドライン上でログ見るよりも、TortoiseGitで確認した方が分かりやすいと思う。
感想
うーん。これだけの学びじゃ不足しているきがします。
ネットで
git コマンド
やgit 導入
等のワードで検索して、構築、実行した方がよっぽどいいですね。
- 投稿日:2020-03-21T00:09:53+09:00
Gitコマンドのエイリアスを設定して楽しよう
対象読者
- 頻度を問わずGitコマンドを普段使っている方
- Gitコマンドを使う際エイリアスを一切設定していない方
- 「松田〜エイリアスって何だよ!?」という方
動作環境
- OS: macOS Mojave バージョン 10.14.6
- Git: version 2.23.0
何ができるようになるか?
git checkout
というGitコマンドがあるよね?
それと全く同じコマンドをgit co
とかで入力できるようになるよ。何故それをするか?
便利でしょ?
特にchekcout
とか長すぎるんだよな〜。ほら、もうタイポしてる。。。どうやるか?
構文
一般的な構文は以下。
$ git config --global alias.{エイリアス名} {Gitコマンド}※
--global
は必須じゃないので--system
なり--local
なりお好きな設定でどうぞ具体例は以下。
$ git config --global alias.co checkoutこれで、たとえば
$ git checkout {ブランチ名}の代わりに
$ git co {ブランチ名}と入力することができるよ♪
設定確認
問題なくエイリアスが設定できたかは以下で確認可能。
$ git config --global --list※
--global
は...(略)標準出力に以下のような行があったら問題なく設定できているよ。
alias.co=checkoutエイリアス削除
設定したけど削除したい場合は以下。
$ git config --global --unset alias.{エイリアス名}たとえば以下のような感じ。
$ git config --global --unset alias.co参考
あとがたり
今はGUIの便利なツールとかエディターの拡張機能とかの登場で、Gitコマンドを叩く機会がもしかしたら少ないかもしれないんすわな。けど私は極力マウス使いたくないので、今でもGitを使うときはほとんどコマンド入力しているのね(全部じゃないけど)。
私と同じような方がいて、かつエイリアスの設定していない方がいたらぜひやってみてね♪最後までご覧いただきありがとうございました!